485通信问题
当前在做的项目中,遇到了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屏进行正常通信。
[解决办法]
楼主可以是试试移除设备B,只连接AC,进行RS485收发。
还有楼主用的是RS485什么转换芯片?硬件手册也需要检查一下
[解决办法]
遇到过类似的情况,因为PC对停止位处理比较完善,所以不会出现乱码。
[解决办法]
C 机的端口配置是否正确? 波特率是否对? 可以连续发0xAA 或 0x55这样的数据示波器测量下
[解决办法]
B/C 发送端并联了,分析是否带来影响?断开B,单独测试A/C就知道了
[解决办法]