利用原子Subcharts模型中的电梯系统

这个例子展示了如何使用Stateflow®中的链接原子子图表来建模一个两车厢电梯系统。电梯系统由Simulink®模型和用户界面(UI)组成。万博1manbetx模型包含两个Stateflow图表:

  • 电梯系统模型的核心逻辑是代表传入从UI到最近的电梯轿厢的请求。此图表中包含的一对实现用于汽车相同逻辑原子subcharts的。

  • UI控制器从电梯系统图表处理信息并更新UI显示。在此图表中,每个原子subchart确定何时移动的电梯轿厢,并且当打开它的门。

在模拟开始时,该模型将打开UI。该UI显示了两个电梯轿厢,可在九层停止。在UI的底部,两个黄色的矩形表示电梯轿厢内部。虽然示例运行时,您拨打的电梯轿厢,在地板请求停止,或通过点击每个楼层的走廊和电梯轿厢内的按钮,掀起了火灾警报。该UI通过修改输入值并触发用于电梯系统图表输入事件作出响应。

从管理用户界面的要求

电梯系统图由三个并行的子图组成。每个子图表管理来自UI的请求队列:

  • Elevator_Manager子图实现了电梯系统的主控制逻辑。此子图表管理大厅队列,其中包含单击楼层走廊中的一个按钮时生成的所有请求。子图处理这些请求,并根据请求的可用性和邻近程度,将它们委托给其中一个电梯厢。

  • Elevator_AElevator_B表示两个电梯厢的逻辑。每一辆车都有自己的队列来保存它的所有楼层请求。楼层请求是当您点击电梯轿厢内的按钮或当Elevator_Manager与会代表从大厅排队的车的请求。

通过使用原子子图重用逻辑模式

电梯轿厢使用相同的逻辑来处理各自的请求队列。电梯系统图通过使用a的链接原子子图来建模它们的行为库模型

在库模型,图表电梯实现了一个通用的电梯轿厢的逻辑。为了编程subchartsElevator_AElevator_B让他们控制适当的车,你在每个subchart到主图表中的相应数据和事件映射数据和事件。例如,对于Elevator_B

  • 该subchart输入floor_request映射到图表输入CarB_floor_request

  • 子图表输出位置映射到图表输出B_position

  • 子图表输出门打开了映射到图表输出doorBOpen

  • 子图表事件CAR_CALL映射到图表事件CAR_CALL_B

要查看映射每个原子subchart,右键单击subchart和选择子图表映射

为了控制每个电梯轿厢的UI显示,UI控制图表使用从连接的两个原子subcharts库模型

有关使用原子子图封装和重用逻辑的更多信息,请参见利用原子Subcharts创建可重用的子组件

在设计中加入原子子图表

本例中的模型是an的重新设计版本旧模式它不使用原子子图表。原始模型使用单独的子图来管理楼层请求(子图)Elevator_AElevator_B控制电梯轿厢(子图)的UI显示CarA_ControllerCarB_ControllerUI控制图表的)。在每种情况下,subcharts是彼此的几乎相同的副本。他们只在数据和他们使用的事件的名称不同。

要将重复的子图转换为原子子图,首先从其中一个子图中创建一个库原子子图。然后使用此库的链接实例替换重复的子图表。例如,考虑电梯系统图的重复电梯轿厢子图。方法中定义的几个函数和局部变量Elevator_Managersubchart。创建一个原子subchart之前,必须使这些subcharts独立自足的单位。

1.迁移从这些功能Elevator_Managersubchart成母体图表:

  • exists_in_queue

  • 注销

  • 出列

重命名这些功能从电梯轿厢内subcharts的功能区分开来。

使用模型浏览器2,迁移从这些变量Elevator_Managersubchart成母体图表:

  • hall_call_queue

  • hall_call_status

3.在电梯系统图,设定导出图表级功能图表属性真正的。欲了解更多信息,请参阅出口Stateflow的功能的重用

4.修改Elevator_ManagerElevator_Asubcharts使用迁移函数和变量。

5.属性创建一个库原子子图Elevator_A子图表,如中所述重用一个国家中多次图表

6.为了使原子subchart到电梯轿厢的位置传递到含有图表,改变范围该subchart数据位置本地产量

7.更换使用链接的原子subchart两个电梯subcharts。对于每个连接的原子subchart,数据和事件映射到父图表。欲了解更多信息,请参阅为原子子图表和框映射变量

相关的话题