Сообщение декодирования 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));
}
Конечно, эта процедура по событию работает и в тестовых средах.