如何在J1939 CAN总线上声明地址?

时间:2017-01-19 17:25:10

标签: can-bus j1939

我的主要目标是让VIN不是我的控制单元,但为此我需要向控制器发送命令,在向控制器发送任何命令之前我必须要求地址。

我已在我的网络上发送以下命令但未收到任何回复。

Msg.id.pdu_bit.edp = 0;
Msg.id.pdu_bit.dp = 0;
Msg.id.pdu_bit.pf = 234;
Msg.id.pdu_bit.ps = 255;
Msg.id.pdu_bit.sa = 249;
Msg.id.pdu_bit.pri = 6;

Msg.buf[0] = 0x00; //LSB First
Msg.buf[1] = 0xEE; // pgn for claim address
Msg.buf[2] = 0x00;

Msg.len = 3;

这是申请地址的正确方法,还是我发送了不同的命令?

1 个答案:

答案 0 :(得分:1)

看起来您在PGN 60928(地址声明)和PGN 59904(请求PGN)之间存在一些混淆

Msg.id.pdu_bit.pf = 234;

需要

Msg.id.pdu_bit.pf = 238;

地址声明的PGN为60928,因此J1939标头中的PF字段需要为238(0xEE)。您的数据将特定于应用程序,但数据长度应为8.有关此数据格式的详细信息,请参阅J1939 Spec幻灯片41。

或者,如果您使用PGN 59904,那么当您的数据长度为3时(除非您有更多应用程序特定信息),并且您的数据是您要请求的PGN。

您无需申请地址声明PGN,只需将您的来源地址设置为您要声明的地址即可发送地址声明。