exponenta event banner

Создание транспортного уровня для связи TCP/IP или последовательного внешнего режима

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

  • Обзор проектирования и работы внешнего режима

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

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

В этом разделе предполагается, что вы знакомы с выполнением программ Simulink ® Coder™ и с базовой работой внешнего режима.

Проектирование внешнего режима

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

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

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

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

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

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

Протокол

Клиент или сервер?

Исходные файлы

TCP/IP

Клиент (хост)

 

Сервер (целевой объект)

Последовательный

Клиент (хост)

 

Сервер (целевой объект)

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

  • Сторона клиента (хоста): matlabroot/toolbox/coder/rtiostream/src/rtiostreamtcpip/rtiostream_tcpip.c (TCP/IP) или matlabroot/toolbox/coder/rtiostream/src/rtiostreamserial/rtiostream_serial.c (серийный)

  • Серверная (целевая) сторона: matlabroot/toolbox/coder/rtiostream/src/rtiostreamtcpip/rtiostream_tcpip.c (TCP/IP) или matlabroot/toolbox/coder/rtiostream/src/rtiostreamserial/rtiostream_serial.c (серийный)

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

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

Примечание

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

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

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

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

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

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

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

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

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

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

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

  2. Изменение makefile шаблона для поддержки нового транспорта.

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

Обзор связи во внешнем режиме

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Исходные файлы внешнего режима

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

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

  • common/ext_comm.c

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

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

  • common/rtiostream_interface.c

    Этот файл является интерфейсом между протоколом внешнего режима и rtiostream канал связи. Для получения дополнительной информации о внедрении rtiostream канал связи, см. Communications rtiostream API (встроенный кодер). Внедрите 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-файла для внешнего режима. ext_main.c интерфейсы с механизмом Simulink с использованием стандарта mexFunction звоните. (См. раздел mexFunction и Выберите API MATLAB для вашего приложения для получения дополнительной информации.) ext_main.c содержит диспетчер функций, esGetAction, который отправляет запросы от движка Simulink ext_comm.c.

  • common/ext_convert.c и ext_convert.h

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

    Примечание

    Нет необходимости настраивать ext_convert для реализации пользовательского транспортного уровня. Однако может потребоваться настройка ext_convert для намеченной цели. Например, если цель представляет float тип данных в формате Texas 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

    Этот файл является интерфейсом между протоколом внешнего режима и rtiostream канал связи. Для получения дополнительной информации о внедрении rtiostream канал связи, см. Communications rtiostream API (встроенный кодер). Внедрите 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_name.c (замена name с значимым для вас именем).

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

    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-файлов способа перечислены в Командах MATLAB, чтобы Восстановить 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 требуется компилятор, поддерживаемый API MATLAB. См. раздел mex справочная страница и выбор API MATLAB для вашего приложения для получения дополнительной информации о 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 - имя транспорта, отображаемое в меню транспортного слоя на панели «Интерфейс» диалогового окна «Параметры конфигурации» (например, '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», как показано на следующем рисунке.

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

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

  • Реализации TCP/IP находятся в matlabroot/toolbox/coder/rtiostream/src/rtiostreamtcpip/rtiostream_tcpip.c.

  • Последовательные реализации находятся в matlabroot/toolbox/coder/rtiostream/src/rtiostreamserial/rtiostream_serial.c.

Примечание

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_name.c (замена name с значимым для вас именем).

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

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

  2. Включение внешних исходных файлов режимов для транспортного уровня в процесс построения модели. Используйте механизм процесса построения, такой как команда создания посткодов или 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

Примечание

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

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

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

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

    #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-файлов.

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