0

我知道 CANopen 禁止计时器的操作是为了确保同一消息的连续传输之间的最短时间,但规范并没有明确说明如果数据在禁止时间内发生变化(并且传输正在发生变化)该怎么办州)。我应该在禁止计时器到期时缓冲数据并传输它,还是在计时器到期后丢弃它并等待更改?

我的假设是,由于没有明确定义,我可以选择我想要的任何方法,但我会感谢任何有经验的架构师/开发人员对此的投入。谢谢。

4

1 回答 1

1

您说得对,禁止时间只是具有相同 CAN-ID 的连续 CAN 帧之间的最短时间。该标准没有规定多个事件在禁止时间窗口内的行为,因为它取决于具体情况。

对于 NMT、EMCY 和 LSS 等服务,您可能希望缓冲消息并稍后发送它们。在这种情况下,禁止时间只是帮助慢速(或编程不当)设备处理短消息突发的一种手段。我见过一次只能处理 3 个 CAN 帧的设备,所以这通常是必要的,但您不希望它们错过消息。

对于事件驱动的 Transmit-PDO,它取决于 PDO 代表什么。如果您使用它来跟踪状态,则在禁止窗口期间删除事件可能是有意义的。无论如何,它们都会因后续事件而失效。为确保您始终发出最新状态,您可以存储最新事件并在禁止时间过去后发送它,或者使用事件计时器确保您永远不会落后太多。我过去曾将这种策略用于模拟输入,其中线路噪声有时会导致事件突发。

如果您使用 PDO 来跟踪事件(或状态更改),则最好缓冲它们,以免事件丢失。但是,如果事件周期短于禁止时间,这可能会引入潜在的无限延迟。

对于我们在 Lely(奶牛场机器人)开发的产品,我们实际上更喜欢使用 SYNC 驱动的 PDO。它导致更可预测的 CAN 总线负载。而且我们不必在接收方跟踪状态,因为我们会收到每个 SYNC 的完整更新。但是,接收器总是比发送器晚一个 SYNC 周期,因此这可能不适合您的用例。

于 2020-06-03T12:47:57.930 回答