事件是表示操作、转换或条件的构造。您可以从模型层次结构中广播事件。事件可以将检测重要条件的块与分区连接起来,以便在条件发生时安排分区的执行。Schedule Editor允许您创建和管理分区,并安排模型的执行。您可以将事件绑定到基于优先级调度的非周期性分区,以便在广播事件时执行。从R2020b开始,计划编辑器事件可以从状态流发送®图表,使用发送
关键字。事件简化了系统创建,并在调度过程中提供了更大的灵活性。
模型层次结构中的每个模型都有自己的模型事件面板,它包含了模型中出现的所有事件以及模型的子事件。当您打开Schedule Editor并更新图表时,模型中出现的所有分区和事件都将出现在Schedule Editor中。通过事件面板,您可以:
创建一个事件。
删除事件。
重命名事件。
获得一个事件。
将事件绑定到分区。
从分区解绑定事件。
你可以根据状态流图中特定事件的广播来调度非周期性分区的执行,如下所示:
的事件Schedule Editor中的面板显示事件树。在每个事件下,您可以看到该事件的广播器和侦听器。
事件绑定到分区时,事件名称出现在分区的左侧触发的列订单表格
在模型和模型层次结构中,事件的唯一名称是强制的。在模型层次结构中,模型名位于事件名的前面。例如,如果模型引用命名为ModelName
包含一个事件,E1
,则该事件显示为ModelName。E1
在日程编辑器中。
有作用域的事件表示该事件在父模型的上下文中使用。对象中可见作用域事件事件父模型的面板。名称为E1的作用域事件,出现在命名的模型中ModelName
,显示为ModelName。E1
在事件面板。
控件中设置事件的范围事件面板。控件中的事件,右击该事件可设置事件的范围事件面板。
有两种选择:
全球,—全局事件表示该事件可用于模型层次结构中的任何地方。您可以在模型层次结构中的任何位置使用和连接全局事件。中可见全局事件事件父模型的面板。一个全球性的事件EventName
被称为EventName
在所有父模型中。所有全局事件必须有一个唯一的名称。这些事件的多个实例然后可以由相同的状态流图触发,以统一调度。
作用域(默认),—当事件有作用域时,它表示该事件在父模型的上下文中使用。对象中可见作用域事件事件父模型的面板。名称的作用域事件E1
,它出现在命名的模型中ModelName
,显示为ModelName。E1
在事件面板。
作用域 | 全球 |
---|---|
事件,只能在它所在的模型上下文中使用。 | 事件,可在模型层次结构中的任何地方使用 |
可见于事件事件所在模型的面板。 | 可见于事件父模型的面板 |
显示为ModelName。E1 在事件面板。 |
显示为EventName 在事件父模型的面板。 |
绑定事件。事件和分区可以绑定在一起,以指示分区响应事件的广播而执行。分区只能绑定到单个事件。
基于优先级的执行。如果事件绑定分区被安排在驱动事件的分区之前运行,那么事件绑定分区的执行将抢占发送事件的分区的执行。如果触发的分区被安排在驱动事件的分区之后运行,那么当调度器到达执行顺序中的位置时,触发的分区就会执行。
例如,在下面的flochart中,listenerPartition
是一个非周期性的分区和事件的监听器,Event1
.假设Event1
来自模型中的状态流图,是分区的一部分,称为,broadcastPartition
.当broadcastPartition
开始执行,Event1
的执行,然后触发listenerPartition
.
达到时间。您可以在指定的命中时间触发非周期性分区。如果分区具有命中次数并绑定到事件,则命中次数将被指定的事件替换。同样地,如果一个分区绑定到一个事件,并且添加了命中次数,那么绑定的事件将从分区中删除。变量还可以指定非周期性分区的命中次数。在变量和事件名称不明确的情况下,事件优先。
这个示例展示了如何使用事件通过状态流图调度非周期性分区的执行。您可以从Stateflow发送事件,并使用这些事件通过使用Schedule Editor中的事件来控制模型中分区的执行。
打开模型
在这个例子中,我们模拟内燃机的数字速度控制。在该模型中,采用两个冗余霍尔传感器测量发动机角速度,并模拟了霍尔传感器失效的情况。
该模型主要包含以下主要组件:
系统输入:执行系统的输入和信号。
引擎:内燃机的简化表示。
成分:用于部署在发动机控制单元(ECU)上的数字控制器,具有运行时环境(RTE)。
曲柄双霍尔传感器:仿真两个冗余传感器,传感器一个
而且传感器B
.
RTE服务:模拟引擎控制单元提供的服务。
open_system (“ex_engine_speed_control_system”);
系统的输入
这个模型的系统输入是使用Signal Editor模块设计的。的ex_engine_speed_control_external_inputs.mat
文件包含以下场景:
所需要的角速度设置为2000转
对于整个模拟。
在T = 01秒
,则转速控制器处于启用状态。结果,霍尔传感器A
是用来计算角速度和发动机转速增加到2000转
.
在T = 06秒
,注入第一个霍尔传感器的一个故障。结果,霍尔传感器B
现在被用来计算角速度,发动机转速保持在2000转
.
在T = 11秒
,第二个传感器的故障注入。结果,速度控制器被禁用,发动机转速下降到零。
在T = 15秒
的失败。传感器一个
而且B
得到解决。
在T = 21秒
时,启动速度控制的命令会循环一秒回到0,然后再回到1。结果,发动机转速增加到2000转
.
引擎
发动机动力学由一个传递函数表示,传递函数接收油门指令并将其转换为扭矩,二级积分器集成运动。
作文
ex_engine_speed_controller_composition
实现了数字控制算法。它包含以下组件:
ComputeRPM_A
而且ComputeRPM_B
:注册为硬件中断的非周期性分区。霍尔传感器A
而且B
触发这些分区时,发动机轴旋转每增加10度。
computeThrottle
而且actuatorProcessing
:在0.001秒执行周期性分区。computeThrottle
在每一个时间步中询问RTE。
monitorMalfunction
:定时分区,每0.01秒执行一次ComputeRPM_A
而且ComputeRPM_B
识别潜在的硬件故障。如果检测到故障,则调用RTE提供的函数来注册故障。
checkForRecovery
:一旦检测到故障,由RTE触发的非周期分区。经检测,checkForRecovery
RTE以1秒的速率调用RTE。当检测到恢复时,调用RTE提供的函数。
使用日程编辑器,事件checkForRecovery
,tringCrankA
,trigCrankB
创建并绑定到非周期分区checkForRecovery
,ComputeRPM_A
,ComputeRPM_B
分别。这些活动都是由顶级模特直播的。
曲柄双霍尔传感器
霍尔传感器使用Hit Crossing模块建模,每当发动机轴以10度的增量旋转时,该模块都会生成一个函数调用。当状态流图被触发时,它会发送事件trigCrankA
而且trigCrankB
,它们被绑定执行非周期性分区,ComputeRPM_A
而且ComputeRPM_B
分别。
RTE服务
的RTE服务
子系统模拟运行时环境上可用的功能,数字控制器生成的代码部署在运行时环境上。出于模拟目的,使用Simulink函数模拟这些服务。金宝app
sendFailureStatus
而且recoverFailureStatus
分别由monitorMalfunctions
而且checkForRecovery
当检测到故障或恢复时进行分区。全局故障状态使用数据存储内存块存储,用于模拟目的。
getFailureMode
由computeThrottle
以验证在其中一个传感器中是否检测到故障。
getTimeA
而且getTimeB
模拟RTE时钟。
检查恢复
模拟逻辑以确定何时checkForRecovery
应触发数字控制器的非周期分区。触发是通过广播事件来完成的checkForRecovery
.
打开日程编辑器
要打开日程编辑器,请在建模页中的设计部门,点击时间表编辑器.执行更新图将编译模型,并在Schedule Editor中向您显示现有分区。
日程编辑器中的事件面板
由电视台转播的赛事发送
关键字在statflow中显示事件在Schedule Editor面板中,这些事件被绑定到非周期性分区,以便这些分区可以从顶层模型中触发。在事件面板中,您可以展开每个事件以查看该事件的侦听器和广播器。的图标,表示事件的广播器和图标,监听器。在本例中,事件的发送方checkForRecovery
状态流程图在吗RTE服务
子系统,事件的发送者trigCrankA
而且trigCrankB
为曲柄双霍尔->传感器A和传感器B中的状态流程图。
在订单面板中,分区按照执行优先级的顺序排列。自ComputeRPM_A
而且ComputeRPM_B
时间敏感,他们的优先级最高。因此,当事件发生trigCranA
而且trigCrankB
是否广播,对应分区ComputeRPM_A
而且ComputeRPM_B
立即执行。相反,非周期划分checkForRecovery
时间敏感性较低,优先级顺序较低。因此,当事件发生时checkForRecovery
是广播,执行相应的分区吗checkForRecovery
延迟到所有具有较高优先级的分区完成执行为止。
您可以在Simulink模型中查看该事件连接,该连接在广播事件的块和侦听该事件的块之金宝app间传递执行流。若要查看此连接,请在“Simulink工具条”上金宝app调试选项卡上,选择信息覆盖在诊断部分。从下拉菜单中选择安排连接器在块部分。
仿真结果
点击在模拟数据检查器中查看结果在模型中查看仿真结果。
您可以使用Schedule Editor为带有事件的模型生成测试工具。使用带有测试控制的事件可以帮助您避免在测试序列块和整个系统之间进行复杂的连接。
生成的测试工具有自己的Schedule Editor,它使您能够通过测试工具轻松地发送事件。通过测试工具调度程序,您可以在不同的场景下通过在特定的时间触发事件来测试模型。
Events面板还允许您将现有事件绑定到其他非周期性分区。可以通过将事件拖放到有效的非周期分区上,或者直接使用下拉菜单添加分区来实现这一点。您可以在order表中相对于其他分区对具有事件作为触发器的分区进行排序。您还可以在日程编辑器中创建事件。点击加号图标。双击“添加行”以创建一个新事件。您可以使用此事件从statflow发送来安排非周期性分区的执行。
Schedule Editor中的事件不能在带有导出函数的模型中使用。
事件不支持代码生成,也不会影金宝app响生成的代码。
日程编辑器中的事件使用以下准则:
在处理事件之前不能引发该事件。
在父模型中,由于给出两个相同名称的模型引用而导致的重复事件名称是不允许的。
不允许无限循环。
分区不能引发触发自身的事件。