相关文章推荐
有胆有识的海龟  ·  c# - Can you extend ...·  1 年前    · 
玉树临风的滑板  ·  Working with files ...·  1 年前    · 

一、为什么使用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连接,特别符合电气工程师的使用习惯。

一、为什么使用EasyModbus?之前一直使用开源库NModbus,它是一个非常优秀的Modbus通信类库,偶然机会下我发现了EasyModbus,发现EasyModbus的代码非常精炼、间接,一两行代码就可以创建一个Modbus TCP Client。EasyModbus官网:http://easymodbustcp.net/en/二、使用步骤1.添加引用在官网下载DLL文件,在项目中添加引用。代码如下(示例):using EasyModbus;2.创建一个Modbus TCP Cli
EasyModbusTCP.NET - .NET 的 Modbus TCP、Modbus UDP 和 Modbus RTU 客户端/服务器库行业认可!! 从 PC 或嵌入式系统快速安全地访问许多 PLC 系统和其他工业自动化组件。 从 PLC 读取数据或向 PLC 写入数据只需要几行代码。 附加软件工具,例如 Modbus 服务器模拟器,使软件开发变得快速而简单。 从 NuGet 或从以下位置下载库 (*.DLL): 支持的功能代码: 读取线圈 (FC1) 读取离散输入 (FC2) 读取保持寄存器 (FC3) 读取输入寄存器 (FC4) 写单线圈 (FC5) 写单个寄存器 (FC6) 写入多个线圈 (FC15) 写多个寄存器 (FC16) 读/写多个寄存器 (FC23) Modbus TCP、Modbus UDP 和 Modbus RTU 客户端/服务器库 资源名:C#使用ModbusTcp协议与西门子1200PLC通讯源码 资源类型:程序源代码 源码说明: C#使用ModbusTcp协议与西门子1200PLC通讯。包含modbus协议的全部八种功能码的读写程序。 适合人群:新手及有一定经验的开发人员
ModbusClient modbusClient = new ModbusClient("190.201.100.100", 502);//Ip-Address and Port of Modbus-TCP-Server
很久以前,写过一篇C#Modbus从站的博客C#工控机作为Modbus从站的方法_gaooolianggg的专栏-CSDN博客_c# modbus 从站,当时用的是NModbus,整体使用略微有些繁琐。最近在项目时,使用了一个更方便的方法,这里分享出来。 这里使用的是EasyModbus。在Nuget程序管理中直接下载安装即可。如果你需要使用从站,只需要非常简单的几行代码 ModbusServer modbusServer = new ModbusServer();...