单片机的Modebus通讯程序中,程序中如何判断数据接收完毕??
3个回答
展开全部
有两种方法:
1、规定一个超时时间,当一定时间内没有收到字符时,就认为一个帧接收完毕。
2、主机根据发出的MODBUS指令,可以算出从机应该回复的帧长度(字节数),所以当主机接收到足够数量的字符后,认为接收完毕。
一般来说,使用第一种方法或者两种同时使用。第二种方法会加快总线速度。但不能单独使用第二种方法,否则在通讯出问题的情况下总线就完蛋了
1、规定一个超时时间,当一定时间内没有收到字符时,就认为一个帧接收完毕。
2、主机根据发出的MODBUS指令,可以算出从机应该回复的帧长度(字节数),所以当主机接收到足够数量的字符后,认为接收完毕。
一般来说,使用第一种方法或者两种同时使用。第二种方法会加快总线速度。但不能单独使用第二种方法,否则在通讯出问题的情况下总线就完蛋了
更多追问追答
追问
我有两点疑问啊,首先说超时接收,每次接收时都进行超时判定啊?时间极其短,如何进行超时判定?还有就是第二种方法,我不能理解为什么在通讯出现问题时总线就完蛋了??能再详细点吗?
谢谢大侠啊!!
追答
一般来讲,编程的时候,需要设置2个超时定时器。可以是软件的,不一定特别精确。
一个是帧超时定时器,一个是字符间超时定时器。
->主机发送完MODBUS指令后,帧超时定时器就开始计时,如果从机很久没发回来字符,也就是说超时了,那么说明从机不在线,或者总线故障,或者校验错误。接收任务结束。
在收到第一个字节后,帧超时定时器可以继续计时,也可以停止,不再使用。定时长度主要看从机的反应时间和波特率。很多人设定为几十毫秒到几秒。
->如果主机收到第一个字符,那么字符间超时定时器启动,每收到一个从机发回来的字节,定时器清零重新开始计时。如果字符间超时定时器超时,说明接收结束。
这个时间也不是极其短的,需要考虑从机的反应时间和总线波特率。根据经验,至少要大于1.5个字节的发送时间。像fgale说的,很多人设定为3.5个字节的发送时间或更长。
第二种方法,假设主机发送出了MODBUS指令,但是由于总线受到比较大的干扰或者什么其它原因,导致从机没有收到指令,或者从机收到的指令校验错误,那么从机不会反馈的。如果没有超时,那么主机和从机就都歇菜了。
展开全部
通过波特率计算接收每个字节需要的时间,假设计算结果为T,
在RTU模式下,超过3.5T没有数据即认为接收完成。
在RTU模式下,超过3.5T没有数据即认为接收完成。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有个帧长度在你的接受串里,对帧长度比较,等就是这一帧结束了!再对它进行CRC校验看接受有错没!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询