485通信问题

hisstone 2013-09-17 05:28:14
当前在做的项目中,遇到了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屏进行正常通信。
...全文
475 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2013-11-06
  • 打赏
  • 举报
回复
关于 A-C 之间传输的问题: A 的驱动能力不足,而 C 对信号电平的要求较高(例如线路较长或容性负载较重)。 解决方法: 1 降低波特率试试。 2 在 A-C 之间加中继放大。
heavirain 2013-11-05
  • 打赏
  • 举报
回复
楼主,对于你的第一个问题延时,如果波特率比较高,这个延时不好把握,建议把发送改成缓冲区+中断的方式发送,这样不需要发送前和发送后都不需要延时,我在stm32上实现过; 第二,“B收到A发送给C的数据后,也进行了回复,按理不应该回复的”问题就在这个地方,任何时刻只能有一个终端为发送状态,否则数据就会错误,这是硬件协议,所以错误在B,C置了发送状态的同时B也置了发送状态,总线电平被破坏。发送给B的B才能回复,发送给C的C才能回复,这是你设计的软件应用协议必须的规定。
mollyjh 2013-10-03
  • 打赏
  • 举报
回复
结果呢?楼主咋不上来反馈一下?
wohuazhen 2013-09-25
  • 打赏
  • 举报
回复
引用 1 楼 cuiwei860526 的回复:
楼主可以是试试移除设备B,只连接AC,进行RS485收发。 还有楼主用的是RS485什么转换芯片?硬件手册也需要检查一下
引用 5 楼 ipman 的回复:
B/C 发送端并联了,分析是否带来影响?断开B,单独测试A/C就知道了
首先要确认AC单独收发是否可以。 485通信只要2线就可以了,接地指的是大地,同时一个网络里,只能有一个设备接到大地。 另外需要考虑120欧姆电阻问题,可以尝试AC都放电阻,或者只有A放电阻。 至于怀疑是切换不及时照成,这个也可以通过试验看的。A只发送,C只接收。
ipman 2013-09-19
  • 打赏
  • 举报
回复
B/C 发送端并联了,分析是否带来影响?断开B,单独测试A/C就知道了
hisstone 2013-09-18
  • 打赏
  • 举报
回复
现在怀疑是485网络中,A、C设备的485接地处理不当造成的。 因为A和C都是自己开发的设备,而B是专业厂家提供的控制器。 准备确认一下是否为接地处理不当导致的,请问有没有什么方法可以诊断这个因素?
zgl7903 2013-09-18
  • 打赏
  • 举报
回复
C 机的端口配置是否正确? 波特率是否对? 可以连续发0xAA 或 0x55这样的数据示波器测量下
falloutmx 2013-09-18
  • 打赏
  • 举报
回复
遇到过类似的情况,因为PC对停止位处理比较完善,所以不会出现乱码。
腹黑大胖兔 2013-09-18
  • 打赏
  • 举报
回复
楼主可以是试试移除设备B,只连接AC,进行RS485收发。 还有楼主用的是RS485什么转换芯片?硬件手册也需要检查一下

27,383

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