Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.
«С Vspy'C Code Interface» тот же; при использовании CANoe,То же самое предусмотрено и для нас.Вторичная разработка программированияинструменты——”CAPL Browser”。проходитьCAPLпрограммирование,мы можемксуществовать Выполнение более сложных функциональных требований к узлу。Операция заключается в следующем:существоватьCANoeИнженерное дело”Simulation Setup”в левой части интерфейсасетевой узелсередина,НажмитеЗначок в форме карандаша,Войдите в интерфейс редактирования CAPL (если для текущего узла не создана соответствующая программа CAPL),Затем вам будет предложено сначала ввести имя программы CAPL.,иСохранить как файл с суффиксом .can.)
следующее,полныйCAPLВ структуру программы входятЗаголовочные файлы, глобальные переменные, функции событий, пользовательские функции;когда В противном случаеда Каждый фактор должен бытьиметь,Зависит от конкретных функций программы.
CAPL — это язык, основанный на моделировании событий. Из введения в структуру программы CAPL в разделе 1.2 видно, что использование CAPL в основном связано с использованием следующих его часто используемых событий;
Далее мы представим несколько типов событий CAPL.
В системном событии CAPL,иметьpreStart、start、preStop、stopMeasurementэтот4добрый。мы можемкпо мере необходимостисуществовать Соответствующий интерфейс функции системных событийсередина Определите, что вы хотите сделать;когдаПри запуске проекта порядок возникновения следующих системных событий следующий:
preStart-->start-->preStop-->stopMeasurement
О системных событияхФормат определения следующий:
on preStart /*Системные события, выполняемые во время инициализации*/
{
resetCan(); /*Функция интерфейса CAPL, используемая для сброса контроллера CAN*/
}
on start /*Системные события, выполняемые при запуске проекта*/
{
write(“Just A Try”); /*функция записи() выводит информацию о строке в окно «записи»*/
}
on preStop /*Системное событие, выполняемое при остановке подготовки проекта, происходит до события stopMeasurement*/;
{
write("The Project Will Stop!”);
}
on stopMeasurement /*Системное событие, выполняемое при остановке проекта*/
{
write("The End!\n");
}
Выполняется, когда аппаратное обеспечение обнаруживает, что соответствующее действие происходит на контроллере CAN.;кBusOffсобытие в качестве примера,Формат следующий:
on busOff /*Событие контроллера CAN: выполняется, когда оборудование обнаруживает BusOff*/
{
write("BusOff Error!");
}
проходить”on message”Определить события сообщения,Это событие будетВызывается при получении указанного сообщения。О новостных событияхПример формата определения следующий::
on message 123 /*Выполняется при получении сообщения с идентификатором 123 (десятичный)*/
on message 0x441 /*Выполняется при получении сообщения с идентификатором 0x441 (шестнадцатеричный)*/
on message BCM /*Выполнить при получении сообщения BCM (имя сообщения в файле dbc проекта)*/
on message* /*Выполняется при получении любого сообщения (обратите внимание, что между * и сообщением нет пробела)*/
on message 0x300-0x444 /*Выполнить при получении сообщения с идентификатором в этом диапазоне*/
{
write(“Received %x”,this.id); /*Распечатать идентификатор полученного сообщения*/
write(“Received Message %d in total!”,count);
}
Выше приведен формат определения событий сообщения.,оОперации индексации и отправки сообщенийнаспроходить Следующий пример представляет: гипотезаVoiceStatusданас工程dbcдокументсередина Сообщение определено,Это сообщение включает в себя два сигнала: VoiceType и VoiceOperation, где;,VoiceTypeэтотпеременные Займите первое1байты;VoiceOperationЗаймите первое2、3байты;ноЧто касается индекса сообщения, то операция через сигнал сообщения (msg.VoiceType) осуществляется следующим образом::
void TxMsg_VoiceStatus(void)
{
message VoiceStatus msg; /*Назовите сообщение VoiceStatus, определенное в dbc в проекте msg*/
msg.VoiceType = @VoiceType; /*В соответствии с сигналом, назначенным сообщению, вызовите его через псевдоним сообщения «msg».*/
msg.VoiceOperation = @VoiceOperation;
output(msg); /*Отправляем сообщение через команду вывода*/
}
Также возможнокпрямойЧтобы работать в соответствии с типом данных (msg.byte(0)), операция выглядит следующим образом::
void TxMsg_VoiceStatus(void)
{
message VoiceStatus msg; /*Назовите сообщение VoiceStatus, определенное в dbc в проекте msg*/
msg.byte(0) = @VoiceType; /*Первый байт данных сообщения*/
msg.word(1) = @VoiceOperation; ; /*Слово (2 байта), начиная с первого байта сообщения*/
output(msg); /*Отправляем сообщение через команду вывода*/
}
проходить”on key”Определить события клавиатуры,Это событие будетсуществоватьнасВыполняется при нажатии указанной клавиши;особытие клавиатурыПример формата определения следующий::
on key ‘a’ /*В методе ввода в нижнем регистре выполнение выполняется при нажатии клавиши «A» на клавиатуре*/
on key ‘A’ /*При использовании метода ввода в верхнем регистре выполнение выполняется при нажатии клавиши «A» на клавиатуре*/
on key ‘ ’ /*Выполняется при нажатии клавиши пробела на клавиатуре. Обратите внимание, что между одинарными кавычками стоит пробел*/
on key 0x20 /*Выполняется при нажатии клавиши пробела на клавиатуре*/
on key F2 /*Выполняется при нажатии клавиши «F2» на клавиатуре*/
on key CtrlF3 /*Выполнить при одновременном нажатии клавиш «Ctrl» и «F3» на клавиатуре*/
on key* /*Он будет выполнен при нажатии любой клавиши на клавиатуре (обратите внимание, что между * и клавишей нет пробела) */
{
write(“The Key Is Press”);
}
проходить”on timer”Определить временные события;Это событие будетВыполнить, когда наступит установленное время。особытие времениФормат определения и примеры использования следующие::
variables
{
msTimer Timer1; /*Объявляем переменную таймера Timer1 в мс в переменных*/
}
on start
{
setTimer(Timer1,100); /*Установим время таймера Timer1 на 100 мс и запустим его*/
}
on timer Timer1 /*Определенное событие времени Timer1 выполняется каждые 100 мс*/
{
setTimer(Timer1,100); /*Начало следующего цикла*/
}
on key ‘a‘ /*Событие клавиатуры, выполняемое при нажатии клавиши «A» на клавиатуре*/
{
cancelTimer(Timer1); /*Stop Timer1, таймер, который срабатывает каждые 100 мс*/
}
проходить”on errorFrame ”Определить событие кадра ошибки;Это событие будетВыполняется, когда оборудование обнаруживает кадр ошибки。особытие кадра ошибкиПример формата определения следующий::
on errorFrame /*Событие кадра ошибки: выполняется, когда оборудование обнаруживает кадр ошибки*/
{
write("The error has occur");
}
проходить”on envVar”Определить события переменных среды;Это событие будетВыполняется при появлении новых входных данных для указанного значения переменной среды.(Переменные среды часто используются для связи предыдущего элемента управления панелью.,когданасПри работе с элементом управления значение связанной переменной среды изменяется, в это время будет вызываться наше событие о переменной среды в CAPL;;к На этом взаимодействие завершается)。особытие переменной средыПример формата определения следующий::
on envVar BCM_HightBeamAlarm /*Событие переменной среды: выполняется при вводе указанного значения переменной среды*/
{
byte num=0;
num = getValue(this); /*Вы можете использовать getValue (имя переменной среды/это ключевое слово) для получения значения указанной переменной среды*/
if(num == 1)
{
write("The envVar is %d",@BCM_HightBeamAlarm);
}
else
{
putValue(this,1);/*Используйте putValue (имя переменной среды/это ключевое слово, заданное значение), чтобы изменить значение указанной переменной среды, если она назначена напрямую, формат @BCM_HightBeamAlarm; = 1; */
write("Change envVar to %d",@BCM_HightBeamAlarm);
}
}
Что касается работы переменных среды в CAPL,getValue() и putValue() — часто используемые интерфейсные функции.。Формат его функциинравиться Вниз,Конкретные введения и примеры также можно вызвать с помощью волшебной клавиши «F1» для вызова справочного документа.,Изучите соответствующие главы «КАПЛ».
Ps:оОпределение переменных среды завершается в файле dbc; проект CANoe может использовать переменные среды, определенные путем импорта файла dbc.。Создание переменных средынравиться Вниз:
проходить”on sysvar”Определить события системной переменной;Это событие будетВыполняется при появлении новых входных данных для указанного значения системной переменной.,Его формат и использование в основном такие же, как и переменные среды из предыдущего раздела.;Единственная разница в том,существоватьк переменным средыдасуществоватьdbcдокументсерединаопределенный;иОпределение системных переменных следующее:: Нажмитепанель инструментов”Системные переменные в среде”;В это время интерфейснравиться Вниз,Щелкните правой кнопкой мыши на пустом месте,выбирать”New”создавать новые;существовать Появится всплывающее окно для установки параметров для вновь созданной системной переменной.。
Пример формата определения событий системных переменных выглядит следующим образом:
on sysvar SysVar1 /*Событие системной переменной: выполняется, когда указанное значение системной переменной имеет новый ввод*/
{
write("The SysVar1 is %d",@SysVar1);
}
Заявление об авторских правах: Содержание этой статьи добровольно предоставлено пользователями Интернета, а мнения, выраженные в этой статье, представляют собой только точку зрения автора. Этот сайт предоставляет только услуги по хранению информации, не имеет никаких прав собственности и не принимает на себя соответствующие юридические обязательства. Если вы обнаружите на этом сайте какое-либо подозрительное нарушение авторских прав/незаконный контент, отправьте электронное письмо, чтобы сообщить. После проверки этот сайт будет немедленно удален.
Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/210047.html Исходная ссылка: https://javaforall.cn