我知道 J1939 和 CANBus 之间的一般区别。比如ID位数。我也知道 J1939 可以让你发送 CANBus 不能做的超过 8 个字节。J1939 还提供 2 个节点之间的点对点通信。这个功能让我很困惑。在什么情况下,我们需要 2 个节点之间的点对点通信?而当其他节点继续广播时,这两个节点(进行点对点通信)不会错过广播的数据吗?另外在哪些情况下我们应该更喜欢使用 J1939 而不是 CANBus?而不是我们希望在一帧中使用 8 个字节的时间。
2 回答
CAN和J1939没有区别。J1939 建立在 CAN 2.0b 之上。当某些设备使用 BAM 使用 J1939 传输协议 (J1939.TP) 发送大消息时,其他设备可以接受或忽略此消息。但是有一个重要的限制——设备一次只能发送一条 BAM 消息。该设备也可以在 50ms 内只发送一个消息部分。因此,如果设备发送 400 个字节,这将需要 (400/7*50) ~ 2.9s。在此期间,设备无法发送任何其他 BAM 消息。如果设备发送 CM 消息,它可以向 ECU 1 发送一条消息,向 ECU 2 发送另一条长消息。J1939 主要用于卡车和公共汽车。如果您为卡车创建设备,则必须使用 j1939。
J1939 是一个运行在 CANBus 上的协议,J1939 不能打破 CAN 基础的规则。关于您的点对点问题,一些 J1939 PGN 需要与另一个 ECU 建立连接,以便使用传输协议会话传输数据包。其他情况是当您需要向另一个 ECU 请求消息并且您不希望网络上另一个 ECU 的数据时,原因可能是该特定消息没有定期广播,您只会在请求时获得它例如,请求发动机小时数、识别号、地址声明。与 8 字节的有效载荷相关,一些 PGN 可能包含超过 8 字节的数据,为了传输这些字节,您使用传输协议会话,该会话由几个具有特定格式的 8 字节消息组成