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条回答
hy2515131
1楼-- · 2019-12-15 08:57
 精彩回答 2  元偷偷看……
hy2515131
2楼-- · 2019-12-15 09:30
18161319737 发表于 2019-4-13 01:49
要不了10000,五千就给你搞一个标快响应的。

他那个57600/280uS根本就不标准。

如果公司能报销 多少钱无所谓 关键是不报销
Feeling_MCU
3楼-- · 2019-12-15 10:28
本来modbus轮询通信就不是很快,中间时间间隔也是必要的。  要求高可以自定义协议
hy2515131
4楼-- · 2019-12-15 15:07
Feeling_MCU 发表于 2019-4-13 09:25
本来modbus轮询通信就不是很快,中间时间间隔也是必要的。  要求高可以自定义协议 ...

谢谢你的思路
浮华一生
5楼-- · 2019-12-15 16:32
其实你要想清楚 ADC 滤波值是什么时候的值。  如果ADC一直在采样 一直在滤波  modbus 拿走的可能是上一个值。这样就会很快,modbus 拿走就行了。如果是modbus命令来触发ADC采样然后滤波。。。。。 那,你这个设计有点问题啊感觉  
dukelec
6楼-- · 2019-12-15 16:40
 精彩回答 2  元偷偷看……

一周热门 更多>