此示例演示DDS模块集Blockset形状演示应用程序。Shapes Demo是一个常见的数据分发服务(DDS)应用程序,用于介绍DDS概念,你可以使用它发布和订阅以简单形状(圆形、方形和三角形)表示的主题,并观察发布者和订阅者的连接。许多提供使用DDS标准的产品和服务的组织都提供了自己版本的Shapes Demo,以展示DDS的核心功能。
Shapes Demo的DDS模块集Blockset版本订阅Square主题,处理包括(x,y)位置的订阅者样本数据,并发布使用Square(x,y)位置值的Circle主题,每个值偏移一个常量。
在本例中,你将:
- 查看DDS模块集Blockset形状演示使用的类型、域和主题定义。
- 查看实现订阅服务器和发布服务器的Simulink模型元素。
- 查看模型元素与DDS主题、数据读取器和数据写入器定义之间的DDS接口映射。
- 构建应用程序。
- 使用第三方Shapes Demo与DDS模块集Blockset可执行文件进行通信。
DDS模块集Blockset为DDS供应商RTI和eProsima提供开箱即用的支持。此演示使用DDS RTI Connext软件,并且需要安装RTI Connex 6.1.0+软件。如果需要,你可以使用提供的RTI Connext软件的文件交换版本。有关下载和安装信息,请参阅DDS模块集Blockset系统要求。构建和部署DDS模块集Blockset模型还需要Embedded Coder。
1.视图类型和域定义
此演示使用shapesdemo.slx模型,该模型已经从XML文件导入了类型和域参与者定义。
DDS定义是从DDS XML文件shapesexample.XML导入的,并保存在shapesesample.sldd字典中。你可以打开shapesexample.xml文件来查看xml描述。有关如何导入XML或IDL定义的更多信息,请参阅导入或创建DDS定义。
要在DDS Dictionary中查看导入的DDS定义,请打开.sldd文件。
open shapesexample.sldd |
数据字典将在模型资源管理器中打开。在“模型层次Model Hierarchy”窗格中,选择“Simulink根”>“shapesesample”>“DDS库”。然后,单击“打开DDS库Open DDS Libraries”。
在DDS Dictionary的Types(类型)选项卡下,查看导入的数据类型。对于每个导入的数据类型,都可以在“详细信息”窗格中看到属性信息。例如,Simulink。总线结构ShapeType定义成员颜色、x、y和形状大小。
DDS字典中的这些数据类型是直接从XML文件shapesexample.XML导入的类型和定义。
<types> <const name="MAX_COLOR_LEN" type="int32" value="128" /> <struct name="ShapeType"> <member name="color" stringMaxLength="128" type="string" key="true"/> <member name="x" type="int32" /> <member name="y" type="int32" /> <member name="shapesize" type="int32" /> </struct> </types> |
在“域Domains ”选项卡下,查看域和主题定义。域ShapesDomain使用域ID 0,包括主题“Circle”、“Square”和“Triangle”。每个主题都使用注册的数据类型ShapeType,它描述了主题的有效负载数据。
DDS字典中的这些域参与者定义直接从XML文件shapesexample.XML导入。
<domain_participant_library name="MyParticipantLibrary"> <domain_participant name="MyParticipant" domain_ref="ShapesDomainLibrary::ShapesDomain"> <register_type name="ShapeType" type_ref="ShapeType" /> <topic name="Square" register_type_ref="ShapeType" /> <topic name="Circle" register_type_ref="ShapeType" /> <topic name="Triangle" register_type_ref="ShapeType" /> ... </domain_participant> </domain_participant_library> |
在QoS选项卡下,你将查看服务质量(QoS)定义。由于此示例的XML中没有提供QoS定义,因此此选项卡为空。此演示中的发布者和订阅者使用DDS供应商提供的默认QoS配置文件。
2.视图发布服务器和订阅服务器模型构建
打开Shapes Demo模型。
open_system("shapesdemo"); |
在Shapes Demo的Simulink模型中,查看端口ports 和Take DDS Sample(获取DDS采样)块和Write DDS Sample块是如何用于订阅和发布形状的采样数据的。
2.1 查看订阅块Subscriber Blocks
右键单击块MySubscriber.Square中的总线元素,并选择“块参数Block Parameters”。输入端口的DDS类型是ShapeType,总线是非虚拟的。
在“获取DDS采样块DDS Sample block”上单击鼠标右键,然后选择“块参数”。“获取DDS样本”块将DDS数据类型转换为Simulink数据类型。
2.2 查看逻辑子系统Logic Subsystem
双击Shapes Demo模型的逻辑子系统以打开。逻辑组件使用Simulink数据类型,并为发布者设置数据采样值。逻辑子系统将输出颜色配置为常量“RED”,将输出(x,y)位置设置为输入(x,y)位置,每个值偏移常量Distance,并将输出形状大小设置为常量MyShapeSize。
2.3 查看发布块Publish Blocks
双击“写入DDS采样块DDS Sample block”以查看其属性。写入DDS样本块将Simulink数据类型转换为要发送的DDS数据样本。
右键单击总线元素输出块MyPublisher。圈出,然后选择“块参数Block Parameters”。输出端口的DDS类型为ShapeType,其中更新的位置由x和y总线元件提供。
此外,在配置参数中,此模型的根级输出日志记录未设置。
2.4 查看配置的DDS接口
导入的XML描述,还包括发布者和订阅者的DataWriter和DataReader定义。你可以使用代码映射编辑器将主题topics、数据读取器data readers,和数据写入器data writers映射到输入Inports和输出Outports端口。
在工具栏上,单击“代码界面Code Interface”,然后选择“单个元素代码映射Individual Elements Code Mappings”,将打开“代码映射Individual Elements Code Mappings”面板。
2.4.1 Inports
要查看映射到输入端口的主题和数据读取器,请单击【Inports】选项卡。在topic列下,可以映射DDS字典中定义的主题。在ReaderXMLPath列下,可以映射导入的DDSDataReaders。
2.4.2 Outports
要查看映射到输出端口的主题和数据写入程序,请单击“输出Inports ”选项卡。
3 构建和部署形状演示
DDS模块集Blockset为DDS供应商RTI和eProsima提供开箱即用的支持。此演示生成特定于DDS RTI Connext软件的可执行文件,并要求安装RTI Connex 6.1.0+软件。对于eProsima,FastDDS产品包含在DDS模块集Blockset中,无需额外设置。
如果你没有安装RTI Connext软件,请参阅DDS模块集Blockset系统要求页面,了解有关开始使用RTI Connex的信息。构建和部署DDS模块集Blockset模型还需要Embedded Coder。
此外,在构建模型之前,在MATLAB命令窗口中,使用mex命令验证是否为你的平台设置了受支持的C++编译器和受支持的编译器版本。有关每个平台要求的更多信息,请参阅DDS模块集Blockset系统要求。
mex -setup c++ MEX configured to use 'Microsoft Visual C++ 2019' for C++ language compilation. To choose a different C++ compiler, select one from the following: ... |
要构建应用程序模型并生成C++代码,请在Tools Trip的DDS选项卡下单击【build】。
要部署生成的可执行文件,请在MATLAB命令窗口中运行shapesdemo.exe可执行文件:
cd shapesdemo_ert_rtw/exe !shapesdemo.exe |
当DDS Blockset Shapes Demo应用程序运行时,它订阅Square主题并发布一个提供偏移(x,y)位置的Circle主题。在MATLAB命令窗口中看不到输出。可执行文件在前台运行,因此在shapesdemo.exe运行时,你将无法访问MATLAB提示。
下一节提供了有关可选地验证DDS可执行文件与订阅Circle主题并发布Square主题的其他DDS应用程序的连接的信息。
4 使用第三Shapes Demo应用程序与DDS模模块集BlocksetShapes Demo进行通信
可以使用DDS模块集Blockset形状可执行文件与使用相同数据类型的其他DDS应用程序交换DDS数据。ShapeType数据类型是DDS中广泛用于演示目的的类型,不同的DDS供应商已经使用此ShapeType创建了桌面ShapeType演示应用程序。
本文中的信息适用于使用RTI Shapes Demo 6.1.1的试用版与DDS模块集BlocksetShapes Demo可执行文件进行通信。运行RTI Shapes Demo 6.1.1提供了一个图形界面,在画布上显示已发布和订阅的ShapeType数据。或者,你也可以使用RTI Launcher附带的RTI Shapes Demo。
要查看连接【connectivity】,可以使用RTI Shapes Demo应用程序在Square主题上发布一个形状,并订阅Circle主题。这是通过启动RTI Shapes Demo 6.1.1应用程序进行配置的,在控制窗口中,单击“发布Publish”下的“方形Square”,单击“订阅Subscribe”下的”圆形Circle “,并使用两者的默认值。
DDS Blockset Shapes Demo应用程序订阅了Square主题。它接收RTI Shapes Demo第三方应用程序发布的Square样本数据,向Square的(x,y)位置添加偏移量,并发布使用偏移量(x,y)位置的红色圆圈。
启动并配置RTI Shapes Demo应用程序后,你可以在RTI Shape Demo控制窗口中看到此通信。画布显示由RTI Shapes Demo发布的蓝色正方形,并显示正方形后面的最后六个红色圆圈样本。这些圆圈由DDS模块集Blockset形状演示发布,并由RTI形状演示订阅。RTI Shapes Demo显示了六个红色圆圈,因为在创建订户时,默认的“历史”QoS值设置为6,用户可以更改该值。