作者 | 主题 |
---|---|
宝冬 至圣 经验值: 10032 发帖数: 1522 精华帖: 29 |
楼主 2021-11-03 03:48:28
主题:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码 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写的。你可以把它改写成任何自定义的串口协议。 4、这个指令需要一个UDP连接。关于建立连接这件事,说起来还是有点小讲究的,所以额外提供一个如何建立连接的指令块源码。其中的道理不只是对UDP,对TCP连接一样,具体看源码。其实这个也是我从全球库中德国工程师写的改的。理念保持一样,但是原来的组织方式我觉得代码之间的耦合有点高,就重新改写了。你会看到残留的变量注释。 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,网络被堵死的可能性大大降低。参考下面这个帖子。 10、这个ModbusUDP指令的地位和使用方式,与官方Master指令、自己用PtP做的Master指令、官方ModbusTCP指令是一样的。做为不同的Modbus通道方式,都是设备功能执行的资源选项。我通常把这些指令做为参数传递到设备FB内部供调度机制使用,图例如下。 |
ZD_JY 至圣 经验值: 13038 发帖数: 1080 精华帖: 8 |
1楼 2021-11-03 07:08:24
主题:回复:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码
做最好的自己!活出自我!
|
xuxiaoxue 奇侠 经验值: 8228 发帖数: 641 精华帖: 0 |
2楼 2021-11-03 07:57:04
主题:回复:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码 好东西,学习了
努力向上
|
WEI~WEI 侠士 经验值: 1289 发帖数: 164 精华帖: 3 |
3楼 2021-11-03 07:57:07
主题:回复:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码
感谢楼主的无私分享
赠人玫瑰,手留余香!
|
gongs 奇侠 经验值: 5699 发帖数: 1178 精华帖: 5 |
4楼 2021-11-03 08:47:19
主题:回复:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码 下载先学习下,不懂再请教楼主
自强不息
|
imsea 奇侠 经验值: 9229 发帖数: 1414 精华帖: 1 |
5楼 2021-11-03 14:08:02
主题:回复:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码
认真学习,努力工作
|
zhcwos 侠圣 经验值: 3103 发帖数: 440 精华帖: 0 |
6楼 2021-11-03 14:21:01
主题:回复:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码
云淡风轻
|
千万个为什么 至圣 经验值: 10582 发帖数: 848 精华帖: 9 |
7楼 2021-11-03 15:04:18
主题:回复:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码
学如逆水行舟,不进则退! wwhoho@163.com
|
Virgo_Zhao 侠客 经验值: 726 发帖数: 14 精华帖: 0 |
8楼 2021-11-03 16:14:18
主题:回复:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码 感谢分享,内容很丰富 |
新 手 一 枚 侠圣 经验值: 4153 发帖数: 111 精华帖: 0 |
9楼 2021-11-03 16:30:40
主题:回复:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码 |
天芯 至圣 经验值: 18789 发帖数: 2104 精华帖: 0 |
10楼 2021-11-03 19:25:48
主题:回复:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码 不错,感谢分享源码 |
每个眼神都只身荒野 侠圣 经验值: 2237 发帖数: 208 精华帖: 2 |
11楼 2021-11-03 21:57:46
主题:回复:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码 |
WOWUWUWU 至圣 经验值: 10367 发帖数: 1793 精华帖: 0 |
12楼 2021-11-04 07:44:06
主题:回复:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码 |
xuxiaoxue 奇侠 经验值: 8228 发帖数: 641 精华帖: 0 |
13楼 2021-11-04 07:44:39
主题:回复:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码
努力向上
|
不断攀登 至圣 经验值: 12543 发帖数: 1843 精华帖: 0 |
14楼 2021-11-04 08:14:41
主题:回复:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码
邮箱 yongquancun@126.com
|
gaojianrong 侠士 经验值: 1698 发帖数: 113 精华帖: 0 |
15楼 2021-11-04 08:46:15
主题:回复:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码 |
苍穹8421 侠士 经验值: 1829 发帖数: 166 精华帖: 9 |
22楼 2021-11-05 11:09:09
主题:回复:通过以太网UDP协议经串口服务器进行ModbusRTU通信的SCL源码 请问楼主为什么我下载解压后用博途V16打开不呢?就是平常打开文件的方式打开的,是我打开的方式不对吗? |