Можно создать пользовательский Receive
и Transmit
блоки, чтобы использовать с оборудованием, в настоящее время не поддержанным Vehicle Network Toolbox™. Выберите один из следующих потоков операций.
Блоки Используя (рекомендуемые) Шины Simulink — шина Use Simulink® сигнализируют, чтобы соединить блоки. Создайте функции и блоки с Разработчиком S-функции и Блоками s-function.
Блоки Используя Типы данных сообщения CAN — типы данных сообщения CAN Использования, чтобы поделиться информацией. Запишите и скомпилируйте свой собственный Код С++, чтобы задать функции и код MATLAB®, чтобы создать блоки.
Чтобы создать пользовательские блоки для Vehicle Network Toolbox, которые используют шины CAN Simulink, можно использовать разработчика S-функции. Для полных инструкций относительно создания S-функций и блоков этот путь, смотрите S-функции Сборки Автоматически (Simulink). Следующий пример использует шаги, обрисованные в общих чертах в той теме.
Этот пример показывает вам, как создать два пользовательских блока для передачи и получения сообщений CAN. Эти блоки используют шину сообщения Simulink, чтобы взаимодействовать с Пакетом CAN, и CAN Распаковывают блоки.
Создайте шину сообщения Simulink в рабочем пространстве MATLAB для CAN или CAN FD.
canMessageBusType
или
canFDMessageBusType
Каждая из этих функций создает переменную в рабочей области под названием CAN_MESSAGE_BUS
или CAN_FD_MESSAGE_BUS
, соответственно. Вы используете эту переменную позже в создании ваших S-функций.
Откройте новую пустую модель в Simulink и добавьте в вашу модель блок S-Function Builder из библиотеки блоков.
Дважды кликните блок S-Function Builder, чтобы открыть его диалоговое окно. Первая функция, которую вы создаете, для передачи.
Среди настроек в диалоговом окне задайте имя функции и задайте использование шины Simulink.
S-имя-функции: CustomCANTransmit
Свойства данных: Input port: шина: On
, Имя шины: CAN_MESSAGE_BUS
, как показано в следующем рисунке.
Для CAN FD, определенного имя шины к CAN_FD_MESSAGE_BUS
.
В вашей функции и создании блока, используйте другие вкладки в диалоговом окне, чтобы задать код для взаимодействия с вашим драйвером устройства и удалить ненужные порты.
Нажмите Build. Файлы кода помещаются в текущую рабочую папку MATLAB.
Поместите новый блок S-Function Builder в свою модель и повторите шаги, чтобы создать S-функцию-с-именем CustomCANReceive. Используйте те же настройки, за исключением портов ввода и вывода. Получить выходной порт блока использует то же имя шины в качестве входного параметра функции передачи.
Создайте получить функцию и удалите обоих Разработчиков S-функции блоки из вашей модели. На данном этапе можно использовать файлы, сгенерированные Разработчиком S-функции как набор шаблонов, которые можно далее отредактировать и скомпилировать с собственными инструментами. В качестве альтернативы можно использовать блоки S-Function, чтобы запустить функции.
Добавьте два блока S-Function в свою модель. Откройте каждый блок и установите его поле S-имени-функции Параметров модели, таким образом, у вас есть один каждый из CustomCANTransmit и CustomCANReceive.
В этой точке вы могли создать маску для каждого блока, чтобы предоставить доступ к параметрам для вашего оборудования. Для этого примера не нужны маски для этих блоков.
Добавьте другие необходимые блоки в свою модель, включая:
Установите параметры блоков и связи.
Типичная сила модели выглядит так. Здесь блок Constant и блок Display позволяют верификацию связей и поведения модели.
Для простоты проекта и воспользоваться преимуществом или больше функций Simulink, рекомендуется, чтобы вы использовали шины Simulink вместо типов данных сообщения CAN, если это возможно. Смотрите, что Блоки Используют Шины Simulink.
Чтобы создать ваши собственные блоки для использования с другими блоками Vehicle Network Toolbox, может использовать пользовательский тип данных CAN. Укажите этот пользовательский тип данных CAN в S-функции C++.
Необходимо использовать S-функцию типа файла C++ (.cpp
) создать пользовательские блоки то сообщение CAN использования типы данных. Используя S-функцию C-типа-файла (.c
) может вызвать ошибки компоновщика.
Указывать и использовать пользовательский тип данных CAN, в вашей S-функции:
Задайте IMPORT_SCANUTIL
идентификатор, который импортирует необходимые символы, когда вы компилируете S-функцию:
#define IMPORT_SCANUTIL
Включайте can_datatype.h
заголовок расположенный in
во главе S-функции:matlabroot
\toolbox\vnt\vntblks\include\candatatype
#include "can_datatype.h"
Заголовок can_message.h
включенный can_datatype.h
расположен в
. Смотрите matlabroot
\toolbox\shared\can\src\scanutil\can_message.h
файл для получения информации о CAN_MESSAGE
и CAN_DATATYPE
структуры.
Соедините свою S-функцию во время сборки к scanutil.lib
расположенный в
папка. Разделяемая библиотека matlabroot
\toolbox\vnt\vntblks\lib\ARCH
scanutil.dll
, расположен в matlabroot
\bin\ARCH
Вызовите эту функцию в mdlInitializeSizes
инициализировать пользовательский тип данных CAN:
mdlInitialize_CAN_datatype(S);
Получите ID пользовательского типа данных с помощью ssGetDataTypeId
:
dataTypeID = ssGetDataTypeId(S,SL_CAN_MESSAGE_DTYPE_NAME);
Выполнить одно из следующих действий:
Чтобы создать получить блок, установите тип данных выходного порта на CAN_MESSAGE
:
ssSetOutputPortDataType(S,portID,dataTypeID);
Чтобы создать блок передачи, установите входной порт на CAN_MESSAGE
:
ssSetInputPortDataType(S,portID,dataTypeID);