恭喜,你发布的帖子
发布于 2019-09-07 13:50:32
5楼
举个简单的Modbus案例
发:01 03 04 4C 00 01 44 ED
其中01是地址,03是功能码,04 4C是寄存器(我们常用的40001在原始码中就是00 00)
00 01是需要读取数据的长度,44 ED是CRC校验。
收:01 03 02 43 DA 08 EF
正确接收数据的格式:01是地址,03是功能码,02是数据长度,43 DA是数据,08 EF是CRC校验。
由于485的干扰问题,很容易出现错误的数据或错误的数值,因此我们接收数据的时候就需要对地址,功能码,数据长度及CRC校验来判断这串接收到的数据是否是我们需要的正确数据。
然而在MB_CLIENT的功能块中我们只能读取到的数据是43 DA,前面的01 03 02是读取不到的,如果MB_CLIENT能够严格的判断读取的数据是否正确,如果数据正确则DONE=1和STATUS=0也可以放心的进行数据轮询。可是通过简单的测试发现MB_CLIENT的功能块只能对数据长度做出一个判断,如果数据长度正确了就认为这串数据是正确了,并没有一个严谨的判断这串数据是否是我需要的正确的数据。
比如我发:01 03 04 4C 00 01 44 ED这时收:02 03 02 43 69 0D 5A那么这时MB_CLIENT接收的数据就是43 69而不是我们需要的43 DA了。
很详细,学习了
请填写推广理由:
分享
只看
楼主