主要内容

用原子子图建立电梯系统的模型

这个例子展示了如何使用statflow®中的关联原子子图来建模一个双车厢电梯系统。电梯系统由Simulink®模型和用户界面(UI)组成。金宝app该模型包含两个状态流程图:

  • Elevator System为核心逻辑建模,该逻辑将来自UI的传入请求委托给最近的可用电梯轿厢。这个图包含一对原子子图,它们为汽车实现了相同的逻辑。

  • UI控制器处理来自电梯系统图表的信息并更新UI显示。在这个图中,每个原子子图决定什么时候移动电梯轿厢,什么时候打开轿厢门。

在模拟开始时,模型打开UI。UI显示了两个电梯轿厢,可以停在9层。在UI的底部,两个黄色矩形表示电梯轿厢的内部。当示例运行时,您可以呼叫电梯轿厢,请求在某一楼层停车,或通过单击各层走廊和电梯轿厢内的按钮来触发火灾警报。UI通过修改电梯系统图的输入值和触发输入事件来进行响应。

管理来自用户界面的请求

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

  • Elevator_Manager子图实现了电梯系统的主控制逻辑。这个子图表管理大厅队列,其中包含当您单击某个楼层走廊上的按钮时生成的所有请求。子图处理这些请求,并将它们委托给其中一个电梯轿厢,具体取决于请求的可用性和距离。

  • Elevator_AElevator_B表示两个电梯轿厢的逻辑。每辆车都有它自己的队列来保存它所有的楼层请求。当你点击电梯轿厢内的按钮或当Elevator_Manager将大厅队列中的请求委托给汽车。

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

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

在库模型中,图表电梯实现一般电梯轿厢的逻辑。对子图表进行编程Elevator_AElevator_B为了让它们控制适当的汽车,您可以将每个子图表中的数据和事件映射到主图表中相应的数据和事件。例如,对于Elevator_B

  • 子图表输入floor_request映射到图表输入CarB_floor_request

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

  • 子图表输出doorOpen映射到图表输出doorBOpen

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

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

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

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

在设计中加入原子子图

本例中的模型是一个重新设计的版本旧的模型不使用原子子图。原始模型使用独立的子图来管理楼层请求(子图)Elevator_AElevator_B电梯系统图)和控制电梯轿厢的UI显示(子图)CarA_ControllerCarB_ControllerUI控制器图)。在每一种情况下,子图表几乎是彼此完全相同的副本。它们仅在使用的数据和事件的名称上有所不同。

要将重复的子图转换为原子子图,首先从一个子图中生成一个库原子子图。然后使用该库的链接实例来替换重复的子图表。例如,考虑电梯系统图的重复电梯轿厢子图。控件中定义的几个函数和局部变量Elevator_Manager子图表。在创建原子子图之前,必须使这些子图成为独立和自包含的单元。

1.将这些函数从Elevator_Manager子图表到父图表:

  • exists_in_queue

  • 取消

  • 出列

重命名这些函数,以区别于电梯轿厢子图中的函数。

2.使用Model Explorer,将这些变量从Elevator_Manager子图表到父图表:

  • hall_call_queue

  • hall_call_status

3.在电梯系统图中,设置导出图级别功能表属性真正的.有关更多信息,请参见导出状态流函数以供重用

4.修改Elevator_ManagerElevator_A子图以使用迁移的函数和变量。

5.控件创建库原子子图Elevator_A子图,如在图表中多次重用状态

6.为了使原子子图能够将电梯轿厢的位置传递给包含的图,改变范围子图表数据的位置当地的输出

7.用链接的原子子图替换两个电梯子图。对于每个链接的原子子图,将数据和事件映射到父图。有关更多信息,请参见映射原子子图和框的变量

相关的话题