Создайте транспортный слой для связи TCP/IP или последовательного режима external mode

Этот раздел помогает вам соединить пользовательский целевой объект с помощью режима external mode с использованием собственного низкоуровневого слоя связи. Темы включают:

  • Обзор проекта и операции режима external mode

  • Описание исходных файлов режима external mode

  • Инструкции по изменению исходных файлов режима external mode и созданию исполняемого файла для обработки задач по умолчанию ext_comm Файл MEX

Этот раздел принимает, что вы знакомы с выполнением Simulink® Coder™ программы, и с основной операцией режима external mode.

Проект режима external mode

Связь в режиме external mode между механизмом Simulink и целевой системой основана на архитектуре клиент/сервер. Клиент (механизм Simulink) передает сообщения, запрашивающие сервер (цель) принять изменения параметра или загрузить данные сигнала. Сервер отвечает, выполняя запрос.

Низкоуровневый транспортный слой обрабатывает физическую передачу сообщений. И механизм Simulink, и код модели не зависят от этого слоя. Транспортный слой и код, непосредственно взаимодействующие с транспортным слоем, изолированы в отдельных модулях, которые форматируют, передают и принимают сообщения и пакеты данных.

Этот проект позволяет различным целям использовать различные транспортные слои. Целевые устройства GRT, ERT и RSim поддерживают коммуникацию хоста/цели с помощью TCP/IP и RS-232 (последовательной) связи. Целевой объект Real-Time™ Simulink Desktop поддерживает обмен общей памятью. The Wind River® Системы Торнадо® целевой объект поддерживает только TCP/IP.

Продукт Simulink Coder предоставляет полный исходный код как для клиентских, так и для серверных модулей режима external mode, как используется целями GRT, ERT, Rapid Simulation и Tornado, а также продуктами Simulink Desktop Real-Time и Simulink Real-Time™. Основным модулем на стороне клиента является ext_comm.c. Основной серверный модуль ext_svr.c.

Эти два модуля вызывают указанный транспортный слой через следующие исходные файлы.

Встроенные реализации транспортного слоя

Для последовательной связи модули ext_serial_transport.c и rtiostream_serial.c реализуйте транспортные функции на стороне клиента и модули ext_svr_serial_transport.c и rtiostream_serial.c реализуйте соответствующие серверные функции. Для связи TCP/IP модули rtiostream_interface.c и rtiostream_tcpip.c реализуйте функции на стороне клиента и на стороне сервера. Можно редактировать копии этих файлов (но не изменять оригиналы). Можно поддерживать режим external mode с помощью собственного низкоуровневого слоя связи путем создания аналогичных файлов с помощью следующих шаблонов:

The rtiostream_interface.c файл является интерфейсом между протоколом режима external mode и rtiostream канал связи. Для получения дополнительной информации о реализации и проверке rtiostream канал связи, см.:

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

Примечание

Не изменяйте рабочие исходные файлы. Используйте шаблоны, указанные в /custom или /rtiostream папка как начальные точки, руководствуясь комментариями внутри них.

Вам нужен только код, который реализует низкоуровневые коммуникации. Вы не должны беспокоиться о таких проблемах, как преобразование данных между хостом и объектом, или о форматировании сообщений. Программа Simulink Coder обрабатывает эти функции.

На стороне клиента (механизм Simulink) связь обрабатывается ext_comm (для TCP/IP) и ext_serial_win32_comm (для последовательных) файлов MEX.

На серверной (целевой) стороне модули режима external mode соединяются в целевой исполняемый файл. Это происходит автоматически во время генерации кода, если вы выбираете External mode и основано на Transport layer опции, которую вы задаете. Модули, вызываемые из основной программы и механизма выполнения модели, независимы от сгенерированного кода модели.

Общая процедура реализации низкоуровневого транспортного протокола на стороне клиента заключается в следующем:

  1. Отредактируйте шаблон rtiostream_tcpip.c заменить низкоуровневые коммуникационные вызовы на собственные коммуникационные вызовы.

  2. Сгенерируйте исполняемый файл MEX для пользовательского транспорта.

  3. Зарегистрируйте новый транспортный слой в программном обеспечении Simulink, чтобы перенос мог быть выбран для модели с помощью панели Interface диалогового окна Параметры конфигурации.

Дополнительные сведения см. в разделе Создание транспортного протокола пользовательского клиента (хоста).

