【问题标题】:RS485: simple and reliable protocolRS485:简单可靠的协议
【发布时间】:2013-11-01 23:36:43
【问题描述】:

我正在尝试为 2 线 RS485 总线设计一个简单可靠的主/从协议。

总线上的所有节点都有一个唯一的地址。一个节点是主节点,它是唯一能够开始通信的节点。在主节点向它们发送请求之前,所有其他节点都无法发送任何内容。

我正在考虑简单的“请求/响应”协议:主设备向从设备发送请求并等待其回答。之后,M 向另一个从站发送请求。 可能会发生三种情况。

  1. 目的地正确接收到两个帧(请求和响应),事务结束时没有问题。
  2. 从站未收到来自主站的请求(校验和错误)。超时后,主机再次发送请求。没问题。
  3. 主站未收到从站的响应(校验和错误)。超时后,master 可以再次发送请求。

恕我直言,最后一种情况是有问题的。从站无法理解第二个请求是否与第一个完全相同,因此它会处理两次请求。如果请求是“将电机移动两步”、“在上次请求后是否按下开关”、“切换继电器”等,会发生什么?

我认为最简单的“请求/响应”协议不能很好地工作,除非应用程序级别知道协议的局限性并避免如果请求两次传输就会很危险。

您有什么好的简单可靠的协议可以推荐吗?我不想重新发明轮子。

【问题讨论】:

  • 在请求中添加某种序列号,重新发送的主站将发送与第一次发送相同的序列号。从站看到序列号后,可以将其与最后收到的命令进行比较,并选择忽略该操作,同时仍响应命令
  • 在场景 3 中,您指示校验和错误。如果有错误,slave不会不处理请求吗?它不应该发回NACK 表明它不理解请求吗?
  • 我正在考虑 master 收到的响应中的校验和错误(或者,如果您愿意,如果 master 根本没有收到响应)。

标签: networking embedded protocols network-protocols rs485


【解决方案1】:

我最近在这里遇到了HDLC,因为我正在寻找类似的东西。它有一个可以满足您需求的操作模式。正常响应模式 (NRM) 就是您所描述的:仅来自主服务器的请求/响应。有一个open source HDLC framer,您可以将其用作协议的基础。我正在考虑自己使用它,但似乎仍有相当多的空间留给项目开发人员来实施。

This 是我遇到的答案,它为我指明了 HDLC 的方向。

【讨论】:

  • 谢谢,HDLC 建议非常好。现在唯一的问题是在低级 8 位微控制器上实现此协议或子集,例如 Atmel 的 ATtiny 系列。开源HDLC实现仅适用于PC。
  • 库部分可以在 ATtiny 上运行,但演示和测试代码都针对 PC 主机。不过,我不确定这个库的内存效率如何。
  • 我更加专注地检查了图书馆。它只解决了同步成帧的问题(避免帧中超过 5 个连续位),但它没有实现异步成帧(对于 RS232/RS422/RS485 连接),也没有通过重传管理 tx/rx 序列号以防出错。
  • 没错。我以为它有异步框架,但我一定是弄错了。代码并没有很好地记录,所以我可能误解了某些函数的作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
相关资源
最近更新 更多