完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
3个回答
|
|
因为各种原因,传输过程中总会出现各种异常。Modbus有LRC/CRC校验,有响应返回,还有异常码,对于传输中出现的异常有一定的发现能力。但是Modbus本身不进行纠错,纠错和重传由开发者定义。
根据通信的原理,在一条不可靠的信道上传输的任何协议都不可能做到完全可靠。即使是一个比较可靠的协议,也会存在一些极端情况,这些情况一旦出现,会让协议的纠错机制完全失效。对此我们要小心谨慎,让这些极端情况出现的概率尽可能小。 分析一下Modbus通信协议可能出现的错误,发现主要有四个来源: 1)某个查询/响应的协议帧错误,可能是PDU错误,也可能是ADU错误,对于ASCII模式,还有可能是引导符和结束符错误; 2)某个查询/响应丢失,或者没在约定时间内送达,导致超时; 3)主机发出了错误的查询,如对不存在的寄存器进行读/写; 4)某个查询/响应的协议P***错误,而且错误的PDU是合法的,恰好LRC/CRC也发生错误,协议帧没有报错,导致错误的查询/响应被接收。这种情况的概率比较低,但在噪音比较大的环境里会出现。 |
|
|
|
对这些异常情况进行排列组合,得到协议的可能状态:
1、主机的查询从机正确收到,并做出了正常响应,主机接收到正常响应。 2、主机的查询从机正确收到,并做出了正常响应,但从机返回的响应丢失或者***扰产生了帧错误,主机等待超时。 3、(概率较低,这种情况主机无法纠错)主机的查询从机正确收到,并做出了正常响应,但从机返回的响应PDU传输错误,而且错误的PDU是合法的,恰好LRC/CRC同时发生了错误,协议帧没有报错,导致主机接收到了错误但合法的响应。 4、主机的查询从机正确收到,但是从机发现命令无法执行,返回异常响应,主机接收到包含异常码的响应。 5、主机的查询从机正确收到,但是从机发现命令无法执行,返回异常响应,但响应丢失或者包含帧错误,主机等待超时。 6、(概率极低,这种情况主机无法纠错,属于极端情况,不予考虑)主机的查询从机正确收到,但是从机发现命令无法执行,返回异常响应,但从机返回的响应PDU传输错误,恰好LRC/CRC同时发生了错误,协议帧没有报错,导致主机接收到了错误但合法的响应。 7、主机的查询从机没有收到,或从机发现收到的查询包含帧错误,从而不进行响应,主机等待超时。 8、(概率较低,但有可能导致从机执行错误的命令,对关键命令,需要小心这种情况的发生)主机的查询PDU传输错误,而且错误的PDU是合法的,恰好LRC/CRC同时发生了错误,协议帧没有报错,导致从机接收了错误的命令。从机返回了响应,主机接收到响应,发现响应是错误的。 9、(概率极低,但有可能导致从机执行错误的命令,对关键命令,需要小心这种情况的发生)主机的查询PDU传输错误,而且错误的PDU是合法的,恰好LRC/CRC同时发生了错误,协议帧没有报错,导致从机接收了错误的命令。从机返回了响应,但从机返回的响应丢失或者***扰产生了帧错误,主机等待超时。 10、(概率极低,这种情况主机无法纠错,属于极端情况,不予考虑)主机的查询PDU传输错误,而且错误的PDU是合法的,恰好LRC/CRC同时发生了错误,协议帧没有报错,导致从机接收了错误的命令。从机返回了响应,但从机返回的响应PDU传输错误,而且错误的PDU是合法的,恰好LRC/CRC同时发生了错误,协议帧没有报错,导致主机接收到了“正确”的响应。 |
|
|
|
考虑对这些情况进行处理:
情况1是正常通信,情况4是主机的问题,这里不考虑; 情况6和10出现的概率极低,而且很难纠错,这里也不考虑。 情况3出现的概率较低,但如果出现的话很难纠错。所以如果从机的响应结果很重要,最好多次重复查询,确保结果的准确。当然这属于主机端的事情,所以这里也不多说。 情况2、5、7、9从机响应超时,情况8从机响应错误,这几种情况主机都能发现错误,所以如果给主机增加重传机制,就可以提高这几种情况下的可靠性。但如果主机发送的是关键的控制命令,比如高压脉冲的开关,刹车系统的启动,这些命令如果传输错误,可能带来无法挽回的损失。这些关键的控制命令,需要准确的送达,光靠主机的出错重传无法保证其可靠性。要提高这些命令传输的可靠性,必须对从机程序进行修改。 TCP/IP协议是一个经典的可靠协议,其三次握手四次挥手和给数据段进行编号的机制广负盛名。这些机制,通过损失有限的速度,即可极大地提高可靠性。 控制命令在Modbus协议里的传输,也可以采用类似的机制。比如,采用写寄存器功能码+控制寄存器地址+执行计数的格式传输控制命令,而不用写寄存器功能码+控制寄存器地址+固定控制代码的格式。从机端和主机端分别对控制命令的执行次数计数,只有从机发现自己的计数器等于收到的执行计数-1时,才会执行,否则返回异常码0x03。主机收到异常后响应后,查询从机的计数器。如果主机之前已经发过这个命令,这次是因为错误或超时重传的,且从机的计数器等于于主机的计数器,说明从机已经执行过该命令了,主机结束这一次控制。如果从机的计数不等于主机的计数器或者主机的计数器-1,说明从机或主机可能发生了故障,这时可以通过写从机里的另一个寄存器来更新从机的计数器。 |
|
|
|
只有小组成员才能发言,加入小组>>
761 浏览 1 评论
12412 浏览 0 评论
5870 浏览 3 评论
17661 浏览 6 评论
2690 浏览 1 评论
989浏览 1评论
959浏览 1评论
3514浏览 1评论
793浏览 1评论
1339浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 14:17 , Processed in 0.819111 second(s), Total 54, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号