我有一个带有多个与 CANOpen 通信的子系统的系统。有一个带有屏幕的主单元(用于人机界面和其他东西)和用于次要操作的子单元(如采样按钮状态,管理电源,进行测量......)。我们为这个系统定义了一个基于 CANOpen 的通信协议。子系统定期与 TPDO 消息共享它们的条件,并根据与 RPDO 消息一起发送的主单元命令执行操作。还有一些 NMT 也在使用中。所以我被要求在这个协议中添加一个新命令,zeroize。该命令将被广播发送,它将导致所有人删除软件。这样做的正确方法是什么?也许我可以使用 RPDO?我们是否允许在 CANopen 中定义新的 NMT 命令?也许我可以使用 NMT 来做到这一点,但使用尚未使用的新命令帽?在此先感谢 Ip。
问问题
48 次
2 回答
1
TPDO 和 RPDO 的含义有点令人困惑,因为主单元的 TPDO 将成为外围单元的 RPDO,反之亦然。但是,是的,发送一些自定义广播消息的正确方法是使用 PDO。
虽然,取决于您对“删除软件”的含义,CANopen 可能会为它提供一种方法。对象字典中有保存 (OD 1010h) 和加载 (OD 1011h) 寄存器。Save 用于将所有 CANopen 通信(PDO 配置、映射等)存储在非易失性存储器中。并且 load 用于将 CANopen 参数恢复为出厂默认值。但是,这些不应用于保存/加载特定于应用程序的设置。
不允许定义新的 NMT 命令。
于 2020-09-11T07:48:50.110 回答
1
对象 1010h 和 1011h 可用于重置对象字典中的值。如果您真的想删除该软件,CiA 302-3 的固件升级协议可能会有所帮助。将 00h(停止程序)和 03h(清除程序)写入从站上的对象 1F51h 子索引 1 将删除应用程序。它是否实际上“归零”取决于实现。不过,每个从站需要两个 SDO 请求。该标准规定对象 1F51h 不能进行 PDO 映射。尽管您的设备可能不会强制执行该要求,但在这种情况下,您可以使用两个 PDO 实现广播“归零”。
于 2020-09-11T20:55:38.857 回答