Общая процедура реализации низкоуровневого транспортного протокола на стороне сервера заключается в следующем:

  1. Отредактируйте шаблон rtiostream_tcpip.c заменить низкоуровневые коммуникационные вызовы на собственные коммуникационные вызовы. Обычно это включает запись или интеграцию драйверов устройств для вашего целевого компьютера.

  2. Измените файлы make-файлов шаблона для поддержки нового транспорта.

Дополнительные сведения см. в разделе Создание пользовательского транспортного протокола сервера (целевого).

Обзор связи во режиме external mode

В этом разделе дается высокоуровневый обзор того, как сгенерированная Simulink Coder программа общается с режимом external mode Simulink. Это описание основано на версии TCP/IP режима external mode, которая поставляется с продуктом Simulink Coder.

Для осуществления связи должна выполняться как серверная (целевая) программа, так и программное обеспечение Simulink. Это не означает, что код модели в серверной системе должен выполняться. Сервер может ждать, когда механизм Simulink выдаст команду для запуска выполнения модели.

Клиент и сервер взаимодействуют с помощью двунаправленных сокетов, несущих пакеты. Пакеты состоят из сообщений (команды, загрузки параметров и отклики) или данных (загрузка сигналов).

Если целевое приложение было активировано с помощью -w опция командной строки, программа входит в состояние ожидания, пока не получит сообщение от хоста. В противном случае программа начинает выполнение модели. Пока целевое приложение находится в состоянии ожидания, механизм Simulink может загружать параметры в целевое приложение и конфигурировать загрузку данных.

Когда пользователь выбирает опцию Connect to Target из меню Simulation, хост инициирует квитирование путем отправки EXT_CONNECT message. Сервер отвечает информацией о себе. Эта информация включает

  • Контрольные суммы. Хост использует контрольные суммы модели, чтобы определить, что целевой код является точным представлением текущей модели Simulink.

  • Информация о формате данных. Хост использует эту информацию при форматировании данных, которые нужно загрузить, или при интерпретации данных, которые были загружены.

На данной точке хост и сервер подключены. Сервер либо выполняет модель, либо находится в состоянии ожидания. (В последнем случае пользователь может начать выполнение модели, выбрав Start Real-Time Code из меню Simulation.)

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

Загрузка данных включает в себя как выполнение переднего плана, так и фоновое обслуживание пакетов сигналов. Когда цель вычисляет выходы модели, она также копирует значения сигналов в буферы загрузки данных. Это происходит как часть задачи, связанной с каждым идентификатором задачи (tid). Поэтому набор данных происходит в переднем плане. Передача собранных данных, однако, происходит как фоновая задача. Фоновая задача отправляет данные в буферах набора в механизм Simulink с помощью пакетов данных.

Хост инициирует большинство обменов как сообщения. Цель обычно отправляет ответ, подтверждающий, что она получила и обработала сообщение. Примерами сообщений и команд являются:

  • Сообщение о соединении/ответ о соединении

  • Запустите симуляцию цели/запустите ответ

  • Ответ загрузки параметра/загрузки параметра

  • Триггер руки для загрузки данных триггера руки

  • Завершает симуляцию цели/ответ завершения работы цели

Выполнение модели заканчивается, когда модель достигает своего последнего времени, когда хост отправляет команду terminate или когда блок Stop Simulation прекращает выполнение. После завершения работы сервер сообщает хосту, что выполнение модели остановлено, и отключает свой сокет. Хост также отключает разъем и выходит из режима external mode.

Исходные файлы режима external mode

Исходные файлы интерфейса файлов MEX клиента (хоста)

