modbus stm32实时响应

2019-12-11 18:23发布

本帖最后由 hy2515131 于 2019-4-13 09:43 编辑

目前使用一款别人开发的ADC采集系统,modbus-RTU通信实时采集ADC的数据,57600波特率下,采集系统收到modbus指令后间隔280us回传modbus指令,回传的指令还是经过滤波处理的ADC数据,求modbus实时通信算法。
STM32型号不限制,可以使用F1 F4系列都可以。
自己尝试使用STM32F429IGT6移植了freemodbus,也可以正常通信,不过实时性不高,用的是查询模式,
在while大循环中增加延时之后,发送指令和接收指令之间的时间变化明显,delay延时1秒就导致发送和接收的时间超过1秒,对于实时系统来说这是完全不能接收的。

freemodbus程序结构如下
while (1)
{
Delayms();
ADCAcquire();
//FreeMODBUS不断查询
eMBPoll();
}
想求一个实时性强的modbus stm32通信算法,不限于freemodbus,使用自己写的modbus程序也可以

拿逻辑分析仪测量过
单个字节时间长为176us,发送和接收的时间差为215us,前面说的280us是错误的。
因为图片太大,无法上传,只能图片处理之后上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
45条回答
kevinchen026
1楼-- · 2019-12-14 02:59
是不是看到100莫元反倒没兴趣了 还不如不挂悬赏 说不定正好有经验的网友倒是愿意热心解答一下
carefree1986
2楼-- · 2019-12-14 04:41
本帖最后由 carefree1986 于 2019-4-12 20:39 编辑

楼主的程序绝对有问题,什么样的算法能占用1S的时间,1秒就是72M个机器周期

大循环的实时性系统里面基本就不允许有大一点的阻塞延时,比如100us就等于浪费了就等于浪费了100*72个周期的计算能力
阿豪博士
3楼-- · 2019-12-14 05:08
 精彩回答 2  元偷偷看……
hz_fujian
4楼-- · 2019-12-14 08:02
只有DMA能满足
kevin_me
5楼-- · 2019-12-14 09:16
while里面为什么还要加延时?
Freemodbus发送和接收都是中断完成的。把ADC的滤波优化一下,采集放DMA,能做到多少就到头了
Error.Dan
6楼-- · 2019-12-14 13:51
LZ这个系统里面,极限带宽是可以算出来的,有了极限带宽这个边界然后再去谈优化才有意义。
然后,LZ描述的实时性从根儿上就不对,实时性不是快就实时了,实时是一种确定性。

最后是这个程序的写法,freemodbus内部是一个典型的状态机写法,本身是非阻塞的,从这一点上来说协议栈在软件上是没有瓶颈的。
换句话说,让我来写这个程序,延时也好,重载任务也罢都不会对“实时性”或者说高优先级任务产生影响,虽然只有一个CPU,但是也完全可以做成非阻塞的模式。
By the way,主循环里面用一个阻塞的delay真的是小学生写法,哪里都不推荐这么搞的~

一周热门 更多>