RS485总线发生总线冲突,如何解决

2019-08-17 08:12发布

本帖最后由 stm32zzq 于 2017-5-26 14:22 编辑

主机和从机采取RS485半双工总线,主机和上位机用全双工通信,但是发现主从总线冲突,详细情况是主机以50ms周期给从机发送查询命令,并做超时重发处理,在串口助手里上位机对主机发送开关灯的指令,主机收到上位机的命令时需要对从机进行控制处理,目的是让主机控制从机开关灯并返回开关灯状态给主机,主机再返回给上位机,问题是有时候主机发给从机的控制命令从机收不到(情况1),有时候主机发给从机的控制命令从机收到了并且返回给主机,此时主机却收不到了(情况2),本人猜想:情况1的原因是因为从机正在对主机的查询命令进行应答,情况2的原因是因为从机给主机返回控制应答的时候正好主机又给从机发送查询命令,半双工收发冲突。求助各位大神,我的想法是否正确,如果是,那么怎么解决;如果不是,那么又是什么问题?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
20条回答
enan
1楼-- · 2019-08-18 04:48
 精彩回答 2  元偷偷看……
stm32zzq
2楼-- · 2019-08-18 06:04
本帖最后由 stm32zzq 于 2017-5-26 16:02 编辑
enan 发表于 2017-5-26 15:39
情况1主机发给从机的控制命令从机收不到
情况1的原因是因为从机正在对主机的查询命令进行应答,

试过100ms为周期,还是有同样的问题,另外我定义的一帧数据最多12个字节,波特率是9600,周期改成500ms,出现的概率小一点
enan
3楼-- · 2019-08-18 08:35
如果除去硬件问题(如485总线太长,有信号反射,要阻抗匹配等或其他设备干扰),那是你程序框架写的有问题,通讯要定义好协议,特别是不定长的要定时去判断他的接收是否完成
stm32zzq
4楼-- · 2019-08-18 08:40
enan 发表于 2017-5-26 15:55
如果除去硬件问题(如485总线太长,有信号反射,要阻抗匹配等或其他设备干扰),那是你程序框架写的有问题 ...

有的,我在485中断那里每次接收到数据就清空定时器值,第一个字节开启定时器,定时器中断周期是10ms,进入定时器中断后立刻关闭定时器,将标志位置1标志着接收到一帧完整的数据,main中判断标志位是1就处理解析一帧数据
enan
5楼-- · 2019-08-18 14:06
stm32zzq 发表于 2017-5-26 16:05
有的,我在485中断那里每次接收到数据就清空定时器值,第一个字节开启定时器,定时器中断周期是10ms,进 ...

10ms太长,9600波特率改个3到4ms就远远满足了,
如果这都不行你拿示波器或逻辑分析仪放485总线上看把,到底是谁出了错,
stm32zzq
6楼-- · 2019-08-18 16:28
 精彩回答 2  元偷偷看……

一周热门 更多>