打印

485组网通讯时有时主机询问后,从机没有返回数据

[复制链接]
3536|39
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
15102595235|  楼主 | 2019-6-27 11:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
测试环境是一个485主机负责连续循环地向7个从机发送指令,主机发送指令后,收到从机的正确回复后,向下一个从机发送指令,依次循环,
如果从机不返回数据,或收到的数据不正常,主机则会等上60s左右,才会发下一条指令。所有的数据都通过串口调试助手观察。

485节点间用的是类似杜邦线的软线,长度不越过100cm.

现在的问题是主机询问从机,过一段时间就会有某个从机不返回数据的情况,每个节点都有这样的情况。

后来给其中一个节点断电了(有点半蒙式的给他断电,因为检查数据时总觉得是发送数据的间隔太频繁才会这样),这样主机就会有1分钟左右的间隔不向从机发询问指令,然后我就发现在除断电的从机没有数据外,其他从机的数据都正常返回。

难道真的让我蒙对了吗,但还是不了解真相啊。所以请各位前辈指点下我测试的这种情况的原因,及解决方法。

使用特权

评论回复

相关帖子

沙发
R2D2| | 2019-6-27 15:40 | 只看该作者
从机都长得一样吗?

使用特权

评论回复
板凳
15102595235|  楼主 | 2019-6-27 16:46 | 只看该作者
R2D2 发表于 2019-6-27 15:40
从机都长得一样吗?

一样

使用特权

评论回复
地板
R2D2| | 2019-6-27 16:49 | 只看该作者
那就是通讯协议是@wh6ic这种二傻子编的。

使用特权

评论回复
5
cjseng| | 2019-6-27 18:46 | 只看该作者
这个恐怕是程序问题吧。不妨加个指示灯看一下,从机接收到完整数据,指示灯就亮一下。

使用特权

评论回复
6
zyj9490| | 2019-6-27 19:05 | 只看该作者
从机的反央时间不够快,上一帧还没处理,下一帧已出现了,造成软件体糸逻辑混乱导致。每一个从机它要处理二个帧,一个主机的命令帧,连一个是其他从机的响应帧,没有足够的速度处理,从机都会当机,特别是不同机型的从机。我经过的例子,一个MODBUS智能传感器(其他公司的),单独用MODBUSPOLL是可以的,正常接收,一旦组网,全部(相当部分)传感器就当机,现在只能用二种方法处理,一个二个总线,相同的从机组一组,另一个是发命令(采集周期间隔)拉长。

使用特权

评论回复
7
hjq451506709| | 2019-6-27 19:15 | 只看该作者
本帖最后由 hjq451506709 于 2019-6-27 19:17 编辑

1.芯片RS485不行,最好用MAX13487自动收发,自适应差分波形;
2.时序没弄好,主机两次发送的间隔不能太快要控制好,否则从机发不出应答指令;3.程序有BUG;
4.通讯线材质量差或线过长;

使用特权

评论回复
8
zyj9490| | 2019-6-27 19:40 | 只看该作者
hjq451506709 发表于 2019-6-27 19:15
1.芯片RS485不行,最好用MAX13487自动收发,自适应差分波形;
2.时序没弄好,主机两次发送的间隔不能太快要 ...

自动收发的,在低波特率可以,高波特率更加差。

使用特权

评论回复
9
hjq451506709| | 2019-6-27 21:09 | 只看该作者
zyj9490 发表于 2019-6-27 19:40
自动收发的,在低波特率可以,高波特率更加差。

实践出真知:115200BPS,24个从机,十几米,实测不是问题

使用特权

评论回复
10
zyj9490| | 2019-6-27 21:11 | 只看该作者
hjq451506709 发表于 2019-6-27 21:09
115200BPS,24个从机,十几米,实测不是问题

这么短啊,我光伏埸,3-5KM,布线,就有这样的问题,

使用特权

评论回复
11
15102595235|  楼主 | 2019-6-28 08:42 | 只看该作者
hjq451506709 发表于 2019-6-27 19:15
1.芯片RS485不行,最好用MAX13487自动收发,自适应差分波形;
2.时序没弄好,主机两次发送的间隔不能太快要 ...

芯片用的SP3485;上一条从机的回复时间和主机发送的下一条数据间隔在110ms左右。我也怀疑过是时间间隔的问题,如果是这情况,为什么主机从来没有问题。难道是从机不做其他处理,只处理485数据的原因。

使用特权

评论回复
12
15102595235|  楼主 | 2019-6-28 08:45 | 只看该作者
zyj9490 发表于 2019-6-27 19:05
从机的反央时间不够快,上一帧还没处理,下一帧已出现了,造成软件体糸逻辑混乱导致。每一个从机它要处理二 ...

