欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

485通信有关问题

更新时间: 2014-01-05 03:14:26 责任编辑: Author_N1

 

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就知道了
--参考方法--
引用:
楼主可以是试试移除设备B,只连接AC,进行RS485收发。
还有楼主用的是RS485什么转换芯片?硬件手册也需要检查一下

引用:
B/C 发送端并联了,分析是否带来影响?断开B,单独测试A/C就知道了


首先要确认AC单独收发是否可以。
485通信只要2线就可以了,接地指的是大地,同时一个网络里,只能有一个设备接到大地。
另外需要考虑120欧姆电阻问题,可以尝试AC都放电阻,或者只有A放电阻。

至于怀疑是切换不及时照成,这个也可以通过试验看的。A只发送,C只接收。
--参考方法--
结果呢?楼主咋不上来反馈一下?
--参考方法--
楼主,对于你的第一个问题延时,如果波特率比较高,这个延时不好把握,建议把发送改成缓冲区+中断的方式发送,这样不需要发送前和发送后都不需要延时,我在stm32上实现过;
第二,“B收到A发送给C的数据后,也进行了回复,按理不应该回复的”问题就在这个地方,任何时刻只能有一个终端为发送状态,否则数据就会错误,这是硬件协议,所以错误在B,C置了发送状态的同时B也置了发送状态,总线电平被破坏。发送给B的B才能回复,发送给C的C才能回复,这是你设计的软件应用协议必须的规定。


--参考方法--
关于 A-C 之间传输的问题:

A 的驱动能力不足,而 C 对信号电平的要求较高(例如线路较长或容性负载较重)。

解决方法:

1 降低波特率试试。

2 在 A-C 之间加中继放大。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:14:26
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/19930/
本文WWW.DOC100.NET DOC100.NET版权所有。