0

我们正在开发一个典型的 CANbus 网络系统,您可以称之为控制器来组织许多设备。

设备需要配置,控制器使用常规对象字典项(当前在制造商特定范围内)写入(也可能读回)。

设备还使用超过 8 个字节的数据执行操作(命令),我们通过在设备对象字典中只写入项目并依靠 SDO 的常规分段/取消分段来解决这个问题。(不知道这是否是CANopen的做事方式,但似乎合理)。

但是,设备也会产生事件(比如某些传感器数据超过某个阈值),从而导致来自设备的异步数据超过 8 个字节。PDO 用于发送异步事件数据,但它只能包含 8 个字节。设备可以将数据写入控制器上的对象字典项,但这似乎不像 CANopen 方式。我对吗?

我们想出的最好办法是向控制器发送一个 PDO,通知控制器设备上的对象字典中有更多数据可用。

任何具有 CANopen 背景的人都可以找到解决此问题的最佳(CANopen)方法吗?

由于我经常重复 8 个字节,我们可以放心地假设这个网络没有运行 CAN-FD。

4

1 回答 1

1

任何明智的 CAN 网络设计的关键是尽早考虑实时性、数据优先级、总线负载和数据量。如果您发现自己的数据块大于 8 字节,那么这强烈表明此设计存在问题 - 它可能应该拆分为多个包。

通常,您根本不应该将 SDO 用于数据,因为它们会带来开销。这包括对对象字典的写入,这也意味着 SDO 访问。SDO 的块传输等适用于引导加载程序或一次性配置等,而不适用于操作模式下的实时数据流量。可以做到,但是很麻烦。

理论上,您可以使用 PDO 映射跨多个 PDO 映射数据,但所有这些听起来确实像是一个“XY 问题”——您确信您需要传输更大的数据块并寻找一种方法来实现它。但第一步是查看基本的网络数据/设计,看看您是否真的需要这些大块,或者将它们分成几块是否有意义。理想的 CANopen 设计是在可能的情况下为每种数据类型配备一个 PDO。

于 2020-09-08T07:58:41.167 回答