当前在做的项目中,遇到了485通信问题,大概的描述如下,请教高手分析一下,谢谢!
设备A、B、C,其中A为主机设备,B为有485口的空调设备,C为从机设备。
A、B、C共用一条485总线,正常时B、C处于被动接收状态。
A、C设备均为嵌入式linux系统,基于ARM AT91cpu的。
B、C设备地址不同,分别为0X02、0X0A。
A发送数据是轮询方式。
A与B可正常通信,即收发正常。但A发送给B命令时,C收到的数据为乱码,B回复给A的数据C能正确接收到。
A发送给C的数据,C收到的为乱码。在C端利用485转232工具通过PC可截取到A发送的数据且内容正确。
A和C的收发程序中均用到了485收发方向切换,即控制GPIO的引脚来使能485收发切换。
现在的问题是:为什么A发送给C的数据,C接收到的是乱码,但PC端截取的正确?
可能的原因:
1,A发送数据后到切换为接收状态之间的延时时间不够吗?
2,C接收数据时,有来自B的干扰?比如B收到A发送给C的数据后,也进行了回复,按理不应该回复的(地址头不同啊)?
3,C的读取程序处理有问题?如果有问题,但为什么C又能正确接收到B回复给A的数据呢
注:C设备上,采用类似的485收发函数,可与其另一485口上连接的LCD屏进行正常通信。 |