单片机的Modebus通讯程序中,程序中如何判断数据接收完毕??

 我来答
知之为知了
2013-02-17 · TA获得超过808个赞
知道答主
回答量:47
采纳率:100%
帮助的人:32.4万
展开全部
有两种方法:
1、规定一个超时时间,当一定时间内没有收到字符时,就认为一个帧接收完毕。
2、主机根据发出的MODBUS指令,可以算出从机应该回复的帧长度(字节数),所以当主机接收到足够数量的字符后,认为接收完毕。

一般来说,使用第一种方法或者两种同时使用。第二种方法会加快总线速度。但不能单独使用第二种方法,否则在通讯出问题的情况下总线就完蛋了
更多追问追答
追问
我有两点疑问啊,首先说超时接收,每次接收时都进行超时判定啊?时间极其短,如何进行超时判定?还有就是第二种方法,我不能理解为什么在通讯出现问题时总线就完蛋了??能再详细点吗?
谢谢大侠啊!!
追答
一般来讲,编程的时候,需要设置2个超时定时器。可以是软件的,不一定特别精确。
一个是帧超时定时器,一个是字符间超时定时器。
->主机发送完MODBUS指令后,帧超时定时器就开始计时,如果从机很久没发回来字符,也就是说超时了,那么说明从机不在线,或者总线故障,或者校验错误。接收任务结束。
在收到第一个字节后,帧超时定时器可以继续计时,也可以停止,不再使用。定时长度主要看从机的反应时间和波特率。很多人设定为几十毫秒到几秒。
->如果主机收到第一个字符,那么字符间超时定时器启动,每收到一个从机发回来的字节,定时器清零重新开始计时。如果字符间超时定时器超时,说明接收结束。

这个时间也不是极其短的,需要考虑从机的反应时间和总线波特率。根据经验,至少要大于1.5个字节的发送时间。像fgale说的,很多人设定为3.5个字节的发送时间或更长。

第二种方法,假设主机发送出了MODBUS指令,但是由于总线受到比较大的干扰或者什么其它原因,导致从机没有收到指令,或者从机收到的指令校验错误,那么从机不会反馈的。如果没有超时,那么主机和从机就都歇菜了。
fgale
2013-02-17 · TA获得超过1450个赞
知道小有建树答主
回答量:1857
采纳率:50%
帮助的人:541万
展开全部
通过波特率计算接收每个字节需要的时间,假设计算结果为T,
在RTU模式下,超过3.5T没有数据即认为接收完成。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
石墨屑4i
2013-02-17 · 超过11用户采纳过TA的回答
知道答主
回答量:114
采纳率:100%
帮助的人:24.6万
展开全部
有个帧长度在你的接受串里,对帧长度比较,等就是这一帧结束了!再对它进行CRC校验看接受有错没!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式