modbus通讯协议NET库
这样的开源库很多,我这边用的库是github的开源实现类库:NModBus4,github地址:https://github.com/NModbus4/NModbus4
我用Modbus Slave模拟一个从机
NModbus4的读取从机代码示例
1 IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 });
2 using (TcpClient client = new TcpClient(address.ToString(), 502))
4 client.SendTimeout = 1;
5 //client.op
6 ModbusIpMaster master = ModbusIpMaster.CreateIp(client);
7 //master.op
8 // read five input values
9 ushort startAddress = 0;
10 ushort numInputs = 10;
11 bool[] inputs = master.ReadCoils(1, startAddress, numInputs);
13 for (int i = 0; i < numInputs; i++)
14 {
15 Console.WriteLine($"Input {(startAddress + i)}={(inputs[i] ? 1 : 0)}");
16 }
这边值得注意的是主机Read的方法第一个参数是slaveId 如果不加就startAddress And numInputs NModbus就会默认 slaveId是0 一直异常( d(╯﹏╰)b 痛苦经历~~)
以上数据是 刚才设置的DO 状态
在演示一个读取AI的值
代码没差多少就是方法ReadInputRegisters不一样 . 以下是示例代码
1 IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 });
2 using (TcpClient client = new TcpClient(address.ToString(), 502))
4 client.SendTimeout = 1;
5 //client.op
6 ModbusIpMaster master = ModbusIpMaster.CreateIp(client);
7 //master.op
8 // read five input values
9 ushort startAddress = 0;
10 ushort numInputs = 10;
11 ushort[] inputs = master.ReadInputRegisters(2, startAddress, numInputs);
13 for (int i = 0; i < numInputs; i++)
14 {
15 Console.WriteLine($"Register {(startAddress + i)}={(inputs[i])}");
16 }