CAN ID是节点的地址吗



我正在学习CAN和CANOpen协议,我有点困惑。博世CAN规范规定:

"IDENTIFIER不指示消息的目的地,但描述了数据"的含义;

还表示,网络中CAN设备的数量没有限制。然而,它也说,为了避免collsion,CAN消息ID在网络中必须是唯一的,如果我是正确的,这会限制节点的数量。

那么CAN ID是CAN节点的一个类似地址的唯一标识符吗

正如Bosch规范所说,CAN标识符告诉数据包的性质,而不一定是关于谁是发送器/接收器的任何信息。所有CAN信息都会广播到所有节点。在数据链路层,所有节点都将对任何接收到的消息进行物理ACK,无论它们是否对内容感兴趣。理论上,任何节点都可以发送任何消息,并选择解码任何读取的消息。

此外,我们不能有几个具有相同标识符但数据大小不同的数据包。系统的设计也不应使多个节点冒着同时发送同一数据包的风险。这是因为消息仲裁不考虑数据部分,所以如果标识符相同但数据不同,那么我们就会发生数据包冲突。


对于CANopen,它是一个应用层,在许多情况下使用低级别CAN帧作为更高层协议的载体。在CANopen中,增加了可寻址节点的概念,这不是CAN本身的要求。通常,CAN将以CAN标识符加节点id的形式发送消息。例如,与PDO协议类似:一些TPDO1使用默认的CAN标识符0x180+节点id。因此,节点1将作为TPDO1的默认发送0x181,节点2将发送0x182,依此类推。然而,这些只是默认设置,通常可以更改。

CAN ID更像是总线上任何人都可以接收的消息类型。CAN消息不包括消息的源/目的地址。

(然而,如果你控制着总线上的一切,如果你愿意,你可以在can ID中编码源/目的地-这是你的责任,然后如何做到这一点(

那么CAN ID是CAN节点的一个类似地址的唯一标识符吗?

无CAN ID不是CAN节点的唯一标识符。节点通常发送和接收具有不同CAN ID的多个帧。每个CAN帧必须具有唯一标识符:

NODE_1 - FRAME_1 ID 0xA1 - Periodic - Sent every 100ms
NODE_1 - FRAME_2 ID 0xA2 - Periodic - Sent every 100ms
NODE_1 - FRAME_3 ID 0xA3 - Periodic - Sent every 100ms
NODE_2 - FRAME_1 ID 0xA3 - Periodic - Sent every 100ms

一个典型的节点将发送具有不同CAN ID的多个帧。例如,在汽车中,ECU定期发送十几到几十个CAN帧,每个帧都有自己的CAN ID。

在CAN 2.0协议中,在物理层上,标识符表示CAN帧的优先级。如果两个不同的节点同时发送两个帧,则将进行仲裁,并且优先级最低的帧将静音,从而允许优先级较高的帧首先发送。它将尝试稍后再次发射。

通常,具有高优先级的帧具有短周期,而具有低优先级的帧则具有较长周期。

0x001 - Very high priority frame ID, usually with a small periodicity like 10ms
...
0x7FF - Very low priority frame ID, periodicity typically 1 second or 5 seconds

相关内容

  • 没有找到相关文章

最新更新