CANopen 禁止定时器的正确操作是什么?
What is the correct operation of a CANopen inhibit timer?
我理解 CANopen 禁止定时器的操作是为了确保同一消息的连续传输之间的最短时间,但是规范没有明确说明如果在禁止时间内数据发生变化该怎么办(和传输处于状态变化)。我应该缓存数据并在抑制定时器到期时传输它,还是丢弃它并在定时器到期后等待更改?
我的假设是,因为它没有明确定义,我可以选择我想要的任何方法,但我很感激任何有经验的架构师/开发人员对此的投入.
谢谢。
你是对的,禁止时间只是具有相同 CAN-ID 的连续 CAN 帧之间的最短时间。该标准未指定禁止时间内多个事件的行为 window,因为这取决于具体情况。
对于 NMT、EMCY 和可能的 LSS 等服务,您需要缓冲消息并稍后发送。在这种情况下,禁止时间只是一种帮助慢速(或编程错误)设备处理短消息突发的方法。我见过一次只能处理 3 个 CAN 帧的设备,所以它通常是必需的,但你不希望它们错过消息。
对于事件驱动的Transmit-PDO,这取决于PDO代表什么。如果您使用它来跟踪状态,那么在抑制 window 期间删除事件可能是有意义的。无论如何,它们都会因后续事件而失效。为确保您始终发出最新状态,您可以存储最近的事件并在禁止时间结束后传输它,或者使用事件计时器来确保您永远不会落后太远。我过去曾将此策略用于线路噪声有时会导致事件爆发的模拟输入。
如果您使用 PDO 来跟踪事件(或状态更改),最好对它们进行缓冲,以免事件丢失。但是,如果事件周期短于抑制时间,这可能会引入潜在的无限延迟。
对于我们在 Lely 开发的产品(奶牛场机器人),我们实际上更喜欢使用 SYNC 驱动的 PDO。它导致更可预测的 CAN 总线负载。而且我们不必在接收方跟踪状态,因为我们在每次 SYNC 时都会收到完整的更新。但是,接收器始终比发射器晚一个 SYNC 周期,因此这可能不适合您的用例。
我理解 CANopen 禁止定时器的操作是为了确保同一消息的连续传输之间的最短时间,但是规范没有明确说明如果在禁止时间内数据发生变化该怎么办(和传输处于状态变化)。我应该缓存数据并在抑制定时器到期时传输它,还是丢弃它并在定时器到期后等待更改?
我的假设是,因为它没有明确定义,我可以选择我想要的任何方法,但我很感激任何有经验的架构师/开发人员对此的投入. 谢谢。
你是对的,禁止时间只是具有相同 CAN-ID 的连续 CAN 帧之间的最短时间。该标准未指定禁止时间内多个事件的行为 window,因为这取决于具体情况。
对于 NMT、EMCY 和可能的 LSS 等服务,您需要缓冲消息并稍后发送。在这种情况下,禁止时间只是一种帮助慢速(或编程错误)设备处理短消息突发的方法。我见过一次只能处理 3 个 CAN 帧的设备,所以它通常是必需的,但你不希望它们错过消息。
对于事件驱动的Transmit-PDO,这取决于PDO代表什么。如果您使用它来跟踪状态,那么在抑制 window 期间删除事件可能是有意义的。无论如何,它们都会因后续事件而失效。为确保您始终发出最新状态,您可以存储最近的事件并在禁止时间结束后传输它,或者使用事件计时器来确保您永远不会落后太远。我过去曾将此策略用于线路噪声有时会导致事件爆发的模拟输入。
如果您使用 PDO 来跟踪事件(或状态更改),最好对它们进行缓冲,以免事件丢失。但是,如果事件周期短于抑制时间,这可能会引入潜在的无限延迟。
对于我们在 Lely 开发的产品(奶牛场机器人),我们实际上更喜欢使用 SYNC 驱动的 PDO。它导致更可预测的 CAN 总线负载。而且我们不必在接收方跟踪状态,因为我们在每次 SYNC 时都会收到完整的更新。但是,接收器始终比发射器晚一个 SYNC 周期,因此这可能不适合您的用例。