Можно создавать пользовательские Receive и Transmit блоки для использования с аппаратными средствами, которые в настоящее время не поддерживаются Toolbox™ сети транспортных средств. Выберите один из следующих потоков работ.
Блоки, использующие шины Simulink (рекомендуется) - используйте сигналы шины Simulink ® для подключения блоков. Создайте функции и блоки с блоками S-Function Builder и S-Function.
Блоки с использованием типов данных сообщений CAN - использование типов данных сообщений CAN для совместного использования информации. Запишите и скомпилируйте собственный код C++ для определения функций и код MATLAB ® для создания блоков.
Для создания пользовательских блоков для панели инструментов сети транспортных средств, использующих шины Simulink CAN, можно использовать построитель S-функций. Полные инструкции по построению S-функций и блоков таким образом см. в разделе Использование сигнала шины с построителем S-функций для создания S-функции (Simulink). В следующем примере используются шаги, описанные в этом разделе.
В этом примере показано, как построить два пользовательских блока для передачи и приема CAN-сообщений. Эти блоки используют шину сообщений Simulink для взаимодействия с блоками CAN Pack и CAN Unpack.
Создайте шину сообщений Simulink в рабочем пространстве MATLAB для CAN или CAN FD.
canMessageBusType
или
canFDMessageBusType
Каждая из этих функций создает переменную в рабочей области с именем CAN_MESSAGE_BUS или CAN_FD_MESSAGE_BUSсоответственно. Эта переменная используется позже для создания S-функций.
Откройте новую пустую модель в Simulink и добавьте в модель блок S-Function Builder (Simulink) из библиотеки блоков.
Дважды щелкните блок S-Function Builder, чтобы открыть его диалоговое окно. Первая функция, которую вы создаете, предназначена для передачи.
Среди настроек в диалоговом окне определите имя функции и укажите использование шины Simulink.
Имя S-функции: CustomCANTransmit
Свойства данных: Входные порты: Шина: On, Имя шины: CAN_MESSAGE_BUS, как показано на следующем рисунке.

Для CAN FD установите имя шины в CAN_FD_MESSAGE_BUS.
В построении функций и блоков используйте другие вкладки диалогового окна, чтобы определить код для взаимодействия с драйвером устройства и удалить ненужные порты.
Щелкните Сборка. Файлы кода помещаются в текущую рабочую папку MATLAB.
Поместите в модель новый блок S-Function Builder и повторите шаги для создания S-функции с именем CustomCANReceive. Используйте те же настройки, за исключением портов ввода и вывода. Выходной порт блока приема использует то же имя шины, что и вход функции передачи.
Создайте функцию приема и удалите оба блока S-Function Builder из модели. На этом этапе можно использовать файлы, созданные S-Function Builder, в качестве набора шаблонов, которые можно дополнительно редактировать и компилировать с помощью собственных инструментов. Кроме того, для выполнения функций можно использовать блоки S-Function (Simulink).
Добавьте в модель два S-функциональных блока. Откройте каждый блок и задайте его поле Имя S-функции параметров модели (Model Parameters S-function name), чтобы иметь по одному из параметров CustomCANTransmit и CustomCANReceive.
На этом этапе можно создать маску для каждого блока, чтобы обеспечить доступ к параметрам оборудования. В этом примере маски для этих блоков не нужны.
Добавьте в модель другие необходимые блоки, включая:
Задайте параметры блока и соединения.
Типичная модель может выглядеть так. Здесь блок константы (Simulink) и блок дисплея (Simulink) позволяют проверить соединения и поведение модели.

Примечание
Для упрощения проектирования и использования преимуществ или нескольких функций Simulink рекомендуется по возможности использовать шины Simulink вместо типов данных сообщений CAN. См. раздел Блоки, использующие шины Simulink.
Для создания собственных блоков для использования с другими блоками панели инструментов сети транспортных средств можно использовать пользовательский тип данных CAN. Зарегистрируйте этот пользовательский тип данных CAN в C++ S-функции.
Примечание
Необходимо использовать S-функцию типа файла C++ (.cpp) для создания пользовательских блоков, использующих типы данных сообщений CAN. Использование S-функции типа C-файла (.c) может вызвать ошибки компоновщика.
Для регистрации и использования пользовательского типа данных CAN в функции S:
Определите IMPORT_SCANUTIL идентификатор, который импортирует требуемые символы при компиляции S-функции:
#define IMPORT_SCANUTIL
Включить can_datatype.h заголовок расположен в в верхней части 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\ARCHscanutil.dll, находится в matlabroot\bin\ARCH
Вызвать эту функцию в mdlInitializeSizes (Simulink) для инициализации пользовательского типа данных CAN:
mdlInitialize_CAN_datatype(S);
Получение пользовательского идентификатора типа данных с помощью ssGetDataTypeId (Simulink):
dataTypeID = ssGetDataTypeId(S,SL_CAN_MESSAGE_DTYPE_NAME);
Выполните одно из следующих действий:
Чтобы создать блок приема, установите тип данных выходного порта в CAN_MESSAGE:
ssSetOutputPortDataType(S,portID,dataTypeID);
Для создания блока передачи установите входной порт в значение CAN_MESSAGE:
ssSetInputPortDataType(S,portID,dataTypeID);