一、为什么使用EasyModbus?
之前一直使用开源库NModbus,它是一个非常优秀的Modbus通信类库,偶然机会下我发现了EasyModbus,发现EasyModbus的代码非常精炼、间接,一两行代码就可以创建一个Modbus TCP Client。
EasyModbus官网:http://easymodbustcp.net/en/
二、使用步骤
1.添加引用
在官网下载DLL文件,在项目中添加引用。
代码如下(示例):
using EasyModbus;
2.创建一个Modbus TCP Client
代码如下(示例):
ModbusClient modbusClient = new ModbusClient("192.168.0.1",502);//创建一个ModbusTCP客户端,IP地址为127.0.0.1,端口号为502
3.添加一个按钮事件来开启Modbus TCP Client
代码如下(示例):
private void bthConnect_Click(object sender, EventArgs e)
{
ModbusTCP客户端定时器.Start();//MoubusTCP客户端定时器开启
modbusClient.Connect();//ModbusTCP客户端连接
}
4.添加一个计时器来刷新数据
代码如下(示例):
private void ModbusTCP客户端定时器_Tick(object sender, EventArgs e)
{
#region ModbusTCP客户端读取数据
int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters(txtStart.IntValue, 10);//读取从40001寄存器开始的10个地址
txtReceive1.IntValue = readHoldingRegisters[0];
txtReceive2.IntValue = readHoldingRegisters[1];
txtReceive3.IntValue = readHoldingRegisters[2];
txtReceive4.IntValue = readHoldingRegisters[3];
txtReceive5.IntValue = readHoldingRegisters[4];
txtReceive6.IntValue = readHoldingRegisters[5];
txtReceive7.IntValue = readHoldingRegisters[6];
txtReceive8.IntValue = readHoldingRegisters[7];
txtReceive9.IntValue = readHoldingRegisters[8];
txtReceive10.IntValue = readHoldingRegisters[9];
#endregion
#region 将10个值批次写入从40001开始的10个寄存器
modbusClient.WriteMultipleRegisters(0, new int[10] { txtSend1.IntValue, txtSend2.IntValue, txtSend3.IntValue, txtSend4.IntValue, txtSend5.IntValue, txtSend6.IntValue, txtSend7.IntValue, txtSend8.IntValue, txtSend9.IntValue, txtSend10.IntValue });
#endregion
}
5.西门子PLC创建Modbus TCP Server
InterfaceId:本地PLC接口硬件标识符
ID:引用该连接(取值范围:1 到 4095)。该参数将唯一确定 CPU 中的连接。
ConnectionType :连接类型,对于 TCP,选择 11(16#0B)
ActiveEstablished:建立连接的方式所对应的 ID,对于被动连接建立,应选择 FALSE。
RemoteAddress:连接伙伴的 IP 地址,如果要接受来自任何连接伙伴的连接请求,应使用“0.0.0.0”
RemotePort:远程连接伙伴的端口号,如果要接受来自远程伙伴任何端口的连接请求,应使用“0”
LocalPort:本地连接伙伴的端口号,定义 Modbus 客户端连接请求中要监视的 IP 端口。默认为 502。
MB_HOLD_REG :指向“MB_SERVER”指令中 Modbus 保持性寄存器的指针使用地址,上图代表MW100对应40001,MW102对应40002,MW104对应40003…依次类推
6.页面展示
总结
EasyModbus是非常优秀的Modbus通信类库,代码简洁干练,一两行代码就可以创建一个Modbus TCP连接,特别符合电气工程师的使用习惯。
版权声明:本文为zmx371525原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。