主要内容

温度控制系统通信与信息

此示例示出了如何使用其中控制器管理来自不同的发送方的多个传入消息以迭代的方式和将消息发送给命令传送到不同接收器的分布式系统内的消息通信。该示例使用的控制系统,其与单独的恒温器两个不同的房间的温度管理的模型。的部件的的算法建模基本上遵循Stateflow的例子模型Bang-Bang温度控制系统(状态流),而组件之间的通信是使用的Simulink消息和SimEvents®块建模。金宝app引用的模型控制器和温度计,为蓝色,预计将产生独立代码的软件组件,而其他部件环境模型。

模型概述

该模型包含N具有恒温器的相同房间(由多实例模型块建模),在哪里N=2是在Sim金宝appulink数据字典文件中定义的Simulink参数SLDDMSG.SLDD,它与顶级模型和引用的模型相关联。每个房间都可以单独设置设定值温度。房间的恒温器通过控制器远程控制,使用相同的控制算法为所有恒温器进行控制。

恒温器每次向控制器发送温度消息0.2秒,而控制器发送命令消息到恒温器命令加热或关闭每1第二。一个实体输出交换机(SimEvents)根据该消息总线数据字段块路由来自控制器的消息发送到恒温器的一个设备编号。(总线也在数据字典中定义并在所有模型中共享。)a消息合并块将从不同恒温器的消息路由到控制器。

最初,使用具有在数据字典文件中定义的浮点类型字段的总线类型配置模型SLDDMSG.SLDD。从浮点到定点开关,改变数据字典,用于从模型SLDDMSG.SLDDslddmsgfixpt.sldd.。在这一点造型标签,去模型设置>模型属性>外部数据

通过改变值,该模型很容易缩放N,将所述模型块的多个实例,并且增加了实体输出开关和消息合并块的端口号。客房模型内部每个温度计模型有一个ID参数,该参数必须与实体输出开关的输出端口的索引相匹配的值来设置。

一种队列块(FIFO,覆盖类型队列)在控制器模型的前面缓冲消息,该消息在控制器的消息中间件内部模拟队列。在这里,容量N对于队列来说,足够好足以将最旧的消息与每个发件人的新信息覆盖,假设在运输中没有消息丢失。一种能力5 * N需要与消息丢失,在最坏的情况下5.控制器的采样时间除以恒温器的采样时间。此外,每个恒温器前面的队列具有容量1的队列会自动插入并显示夹层“1”的徽章图标,因为如果您没有故意放置队列块,则会自动插入容量-1队列。看使用队列块,以管理信息

要在Simulink ToolStrip上查看消息和事件的序列,请执行金宝app模拟标签,在审查结果部分,点击序列观看者。看序列观看者

控制器型号

在控制器模型中,与INPORT块连接的更新温度子系统首先接收包含来自房间的温度信息的所有消息。子系统存储在温度设定点和当前温度的两个矢量中的信息。然后,对于每个子系统读取向量,处理信号,并通过Simulink函数发送控制消息金宝appsendctrlmsg.

更新温度子系统是终止条件端口由接收块的状态端口馈送的DO-WIST子系统,这意味着它运行,直到无法从外部队列(顶部模型中的任何消息)。消息数据是devicemsg.总线类型,这是在数据字典文件所定义,并且有两个字段:温度设备编号。因此,当所述的输出信号,接收块传播到启用子系统,其使能端被连接到接收块的状态端口,总线选择块分解信号转换成设备编号温度, 和设定点信号。这设定点温度然后将信号分配给与之相关联的相应矢量元素设备编号。最后,由单位延迟块维护的向量作为通过支持的子系统和更新温度子系统的信号输出到每个子系统。

对于每个子系统,其块设置如上所示,设置为具有N迭代,其两个输入端口都是分区。StateFlow图表模型Bang-Bang控制器,类似于解释的Bang-Bang控制器模型Bang-Bang温度控制系统(状态流)。其输出端口输出指示是否打开加热的布尔信号。将该信号与来自迭代号(基于零)的SogeID(一个基于一个基于一个)的总线创建器块的非横向信号包装。该信号被提供给函数来电块,调用Simulink函数金宝appsendctrlmsg.(放置在每个子系统外部)从模型中发送消息。

房间模型

在房间模型,恒温器子系统与环境的相互作用。恒温器有两个输入端,该控制消息和设定点温度信号,和两个输出端,加热速率和温度的消息到控制器。增益和积分块模拟房间加热的物理或相对于所述加热速率和房间的大小冷却。

恒温器子系统由温度计传感器子系统,温度计软件模型块,和一个致动器的温度子系统的。温度计软件模型块周期性地接收来自控制器和它解包的控制消息转换成布尔命令(开/关),以温度致动器子系统,其确定的加热速率。温度计软件还输入从温度计传感器子系统,其检测所述模拟温度,将其转换成数字信号的温度信号,并且将该消息发送回控制器。

温度计模型

在温度计模型中,接收块与InPort块连接,以在每次步骤中从外部队列接收控制消息。消息数据被分解为命令信号,该命令信号是输出,以及一个必须匹配模型的ID参数的设备信号。id参数应在顶部模型中的模型块中设置。接收块的初始值设置为Matlab®结构设备编号字段等于模型参数ID命令现场占据价值错误的。同时,数字温度,设定值和DeviceID的信号被包装到非传真总线信号中,并作为向出口块发送消息。

代码生成

代码生成和部署中,引用的模型控制器和温度计(蓝色)可以生成独立的嵌入目标C ++代码,并且可以与消息的中间件的嵌入式设备单独部署。有关更多信息,请参阅生成C ++消息以在Simulink和操作系统或中间件之间进行通信金宝app(嵌入式编码);也可以看看使用手写代码集成到C ++与POSIX消息(嵌入式编码)

消息根级INPORT / OUTPORT不支持C代码生成和代码定制。金宝app如果你需要生成C代码和呼叫到一个消息中间件API发送消息,考虑将Simulink的功能金宝appsendctrlmsg.到顶部模型并正确自定义名称,以便引用的模型生成外部功能的可自定义呼叫站点。类似地,对于接收方,考虑使用顶部模型中的接收块的Simulink函数,并在引用的模型中使用函数来电块金宝app来替换接收块。

也可以看看

|||||