485通信中的“多机通信位”有人用吗???

draculamx 2016-09-27 11:41:55
接到一个上位机项目,其他都很简单,就是485通信碰到问题了
硬件工程师告诉我,他要使用485通信中的多机通信位,我不太懂硬件,于是他就提出了如下通信的方案:
1.有多个下位机,上位机(PC)通过轮询方式和下位机通信
2.通信由上位机发起,通信过程如下:
(1)上位机将串口校验方式切换为'm'(mark校验),发送通道号(一个字节,范围从1到20)。
(2)上位机将串口校验方式且换为's'(space校验),接收来自下位机的14个字节。
(3)上位机发送31个字节到下位机(串口还是's‘(space校验)不变。
这样,就完成了一个下位机的通信,剩下的就是改变通道号,重复1-3的步骤,去轮询剩下的下位机。

首先我想问一下:485有这么通信的么??我到目前为止,接触到的485轮询,都是使用一种校验方式,中途不改变校验方式的。像这种通信中频繁切换校验方式,通信会稳定吗??这方案有可行性吗??

程序我已经完成,从目前的运行情况来看,不是很理想,主要是PC端和下位机,在收发字节的时候,有错误的字节出现,有时候还会漏掉1个字节。是我的PC端程序有问题,还是这个方案本身就有弊端??

我个人认为,这种通信方案很不靠谱。。。。
...全文
683 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZHILIN_KK 2016-10-12
  • 打赏
  • 举报
回复
你现在有问题,软件有检验吗?例如CRC,没有的话是会出问题的!主机,从机都要检验!
of123 2016-10-12
  • 打赏
  • 举报
回复
哦?你的板子上 RS485 信号转换芯片?RS485 使用的是有正负电压的差分信号。 我十多年前做过几个 RS485 的实际工程,有楼宇门禁控制的,有食堂刷卡收费系统的,网路都比较长,而且很稳定。
draculamx 2016-10-11
  • 打赏
  • 举报
回复
我没有用232的物理层,我现在上位机是一个嵌入式的板子,上面跑的是WINCE,这个板子的485不是232转的
draculamx 2016-10-09
  • 打赏
  • 举报
回复
引用 6 楼 of123 的回复:
是你的理解出了偏差。 串口通讯中的奇偶校验位是可以没有的。在有些 11 比特字符帧的实现中,就是简单地将原来的奇偶校验位置为 1 (Mark)或 0(Space)。此时,它已经不再具有奇偶校验功能。 无校验时,这一位不存在。 奇校验和偶校验时,这一位起校验作用。 Mark 或 Space 时,这一位存在,但设置为固定电平,无校验功能。 不存在你“感觉”的 Mark 校验和 Space 校验。 现在明白了吧? rs485 中,需要这一位,它与本字符帧的数据值无关,仅仅表示当前是地址还是消息。
多谢讲解,我是搞纯软件的,硬件知识很少,我现在就想知道,当我使用楼顶所说的这种通信方式时,下位机接收,和我上位机接收,都有漏字节和错字节的情况。。在这种频繁切换校验方式的通信中(就我软件而言),需要在哪些地方去找原因(就硬件上面而言)
of123 2016-10-09
  • 打赏
  • 举报
回复
主要通过改善硬件环境和降低波特率来解决。RS485 的差分信号传输,抗干扰性能还是不错的。你不要采用 RS232 物理层来测试。 你可以在数据链路层协议中加错误校验,例如 Modbus 协议的 LRC 或 CRC 校验。 但一个频频出错的系统,即便加上校验,效率原很低。
draculamx 2016-09-29
  • 打赏
  • 举报
回复
引用 4 楼 of123 的回复:
严格地说,RS485 是一个物理层协议。对于数据链路层和应用层,标准没有规定。 早期的数据链路协议,就是通过帧格式来区分地址帧和消息帧。这里没有校验什么事儿。Mark 是此位置 1;Space 是此位置 0。 RSA485 物理层的抗干扰能力强,传输距离远,一般不使用数据校验。如果要添加校验,可以在采用数据链路层或应用层协议中处理。比如,现在使用的较多的 Modbus 协议,是放在数据链路层中的。
怎么感觉你说的校验和我说的校验,不是一回事呢。。我说的校验是串口通信中,校验位的设置,无校验,奇校验,偶校验,MARK校验,SPACE校验,你说的校验更类似于软件校验,比如CRC,MODBUS等。。 我现在就想知道在串口通信中,频繁变换校验位(无校验,奇校验,偶校验,MARK校验,SPACE校验),对通信有什么影响。。。
of123 2016-09-29
  • 打赏
  • 举报
回复
是你的理解出了偏差。 串口通讯中的奇偶校验位是可以没有的。在有些 11 比特字符帧的实现中,就是简单地将原来的奇偶校验位置为 1 (Mark)或 0(Space)。此时,它已经不再具有奇偶校验功能。 无校验时,这一位不存在。 奇校验和偶校验时,这一位起校验作用。 Mark 或 Space 时,这一位存在,但设置为固定电平,无校验功能。 不存在你“感觉”的 Mark 校验和 Space 校验。 现在明白了吧? rs485 中,需要这一位,它与本字符帧的数据值无关,仅仅表示当前是地址还是消息。
of123 2016-09-28
  • 打赏
  • 举报
回复
严格地说,RS485 是一个物理层协议。对于数据链路层和应用层,标准没有规定。 早期的数据链路协议,就是通过帧格式来区分地址帧和消息帧。这里没有校验什么事儿。Mark 是此位置 1;Space 是此位置 0。 RSA485 物理层的抗干扰能力强,传输距离远,一般不使用数据校验。如果要添加校验,可以在采用数据链路层或应用层协议中处理。比如,现在使用的较多的 Modbus 协议,是放在数据链路层中的。
of123 2016-09-28
  • 打赏
  • 举报
回复
那你做的,都是变种协议。实际上,改的不是校验格式,而是传输帧格式。在主机代码中,不过是利用了变通手段而已。 在传统 485 协议中,地址传输帧和数据传输帧是不同的。
draculamx 2016-09-27
  • 打赏
  • 举报
回复
引用 1 楼 of123 的回复:
这就是典型的多从机 485 通讯流程。
我做过很多类似的485项目,串口的校验方式都是固定的,没有哪个会在通信的过程中,切换串口的校验方式。就算是轮询,也没有切换校验方式的。。。
of123 2016-09-27
  • 打赏
  • 举报
回复
这就是典型的多从机 485 通讯流程。

27,373

社区成员

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

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