Как получить адрес на шине J1939 CAN?
Моя главная цель состоит в том, чтобы получить 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 ответ
Похоже, у вас возникла путаница между 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 slide 41 для получения дополнительной информации об этом формате данных.
В качестве альтернативы, если вы используете PGN 59904, то это когда длина данных равна 3 (если у вас нет дополнительной информации о приложении), а вашими данными является PGN, который вы хотите запросить.
Вам не нужно запрашивать адрес PGN, вы просто отправляете запрос адреса с исходным адресом, установленным на адрес, который вы хотите запросить.