Создайте Транспортный уровень для 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 (последовательная) коммуникация. Цель Simulink Desktop Real-Time™ поддерживает коммуникацию общей памяти. Wind River® Системный торнадо® предназначайтесь поддерживает TCP/IP только.

Продукт Simulink Coder предоставляет полный исходный код клиенту и для модулям режима external mode серверной стороны, как используется GRT, ERT, Быстрой Симуляцией, и целями Торнадо, и продуктами Simulink Real-Time™ и Simulink Desktop 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 с помощью собственного низкоуровневого коммуникационного слоя путем создания подобных файлов с помощью следующих шаблонов:

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

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

Примечание

Не изменяйте рабочие исходные файлы. Используйте шаблоны, обеспеченные в /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 диалогового окна Configuration Parameters.

Для получения дополнительной информации смотрите, Создают Пользовательский Клиент (Хост) Транспортный протокол.

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

  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 при помощи пакетов данных.

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

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

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

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

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

  • Оконечная целевая симуляция / предназначается для ответа завершения работы

Выполнение модели завершает работу, когда модель достигает своего итогового времени, когда хост отправляет оконечную команду, или когда блок 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 коммуникационный канал, смотрите Коммуникации rtiostream API (Embedded Coder). Реализуйте свой rtiostream коммуникационный канал с помощью зарегистрированного интерфейса, чтобы избежать необходимости изменять файл rtiostream_interface.c или другие связанные с режимом external mode файлы.

  • 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 (открытый) и содержит функции, характерные для сторон клиент-сервера.

  • common/ext_main.c

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

  • common/ext_convert.c и ext_convert.h

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

    Примечание

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

  • common/extsim.h

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

  • common/extutil.h

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

  • common/ext_transport.h

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

Сервер (цель) исходные файлы

Эти файлы соединяются в 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 коммуникационный канал, смотрите Коммуникации rtiostream API (Embedded Coder). Реализуйте свой rtiostream коммуникации образовывают канал при помощи зарегистрированного интерфейса, чтобы избежать необходимости изменять файл rtiostream_interface.c или другие связанные с режимом external mode файлы.

  • 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 (включенный сгенерированным файлом сборки модели modelH)

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

  • 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_nameC (заменяющий name с именем, значимым для вас).

    2. Замените функции rtIOStreamOpen, rtIOStreamClose, rtIOStreamSend, и rtIOStreamRecv с функциями (того же имени), которые вызывают ваши низкоуровневые коммуникационные примитивы. Эти функции вызваны от других модулей режима external mode через rtiostream_interface.c. Для получения дополнительной информации смотрите Коммуникации 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 диалогового окна Configuration Parameters. Для получения дополнительной информации смотрите Регистр Пользовательский Клиент (Хост) Транспортный протокол.

Демонстрационные команды для восстановления файлов MEX режима external mode перечислены в Командах MATLAB, чтобы Восстановить ext_comm и ext_serial_win32 файлы MEX.

Команды MATLAB, чтобы Восстановить ext_comm и ext_serial_win32 файлы MEX

В следующей таблице перечислены команды для создания стандартного ext_comm и ext_serial_win32 модули на PC и 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 for Your Application для получения дополнительной информации о 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 диалогового окна Configuration Parameters. Когда вы выберете транспорт для своей модели, имя связанного внешнего интерфейсного файла MEX появится в недоступном для редактирования поле MEX-file name как показано в следующем рисунке.

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

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

Примечание

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_nameC (заменяющий name с именем, значимым для вас).

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

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

  2. Включите исходные файлы режима external mode для своего транспортного уровня в процесс сборки модели. Используйте механизм процесса сборки, такой как команда генерации кода сообщения или before_make сцепите функцию, чтобы сделать транспортные файлы доступными для процесса сборки. Для получения дополнительной информации о механизмах процесса сборки смотрите, Настраивают Обработку Сборки Постгенерации кода, Настраивают Процесс сборки с Файлом 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.

Похожие темы