CANOpen 网络负载高于预期

CANOpen network load higher than expected

我正在开发一个项目,其中一台主机通过 CANOpen 网络连接到 4 个从机。

在每个时间步,计算机从每个从机接收测量消息,并向它们发送控制消息。每个时间样本总共接收到 4 条消息,发送 4 条消息。

发送的消息是一个PDO,有6个数据字节(8字节包括COB-ID) 收到的消息是一个 PDO,有 8 个数据字节(10 个字节包括 COB-ID)

我的 CAN 网络配置为 1Mbit/s,我 运行 我的程序配置为 1000 Hz(1 毫秒采样时间)。由于描述的消息产生的总负载为 576 bits/cycle,网络中预期的总负载为 576kbit/s,或 57%.

然而,我看到的是:

  1. 控制计算机测得的 负载约为 86%(最小值为 68%,峰值为 100%)。
  2. 我连接到网络的USB CAN总线分析器注册了一个流量 消息的数量(按计数)大约是我名义上的一半 期望(即,每个周期发送 4 个,接收 4 个,持续 50 秒应该产生 50k 条消息,而我只看到 18-25k)。此外,我收到 每个周期从从属设备发出 1-2 条错误消息 网络过载。在它被指出之前,甚至算上 这些消息作为流量的一部分的大小不会接近 解释负载异常。

我想知道我计算CANOpen网络负载的方法是否正确。例如,是否有任何协议特定的握手、CRC 或任何类型的额外字节被发送以使网络简单地工作?我在 wiki page of CANOpen, but I do know there are such appendices to messages in the original CAN bus 标准中看不到它。

在CAN报文中,要传输的数据不止一个。 还有仲裁 ID(11 位或 29 位,取决于您使用的是 CAN 2.0A 还是 2.0B)、15 位 CRC、7 位 EOF 标记、控制字段以及其他一些保留位。 根据数据的不同,可能还会有填充位。

使用 CAN2.0B 并假设 48 位(6 字节)的数据,您将获得大约 132 位的消息大小,对于您的 64 位消息,将获得大约 151 位的消息。

总而言之,您将获得每个周期大约 1132 位,这对于 1Mbit/s 总线和 1000 Hz 来说太多了。

希望对您有所帮助。