主要内容

与消息通信的温度控制系统

这个示例展示了如何在分布式系统中使用消息通信,在分布式系统中,控制器以迭代的方式管理来自不同发送方的多个传入消息,并发送消息来将命令通信给不同的接收方。该示例使用了一个控制系统模型,该控制系统在两个不同的房间中管理温度,其中有独立的恒温器。组件的算法建模基本上遵循statflow示例模型Bang-Bang温度控制系统(Stateflow),而组件之间的通信是使用Simulink®消息和SimEvents®块建模的。金宝app参考模型Controller和Thermometer(用蓝色标注)是期望生成独立代码的软件组件,而其他组件则对环境进行建模。

模型概述

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

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

最初,使用具有在数据字典文件中定义的浮点类型字段的总线类型配置模型SLDDMSG.SLDD.若要从浮点转换为定点,请更改模型的数据字典SLDDMSG.SLDDslddmsgfixpt.sldd..在这一点建模选项卡,去模型设置>模型属性>外部数据

通过更改的值,该模型很容易进行扩展N,添加模型块的更多实例,并增加Entity Output Switch和Message Merge块的端口号。房间模型内的每个温度计模型有一个ID参数,该参数必须设置为与实体输出开关的输出端口索引匹配的值。

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

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

控制器模型

在Controller模型中,与import块连接的Update Temperature子系统首先接收来自房间的所有包含温度信息的消息。子系统将信息存储在两个向量中:温度设定点和当前温度。然后,For Each子系统读取向量,处理信号,并通过Simulink函数发送控制消息金宝appsendctrlmsg.

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

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

房间模型

在Room模型中,Thermostat子系统与环境交互。温控器有两个输入,控制信息和设定值温度信号,和两个输出,加热速率和温度信息到控制器。增益和积分器块模拟房间加热或制冷的物理与加热速率和房间大小。

温控器子系统由温度计传感器子系统、温度计软件模块和温度执行器子系统组成。温度计软件模型模块定期从控制器接收控制消息,并将其解压缩为布尔命令(开/关)到温度执行器子系统,该子系统决定加热速率。温度计软件还从温度计传感器子系统输入温度信号,该子系统检测模拟温度,将其转换为数字信号,并将消息发送回控制器。

温度计模型

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

代码生成

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

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

另请参阅

|||||