Исходные файлы для компонента интерфейса файлов MEX расположены в папке matlabroot/ toolbox/coder/simulinkcoder_core/ext_mode/host (открыто), кроме отмеченных:

  • common/ext_comm.c

    Этот файл является ядром связи во режиме external mode. Он действует как релейная станция между целью и двигателем Simulink. ext_comm.c общается с механизмом Simulink при помощи разделяемых данных структуры, ExternalSim. Он сообщается целевому объекту при помощи вызовов на транспортном слое.

    Задачи, выполняемые ext_comm.c включают установление соединения с целевым объектом, загрузку параметров и завершение соединения с целевым объектом.

  • common/rtiostream_interface.c

    Этот файл является интерфейсом между протоколом режима external mode и rtiostream канал связи. Для получения дополнительной информации о реализации rtiostream канал связи, см. Communications rtiostream API (Embedded Coder). Реализуйте свои rtiostream коммуникационный канал с использованием документированного интерфейса, чтобы избежать необходимости изменения файла rtiostream_interface.c или другие связанные с внешним режимом файлы.

  • matlabroot/ toolbox/coder/rtiostream/src/rtiostreamtcpip/rtiostream_tcpip.c

    Этот файл реализует необходимые транспортные функции слоя TCP/IP. Версия rtiostream_tcpip.c поставляется с программным обеспечением Simulink Coder с использованием функций TCP/IP, включая recv(), send(), и socket().

  • matlabroot/ toolbox/coder/rtiostream/src/rtiostreamserial/rtiostream_serial.c

    Этот файл реализует необходимые последовательные транспортные функции слоя. Версия rtiostream_serial.c поставляется с программным обеспечением Simulink Coder с использованием последовательных функций, включая ReadFile(), WriteFile(), и CreateFile().

  • serial/ext_serial_transport.c

    Этот файл реализует необходимые последовательные транспортные функции слоя. ext_serial_transport.c включает ext_serial_utils.c, который расположен в matlabroot/ rtw/c/src/ext_mode/serial (open) и содержит функции, общие для клиентской и серверной сторон.

  • common/ext_main.c

    Этот файл является оболочкой файлов MEX для режима external mode. ext_main.c интерфейсы к движку Simulink при помощи стандартного mexFunction вызов. (См. mexFunction Страница с описанием и выбор MATLAB API для вашего приложения для получения дополнительной информации.) ext_main.c содержит диспетчер функций, esGetAction, который отправляет запросы от механизма Simulink в ext_comm.c.

  • common/ext_convert.c и ext_convert.h

    Этот файл содержит функции, используемые для преобразования данных из хоста в целевые форматы (и наоборот). Функции включают байт-обмен (большой на little-endian), преобразование из не-IEEE® с плавающей точкой в IEEE удваивается, и другие преобразования. Эти функции вызываются обеими ext_comm.c и непосредственно механизмом Simulink (при помощи указателей на функцию).

    Примечание

    Вам не нужно настраивать ext_convert для реализации пользовательского транспортного слоя. Однако можно хотеть настроить ext_convert для предполагаемой цели. Для примера, если цель представляет float тип данных в формате Instruments™ Техаса, ext_convert необходимо изменить, чтобы выполнить преобразование инструментов Техаса в IEEE.

  • common/extsim.h

    Этот файл определяет ExternalSim структура данных и доступ к макросам. Эта структура используется для связи между двигателем Simulink и ext_comm.c.

  • common/extutil.h

    Этот файл содержит только условия для компиляции assert макрос.

  • common/ext_transport.h

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

Исходные файлы сервера (Target)

Эти файлы связаны с model.exe исполняемый файл. Они расположены в пределах matlabroot/ rtw/c/src/ext_mode (открыто) за исключением указанного.

  • common/ext_svr.c

    ext_svr.c аналогично ext_comm.c на хосте, но, как правило, отвечает за больше задач. Он действует как ретрансляционная станция между хостом и сгенерированным кодом. Как ext_comm.c, ext_svr.c выполняет такие задачи, как установление и прекращение соединения с хостом. ext_svr.c также содержит функции фоновой задачи, которые либо записывают загруженные параметры в целевую модель, либо извлекают данные из целевых буферов данных и отправляют их обратно на хост.

  • common/rtiostream_interface.c

    Этот файл является интерфейсом между протоколом режима external mode и rtiostream канал связи. Для получения дополнительной информации о реализации rtiostream канал связи, см. Communications rtiostream API (Embedded Coder). Реализуйте свои rtiostream коммуникационный канал при помощи документированного интерфейса, чтобы избежать необходимости изменения файла rtiostream_interface.c или другие связанные с внешним режимом файлы.

  • matlabroot/ toolbox/coder/rtiostream/src/rtiostreamtcpip/rtiostream_tcpip.c

    Этот файл реализует необходимые транспортные функции слоя TCP/IP. Версия rtiostream_tcpip.c поставляется с программным обеспечением Simulink Coder с использованием функций TCP/IP, включая recv(), send(), и socket().

  • matlabroot/ toolbox/coder/rtiostream/src/rtiostreamserial/rtiostream_serial.c

    Этот файл реализует необходимые последовательные транспортные функции слоя. Версия rtiostream_serial.c, поставляемая вместе с программным обеспечением, использует последовательные функции, включая ReadFile(), WriteFile(), и CreateFile().

  • matlabroot/ toolbox/coder/rtiostream/src/rtiostream.h

    Этот файл определяет rtIOStream* функции, реализованные в rtiostream_tcpip.c.

  • serial/ext_svr_serial_transport.c

    Этот файл реализует необходимые последовательные транспортные функции слоя. ext_svr_serial_transport.c включает serial/ext_serial_utils.c, который содержит функции, общие для клиентской и серверной сторон.

  • common/updown.c

    updown.c обрабатывает детали взаимодействия с целевой моделью. Во время загрузки параметров, updown.c выполняет работу по установке новых параметров в вектор параметра модели. Для загрузки данных, updown.c содержит функции, которые извлекают данные из blockio модели вектор и запись данных в буферы загрузки. updown.c предоставляет услуги и тем, и другим ext_svr.c и к коду модели (для примера, grt_main.c). Он содержит код, который вызывается при помощи фоновых задач ext_svr.c а также код, который вызывается как часть выполнения модели с более высоким приоритетом.

  • matlabroot/ rtw/c/src/dt_info.h (входит в сгенерированный файл сборки модели model.h)

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

  • common/updown_util.h

    Этот файл содержит только условия для компиляции assert макрос.

  • common/ext_svr_transport.h

    Этот файл определяет Ext* функции, которые должны быть реализованы серверным (целевым) транспортным слоем.

