Сообщение декодирования CAN Busmaster DataField

Мне нужно проанализировать и декодировать поле данных из сообщения CAN.

Я отправил переданный запрос и вернул поле данных:

02 01 20 00 00 00 00 00

Теперь мне нужно декодировать его ПЕРЕКЛЮЧАТЕЛЕМ, первый байт - это длина (02), но как мне разбить все поле данных на отдельные байты, а затем взять их 1 на 1 для декодирования?

1 ответ

Я не знаю протокол SWITCH, но я могу помочь вам получить доступ к байту за байтом полезной информации интересующего вас сообщения. Допустим, ваш идентификатор сообщения равен 0x100 (или у вас есть его имя по базе данных dbc, ваш вызов для определения сообщение).

Если вы работаете в тестовой среде (тестовый узел, такой как тестовый узел CAPL/XML), вы можете определить тестовый случай / функцию и в ней следующую последовательность:

message 0x100 MessageContainer;

затем вы ждете своего сообщения в точке, где вы ожидаете, что полезная нагрузка будет по вашему вкусу:

...,,,

testwaitformessage(0x100,cycletimeofMessage);  /*Cycletime the message has, or maximum time you expect your message to arrive*/
testGetWaitEventMsgData(MessageContainer); /*the message object MessageContainer will be filled with the content of the message catched early in testwaitformessage()*/

write("%X",MessageContainer.byte(0)); /*you access the bytes through the .byte selector field of the message object and do whatever you wish with it.*/

Если вы хотите выполнить декодирование в узле моделирования, вы можете сделать это только через события, и это намного проще:

on message 0x100
{
write("The first byte of the captured message 0x100 is 0x%X",this.byte(0));
}

Конечно, эта процедура по событию работает и в тестовых средах.

Другие вопросы по тегам