打印

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

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

相关帖子

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

使用特权

评论回复
板凳
yewuyi| | 2009-8-6 10:34 | 只看该作者
第一个文件包未处理完,又接来来第二个文件包,那么一般会丢弃一个包。

一般丢弃第二个包,然后通过重发机制实现第二个包的接续。

另,建议你采用应答型的方式,HOST发送第一个包,从机进行处理,处理完毕返回HOST一个成功标志,HOST接受不到这个成功标志,则处于发送等待状态,主从机可设置一个超时退出检测。

使用特权

评论回复
地板
电子老鹰|  楼主 | 2009-8-6 10:44 | 只看该作者
上位机是用户写的。我截取了它的报文。有好多读从机不同数据的按钮。有个按钮,按一次,连续发三帧命令;还有个按钮,按一次,连续发15帧命令!估计不是3楼说的,上位机“接受不到从机返回的成功标志,则处于发送等待状态”。它是不管不顾直接发多帧命令。

另外3楼说“一般丢弃第二个包,然后通过重发机制实现第二个包的接续”。再详细点?

使用特权

评论回复
5
chunyang| | 2009-8-6 13:33 | 只看该作者
这个关键在于上位机协议的编制,严格按Modbus协议规范的话,每次通讯发起必须等候应答,无应答超时后可以重试,但不应该连续在无应答的前提下单方面发起通讯,可以要求上位机协议编制者进行修改,使之严格符合Modbus的协议规范。如果不能进行相应修改,那么只好一并处理,这当然需要足够的资源。
    建议楼主先跟用户沟通一下。

使用特权

评论回复
6
电子老鹰|  楼主 | 2009-8-6 14:14 | 只看该作者
谢谢!我明白了。

使用特权

评论回复
7
yewuyi| | 2009-8-6 14:42 | 只看该作者
一个人老是对你喋喋不休的说话,你有三个办法对付它,第一个是不管它,随它说好了,第二个是给他一巴掌,告诉他别再罗嗦了,第三个是他说一句你做一次。

你认为想采用那种方式?

使用特权

评论回复
8
bzxc41408| | 2009-8-14 21:09 | 只看该作者
个人建议,同一贞数不管主机发送多少次,在它发送同一贞数据结束后,你只要成功返回一次就够了。也许主机觉得,此贞数据很重要,多发几次确保通讯一次成功就够了,尤其是在无线收发模块中此现象比较突出。以前我们应用在交通无线控制中,就遇到过这种现象,只要你往模块发一次数据,模块之间就会多次重发,确保通讯的成功。不知你r的用户是不是出于此目的。

使用特权

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

本版积分规则

34

主题

274

帖子

3

粉丝