2017-01-19 6 views
0

Моя главная цель - получить VIN no моего блока управления, но для этого мне нужно отправить команду на контроллер и перед отправкой какой-либо команды на контроллер, я должен буду требовать адрес.Как заявить адрес на автобусе J1939 CAN?

Я отправил ниже команду в свою сеть, но не получил от нее ответа.

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; 

Является ли это правильным способом претендовать на адрес или у меня есть другая команда?

+0

Любой может обмениваться процедурой получения адреса для протокола J1939 ??? – jtro

ответ

1

Похоже, у вас есть некоторая путаница между PGN 60928 (адрес претензии) и PGN 59904 (запрос PGN)

Msg.id.pdu_bit.pf = 234; 

должно быть

Msg.id.pdu_bit.pf = 238; 

PGN для адреса претензии 60928 так ваше поле PF в заголовке J1939 должно быть 238 (0xEE). Ваши данные будут конкретными для приложения, хотя длина данных должна быть 8. См. J1939 Spec слайд 41 для получения дополнительной информации об этом формате данных.

В качестве альтернативы, если вы используете PGN 59904, это когда ваша длина данных равна 3 (если у вас нет дополнительной информации о конкретном приложении), а ваши данные - это PGN, который вы хотите запросить.

Вам не нужно запрашивать адрес PGN, вы просто просто отправляете заявку на адрес с исходным адресом, указанным на адрес, который вы хотите получить.