通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码

已锁定

宝冬

  • 帖子

    1491
  • 精华

    52
  • 被关注

    177

论坛等级:奇侠

注册时间:2016-07-06

钻石 钻石 如何晋级?

通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码

5821

44

2021-11-03 03:48:28

star star star star star

1、这是之前练习测试写的,框架是完整的。目的是为了与串口设备进行通信的时候,取代官方的ModbusTCP的Client指令。官方的体积太大了,一个FB代码就占20K工作内存。

另外与串口设备通信,都是轮询,用TCP开销大,且从道理上讲没有意义。而且TCP慢,尤其是连接通道的建立和断开。

UDP不怕网线的插拔,不怕有线和无线之间的切换,这是无连接通信的好处。断两小时也没事,插上网线立马恢复通信。用用下面这个块就知道了。

因为是给自己用的,如果解析中的数据类型不符合需求,各位自行修改。


2、把串口服务器设置为UDP Server。把网关功能关闭,串口侧不做协议转换,直接是UDP拆包之后或打包之前的数据部分透传往来。这数据部分就是完整的ModbusRTU报文。

如果是ModbusTCP,网关做的转换是:把报文前面的MAP(Modbus Application Protocal)的6字节报文头添加或去掉,报文后面的CRC16去掉或添加。


3、指令接口与Modbus指令类似,但是需要一个UDP连接的ID,而不是485端口。还需要包含串口服务器的地址端口信息的一个结构化参数。用博途V14 SP1写的。你可以把它改写成任何自定义的串口协议。

ModbusUDP.rar


4、这个指令需要一个UDP连接。关于建立连接这件事,说起来还是有点小讲究的,所以额外提供一个如何建立连接的指令块源码。其中的道理不只是对UDP,对TCP连接一样,具体看源码。其实这个也是我从全球库中德国工程师写的改的。理念保持一样,但是原来的组织方式我觉得代码之间的耦合有点高,就重新改写了。你会看到残留的变量注释。

BuildConnection.rar


5、博途中所说的以太网连接,其实是指在PLC后台一个独立运行的通信线程。

了解一点上位机开发的知道,你自己用比如C#建立一个socket对象进行通信的时候,都是把它单独放在一个线程里。每个Socket用一个线程,大家都在同时监听各自的端口。所谓异步,就是指并行的线程,各干各的不等别人。

PLC中连接资源的限制,就是指后台可以运行的通信线程的数量限制。这就解释了,为什么UDP是无连接通信,但它还要占用一个连接资源。它必须要占用一个线程。


6、关于以太网连接,除了TCON和TDISCON,还有两条指令。

一个是T_DIAG,可以知道某个连接的状态和属性。我觉得作用一般,你还是得需要健壮的策略能成功新建、断开、重建,另建才行。

另一个是T_RESET,这个很有用。它可以把阻塞的连接重新建立起来,也就是对应的线程被憋死了需要重现。这在串口应用很少,在常规以太网中很有用,阻塞不少见。


7、关于如何使用这个块建立UDP连接和一些参数设置,参考下图。最终得到的连接ID在Connect结构变量里面的ID,把它连接到modbusUDP模块的管脚就可以了。包含串口服务器的地址端口信息的结构化参数,也要连接到modbusUDP模块的管脚。


8、有兴趣研究的朋友,建议买个带端口镜像的交换机,一百多块钱。以太网侧用wireshark抓包,串口侧用串口助手抓包,可以实时对比观察协议报文的细节和转换,还有时间因素等。

通信的东西说到底,要落到网络报文的内容上。无论出现任何问题,抓包看报文,是高效靠谱的排查手段,单靠软件很多时候就是猜测。

UDP在抓包诊断上有绝对优势。使用UDP的通信,底层往来的场景是非常干净的。没有TCP内在那些复杂度。一看就知道应用层的问题出在哪。


9、UDP真正有魅力的地方是自建应用层协议实现可靠传输,这是当前的发展趋势,TCP有点落伍了。腾讯抖音快手,鸿蒙软总线等都有UDP在里面。你在家wifi玩游戏,走到外面已经切换到手机4G了,但是游戏依然不会掉线,这后面都是UDP。

在PLC中同样可以自建协议实现可靠传输。单个UDP连接复用,组播。可以很大程度替代TCP。如果PLC通信全部是UDP,网络被堵死的可能性大大降低。参考下面这个帖子。

UDP的可靠传输与应用


10、这个ModbusUDP指令的地位和使用方式,与官方Master指令、自己用PtP做的Master指令、官方ModbusTCP指令是一样的。做为不同的Modbus通道方式,都是设备功能执行的资源选项。我通常把这些指令做为参数传递到设备FB内部供调度机制使用,图例如下。




通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有12957条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。