是否有在CANopen中进行调零的正式方法

问题描述

我有一个具有多个与CAnopen通信的子系统的系统。有一个带屏幕的主单元(用于人机界面和东西),以及用于次要操作(例如采样按钮状态,管理电源,进行测量...)的子单元。 我们为此系统定义了基于CAnopen的通信协议。子系统与TPDO消息定期共享其条件,并根据与RPDO消息一起发送的主机命令进行处理。还有一些NMT也正在使用中。 因此,有人要求我向该协议添加一个新命令,将其置零。该命令应以广播方式发送,并应引起所有人删除软件。什么是正确的方法? 也许我可以使用RPDO?是否可以在CAnopen中定义新的NMT命令?也许我可以使用NMT来做到这一点,但尚未使用新的司令帽吗? 提前致谢

解决方法

您对TPDO和RPDO的含义有点困惑,因为主机的TPDO将成为外围设备的RPDO,反之亦然。但是,是的,发送一些自定义广播消息的正确方法是使用PDO。

尽管,根据您对“删除软件”的含义,CANopen可能为此提供了一种手段。对象字典中有保存(OD 1010h)和加载(OD 1011h)寄存器。保存用于将所有CANopen通信(PDO配置,映射等)存储在非易失性存储器中。使用负载将CANopen参数恢复为出厂默认值。但是,这些不应用于保存/加载特定于应用程序的设置。

不允许您定义新的NMT命令。

,

对象1010h和1011h可用于重置对象字典中的值。如果您确实要删除软件,CiA 302-3的固件升级协议可能会有所帮助。在从站上的对象1F51h子索引1上写入00h(停止程序),然后写入03h(清除程序)将删除该应用程序。是否实际“归零”取决于实现。但是,每个从属服务器需要两个SDO请求。该标准规定对象1F51h无法进行PDO映射。尽管可能不会对您的设备强制执行该要求,但在这种情况下,您可以使用两个PDO实现广播“调零”。