建模一个电动窗口控制器
本示例展示如何在使用MATLAB®作为动作语言的Stateflow®图表和在app Designer中创建的MATLAB应用程序之间创建接口。有关将使用C作为动作语言的状态流程图连接到MATLAB应用程序的详细信息,请参见模拟媒体播放器.
在本例中,汽车电动车窗系统根据一对车窗控制开关提高和降低副驾驶侧车窗。MATLAB应用程序中的开关代表司机和乘客门上的控制。该应用程序还包含几个指示灯,用于监控电动车窗系统的状态,以及一个用于在车窗路径上引入障碍物的按钮。
状态流图应用程序接口
提供MATLAB应用程序与Simulink®模型中的控制和工厂系统之间的双向连接。万博1manbetx当你将应用程序中的开关指向一个新位置时,图表会向电源窗口控制系统发送相应的“向上”、“向下”或“中立”命令。相反,当控制系统改变状态时,图表启用或禁用应用程序中相应的状态灯。
要运行示例,请打开Simulink模型并单击万博1manbetx运行.图表应用程序接口
打开应用程序并初始化电力窗口系统中的控制和工厂系统。单击,停止模拟停止或者关闭应用程序。
连接图表到MATLAB应用程序
图表应用程序接口
已经配置为与MATLAB应用程序通信sf_power_window_app
.要在MATLAB应用程序和使用MATLAB作为操作语言的状态流程图之间创建双向连接,请执行以下步骤。在MATLAB应用中:
创建自定义属性以在模拟期间与图表交互。应用程序使用此属性访问图表输入、图表输出和本地数据。有关更多信息,请参见在应用设计器应用中共享数据.
修改
startupFcn
通过添加一个新的输入参数并将其值存储为你在上一步中创建的属性来为应用程序回调。有关更多信息,请参见应用程序设计器中的回调.
在状态流图中:
创建一个本地数据对象来与应用程序交互。图表在调用应用程序中的帮助函数时使用这个本地数据对象作为参数。
将上一步中创建的本地数据对象的类型设置为
继承:从图表中的定义继承
.有关更多信息,请参见指定状态流数据类型.调用
coder.extrinsic
函数来声明应用程序和任何辅助函数作为外部的MATLAB代码。有关更多信息,请参见在状态流程图中调用外部MATLAB函数.使用关键字运行应用程序
这
作为参数,让应用程序在模拟期间访问图表。将函数调用给应用程序返回的值存储为您创建的用于与应用程序交互的本地数据对象。
在本例中,power窗口应用程序使用名为图表
与图表连接应用程序接口
.应用程序回调使用此属性写入图表输出:
当您移动驾驶侧控制开关到一个新的位置时,该开关
DriverControlValueChanged
的值switches.driver_up
而且switches.driver_down
.当您移动副驾驶侧的控制开关到一个新的位置时,按钮
PassengerControlValueChanged
的值switches.passenger_up
而且switches.passenger_down
.当你点击障碍按钮时,
ObstacleButtonPushed
的值障碍
来真正的
.当你关闭应用程序时,
UIFigureCloseRequest
的值停止
来真正的
.
相反,在图表中,条目操作在InterfaceWithApp
运行应用程序sf_power_window_app
并将返回值存储为本地数据对象应用程序
.图表在调用助手函数时使用此本地数据对象updateLamps
.在应用程序中,这个帮助函数根据图表输入的值来打开和关闭灯灯
.
控制系统设计
电动窗控制系统使用模式逻辑来确定窗口何时应该移动,并向伺服电机输出统一的运动命令。为了降低生产成本,控制系统不跟踪窗口位置。相反,它依靠伺服电机的信号来确定窗口何时完全打开或完全关闭,或者当它遇到障碍物时。
控制系统满足以下性能要求:
窗口必须在5秒内完全打开或关闭。
当窗口达到全开或全关位置时,电机必须停止。
当窗户向上移动时,电机必须能够检测到障碍物。当电机检测到窗口路径上有障碍物时,必须将窗口降低1秒或直到窗口完全打开。
电机在任何方向连续运动10秒后必须停止。这一要求为窗户机构、电机和驱动器提供了故障安全保护。
如果控制开关被按下的时间少于半秒,或被按下的时间超过一秒,当开关被释放时,窗口必须停止。
如果按下控制开关的时间超过半秒,并且在一秒前松开,则窗口必须完全打开或关闭,除非有新的命令或障碍物中断。这个要求代表了电动窗的自动模式能力。
驾驶员侧的控制优先于乘客侧的控制。
障碍物检测优先于驾驶员侧和乘客侧的控制。
状态流图控制系统
为满足这些要求的事件驱动控制器建模。该图由两个状态组成(开关
而且逻辑
)进行平行分解。这些状态对图表输入的变化做出反应,确定动力窗系统的工作模式,并管理激活伺服电机的输出信号。
监控控制器输入
国家开关
读取图表输入的值并广播本地事件以更改功率窗口系统的运行模式。有关更多信息,请参见广播本地事件以同步并行状态.
在模拟的每个时间步骤中,状态调用真值表函数checkSwitches
确定驾驶员侧和副驾驶侧控制开关的位置。这取决于输入结构的值开关
,此函数广播向上
,下来
,中性
事件。由于当驾驶员控制不在“中立”位置时,该函数忽略来自乘客侧控制的任何输入,因此根据需求7指定,驾驶员侧控制优先于乘客侧控制。
以类似的方式,状态调用图形函数detectObstacles
确定伺服电机中电枢电流的强度。如果的值当前的
是小而非零,一个障碍是存在的,所以函数广播事件障碍
.相反,如果的值当前的
是大,窗口已达到全开或全关的位置,所以函数广播事件ENDSTOP
.因为图表要求detectObstacles
之前checkSwitches
,如要求8所规定的,障碍检测优先于驾驶侧和乘客侧控制。
确定运行模式
国家逻辑
集成故障检测算法,以保护窗口硬件和窗口路径中的任何障碍。这个状态包含三个次状态,停止
,移动
,EmergencyDown
,表示电动窗系统的工作模式。
最初,国家停止
是活跃的。此状态包含两个并行的子状态,分别命名为模式
而且位置
.
模式
确定电源系统何时准备好接受来自控制开关的新命令。当两个控制开关处于“中立”位置时,系统已准备好接受新命令。位置
记录窗口是完全打开、完全关闭还是处于中间位置。该图表通过注意伺服电机到达其范围末端时窗口移动的方向来确定这一点。
停止
在事件广播之前一直处于活动状态向上
或下来
指示来自其中一个控制开关的命令。只要窗口不是完全打开或完全关闭,这些事件就会触发到状态的转换移动
.然而,事件向上
在窗口已完全关闭时视为无效。同样的,事件下来
在窗口完全打开时无效。
国家移动
每当窗口处于运动状态时,都是活动的。此状态实现了与自动窗口移动和故障检测相关的几个电力窗口需求。这个状态有两个平行的子状态方向
而且模式
.
方向
确定窗口应该移动的方向并调用函数go.up
而且go.down
。这些功能设置输出信号的值,控制伺服电机和应用程序中的“向上”和“向下”状态灯。模式
实现了要求5和6规定的电动窗的自动和手动模式。此状态有三个排他性次状态(初始化
,汽车
,手册
).最初,亚态初始化
是活跃的。子状态等待的广播中性
事件,这表明控制开关已返回到“中性”位置。如果广播发生在半秒之内初始化
事件变得活跃,触发到停止
状态,表示窗口必须停止移动。如果广播发生在半秒之后,但在一秒之前初始化
事件变得活跃,触发到次状态的转换汽车
,表示电动窗系统在自动模式下运行。这个子状态一直保持活动状态,直到被事件广播中断ENDSTOP
(当窗户全开或全关时),障碍
(当窗户遇到障碍物时),或者向上
或下来
(当系统从其中一个控制开关接收到一个新命令时)。最后,如果广播在一秒之前没有发生初始化
变得活跃,时间逻辑表达后(1秒)
触发到子状态的转换手册
.在事件广播之前,该副状态一直处于活动状态中性
对象的转换停止
状态。
不管系统是自动模式还是手动模式,图表直接从移动
来停止
在事件的广播上ENDSTOP
或者当移动
活动时间大于FAILSAFE_TIMEOUT
秒,由需求2和4指定。缺省情况下,该常量的值设置为10。
检测到障碍物
当窗口遇到障碍物时,施加在窗口上的力增加了伺服电机上的负载,导致电枢电流上升。通过监测电枢电流的急剧增加,系统检测到窗口路径中的障碍物。
在这个例子中,一个Simulink子系万博1manbetx统模拟伺服电机。控件计算窗口的位置积分器(万博1manbetx模型)块的饱和限制为0(全开)和10(全闭)。因为这个块的输入有2的增益,窗口在5秒内完全打开和关闭,正如需求1所指定的那样。当Integrator块达到饱和点时,系统输出电枢电流
增加到10。这个值表示窗口是完全打开还是完全关闭。
若要在窗口路径中引入障碍物,请单击障碍按钮在应用程序,而窗口移动。的应用程序接口
Chart通过向伺服电机发送一个正信号来响应,伺服电机反过来产生一个小的电枢电流上升。在控制系统
图表,函数detectObstacles
将此更改注册到当前并广播该事件障碍
.在逻辑
状态时,此事件触发从子状态的转换移动
到次州EmergencyDown
.当此子状态处于活动状态时,系统将窗口向下移动一秒钟或直到窗口完全打开。然后,图表转换回子状态停止
,表示窗口必须停止移动,正如需求3所指定的那样。
另请参阅
后
|焕然一新
|发送
|这
|coder.extrinsic
(MATLAB编码器)|积分器(万博1manbetx模型)