我自己猜想可能是您说的这种情况,但是也不敢确定,我这里的线加起来也超不5M,所以我没加终端电阻,您觉得会不会是总线负载的问题。
那么现在我先把主机询问间隔调整,如果没有效果,再考虑负载的问题吧

使用特权

评论回复
13
zyj9490| | 2019-6-28 09:14 | 只看该作者
15102595235 发表于 2019-6-28 08:45
我自己猜想可能是您说的这种情况,但是也不敢确定,我这里的线加起来也超不5M,所以我没加终端电阻,您觉 ...

肯定不是,最大可能就是产品没有做好,不能够及时快速处理通信帧而当机,不是目的地址的从机也要处理那些无用帧。你可以用单个从机是否当机,命令间隔用标准的200MS的发送和接收,然后间隔加小,是否出现当机问题。

使用特权

评论回复
14
15102595235|  楼主 | 2019-6-28 10:25 | 只看该作者
zyj9490 发表于 2019-6-28 09:14
肯定不是,最大可能就是产品没有做好,不能够及时快速处理通信帧而当机,不是目的地址的从机也要处理那些 ...

MODBUS的命令间隔标准是200MS吗,这个我不知道,我要学习的地方还有很多。
不过刚才我把主机的时间调了,主机收到从机回复后1S左右再发下一个从机指令,目前看没有什么问题。
您说的不能够及时快速处理通信帧而当机,------->这个问题是程序本身的问题吗,如果是这样,那么应该如何修改,再写类似的程序应该注意什么。
不是目的地址的从机也要处理那些无用帧,-------->程序中判断出不是目的地址的无用帧,弃之,并清空了接收数据。

使用特权

评论回复
15
R2D2| | 2019-6-28 10:33 | 只看该作者
15102595235 发表于 2019-6-28 10:25
MODBUS的命令间隔标准是200MS吗,这个我不知道,我要学习的地方还有很多。
不过刚才我把主机的时间调了, ...

MODBUSASCII没有间隔。MODBUSRTU有3.5字符间隔,比如115200bps/8/N/1,一位8.6us,3.5个字符是300us左右。

使用特权

评论回复
16
15102595235|  楼主 | 2019-6-28 11:19 | 只看该作者
cjseng 发表于 2019-6-27 18:46
这个恐怕是程序问题吧。不妨加个指示灯看一下,从机接收到完整数据,指示灯就亮一下。 ...

前辈有什么解决的办法吗,还望告之。

使用特权

评论回复
17
15102595235|  楼主 | 2019-6-28 11:31 | 只看该作者
zyj9490 发表于 2019-6-28 09:14
肯定不是,最大可能就是产品没有做好,不能够及时快速处理通信帧而当机,不是目的地址的从机也要处理那些 ...

间隔小会当机,您说这个情况该怎么处理呢,好像还是从机程序的问题。
从机收到指令后,会做一个采集,然后再向485总线发送数据。当然接收数据是在中断里,数据处理是在主程序中调用数据处理函数了。
刚才把主机改了之后,到现在一个半小时,发生了三次当机,要崩溃

使用特权

评论回复
18
zyj9490| | 2019-6-28 12:23 | 只看该作者
15102595235 发表于 2019-6-28 11:31
间隔小会当机,您说这个情况该怎么处理呢,好像还是从机程序的问题。
从机收到指令后,会做一个采集,然 ...

主机查询命令间隔拉长即可,如1S查询一次。7台从机主机查询7次,7秒完成。

使用特权

评论回复
19
zyj9490| | 2019-6-28 20:06 | 只看该作者
本帖最后由 zyj9490 于 2019-6-29 00:04 编辑
15102595235 发表于 2019-6-28 11:31
间隔小会当机,您说这个情况该怎么处理呢,好像还是从机程序的问题。
从机收到指令后,会做一个采集,然 ...

解析命令后才起动数据采集,这样的程序有点LOW,应做一个例程不断采集数据,更新一个公共数据或数据接口,只要命令下来,解析本机的数据,直接把变量的值往上送,响应时间大大可以缩小。

使用特权

评论回复
20
15102595235|  楼主 | 2019-8-17 14:45 | 只看该作者
zyj9490 发表于 2019-6-28 20:06
解析命令后才起动数据采集,这样的程序有点LOW,应做一个例程不断采集数据,更新一个公共数据或数据接口, ...

已经把程序改了,不在modbus部分做采集,用的定时器规定采集时间,在串口观察了从机返回数据的时间100ms-300ms之间,但是几个设备组网后还是那样,总有一个设备会出现假死的情况。需要主机招呼两三次才会有返回数据,甚至有时三次都没有。

使用特权

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

本版积分规则

8

主题

44

帖子

2

粉丝