exponenta event banner

Создание пользовательских блоков CAN

Можно создавать пользовательские Receive и Transmit блоки для использования с аппаратными средствами, которые в настоящее время не поддерживаются Toolbox™ сети транспортных средств. Выберите один из следующих потоков работ.

Блоки, использующие шины Simulink

Для создания пользовательских блоков для панели инструментов сети транспортных средств, использующих шины Simulink CAN, можно использовать построитель S-функций. Полные инструкции по построению S-функций и блоков таким образом см. в разделе Использование сигнала шины с построителем S-функций для создания S-функции (Simulink). В следующем примере используются шаги, описанные в этом разделе.

В этом примере показано, как построить два пользовательских блока для передачи и приема CAN-сообщений. Эти блоки используют шину сообщений Simulink для взаимодействия с блоками CAN Pack и CAN Unpack.

  1. Создайте шину сообщений Simulink в рабочем пространстве MATLAB для CAN или CAN FD.

    canMessageBusType

    или

    canFDMessageBusType

    Каждая из этих функций создает переменную в рабочей области с именем CAN_MESSAGE_BUS или CAN_FD_MESSAGE_BUSсоответственно. Эта переменная используется позже для создания S-функций.

  2. Откройте новую пустую модель в Simulink и добавьте в модель блок S-Function Builder (Simulink) из библиотеки блоков.

  3. Дважды щелкните блок S-Function Builder, чтобы открыть его диалоговое окно. Первая функция, которую вы создаете, предназначена для передачи.

  4. Среди настроек в диалоговом окне определите имя функции и укажите использование шины Simulink.

    • Имя S-функции: CustomCANTransmit

    • Свойства данных: Входные порты: Шина: On, Имя шины: CAN_MESSAGE_BUS, как показано на следующем рисунке.

      Port and parameter properties in the S-function builder block

      Для CAN FD установите имя шины в CAN_FD_MESSAGE_BUS.

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

  5. Щелкните Сборка. Файлы кода помещаются в текущую рабочую папку MATLAB.

  6. Поместите в модель новый блок S-Function Builder и повторите шаги для создания S-функции с именем CustomCANReceive. Используйте те же настройки, за исключением портов ввода и вывода. Выходной порт блока приема использует то же имя шины, что и вход функции передачи.

  7. Создайте функцию приема и удалите оба блока S-Function Builder из модели. На этом этапе можно использовать файлы, созданные S-Function Builder, в качестве набора шаблонов, которые можно дополнительно редактировать и компилировать с помощью собственных инструментов. Кроме того, для выполнения функций можно использовать блоки S-Function (Simulink).

  8. Добавьте в модель два S-функциональных блока. Откройте каждый блок и задайте его поле Имя S-функции параметров модели (Model Parameters S-function name), чтобы иметь по одному из параметров CustomCANTransmit и CustomCANReceive.

    На этом этапе можно создать маску для каждого блока, чтобы обеспечить доступ к параметрам оборудования. В этом примере маски для этих блоков не нужны.

  9. Добавьте в модель другие необходимые блоки, включая:

  10. Задайте параметры блока и соединения.

    Типичная модель может выглядеть так. Здесь блок константы (Simulink) и блок дисплея (Simulink) позволяют проверить соединения и поведение модели.

    Custom transmit and receive blocks in a model

Блоки, использующие типы данных сообщений CAN

Примечание

Для упрощения проектирования и использования преимуществ или нескольких функций Simulink рекомендуется по возможности использовать шины Simulink вместо типов данных сообщений CAN. См. раздел Блоки, использующие шины Simulink.

Для создания собственных блоков для использования с другими блоками панели инструментов сети транспортных средств можно использовать пользовательский тип данных CAN. Зарегистрируйте этот пользовательский тип данных CAN в C++ S-функции.

Примечание

Необходимо использовать S-функцию типа файла C++ (.cpp) для создания пользовательских блоков, использующих типы данных сообщений CAN. Использование S-функции типа C-файла (.c) может вызвать ошибки компоновщика.

Для регистрации и использования пользовательского типа данных CAN в функции S:

  1. Определите IMPORT_SCANUTIL идентификатор, который импортирует требуемые символы при компиляции S-функции:

    #define IMPORT_SCANUTIL
  2. Включить can_datatype.h заголовок расположен вmatlabroot\toolbox\vnt\vntblks\include\candatatype в верхней части S-функции:

    #include "can_datatype.h"

    Примечание

    Заголовок can_message.h включены can_datatype.h находится в matlabroot\toolbox\shared\can\src\scanutil\. См. раздел can_message.h для получения информации о CAN_MESSAGE и CAN_DATATYPE конструкции.

  3. Свяжите свою S-функцию во время сборки с scanutil.lib расположен в matlabroot\toolbox\vnt\vntblks\lib\ARCH папка. Общая библиотека scanutil.dll, находится в matlabroot\bin\ARCH

  4. Вызвать эту функцию в mdlInitializeSizes (Simulink) для инициализации пользовательского типа данных CAN:

    mdlInitialize_CAN_datatype(S);
  5. Получение пользовательского идентификатора типа данных с помощью ssGetDataTypeId (Simulink):

    dataTypeID = ssGetDataTypeId(S,SL_CAN_MESSAGE_DTYPE_NAME);
  6. Выполните одно из следующих действий:

    • Чтобы создать блок приема, установите тип данных выходного порта в CAN_MESSAGE:

      ssSetOutputPortDataType(S,portID,dataTypeID);
    • Для создания блока передачи установите входной порт в значение CAN_MESSAGE:

      ssSetInputPortDataType(S,portID,dataTypeID);

См. также

Функции

Связанные темы