Отправка периодических CAN-сигналов при нажатии кнопки с использованием CAPL и CANalyzer
Я пытаюсь отправить набор кадров CAN на шину CAN. Я использую CAPL для программирования и CANalyzer8.5 для моделирования, а конструктор Panel для создания кнопки. Мое требование - сначала создать кнопку с помощью дизайнера PANEL. Только при нажатии кнопки он должен начать отправку периодических кадров CAN на шину. Я немного смущен тем, как этого добиться. До сих пор мне удалось написать две отдельные программы с использованием CAPL. Первая программа отправляет данные при запуске периодически. Второй код отправляет данные только один раз при нажатии кнопки. Я хочу объединить оба кода для периодической отправки при нажатии кнопки.
первый код
/*@!Encoding:1252*/
includes
{
}
variables
{
msTimer mytimer;
message 0x100 A={dlc=8};
message 0x200 B={dlc=8};
message 0x300 C={dlc=8};
message 0x400 D={dlc=8};
}
on start
{
setTimer(mytimer,50);
}
on timer mytimer
{
A.byte(0)=0x64;
B.byte(4)=0x32;
C.byte(6)=0x20;
D.byte(7)=0x80;
output(A);
output(B);
output(C);
output(D);
setTimer(mytimer,50);
}
Второй код
/*@!Encoding:1252*/
includes
{
}
variables
{
message 0x100 A={dlc=8};
message 0x200 B={dlc=8};
message 0x300 C={dlc=8};
message 0x400 D={dlc=8};
}
on sysvar test::myButton
{
A.byte(0)=0x64;
B.byte(4)=0x32;
C.byte(6)=0x20;
D.byte(7)=0x80;
output(A);
output(B);
output(C);
output(D);
}
Как уже упоминалось, когда я нажимаю кнопку, он должен периодически отправлять кадры CAN. Но проблема в том, что я не могу вызвать функцию внутри функции, как показано ниже:
on start
{
on sysvar test::myButton
{
....
}
}
пожалуйста, посоветуйте мне. благодарю вас
1 ответ
Событие on start вызывается только один раз при запуске измерения, для sysvar это также событие, просто в вашем случае оно вызывается при нажатии определенной кнопки.
Может быть, попробуйте это:
variables
{
msTimer mytimer;
message 0x100 A={dlc=8};
message 0x200 B={dlc=8};
message 0x300 C={dlc=8};
message 0x400 D={dlc=8};
}
on start // This only gets called once at measurement start
{
A.byte(0)=0x64;
B.byte(4)=0x32;
C.byte(6)=0x20;
D.byte(7)=0x80;
}
on sysvar test::myButton // Starts the timer when button is pressed
{
setTimer(mytimer,50);
}
on timer mytimer
{
output(A);
output(B);
output(C);
output(D);
setTimer(mytimer,50);
}
Однако в какой-то момент вы, вероятно, захотите снова остановить таймер, используя функцию cancelTimer, возможно, с использованием другой кнопки или нажатием клавиши. Дополнительные примеры можно найти в разделе CAPL справки CANalyzer.
Ваше требование: во-первых, установите периодический таймер на 50 мс. при нажатии кнопки. Во-вторых, выведите сообщение о событии таймера (период 50 мс). Итак, ваш код должен быть таким:
variables
{
msTimer mytimer;
message 0x100 A={dlc=8};
message 0x200 B={dlc=8};
message 0x300 C={dlc=8};
message 0x400 D={dlc=8};
}
//This only gets called once at the measurement start because you want to send the same value in each period.
on start
{
A.byte(0)=0x64;
B.byte(4)=0x32;
C.byte(6)=0x20;
D.byte(7)=0x80;
}
on sysvar test::myButton // Starts the timer when button is pressed
{
setTimer(mytimer,50);
}
on timer mytimer
{
output(A);
output(B);
output(C);
output(D);
setTimer(mytimer,50);
}