我是 Canopen 的新手,需要构建一个具有以下特征的系统:
- 1个canopen Master(也是网关)
- 多个canopen从节点,由同一设备的多个实例组成(具有唯一的SN,根据LSS的要求)
我想将此设备设计为在将其连接到总线之前不需要任何预配置,并且还允许以前连接到另一个 canopen 总线(因此具有以前的节点 ID)的设备无缝连接到新总线(因此它们的节点 ID 在重新启动后不应保留)。在了解了 Canopen 和 LSS 服务后,我认为一个好的解决方案是:
- 该设备没有持久的节点 ID,并且在每次启动时需要由主设备通过 LSS 对其进行寻址
- master 将通过 LSS 服务定期扫描和寻址新节点(允许设备热插拔)
- 如果由于任何原因主节点重新启动,它可以通过简单的节点扫描重新检测所有已寻址的节点(所有地址的 SDO 信息上传)
现在我的问题:
- 我不清楚启动时如何拥有“无效的 canopen 节点 ID”(在此处引用:https ://www.can-cia.org/can-knowledge/canopen/cia305/ ),如果它没有初始节点 ID(因此只回复 LSS 寻址服务)它应该在总线上完全静默,甚至在通电时不发送启动消息(不兼容 canopen),直到它被 LSS 服务寻址,但如果我给它任何默认的初始节点 ID,当多个节点同时通电时会导致冲突(这将是每次系统启动时的正常行为,包括主设备在内的所有设备都将同时通电) ,像这样“未寻址”和无声的canopen设备是否有效,并且仍然符合canopen标准?如何处理这种情况?
- 我读到节点 ID 0 表示广播,所以这意味着我的主人只需一个命令(节点 ID 0 上的 SDO 上传信息)就可以要求所有(寻址的)节点信息(通过 SDO 上传)?还是不允许,我应该查询总线上的所有127个地址来重新映射网络?
谢谢