我有一个带有多个 TPDO (4) 的从设备,用于发送某些传感器数据。每个 TPDO 有大约 4 个字节的数据,我想在帧中插入一个“计数”以指示数据不是陈旧的。我的计划是为此创建一个对象条目,并将其作为第 5 个字节映射到每个 PDO。CANOpen 标准是否允许这样做,这是一个好主意吗?
PS:我没有在 1 个 TPDO 中发送所有 8 个字节,因为 1 个 TPDO 中的 4 个字节彼此有关联。
我有一个带有多个 TPDO (4) 的从设备,用于发送某些传感器数据。每个 TPDO 有大约 4 个字节的数据,我想在帧中插入一个“计数”以指示数据不是陈旧的。我的计划是为此创建一个对象条目,并将其作为第 5 个字节映射到每个 PDO。CANOpen 标准是否允许这样做,这是一个好主意吗?
PS:我没有在 1 个 TPDO 中发送所有 8 个字节,因为 1 个 TPDO 中的 4 个字节彼此有关联。
是的,允许将一个(子)对象映射到多个 PDO,甚至多次映射到同一个 PDO。在 RPDO 中使用虚拟映射时,这实际上很常见。
插入计数是否是一个好主意取决于您要实现的目标。您要检测的问题是什么以及您想如何处理它?
如果要检查从站是否还活着且健康,请使用心跳。如果你想检查你没有错过一个 PDO,还有其他方法。对于 SYNC 驱动的 PDO,您可以在收到 PDO 时为每个 PDO 设置一个标志,并在 SYNC 处检查是否全部收到,然后再清除标志。对于事件驱动的 PDO,如果 PDO 在特定时间内没有到达,您可以使用 RPDO 中的事件计时器来生成错误。
插入计数器将起作用,并帮助您检测错过了多少 PDO。但问题是,你能用这些信息做什么?最后一个 PDO,即使“陈旧”,通常仍然是接收端值的最佳猜测。