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

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

  • Блоки Используя (рекомендуемые) шины Simulink — используют Simulink® соедините шиной сигналы соединить блоки. Создайте функции и блоки с Разработчиком S-функции и Блоками s-function.

  • Блоки Используя Типы данных сообщения CAN — типы данных сообщения CAN Использования, чтобы поделиться информацией. Запишите и скомпилируйте свой собственный Код С++, чтобы задать функции и MATLAB® код, чтобы создать блоки.

Блоки Используя шины Simulink

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

Этот пример показывает вам, как создать два пользовательских блока для передачи и получения сообщений CAN. Эти блоки используют шину сообщения Simulink, чтобы взаимодействовать с Пакетом CAN, и CAN Распаковывают блоки.

  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

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

      Port and parameter properties in the S-function builder block

      Для CAN FD, определенного имя шины к CAN_FD_MESSAGE_BUS.

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

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

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

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

  8. Добавьте два блока S-Function в свою модель. Откройте каждый блок и установите его поле S-имени-функции Параметров модели, таким образом, у вас есть один каждый из CustomCANTransmit и CustomCANReceive.

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

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

  10. Установите параметры блоков и связи.

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

    Custom transmit and receive blocks in a model

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

Примечание

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

Чтобы создать ваши собственные блоки для использования с другими блоками Vehicle Network Toolbox, может использовать пользовательский тип данных CAN. Укажите этот пользовательский тип данных CAN в S-функции C++.

Примечание

Необходимо использовать 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. Получите использование ID пользовательского типа данных ssGetDataTypeId (Simulink):

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

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

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

      ssSetInputPortDataType(S,portID,dataTypeID);

Смотрите также

Функции

Похожие темы