ModBus RTU 帧起始和帧结束 该如何确定

2019-07-16 03:27发布

ModBus RTU 协议上规定其帧数据有:地址码、功能码、数据、CRC,并没有定义帧起始、帧结束,资料上说,以3.5个字符作为界定帧起始、帧结束。那这个在程序上怎么实现呢?
看了一些别人的帖子,有说如下解决:
    在下位机上,启动一个定时器,定时器中断时间大于3.5个字符的时间,每次接收到一个字节数据,都会将定时器清零,若超过该时间,就会发生定时中断。
对此,我还是不明白,如下:
   1. 这个3.5个字符传输时间,是传输3个bit时间,还是3个byte的时间,或者是其他的?手册上写的是3个char,这个char指的是什么?
   2. 不明白怎么界定3.5字符超时限制。如果这个3.5字符时间是大于传输一个字节的时间,那我可以在每次接收到一个字节是数据,都对定时器清零,当没有数据传输时,定时器会产生时间中断,这样能界定这个超时,从而判断帧传输结束。但是若3.5字符时间是 小于 传输一个字节的时间,这种方法就实现不了?

   另外,在上位机 VC上怎么实现?上位机上用定时器,其优先级很低,是不可以作为超时限制的,其二,VC上需要调用API,然后做差值,来确定精确的 ms 级别时间。但是该从什么时候开始调用API呢?也就是说,我从什么时候开始判断,没有字符接收了,然后调用API,获取时间来判断是否超时3.5字符?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
王健力
1楼-- · 2019-07-16 08:35
表示沉默
kingriver
2楼-- · 2019-07-16 13:05
学习中!
卡卡罗特gwt
3楼-- · 2019-07-16 16:51
同问,现在解决了吗????
yupoxiaok
4楼-- · 2019-07-16 18:11
 精彩回答 2  元偷偷看……
xyt8525594
5楼-- · 2019-07-16 23:30
我也怠慢的阿··········
Denniky
6楼-- · 2019-07-17 05:23
还有一个问题,就是数据传输过程中超过1.5个字符时间就表示数据接收不完整,这意味着在定时器还要定义1.5个字符时间,当大于这个时间,表示数据不完整,可是这样的话,3.5个字符时间就永远不会达到,不是很矛盾吗?

一周热门 更多>