【发布时间】:2013-11-01 23:36:43
【问题描述】:
我正在尝试为 2 线 RS485 总线设计一个简单可靠的主/从协议。
总线上的所有节点都有一个唯一的地址。一个节点是主节点,它是唯一能够开始通信的节点。在主节点向它们发送请求之前,所有其他节点都无法发送任何内容。
我正在考虑简单的“请求/响应”协议:主设备向从设备发送请求并等待其回答。之后,M 向另一个从站发送请求。 可能会发生三种情况。
- 目的地正确接收到两个帧(请求和响应),事务结束时没有问题。
- 从站未收到来自主站的请求(校验和错误)。超时后,主机再次发送请求。没问题。
- 主站未收到从站的响应(校验和错误)。超时后,master 可以再次发送请求。
恕我直言,最后一种情况是有问题的。从站无法理解第二个请求是否与第一个完全相同,因此它会处理两次请求。如果请求是“将电机移动两步”、“在上次请求后是否按下开关”、“切换继电器”等,会发生什么?
我认为最简单的“请求/响应”协议不能很好地工作,除非应用程序级别知道协议的局限性并避免如果请求两次传输就会很危险。
您有什么好的简单可靠的协议可以推荐吗?我不想重新发明轮子。
【问题讨论】:
-
在请求中添加某种序列号,重新发送的主站将发送与第一次发送相同的序列号。从站看到序列号后,可以将其与最后收到的命令进行比较,并选择忽略该操作,同时仍响应命令
-
在场景 3 中,您指示校验和错误。如果有错误,slave不会不处理请求吗?它不应该发回NACK 表明它不理解请求吗?
-
我正在考虑 master 收到的响应中的校验和错误(或者,如果您愿意,如果 master 根本没有收到响应)。
标签: networking embedded protocols network-protocols rs485