CANOpen映射到多个TPDO的同一对象

问题描述

我有一个带有多个TPDO(4)的从设备,用于发送某些传感器数据。每个TPDO都有大约4个字节的数据,我想在帧中插入一个“计数”以指示数据不是陈旧的。我的计划是为此创建一个对象条目,并将其映射为每个PDO的第5个字节。 CAnopen标准允许这样做吗?那么,这是个好主意吗?

PS:我不会在1个TPDO中发送所有8个字节,因为1个TPDO中的4个字节彼此相关。

解决方法

是的,允许将一个(子)对象映射到多个PDO,甚至多次映射到同一PDO。在RPDO中使用虚拟映射时,这实际上很常见。

是否插入计数是一个好主意,取决于您要实现的目标。您要检测的问题是什么?如何解决?

如果要检查从属是否还健康,请使用心跳。如果要检查您是否没有错过PDO,还有其他方法。对于SYNC驱动的PDO,您可以在收到每个PDO时为其设置一个标志,并在SYNC处,在清除标志之前检查是否已全部收到它们。对于事件驱动的PDO,如果PDO在一定时间内没有到达,则可以使用RPDO中的事件计时器来生成错误。

插入计数器将起作用,并且可以帮助您检测错过了多少个PDO。但是问题是,您可以使用这些信息做什么?即使是“陈旧的”,最后一个PDO通常仍然是接收方对该值的最佳猜测。