CAPL Scripting - связь CAN C (прекратить передачу одного сообщения от DBC)
Я работаю над сценарием CAPL, который должен разрешать передачу всех сообщений по каналу CAN C и прекращать передачу одного конкретного сообщения из файла базы данных. Кто-нибудь может помочь с методом / функцией / кодом, который я могу использовать?
3 ответа
Ваш вопрос неопределенный, но я предполагаю, что вы переходите с одного канала CAN на другой. Например, от CAN C до CAN D (или от CAN 3 до CAN 4), чем вы могли бы сделать:
on message CAN3.0x7FF // This would be that one ID that stops at some point
{
message CAN4.0x7FF msg;
msg = this;
// Assuming you are receiving on CAN 3, and looking to transmit on CAN 4
if(this.dir == rx)
{
// Declare a global variable that sets to 1 when you want it to stop
if(MSG_STOP == 0)
output(msg);
}
}
on message CAN3.*
{
message CAN4.* msg;
msg = this;
if (this.dir == rx)
{
output (msg);
}
}
AFAIK, единственный способ сделать это - отключить любую автоматическую передачу сообщений (например, через IG или сетевой IL) и передать все сообщения вручную из сценария CAPL в обратных вызовах таймера. Передача может быть выполнена с использованием output
функция и в зависимости от того, какие критерии вы определяете, вы можете не вызывать output
для любых сообщений, которые должны быть заблокированы.
Если вы используете уровень взаимодействия (IL) в своей имитации, и циклическое время файла DBC правильно настроено, есть некоторые функции CAPL, которые можно использовать для ввода ошибки, что позволит вам выборочно запускать / останавливать передачу определенных сообщений:
on sysvar Sys_m0x461_Send {
/**********************************************************
* FAULT INJECTION Enable/Disable Msg Sending
**********************************************************/
if (@this) {
ILFaultInjectionEnableMsg(Message0x461fromDBC);
}
else {
ILFaultInjectionDisableMsg(Message0x461fromDBC);
}
}
В примере, если системная переменная (может быть связана с элементом управления панели, например, флажок) равна '1', сообщение будет передаваться, как определено в DBC, в противном случае отправка сообщения останавливается.