打印

MODBUS上位机连续发多帧命令,下位机如何响应? ?

[复制链接]
5616|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子老鹰|  楼主 | 2009-8-6 11:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机做的MODBUS从机,与上位机软件通讯。上位机连续发送多条命令,从机应该全部接收完,然后再逐一分析、返回数据吗?若这样,接收缓冲区不是要很大吗?
如果从机接收一帧,马上分析处理,然后返回数据;再接收下一帧,再处理、返回。但从机处理、返回是需要时间的。若上位机两帧之间间隔很短,从机第一帧还没处理完,第二帧又来了,怎么办?

我的从机程序结构是:接收用中断,每接收一字节中断一次。若超过3.5字节时间无下一字节,则认为一帧接收完毕,将“接收完毕标志位”置1。主程序里扫描此标志位,若是1,则读取接收缓冲区数据、分析、处理、返回数据。主程序还有许多其他工作要做,所以扫描此标志位并不是很及时的。
也许这种结构有问题?

相关帖子

沙发
电子老鹰|  楼主 | 2009-8-6 11:48 | 只看该作者
上位机是用户写的。我截取了它的报文。有好多读从机不同数据的按钮。有个按钮,按一次,连续发三帧命令;还有个按钮,按一次,连续发15帧命令!波特率是9600,我估计上位机的帧与帧间隔不超过20ms。而我的从机主程序,循环一次要50ms,也就是处理一帧命令要50ms以上。这怎么办呢?

使用特权

评论回复
板凳
5880527| | 2009-8-6 11:57 | 只看该作者
9600基本上可以认为是一个字节一毫秒,20毫秒是很长的时间了,你的主循环太浪费时间,要不放到某个中断级别比较低的定时器里去处理通讯,这个花不了多少时间的

使用特权

评论回复
地板
xwj| | 2009-8-6 12:22 | 只看该作者
LS正解

如果真的处理不过来,就用乒乓缓存甚至缓存队列

使用特权

评论回复
5
电子老鹰|  楼主 | 2009-8-6 12:35 | 只看该作者
谢谢!我再考虑一下。我的主循环确实花费时间长,任务较多,很难缩减了。
我见过有的上位机,第一帧发完后,就等待从机返回数据;否则就不发下一帧。我觉得这个是比较合理的。当然要有超时处理,比如从机断线、故障等的处理。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

274

帖子

3

粉丝