C#语言使用EasyModbus做客户端和西门子1511PLC通信

  • Post author:
  • Post category:其他

一、为什么使用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 版权协议,转载请附上原文出处链接和本声明。