Другие файлы в папке сервера

  • common/ext_share.h

    Содержит определения кода сообщения и другие определения, требуемые как для хоста, так и для целевого модуля.

  • serial/ext_serial_utils.c

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

  • Реализация последовательного транспорта включает дополнительные файлы

    • serial/ext_serial_pkt.c и ext_serial_pkt.h

    • serial/ext_serial_port.h

Реализация пользовательского транспортного слоя

Требования к пользовательским транспортным слоям

  • По умолчанию ext_svr.c и updown.c использовать malloc выделять буферы в целевой памяти для сообщений, набора данных и других целей, хотя существует также опция предварительного выделения статической памяти. Если ваша цель использует другую схему выделения памяти, вы должны изменить эти модули.

  • Цель принята для поддержки обоих int32_T и uint32_T типы данных.

Создайте пользовательский транспортный протокол клиента (хоста)

Для реализации клиентской (хост) стороны низкоуровневого транспортного протокола,

  1. Отредактируйте файл шаблона matlabroot/ toolbox/coder/rtiostream/src/rtiostreamtcpip/rtiostream_tcpip.c заменить низкоуровневые коммуникационные вызовы на собственные коммуникационные вызовы.

    1. Скопируйте и переименуйте файл в rtiostream_<reservedrangesplaceholder0 >.c (замена name с именем, значимым для вас).

    2. Замените функции rtIOStreamOpen, rtIOStreamClose, rtIOStreamSend, и rtIOStreamRecv с функциями (с тем же именем), которые вызывают ваши низкоуровневые примитивы связи. Эти функции вызываются из других модулей режима external mode через rtiostream_interface.c. Для получения дополнительной информации смотрите Communications rtiostream API (Embedded Coder).

    3. Создайте свой rtiostream реализация в общую библиотеку, которая экспортирует rtIOStreamOpen, rtIOStreamClose, rtIOStreamRecv и rtIOStreamSend функций.

  2. Создайте пользовательский исполняемый файл MEX с помощью MATLAB® mex функция. Смотрите команды MATLAB для восстановления ext_comm и ext_serial_win32 файлов MEX для примеров mex вызовы.

    Не заменяйте существующие ext_comm Файл MEX, если вы хотите сохранить его функциональность. Вместо этого используйте -output опция для присвоения имени новому исполняемому файлу, например my_ext_comm. Для получения дополнительной информации см. mex.

  3. Зарегистрируйте новый транспортный слой клиента в программном обеспечении Simulink, чтобы можно было выбрать транспорт для модели с помощью панели Interface диалогового окна Параметры конфигурации. Для получения дополнительной информации см. раздел Регистрация транспортного протокола пользовательского клиента (хоста).

Примеры команд для перестройки MEX-файлов внешнего режима перечислены в MATLAB Commands to Rebuild ext_comm и ext_serial_win32 MEX-файлах.

Команды MATLAB для восстановления ext_comm и ext_serial_win32 файлов MEX

В следующей таблице перечислены команды для создания стандартных ext_comm и ext_serial_win32 модули на ПК и UNIX® платформы.

Платформа

Команды

Windows®, TCP/IP

