Программирование CAPL CANoe (Canoe Series 3) «Рекомендуемая коллекция»
Программирование CAPL CANoe (Canoe Series 3) «Рекомендуемая коллекция»

Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.

CAPL-программирование CANoe (CANoe серии 3)

1. Обзор CAPL

«С Vspy'C Code Interface» тот же; при использовании CANoe,То же самое предусмотрено и для нас.Вторичная разработка программированияинструменты——”CAPL Browser”。проходитьCAPLпрограммирование,мы можемксуществовать Выполнение более сложных функциональных требований к узлу。Операция заключается в следующем:существоватьCANoeИнженерное дело”Simulation Setup”в левой части интерфейсасетевой узелсередина,НажмитеЗначок в форме карандаша,Войдите в интерфейс редактирования CAPL (если для текущего узла не создана соответствующая программа CAPL),Затем вам будет предложено сначала ввести имя программы CAPL.,иСохранить как файл с суффиксом .can.

1.1. Особенности языка CAPL.

  • CAPL(Communication Access Programming Laguage)языкдаC-подобный язык,Синтаксис на самом деле очень похож на Cязык.,Но он также содержит некоторые функции C++.,нравитьсяэтот указатель, событиеждать;
  • Применить к вектору Программирование узла инструмента CAN основано на моделировании событий;
  • Можно использоватьфункция записи()Отладка,Используется для вывода отладочной информации в окно записи CANoe;
  • проходитьФункция вывода() отправляет указанное сообщение
  • Обычно события переменных среды связываются с панелью CANoe для обеспечения взаимодействия;
  • Предоставьте методы для вызова файлов dll.(Операцию см.”Об операции вызова dll в CAPL“одно предложение);Это гарантирует, что другойязык Вызов инкапсулированных программных модулей;

1.2. Структура программы CAPL.

следующее,полныйCAPLВ структуру программы входятЗаголовочные файлы, глобальные переменные, функции событий, пользовательские функции;когда В противном случаеда Каждый фактор должен бытьиметь,Зависит от конкретных функций программы.

1.3. Тип данных CAPL.

1.4. Обзор типов событий CAPL.

CAPL — это язык, основанный на моделировании событий. Из введения в структуру программы CAPL в разделе 1.2 видно, что использование CAPL в основном связано с использованием следующих его часто используемых событий;

Далее мы представим несколько типов событий CAPL.

2. Тип события CAPL

2.1. Системные события.

В системном событии CAPL,иметьpreStart、start、preStop、stopMeasurementэтот4добрый。мы можемкпо мере необходимостисуществовать Соответствующий интерфейс функции системных событийсередина Определите, что вы хотите сделать;когдаПри запуске проекта порядок возникновения следующих системных событий следующий:

Язык кода:javascript
копировать
preStart-->start-->preStop-->stopMeasurement

О системных событияхФормат определения следующий

Язык кода:javascript
копировать
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");
}

2.2. События CAN-контроллера

Выполняется, когда аппаратное обеспечение обнаруживает, что соответствующее действие происходит на контроллере CAN.;кBusOffсобытие в качестве примера,Формат следующий:

Язык кода:javascript
копировать
	on busOff       /*Событие контроллера CAN: выполняется, когда оборудование обнаруживает BusOff*/
	{ 
   
	  	write("BusOff Error!");
	}

2.3. Событие сообщения CAN

проходить”on message”Определить события сообщения,Это событие будетВызывается при получении указанного сообщения。О новостных событияхПример формата определения следующий:

Язык кода:javascript
копировать
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) осуществляется следующим образом:

Язык кода:javascript
копировать
void TxMsg_VoiceStatus(void) 
{ 
   
    message VoiceStatus msg;         /*Назовите сообщение VoiceStatus, определенное в dbc в проекте msg*/
    msg.VoiceType = @VoiceType;      /*В соответствии с сигналом, назначенным сообщению, вызовите его через псевдоним сообщения «msg».*/
    msg.VoiceOperation = @VoiceOperation;
    output(msg);                     /*Отправляем сообщение через команду вывода*/
}

Также возможнокпрямойЧтобы работать в соответствии с типом данных (msg.byte(0)), операция выглядит следующим образом:

Язык кода:javascript
копировать
void TxMsg_VoiceStatus(void) 
{ 
   
    message VoiceStatus msg;         /*Назовите сообщение VoiceStatus, определенное в dbc в проекте msg*/
    msg.byte(0) = @VoiceType;        /*Первый байт данных сообщения*/
    msg.word(1) = @VoiceOperation; ; /*Слово (2 байта), начиная с первого байта сообщения*/
    output(msg);                     /*Отправляем сообщение через команду вывода*/
}

2.4. События клавиатуры.

проходить”on key”Определить события клавиатуры,Это событие будетсуществоватьнасВыполняется при нажатии указанной клавиши;особытие клавиатурыПример формата определения следующий:

Язык кода:javascript
копировать
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”);
}

2.5. Временные события.

проходить”on timer”Определить временные события;Это событие будетВыполнить, когда наступит установленное время。особытие времениФормат определения и примеры использования следующие:

Язык кода:javascript
копировать
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 мс*/
}

2.6. Событие кадра ошибки.

проходить”on errorFrame ”Определить событие кадра ошибки;Это событие будетВыполняется, когда оборудование обнаруживает кадр ошибки。особытие кадра ошибкиПример формата определения следующий:

Язык кода:javascript
копировать
on errorFrame       /*Событие кадра ошибки: выполняется, когда оборудование обнаруживает кадр ошибки*/
{ 
   
  write("The error has occur"); 
}

2.7. События переменных среды.

проходить”on envVar”Определить события переменных среды;Это событие будетВыполняется при появлении новых входных данных для указанного значения переменной среды.(Переменные среды часто используются для связи предыдущего элемента управления панелью.,когданасПри работе с элементом управления значение связанной переменной среды изменяется, в это время будет вызываться наше событие о переменной среды в CAPL;;к На этом взаимодействие завершается)。особытие переменной средыПример формата определения следующий:

Язык кода:javascript
копировать
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.。Создание переменных средынравиться Вниз:

2.8. События системных переменных.

проходить”on sysvar”Определить события системной переменной;Это событие будетВыполняется при появлении новых входных данных для указанного значения системной переменной.,Его формат и использование в основном такие же, как и переменные среды из предыдущего раздела.;Единственная разница в том,существоватьк переменным средыдасуществоватьdbcдокументсерединаопределенный;иОпределение системных переменных следующее:: Нажмитепанель инструментов”Системные переменные в среде”;В это время интерфейснравиться Вниз,Щелкните правой кнопкой мыши на пустом месте,выбирать”New”создавать новые;существовать Появится всплывающее окно для установки параметров для вновь созданной системной переменной.。

Пример формата определения событий системных переменных выглядит следующим образом:

Язык кода:javascript
копировать
	on sysvar SysVar1	 /*Событие системной переменной: выполняется, когда указанное значение системной переменной имеет новый ввод*/
	{ 
   
	  	write("The SysVar1 is %d",@SysVar1);
	}

Заявление об авторских правах: Содержание этой статьи добровольно предоставлено пользователями Интернета, а мнения, выраженные в этой статье, представляют собой только точку зрения автора. Этот сайт предоставляет только услуги по хранению информации, не имеет никаких прав собственности и не принимает на себя соответствующие юридические обязательства. Если вы обнаружите на этом сайте какое-либо подозрительное нарушение авторских прав/незаконный контент, отправьте электронное письмо, чтобы сообщить. После проверки этот сайт будет немедленно удален.

Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/210047.html Исходная ссылка: https://javaforall.cn

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose