创建一个传输层TCP / IP或串行外部模式通信
这部分帮助您连接您的自定义目标通过使用外部模式使用自己的底层通信层。主题包括:
外部的设计和操作模式的概述
外部模式源文件的描述
指南修改源文件和外部模式构建一个可执行处理任务的默认
ext_comm
MEX-file
本节假设您熟悉的执行金宝app®编码器™的基本操作程序和外部模式。
设计的外部模式
外部模式模型引擎和目标系统之间的通信是基于客户机/服务器体系结构。金宝app客户端(仿真软件引擎)传送消息请金宝app求服务器(目标)接受参数变化或上传信号数据。服务器响应通过执行请求。
一个低级传输层处理的物理传输消息。模型引擎和模型代码金宝app独立于这一层。传输层和代码直接连接到传输层隔离在单独的模块,格式,发送和接收消息的数据包。
这个设计可以让不同的目标来使用不同的传输层。导通,和RSim目标支持主机/目标通信利用TCP / IP和r金宝apps - 232串行通信。的金宝app仿真软件桌面实时™支持共享内存通金宝app信目标。风河®系统的龙卷风®目标仅支持TC金宝appP / IP。
的金宝app仿真软件编码器产品为客户端和服务器端提供了完整的源代码外部模式模块,GRT使用的,,快速模拟,龙卷风的目标,金宝app桌面实时仿真软件和金宝app仿真软件实时™下载188bet金宝搏产品。主要的客户端模块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
实现客户端和服务器端功能。您可以编辑这些文件的副本(但不要修改原件)。您可以使用自己的金宝app低级支持外部模式通信层通过创建类似的文件使用以下模板:
客户端(主持人):
(TCP / IP)或matlabroot
/工具箱/编码器/ rtiostream / src / rtiostreamtcpip /rtiostream_tcpip.c
(串行)matlabroot
/工具箱/编码器/ rtiostream / src / rtiostreamserial /rtiostream_serial.c服务器(目标):
(TCP / IP)或matlabroot
/工具箱/编码器/ rtiostream / src / rtiostreamtcpip /rtiostream_tcpip.c
(串行)matlabroot
/工具箱/编码器/ rtiostream / src / rtiostreamserial /rtiostream_serial.c
的rtiostream_interface.c
文件是一个接口和一个外部模式之间的协议rtiostream
通信通道。为实现和测试一个的更多细节rtiostream
通信通道,请参阅:
实现你的rtiostream
通信通道使用记录界面,以避免更改文件rtiostream_interface.c
或其他外部模式相关的文件。
请注意
不要修改源文件工作。使用提供的模板/自定义
或/ rtiostream
文件夹作为起点,指导下的评论。
你只需要提供代码,实现了底层通信。你不需要关心的问题,例如主机和目标之间的数据转换,或格式化的消息。的金宝app仿真软件编码器软件处理这些函数。
在客户端(仿真软件引擎),通信金宝app处理ext_comm
(TCP / IP)ext_serial_win32_comm
(串行)mex files。
在服务器上(目标)方面,外部模式模块链接到目标可执行程序。这发生在代码生成时自动选择外部模式和基于传输层您指定的选项。模块,从主程序调用和执行引擎的模型,是独立的代码生成的模型。
实现自己的一般程序客户端底层传输协议如下:
编辑模板
rtiostream_tcpip.c
替代低级电话沟通与自己的电话沟通。为您的自定义生成一个MEX-file执行运输。
注册你的新传输层模型软件,这样可以选择运输模型使用金宝app接口面板的配置参数对话框。
更多细节,请参阅创建一个定制的客户端(主机)传输协议。
一般程序实现您自己的服务器端底层传输协议如下:
编辑模板
rtiostream_tcpip.c
替代低级电话沟通与自己的电话沟通。通常这涉及到写作或集成为目标硬件设备驱动程序。修改模板makefile来支持新的运输。金宝app
更多细节,请参阅创建一个定制的服务器(目标)传输协议。
外部模式通信概述
本节的概述金宝app仿真软件编码器生成的程序与仿真软件外部通信模式。金宝app这个描述是基于TCP / IP的外部模式,附带的版本金宝app仿真软件编码器产品。
进行通信,服务器(目标)程序和仿真软件软件必须执行。金宝app这并不意味着服务器系统的模型代码必须执行。可以等待仿真软件引擎服务器发出一个命令开始执行模型。金宝app
通过使用双向套接字进行通信的客户端和服务器携带包。包包含的消息(命令、参数下载,和响应)或数据(信号上传)。
如果目标应用程序的调用- w
命令行选项,程序进入等待状态,直到接收到一个消息从主机。否则,模型的程序开始执行。在目标应用程序在等待状态,仿真软件引擎可以下载到目标参数和配置数据上传。金宝app
当用户选择连接到目标选择从模拟菜单,通过发送一个主机发起一个握手EXT_CONNECT消息
。服务器响应信息本身。这些信息包括
校验和。主机使用模型校验和来确定目标代码是当前仿真软件模型的精确表示。金宝app
数据格式的信息。主机下载格式数据时使用该信息,或解释的数据已经上传。
在这一点上,主机和服务器连接。服务器执行模型或等待状态。(在后一种情况下,用户可以通过选择执行模型开始实时代码从模拟菜单。)
模型执行期间,消息服务器作为后台任务运行。这个任务接收和处理消息参数下载等。
数据上传包含执行前景和背景信号的服务包。作为目标计算模型输出,它也将信号值复制到数据上传缓冲区。这发生的与每个任务相关的任务标识符(tid
)。因此,数据收集发生在前台。收集到的数据的传输,然而,作为一个后台任务发生。后台任务发送缓冲区中的数据收集模型引擎使用数据包。金宝app
主机启动大多数交流信息。目标通常发送响应确认已收到并处理消息。消息和命令的例子:
连接/连接响应消息
开始目标仿真/开始反应
参数下载/参数下载响应
手臂触发数据上传/臂引发反应
终止目标仿真/目标关闭响应
模型执行终止当模型达到最后一次,当主机发送一个终止命令,或者当一个停止模拟块终止执行。终止,服务器通知主机模型执行已经停止,并关闭套接字。主机也关闭套接字,并退出外部模式。
外部模式源文件
客户端(主机)MEX-file接口源文件
MEX-file界面组件的源文件位于文件夹
(开放),除指出:matlabroot
/工具箱/编码器/ simul金宝appinkcoder_core ext_mode /主机
常见/ ext_comm.c
这个文件是外部的核心模式通信。它作为一个目标,仿真软件引擎之间的中继站。金宝app
ext_comm.c
通信仿真软件引擎通过使用一个共享的数据结金宝app构,ExternalSim
。它传达到目标通过使用传输层。任务进行的
ext_comm.c
与目标包括建立连接,下载参数,和终止连接的目标。常见/ rtiostream_interface.c
这个文件是一个接口和一个外部模式之间的协议
rtiostream
通信通道。为实现的更多细节rtiostream
通信通道,看通信rtiostream API。实现你的rtiostream
通信通道使用记录接口避免改变该文件rtiostream_interface.c
或其他外部模式相关的文件。matlabroot
/工具箱/编码器/ rtiostream / src / rtiostreamtcpip /rtiostream_tcpip.c这个文件需要实现TCP / IP传输层的功能。的版本
rtiostream_tcpip.c
附带的金宝app仿真软件编码器包括软件使用TCP / IP功能recv ()
,send ()
,套接字()
。matlabroot
/工具箱/编码器/ rtiostream / src / rtiostreamserial /rtiostream_serial.c这个文件需要实现串行传输层的功能。的版本
rtiostream_serial.c
附带的金宝app仿真软件编码器包括软件使用连续函数ReadFile ()
,WriteFile ()
,它仅仅()
。串行/ ext_serial_transport.c
这个文件需要实现串行传输层的功能。
ext_serial_transport.c
包括ext_serial_utils.c
,位于
(开放),包含客户端和服务器的公共功能。matlabroot
/ rtw / c / src / ext_mode /串行常见/ ext_main.c
该文件是一个MEX-file包装外部模式。
ext_main.c
通过使用标准接口模型引擎金宝appmexFunction
调用。(见mexFunction
参考页面和MATLAB与外部编程语言和系统集成为更多的信息。)ext_main.c
调度程序包含一个函数,esGetAction
从仿真软件引擎,发送请求金宝appext_comm.c
。常见/ ext_convert.c
和ext_convert.h
这个文件包含函数用于将数据从主机到目标格式(反之亦然)。功能包括字节交换(大,小尾数法),从non-IEEE转换®花车IEEE双打,和其他转换。这些函数被称为通过
ext_comm.c
并直接由仿真软件引擎(通过使用函数指针)金宝app。请注意
你不需要来定制
ext_convert
实现一个定制的传输层。然而,您可能想要定制ext_convert
预定目标。例如,如果目标代表了浮动
德州仪器™格式的数据类型,ext_convert
必须修改执行德州仪器IEEE转换。常见/ extsim.h
这个文件定义了
ExternalSim
数据结构和访问宏。这种结构用于模型引擎和之间的沟通金宝appext_comm.c
。常见/ extutil.h
这个文件只包含条件编译的
断言
宏。常见/ ext_transport.h
这个文件定义的函数必须由传输层实现。
源文件服务器(目标)
这些文件被链接到
可执行文件。他们是位于模型
. exe
(开放)除了如上所述。matlabroot
/ rtw / c / src / ext_mode
常见/ ext_svr.c
ext_svr.c
类似于ext_comm.c
在主机,但通常负责更多的任务。它作为一个主机和生成的代码之间的中继站。就像ext_comm.c
,ext_svr.c
执行任务,如建立和终止与主机的连接。ext_svr.c
还包含后台任务的功能,要么写参数下载到目标模型,或从目标数据缓冲区中提取数据并将其发送回主机。常见/ rtiostream_interface.c
这个文件是一个接口和一个外部模式之间的协议
rtiostream
通信通道。为实现的更多细节rtiostream
通信通道,看通信rtiostream API。实现你的rtiostream
通信通道使用记录界面,以避免更改文件rtiostream_interface.c
或其他外部模式相关的文件。matlabroot
/工具箱/编码器/ rtiostream / src / rtiostreamtcpip /rtiostream_tcpip.c这个文件需要实现TCP / IP传输层的功能。的版本
rtiostream_tcpip.c
附带的金宝app仿真软件编码器包括软件使用TCP / IP功能recv ()
,send ()
,套接字()
。matlabroot
/工具箱/编码器/ rtiostream / src / rtiostreamserial /rtiostream_serial.c这个文件需要实现串行传输层的功能。rtiostream_serial的版本。c附带软件使用连续函数包括
ReadFile ()
,WriteFile ()
,它仅仅()
。matlabroot
/工具箱/编码器/ rtiostream / src /rtiostream.h这个文件定义了
rtIOStream *
功能实现rtiostream_tcpip.c
。串行/ ext_svr_serial_transport.c
这个文件需要实现串行传输层的功能。
ext_svr_serial_transport.c
包括串行/ ext_serial_utils.c
,其中包含服务器端和客户端常用的函数。常见/ 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
)模型
。h这些文件包含数据类型转换允许访问的信息具有数据类型结构在不同的计算机体系结构。此信息用于主机和目标之间的数据转换格式。
常见/ updown_util.h
这个文件只包含条件编译的
断言
宏。常见/ ext_svr_transport.h
这个文件定义了
Ext *
函数必须实现由服务器(目标)传输层。
其他文件在服务器文件夹
常见/ ext_share.h
包含消息代码定义和其他定义所需的主机和目标模块。
串行/ ext_serial_utils.c
包含函数和数据结构进行交流沟通,墨西哥人链接,生成的代码所需的主机和目标模块串行传输层的协议。
串行传输的实现包括额外的文件
串行/ ext_serial_pkt.c
和ext_serial_pkt.h
串行/ ext_serial_port.h
实现一个定制的传输层
要求定制的传输层
默认情况下,
ext_svr.c
和updown.c
使用malloc
在目标内存分配缓冲区信息,数据收集、和其他目的,尽管也有一个选项来preallocate静态内存。如果你的目标使用另一个内存分配计划,您必须修改这些模块。目标被认为同时支持金宝app
int32_T
和uint32_T
数据类型。
创建一个定制的客户端(主机)传输协议
实现客户端(主机)的底层传输协议,
编辑模板文件
替代低级电话沟通与自己的电话沟通。matlabroot
/工具箱/编码器/ rtiostream / src / rtiostreamtcpip /rtiostream_tcpip.c复制和重命名文件
rtiostream_
(替换的名字
。c
名字对你有意义的)。的名字
替换功能
rtIOStreamOpen
,rtIOStreamClose
,rtIOStreamSend
,rtIOStreamRecv
同名的函数()调用你的低级通信原语。这些功能模块通过从其他外部调用模式rtiostream_interface.c
。有关更多信息,请参见通信rtiostream API。建立你的
rtiostream
到一个共享库,实现出口的rtIOStreamOpen
,rtIOStreamClose
,rtIOStreamRecv
和rtIOStreamSend
功能。
使用MATLAB构建定制的MEX-file可执行®
墨西哥人
函数。看到MATLAB命令来重建ext_comm和ext_serial_win32 mex files的例子墨西哥人
调用。不替换现有的
ext_comm
MEX-file如果你想保持其功能。相反,使用与产出
选择新的可执行文件名称,例如,my_ext_comm
。有关更多信息,请参见墨西哥人
。注册你的新客户与Simulink仿真软件传输层,所以可以选择运输模型使用金宝app接口面板的配置参数对话框。有关详细信息,请参见注册自定义客户端(主机)传输协议。
示例命令列出mex files外部重建模式MATLAB命令来重建ext_comm和ext_serial_win32 mex files。
MATLAB命令来重建ext_comm和ext_serial_win32 mex files
下表列出了构建标准的命令ext_comm
和ext_serial_win32
模块在PC和UNIX®平台。
平台 |
命令 |
---|---|
窗户®,TCP / IP |
cd (matlabroot)墨西哥人工具箱/编码器/ simul金宝appinkcoder_core / ext_mode /主机/共同/ ext_comm.c…工具箱/编码器/ simul金宝appinkcoder_core / ext_mode /主机/共同/ ext_convert.c…工具箱/编码器/ simul金宝appinkcoder_core / ext_mode /主机/共同/ rtiostream_interface.c…工具箱/编码器/ simul金宝appinkcoder_core / ext_mode /主机/共同/ ext_util.c…-R2018a…-Itoolbox /编码器/ rtiostream / src…-Itoolbox /编码器/ rtiostream / src / utils_host…-Itoolbox /编码器/ 金宝appsimulinkcoder_core / ext_mode /主机/共同/包括…-Irtw / c / src / ext_mode /常见…-lmwrtiostreamutils-lmwsl_services…-DEXTMODE_TCPIP_TRANSPORT…-DSL_EXT_DLL与产出my_ext_comm 请注意 的 |
Linux®,TCP / IP |
使用Windows命令,这些变化:
|
Mac,TCP / IP |
使用Windows命令,这些变化:
|
窗户,串行 |
cd (matlabroot)墨西哥人工具箱\编码器\ simul金宝appinkcoder_core \ ext_mode \ \常见\ ext_comm.c…工具箱\编码器\ simul金宝appinkcoder_core \ ext_mode \ \常见\ ext_convert.c…工具箱\编码器\ simul金宝appinkcoder_core \ ext_mode \主机\系列\ ext_serial_transport.c…工具箱\编码器\ simul金宝appinkcoder_core \ ext_mode \主机\系列\ ext_serial_pkt.c…工具箱\编码器\ simul金宝appinkcoder_core \ ext_mode \主机\系列\ rtiostream_serial_interface.c…工具箱\编码器\ simul金宝appinkcoder_core \ ext_mode \ \常见\ ext_util.c…-R2018a…-Itoolbox \编码器\ rtiostream \ src…-Itoolbox \编码器\ rtiostream \ src \ utils_host…-Itoolbox \编码器\ 金宝appsimulinkcoder_core \ ext_mode \主机\常见…-Itoolbox \编码器\ 金宝appsimulinkcoder_core \ ext_mode \ \常见\包括…-Irtw \ c \ src \ ext_mode \常见…-Irtw \ c \ src \ ext_mode \系列…-lmwrtiostreamutils-lmwsl_services…-DEXTMODE_SERIAL_TRANSPORT-DSL_EXT_DLL…与产出my_ext_serial_comm 请注意 的 |
Linux,串行 |
使用Windows命令,这些变化:
|
Mac,连续 |
使用Windows命令,这些变化:
|
请注意
墨西哥人
需要一个MATLAB编译器支持的API。金宝app看到墨西哥人
参考页面和MATLAB与外部编程语言和系统集成更多的信息墨西哥人
函数。
注册自定义客户端(主机)传输协议
注册自定义客户端传输协议仿真软件软件,您必须添加一个条目的以下表格金宝appsl_customization.m
在MATLAB文件路径:
函数sl_customization (cm) cm.ExtModeTransports.add ('月31.tlc”、“运输”、“mexfile”、“使”);%——sl_customization结束
在哪里
是系统目标文件的名字的运输将注册(例如,月31
.tlc“grt.tlc”
)
显示在运输名称吗传输层菜单上的接口面板的配置参数对话框(例如,运输
“mytcpip”
)
是交通工具的名称相关联的外部接口MEX-file(例如,mexfile
“ext_mytcpip_comm”
)
您可以指定多个目标和/或额外的传输cm.ExtModeTransports.add
行,例如:
函数sl_customization (cm) cm.ExtModeTransports.add (grt”。薄层色谱”、“mytcpip”、“ext_mytcpip_comm”、“使”);cm.ExtModeTransports.add(“接受方。薄层色谱”、“mytcpip”、“ext_mytcpip_comm”、“使”);%——sl_customization结束
如果你把sl_customization.m
文件包含运输MATLAB路径的注册信息,您的自定义客户端传输协议将在每个后续仿真软件注册会议。金宝app交通工具的名称将出现在传输层菜单上的接口面板的配置参数对话框。当您选择的运输模型,相关的外部接口的名称MEX-file将出现在不可编辑MEX-file名字领域,如下列图所示。
创建一个定制的服务器(目标)传输协议
的rtIOStream *
函数原型
定义调用接口的服务器(目标)和客户端(主机)传输层的功能。matlabroot
/工具箱/编码器/ rtiostream / src /rtiostream.h
在TCP / IP实现
。matlabroot
/工具箱/编码器/ rtiostream / src / rtiostreamtcpip /rtiostream_tcpip.c在串行实现
。matlabroot
/工具箱/编码器/ rtiostream / src / rtiostreamserial /rtiostream_serial.c
请注意
的Ext *
函数原型
实现在matlabroot
/ rtw / c / src / ext_mode /共同/ext_svr_transport.h
或matlabroot
/ rtw / c / src / ext_mode /共同/rtiostream_interface.c
。在大多数情况下,您不需要修改matlabroot
/ rtw / c / src / ext_mode /串行/rtiostream_serial_interface.crtiostream_interface.c
或rtiostream_serial_interface.c
为您定制的TCP / IP或串行传输层。
实现服务器(目标)的底层TCP / IP或串行传输协议:
编辑模板
或matlabroot
/工具箱/编码器/ rtiostream / src / rtiostreamtcpip /rtiostream_tcpip.c
替代低级电话沟通与自己的电话沟通。matlabroot
/工具箱/编码器/ rtiostream / src / rtiostreamserial /rtiostream_serial.c复制和重命名文件
rtiostream_
(替换的名字
。c
名字对你有意义的)。的名字
替换功能
rtIOStreamOpen
,rtIOStreamClose
,rtIOStreamSend
,rtIOStreamRecv
与功能(同名),打电话给你的低级通信驱动程序。您必须实现中定义的函数
rtiostream.h
,你的实现必须符合该文件中定义的原型。是指原rtiostream_tcpip.c
或rtiostream_serial.c
为指导。
结合外部模式源文件的传输层到模型的构建过程。使用一个构建过程机制等一篇文章或一个代码生成命令
before_make
钩子函数,使运输文件可用于构建过程。构建过程机制的更多信息,见定制Post-Code-Generation构建处理,自定义构建过程与STF_make_rtw_hook文件,与sl_customization.m定制构建过程。例如:
在上一步中创建的文件添加到构建信息:
路径/
rtiostream_
的名字
。c对于TCP / IP,将下面的文件添加到构建信息:
matlabroot/ rtw / c / src / ext_mode /共同/ rtiostream_interface.c
系列,将以下文件添加到构建信息:
matlabroot/ rtw / c / src / ext_mode /串行/ ext_serial_pkt.cmatlabroot/ rtw / c / src / ext_mode /串行/ rtiostream_serial_interface.cmatlabroot/ rtw / c / src / ext_mode /串行/ ext_svr_serial_transport.c
请注意
外部模式,检查rtIOStreamRecv
不是一个阻碍实现。否则,它可能导致外部模式服务器阻塞,直到主机发送数据通过通讯
层。
串口接收缓冲区小于64字节
串口接收缓冲区的串行通信,如果你的目标是小于64字节:
更新以下宏观与实际目标缓冲区大小:
#定义TARGET_SERIAL_RECEIVE_BUFFER_SIZE 64
实现以下文件的变化:
matlabroot/ rtw / c / src / ext_mode /串行/ext_serial_utils.cmatlabroot/工具箱/编码器/ simul金宝appinkcoder_core ext_mode /主机/串行/ext_serial_utils.c
运行命令来重建
ext_serial_win32
MEX-file。看到MATLAB命令来重建ext_comm和ext_serial_win32 mex files。