cd (matlabroot)
mex toolbox/coder/simulinkcoder_core/ext_mode/host/common/ext_comm.c ...
toolbox/coder/simulinkcoder_core/ext_mode/host/common/ext_convert.c ...
toolbox/coder/simulinkcoder_core/ext_mode/host/common/rtiostream_interface.c ...
toolbox/coder/simulinkcoder_core/ext_mode/host/common/ext_util.c ...
-R2018a ...
-Itoolbox/coder/rtiostream/src ...
-Itoolbox/coder/rtiostream/src/utils_host ...
-Itoolbox/coder/simulinkcoder_core/ext_mode/host/common/include ...
-Irtw/c/src/ext_mode/common ...
-lmwrtiostreamutils -lmwsl_services ...
-DEXTMODE_TCPIP_TRANSPORT ...
-DSL_EXT_DLL -output my_ext_comm

Примечание

rtiostream_interface.c функция определяет RTIOSTREAM_SHARED_LIB как libmwrtiostreamtcpip и динамически загружает MathWorks TCP/IP rtiostream общая библиотека. Измените этот файл, если вам нужно загрузить другой rtiostream общая библиотека.

Linux®, TCP/IP

Используйте команды Windows со следующими изменениями:

  • Изменение -DSL_EXT_DLL на -DSL_EXT_SO.

  • Замените задние косые черты на передние.

Mac, TCP/IP

Используйте команды Windows со следующими изменениями:

  • Изменение -DSL_EXT_DLL на -DSL_EXT_DYLIB.

  • Замените задние косые черты на передние.

Windows, последовательный

cd (matlabroot)
mex toolbox\coder\simulinkcoder_core\ext_mode\host\common\ext_comm.c ...
toolbox\coder\simulinkcoder_core\ext_mode\host\common\ext_convert.c ...
toolbox\coder\simulinkcoder_core\ext_mode\host\serial\ext_serial_transport.c ...
toolbox\coder\simulinkcoder_core\ext_mode\host\serial\ext_serial_pkt.c ...
toolbox\coder\simulinkcoder_core\ext_mode\host\serial\rtiostream_serial_interface.c ...
toolbox\coder\simulinkcoder_core\ext_mode\host\common\ext_util.c ...
-R2018a ...
-Itoolbox\coder\rtiostream\src ...
-Itoolbox\coder\rtiostream\src\utils_host ...
-Itoolbox\coder\simulinkcoder_core\ext_mode\host\common ...
-Itoolbox\coder\simulinkcoder_core\ext_mode\host\common\include ...
-Irtw\c\src\ext_mode\common ...
-Irtw\c\src\ext_mode\serial ...
-lmwrtiostreamutils -lmwsl_services ...
-DEXTMODE_SERIAL_TRANSPORT -DSL_EXT_DLL ...
-output my_ext_serial_comm

Примечание

rtiostream_interface.c функция определяет RTIOSTREAM_SHARED_LIB как libmwrtiostreamserial и динамически загружает последовательный MathWorks rtiostream общая библиотека. Измените этот файл, если вам нужно загрузить другой rtiostream общая библиотека.

Linux, последовательный

Используйте команды Windows со следующими изменениями:

  • Изменение -DSL_EXT_DLL на -DSL_EXT_SO.

  • Замените задние косые черты на передние.

Mac, последовательный

Используйте команды Windows со следующими изменениями:

  • Изменение -DSL_EXT_DLL на -DSL_EXT_DYLIB.

  • Замените задние косые черты на передние.

Примечание

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

Зарегистрируйте пользовательский транспортный протокол клиента (хоста)

Чтобы зарегистрировать пользовательский транспортный протокол клиента в программном обеспечении Simulink, необходимо добавить запись следующей формы в sl_customization.m файл по пути MATLAB:

function sl_customization(cm)
  cm.ExtModeTransports.add('stf.tlc', 'transport', 'mexfile', 'Level1');
% -- end of sl_customization

где

  • stf.tlc - имя системного целевого файла, для которого будет зарегистрирован транспорт (для примера, 'grt.tlc')

  • transport - транспортное имя, отображаемое в меню Transport layer на панели Interface диалогового окна Configuration Parameters (для примера, 'mytcpip')

  • mexfile - имя связанного с транспортом внешнего Файла MEX интерфейса (для примера, 'ext_mytcpip_comm')

Можно задать несколько целей и/или транспортов с дополнительными cm.ExtModeTransports.add для примера:

function sl_customization(cm)
  cm.ExtModeTransports.add('grt.tlc', 'mytcpip', 'ext_mytcpip_comm', 'Level1');
  cm.ExtModeTransports.add('ert.tlc', 'mytcpip', 'ext_mytcpip_comm', 'Level1');
