Есть ли способ изменить сообщения CANoe Rx перед получением на шине?
Я получаю сообщение CAN от моего контроллера (предположим, ID сообщения = 0x100, сигналы S1,S2), но я хочу изменить сигналы сообщения Canoe Rx перед его получением на шине.
2 ответа
В основном, если вы хотите что-то изменить в кадре CAN, вы можете сделать что-то подобное в capl.
Пример:
Framename: TEMP
Signal you want to change: S1, S2
on message TEMP /* or "on message 0x100" in your case */
{
/* if you have a dbc or arxml assigned to the canoe project you can directly
* use frame names and signal names to manipulate the data.
* if not you need to use it's ID and write over the bytes on it.
*/
this.S1 = whatever_value;
this.S2 = whatever_value;
output(this);
}
Если у вас нет файла DBC/ARXML, добавленного в проект, но я настоятельно рекомендую это сделать. Единственное, что вам нужно изменить в приведенном выше коде, - это указать, какие байты вы перезаписываете.
Вы меняете это:
this.S1 = whatever_value;
this.S2 = whatever_value;
К этому:
this.byte(0) = whatever_value;
this.byte(1) = whatever_value;
Но вам нужно знать, какие байты нужно перезаписать.
Если вы не можете изменить сообщение до того, как оно будет отправлено контроллером, единственным вариантом для изменения вашего сообщения является HIL (Hardware In the Loop), который вы помещаете между отправителем (Controller) и CANoe VN на шине.
Например, они называются модулями CANStress, если вы хотите использовать продукты Vector.
Они будут прослушивать сообщения на вашей шине, и при заданном (вами) триггере будут перезаписывать физический уровень на то, что вы пожелаете, успешно изменяя или вводя ошибку в шину.
Имейте в виду, что изменение сигналов означает, что вы должны знать их отображение, а также как пересчитать тег CRC и изменить его, в противном случае CANoe VN не примет ваше сообщение и сообщит о проверке CRC Rx_Err.