private
async
void
ExecuteFunction()
{
try
{
//Moddbus共有这些功能码 //01 Read Coils //02 Read DisCrete Inputs //03 Read Holding Registers //04 Read Input Registers //05 Write Single Coil //06 Write Single Registers //0F Write Multiple Coils //10 Write Multiple Registers functionCode="01 Read Coils";//根据实际点号类型选择读写功能码
//重新实例化是为了 modbus slave更换连接时不报错
//master = modbusFactory.CreateMaster(new TcpClient(IPAddress, VisitPort));
if
(functionCode !=
null
)
{
switch
(functionCode)
{
case
"01 Read Coils"
:
//读取单个线圈
SetReadParameters();
coilsBuffer = master.ReadCoils(slaveAddress, startAddress, numberOfPoints);
for
(
int
i = 0; i < coilsBuffer.Length; i++)
{
SetMsg(coilsBuffer[i] +
" "
);
}
SetMsg(
"\r\n"
);
break
;
case
"02 Read DisCrete Inputs"
:
//读取输入线圈/离散量线圈
SetReadParameters();
coilsBuffer = master.ReadInputs(slaveAddress, startAddress, numberOfPoints);
for
(
int
i = 0; i < coilsBuffer.Length; i++)
{
SetMsg(coilsBuffer[i] +
" "
);
}
SetMsg(
"\r\n"
);
break
;
case
"03 Read Holding Registers"
:
//读取保持寄存器
SetReadParameters();
registerBuffer = master.ReadHoldingRegisters(slaveAddress, startAddress, numberOfPoints);
for
(
int
i = 0; i < registerBuffer.Length; i++)
{
SetMsg(registerBuffer[i] +
" "
);
}
SetMsg(
"\r\n"
);
break
;
case
"04 Read Input Registers"
:
//读取输入寄存器
SetReadParameters();
registerBuffer = master.ReadInputRegisters(slaveAddress, startAddress, numberOfPoints);
for
(
int
i = 0; i < registerBuffer.Length; i++)
{
SetMsg(registerBuffer[i] +
" "
);
}
SetMsg(
"\r\n"
);
break
;
case
"05 Write Single Coil"
:
//写单个线圈
SetWriteParametes();
await master.WriteSingleCoilAsync(slaveAddress, startAddress, coilsBuffer[0]);
break
;
case
"06 Write Single Registers"
:
//写单个输入线圈/离散量线圈
SetWriteParametes();
await master.WriteSingleRegisterAsync(slaveAddress, startAddress, registerBuffer[0]);
break
;
case
"0F Write Multiple Coils"
:
//写一组线圈
SetWriteParametes();
await master.WriteMultipleCoilsAsync(slaveAddress, startAddress, coilsBuffer);
break
;
case
"10 Write Multiple Registers"
:
//写一组保持寄存器
SetWriteParametes();
await master.WriteMultipleRegistersAsync(slaveAddress, startAddress, registerBuffer);
break
;
default
:
break
;
}
}
else
{
MessageBox.Show(
"请选择功能码!"
);
}
master.Dispose();
}
catch
(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
联系客服