RS485半双工modbus协议的读取速率问题。

2020-01-27 11:20发布

本帖最后由 QXKJ 于 2013-8-28 18:12 编辑

是这样的,通过MODBUS-rtu协议发送一个命令,比如03命令hex:01 03 00 00 00 01 84 0a 合计共8个字节。波特率9600.返回 :01 03 02 00 01 79 84 合计7个字节。如果算上帧头帧尾的3.5t,最快的收发次数1秒钟能达到多快?。我做下来两次发送最小间隔65ms收发正常,时间小于65ms则会出错,65ms测试10000次,无一次错误。请问这个1秒钟内的无误码读取的次数有要求吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
小徐
1楼-- · 2020-01-27 16:19
理论计算:(8+7+3.5)*10 = 185bit (8,N,1),9600bps情况下1s通讯次数极限 = 9600/185 = 51.89,取51次。即每秒最多可通讯51次,20ms一次可以正常通讯。根据我的实际经验通讯间隔在理论值上增加5ms时完全可以可靠通讯,即25ms收发一次,每秒可通讯40次。当然这前提条件是你程序不能用查询方法接收数据,高速时你必须用中断,最好是用DMA,要不然你的CPU就不要干别的事了。做过测试,计算机做主站,软件用Modbus Slave,STM32主板做modbus从站,通讯一百七十多万次没出现一个错误,办公环境,没什么干扰。另外说下,通讯类程序我用的都是汇编,执行效率高。
QXKJ
2楼-- · 2020-01-27 21:17
楼上计算的没错,问题是这个留给微处理器处理通信命令的时间多少算是合理的,经过我的优化,我的现在超时50ms是可以的,也就是微处理器需要至少50ms的处理时间,楼上的只需要5ms,确实很难做到.
小徐
3楼-- · 2020-01-28 01:48
我用的是F103的cpu,pll倍频到72M,DMA收发,接收时每收到一个字节后立即校验,分散CPU负担,避免批量校验时瞬间占用大量CPU,另外我用的是汇编语言,时间控制上比C有优势。
小徐
4楼-- · 2020-01-28 06:47
 精彩回答 2  元偷偷看……
小徐
5楼-- · 2020-01-28 10:07
楼主我错了,刚看到你发的是51单片机板块,不该和你谈速度。不过我公司有mega128做的支持modbus产品,16M晶振,5ms间隔没测试过,但实际使用中,间隔10ms绝对没问题。那个产品不是我做的,不清楚算法,我只能告诉你,用的是汇编语言,并且modbus通讯只是其附属功能。
QXKJ
6楼-- · 2020-01-28 15:36
本帖最后由 QXKJ 于 2013-9-7 10:51 编辑

是的,我的是51,而且速度很慢的那种,也是为了低功耗.我说的不是间隔时间,而是超时时间.抱歉我以前也没说清楚.

一周热门 更多>