我的主要目标是获得我的控制单元的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;这是申请地址的正确方式,还是我必须发送不同的命令??
发布于 2017-06-13 00:42:04
看起来您对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,您只需发送地址声明,并将源地址设置为您想要声明的地址。
https://stackoverflow.com/questions/41747989
复制相似问题