通过使用原子子图表模型电梯系统
这个例子展示了如何使用关联模型两个车位的电梯系统的原子子图表Stateflow®。电梯系统由仿真软件®模型和用户界面(UI)。金宝app模型包含两个Stateflow图表:
电梯系统模型的核心逻辑代表传入的请求从UI到最近的可用电梯的车。这个图表包含一对原子子图表,实现相同逻辑的汽车。
从电梯系统UI控制器处理信息图表显示和更新UI。在这个图中,每个原子子图表决定当电梯移动车,当敞开大门。
的模拟,该模型打开UI。UI显示了两个电梯汽车停在九层。底部的UI,两个黄色矩形代表汽车电梯的内部。示例运行时,你叫电梯车,请求停止在地板上,或引发火灾报警通过单击按钮每层走廊和电梯内的汽车。用户界面响应通过修改输入值和触发输入事件为电梯系统图。
从用户界面管理请求
电梯系统图由三个平行子图表。这些子图表从UI管理队列的请求:
的
Elevator_Manager
子图表的主要控制逻辑实现电梯系统。这个子图表管理大厅队列,其中包含所有请求生成当你点击一个按钮在一个走廊的地板上。子图表处理这些请求,代表他们电梯汽车之一,根据可用性和接近请求。Elevator_A
和Elevator_B
两个电梯汽车代表的逻辑。每辆车都有自己的请求队列,保存所有的地板上。地板上请求生成当你点击一个按钮在电梯车厢内或当Elevator_Manager
代表一个请求从大厅排队的车。
通过使用原子子图表重用逻辑模式
电梯汽车使用相同的逻辑来处理个人的请求队列。电梯系统图模型通过使用连接原子子图表从他们的行为库模型。
在图书馆模型,图表电梯
实现了一个通用的逻辑电梯的车。程序的子图表Elevator_A
和Elevator_B
所以他们控制合适的车,你将每个子图表数据和事件映射到相应的数据和事件在主图。例如,对于Elevator_B
:
子图表输入
floor_request
映射到表的输入CarB_floor_request
。子图表输出
位置
映射到输出的图表B_position
。子图表输出
doorOpen
映射到输出的图表doorBOpen
。子图表事件
CAR_CALL
映射到表事件CAR_CALL_B
。
看到每个原子子图表的映射,在子图表上单击右键并选择子图表映射。
控制每个电梯的UI显示车,UI控制器图表使用两个原子子图表从有关库模型。
更多信息关于使用原子子图表来封装和重用逻辑,明白了通过使用原子子图表创建可重用的子组件。
在你的设计中融入原子子图表
模型在本例中是一个重新设计的版本的旧的模型不使用原子子图表。最初的模型使用单独的子图表管理楼层请求(子图表Elevator_A
和Elevator_B
电梯系统的图表)和控制电梯的UI显示汽车(子图表CarA_Controller
和CarB_Controller
UI控制器的图表)。在每种情况下,子图表几乎是另一个一模一样的复制品。他们只在不同的数据和事件的名称。
复制子图表转换为原子子图表,首先做一个图书馆原子子图表子图表之一。然后使用这个库的相关实例替换重复的子图表。例如,考虑电梯的电梯汽车子图表复制系统图。这些子图表叫几个函数和局部变量中定义的Elevator_Manager
子图表。在创建一个原子子图表之前,您必须使这些子图表独立和自给自足的单位。
1。这些函数的迁移Elevator_Manager
子图表为父图:
exists_in_queue
取消
出列
重命名这些函数从电梯内的功能区分汽车子图表。
2。使用Model Explorer,这些变量的迁移Elevator_Manager
子图表为父图:
hall_call_queue
hall_call_status
3所示。在电梯系统图,设置出口表级别功能表属性真正的
。有关更多信息,请参见出口Stateflow功能以便重用。
4所示。修改Elevator_Manager
和Elevator_A
子图表使用迁移的函数和变量。
5。创建一个库的原子子图表Elevator_A
子图表中所描述的多次重用一个状态图。
6。使原子子图表通过电梯的位置车包含图表,改变范围子图表的数据位置
从当地的
来输出
。
7所示。更换两个电梯子图表与原子子图表。对于每个连接原子子图表,地图数据和事件到父图。有关更多信息,请参见变量映射为原子子图表和盒子。