% -- end of sl_customization

Если вы помещаете sl_customization.m файл, содержащий информацию о регистрации транспорта в пути MATLAB, ваш пользовательский транспортный протокол клиента будет регистрироваться в каждом последующем сеансе Simulink. Имя транспорта появится в меню Transport layer на панели Interface диалогового окна Параметры конфигурации. При выборе транспорта для модели имя связанного внешнего файла MEX интерфейса появится в поле MEX-file name с недоступностью для редактирования, как показано на следующем рисунке.

Создайте пользовательский транспортный протокол сервера (Target)

The rtIOStream* прототипы функций в matlabroot/ toolbox/coder/rtiostream/src/rtiostream.h задайте интерфейс вызова для транспортных функций слоя на стороне сервера (целевой) и на стороне клиента (хост).

Примечание

The Ext* прототипы функций в matlabroot/ rtw/c/src/ext_mode/common/ext_svr_transport.h реализованы в matlabroot/ rtw/c/src/ext_mode/common/rtiostream_interface.c или matlabroot/ rtw/c/src/ext_mode/serial/rtiostream_serial_interface.c. В большинстве случаев вам не нужно будет изменять rtiostream_interface.c или rtiostream_serial_interface.c для пользовательского TCP/IP или последовательного транспортного слоя.

Для реализации серверной (целевой) стороны низкоуровневого протокола TCP/IP или последовательного транспорта:

  1. Отредактируйте шаблон matlabroot/ toolbox/coder/rtiostream/src/rtiostreamtcpip/rtiostream_tcpip.c или matlabroot/ toolbox/coder/rtiostream/src/rtiostreamserial/rtiostream_serial.c заменить низкоуровневые коммуникационные вызовы на собственные коммуникационные вызовы.

    1. Скопируйте и переименуйте файл в rtiostream_<reservedrangesplaceholder0 >.c (замена name с именем, значимым для вас).

    2. Замените функции rtIOStreamOpen, rtIOStreamClose, rtIOStreamSend, и rtIOStreamRecv с функциями (с тем же именем), которые вызывают ваши низкоуровневые драйверы связи.

      Необходимо реализовать функции, определенные в rtiostream.h, и ваши реализации должны соответствовать прототипам, заданным в этом файле. См. оригинал rtiostream_tcpip.c или rtiostream_serial.c для руководства.

  2. Включите исходные файлы режима external mode для вашего транспортного слоя в процесс сборки модели. Используйте механизм процесса сборки, такой как команда post генерации кода или before_make функция hook для обеспечения доступности транспортных файлов для процесса сборки. Дополнительные сведения о механизмах процесса сборки см. в разделах Настройка обработки сборки после генерации кода, Настройка процесса сборки с помощью STF_make_rtw_hook файла и Настройка процесса сборки с помощью sl_customization.m.

    Для примера:

    • Добавьте файл, созданный на предыдущем шаге, к информации о сборке:

      path/rtiostream_name.c
    • Для TCP/IP добавьте следующий файл к информации о сборке:

      matlabroot/rtw/c/src/ext_mode/common/rtiostream_interface.c
    • Для последовательного использования добавьте следующие файлы к информации о сборке:

      matlabroot/rtw/c/src/ext_mode/serial/ext_serial_pkt.c
      matlabroot/rtw/c/src/ext_mode/serial/rtiostream_serial_interface.c
      matlabroot/rtw/c/src/ext_mode/serial/ext_svr_serial_transport.c

Примечание

Для режима external mode проверьте, что rtIOStreamRecv не является блокирующей реализацией. В противном случае это может привести к блокировке сервера режима external mode, пока хост не отправит данные через comm слой.

Буфер последовательного приема менее 64 байт

Для последовательной передачи, если буфер последовательного приема вашего целевого устройства меньше 64 байт:

  1. Обновите следующий макрос с фактического целевого buffer size:

    #define TARGET_SERIAL_RECEIVE_BUFFER_SIZE 64

    Реализуйте изменение в следующих файлах:

    matlabroot/rtw/c/src/ext_mode/serial/ext_serial_utils.c
    matlabroot/toolbox/coder/simulinkcoder_core/ext_mode/host/serial/ext_serial_utils.c
  2. Выполните команду, чтобы перестроить ext_serial_win32 Файл MEX. См. раздел «Команды MATLAB для восстановления ext_comm и ext_serial_win32 файлов MEX».

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте