将Modbus串行应用程序转换为Modbus TCP / IP c#

时间:2017-10-17 08:26:54

标签: c# sockets tcp modbus

我目前正在开发一个使用Modbus串口与设备通信的应用程序。该应用程序是用C#编写的。

我们的设备已经过修改以使用以太网,我现在的任务是将此应用程序转换为使用Modbus TCP / IP。

我最初认为这将非常简单,并且只需要将串行连接更改为TCP客户端连接和监听器。

我已阅读有关Modbus TCP / IP的一些文档

https://www.prosoft-technology.com/kb/assets/intro_modbustcp.pdf https://www.honeywellprocess.com/library/support/Public/Documents/51-52-25-121.pdf

虽然我觉得我仍然可能会遗漏一些本质上的差异。

据我所知,这是需要做的事情。

  1. 在数据包开头引入新的MBAP标头代替“附加地址”部分。
  2. 从Modbus数据包中删除校验和,因为这是由TCP / IP处理的。
  3. 使用Socket类打开与每台设备的连接。要打开这些连接,我现在需要将每个设备IP存储在我的客户端/主配置中。他们将监听默认端口502,并且必须从随机可用端口打开连接> 1024.连接也应保持打开状态,因此我将保留ArrayTcpClient个对象。或者我应该在收到回复后关闭连接?我是否需要为每个服务器/从服务器创建一个线程?

1 个答案:

答案 0 :(得分:1)

你的方向正确。但请在收到响应后不要关闭TCP连接。我以前在非常资源有限的平台上开发了Modbus TCP从站,每1-2秒处理TCP连接创建/销毁并不好玩。保持连接打开,对你和奴隶来说都会更容易。

每个奴隶都不需要线程。您可以在C#中使用某种形式的“选择”。