汽车使用电子设备进行控制操作,例如:
打开和关闭窗户和天窗
调整后视镜和大灯
锁门和开锁
这些系统受到严格的操作限制。失败会导致危险甚至可能危及生命的情况。因此,在部署之前需要仔细的设计和分析。
本例着重于汽车电动车窗系统的设计,特别是副驾驶侧车窗的设计。该系统的一个关键方面是,当窗口关闭时,它不能对物体施加超过100牛的力。当系统检测到这样的物体时,它必须将窗口降低约10厘米。
作为设计过程的一部分,本例考虑:
对窗口控制系统的定量要求,如定时和力的要求
在活动图中捕获的系统需求
活动图中使用的信号的数据定义
本例中包含的设计过程的其他方面包括:
管理系统的组件
构建模型
验证了系统仿真结果
生成代码
除了Simulink,本例还使金宝app用了这些额外的MathWorks®下载188bet金宝搏产品:
DSP系统工具箱
定点设计师™
Simscape™多体™
Simscape电气™
Simscape
金宝app®3 d动画™
金宝app仿真软件实时™
金宝app仿真软件覆盖™
Stateflow®
控制的定量要求如下:
窗口必须在4秒内完全打开和完全关闭。
如果发出up的时间在200毫秒到1秒之间,则窗口必须完全打开。如果发出down命令的时间在200毫秒到1秒之间,则窗口必须完全关闭。
在命令发出后,窗口必须开始移动200毫秒。
当物体存在时,检测力小于100n。
关闭窗户时,如果有物体挡住,请停止关闭窗户,并将窗户降低约10厘米。
活动图帮助您以图形化的方式捕获规范并理解系统是如何运行的。层次结构甚至有助于分析大型系统。在顶层,上下文图描述了系统环境及其与所研究系统之间的数据交换和控制操作方面的交互。然后,您可以将系统分解为具有过程和控制规范(CSPEC)的活动图。
流程指导分层分解。您可以使用另一个活动图或原语规范(PSPEC)指定每个流程。您可以在许多具有正式语义的表示形式中指定PSPEC,例如Simulink框图。金宝app此外,上下文图以图形化的方式捕获系统操作的上下文。
该图表示动力窗系统的上下文图。方形盒子捕捉环境,在本例中是司机、乘客和窗户。司机和乘客都可以向车窗发送命令来上下移动车窗。控制器推断要发送给窗口执行器的正确命令(例如,驱动器命令优先于乘客命令)。此外,diagram监视窗口系统的状态,以确定窗口何时完全打开和关闭,并检测窗口和框架之间是否有物体。
圆圈(也称为气泡)表示功率窗口控制器。圆是一个过程的图形符号。流程捕获输入数据到输出数据的转换。原始过程也可能生成。cspec通常由组合或顺序逻辑组成,用于从输入控制推断输出控制信号。
有关在Simulink环境中的实现,请参见金宝app背景图的实现:权力窗口系统。
电源窗口控件由三个进程和一个CSPEC组成。有两个过程验证司机和乘客的输入,以确保他们的输入在给定的系统状态下是有意义的。例如,如果窗口完全打开,则向下移动
命令没有意义。其余进程检测窗口是完全打开还是完全关闭,以及是否存在对象。CSPEC接收控制信号并推断是向上还是向下移动窗口(例如,如果存在一个对象,窗口向下移动大约一秒钟或直到它到达结束停止)。
有关在Simulink环境中的实现,请参见金宝app活动图的实现:权力窗口控制。
VALIDATE DRIVER活动图中的每个进程都是原语,并由下面的PSPEC指定。在MAKE EXCLUSIVE PSPEC中,出于安全原因下来
命令优先级高于向上
命令。
PSPEC 1.1.1: CHECK DOWN CHECKED_DOWN = DOWN而不是RESET
PSPEC 1.1.2: CHECK UP CHECKED_UP = UP而不是RESET
PSPEC 1.1.3: MAKE EXCLUSIVE VALIDATED_DOWN = CHECKED_DOWN VALIDATED_UP = CHECKED_UP and not CHECKED_DOWN VALIDATED_NEUTRAL =(中性且不(CHECKED_UP and not CHECKED_DOWN)) or not (CHECKED_UP or CHECKED_DOWN)
有关在Simulink环境中的实现,请参见金宝app活动图的实现:验证。
VALIDATE PASSENGER流程的内部结构与VALIDATE DRIVER流程相同。唯一的区别是不同的输入和输出。
PSPEC 1.2.1: CHECK DOWN CHECKED_DOWN = DOWN而不是RESET
PSPEC 1.2.2: CHECK UP CHECKED_UP = UP而不是RESET
PSPEC 1.2.3: MAKE EXCLUSIVE VALIDATED_DOWN = CHECKED_DOWN VALIDATED_UP = CHECKED_UP and not CHECKED_DOWN VALIDATED_NEUTRAL =(中性且不(CHECKED_UP and not CHECKED_DOWN)) or not (CHECKED_UP or CHECKED_DOWN)
有关在Simulink环境中的实现,请参见金宝app活动图:验证乘客。
POWER WINDOW CONTROL活动图中的第三个进程检测障碍物的存在,或者当窗口到达其顶部或底部时(ENDSTOP
).检测机构是基于窗口执行器的电枢电流。在正常运行时,该电流在一定范围内。当窗口到达顶部或底部时,电动机会产生一个大电流(大于15 a或小于-15 a)来维持它的角速度。同样,在正常操作时,电流约为2 A或-2 A(取决于窗口是打开还是关闭)。当有对象时,与此值有轻微偏差。为了使物体上的窗口力小于100n,当检测到电流小于-2.5 a时,控制器将切换到紧急操作。此操作仅在窗口向上滚动时才有必要,这对应于该模型的特定布线中的负电流。DETECT OBSTACLE ENDSTOP活动图体现了这个功能。
CSPEC 1.3:检测障碍物结束停止RESET =障碍物或结束停止
Pspec 1.3.1: detect endstop endstop = window_position > endstop_max
PSPEC 1.3.2:检测障碍物障碍物= (WINDOW_POSITION > OBSTACLE_MAX)和MOVE_UP 500毫秒
有关在Simulink环境中的实现,请参见金宝app活动图:检测障碍物末端停止。
功能分解通过其分解或原语规范(PSPEC)明确地指定每个流程。此外,它还必须在活动图中正式指定信号。为这些规范使用数据定义。
下表是活动图中使用的信号的数据定义。
有关相关的活动图,请参见背景图:电动窗系统。
背景图:Power Window系统数据定义
信号 | 信息类型 | 连续/ 离散 |
数据类型 | 值 |
---|---|---|---|---|
DRIVER_COMMAND |
数据 |
离散 |
总 |
|
PASSENGER_COMMAND |
数据 |
离散 |
总 |
|
WINDOW_POSITION |
数据 |
连续 |
真正的 |
0 ~ 0.4 m |
MOVE_UP |
控制 |
离散 |
布尔 |
|
MOVE_DOWN |
控制 |
离散 |
布尔 |
|
有关相关的活动图,请参见活动图:电源窗口控制。
活动图:权力窗口控件数据定义
信号 | 信息类型 | 连续/ 离散 |
数据类型 | 值 |
---|---|---|---|---|
DRIVER_COMMAND |
数据 |
离散 |
总 |
|
PASSENGER_COMMAND |
数据 |
离散 |
总 |
|
WINDOW_POSITION |
数据 |
连续 |
真正的 |
0 ~ 0.4 m |
MOVE_UP |
控制 |
离散 |
布尔 |
|
MOVE_DOWN |
控制 |
离散 |
布尔 |
|
有关相关的活动图,请参见活动图:验证驱动程序。
活动图:验证驱动程序数据定义
信号 | 信息类型 | 连续/ 离散 |
数据类型 | 值 |
---|---|---|---|---|
DRIVER_COMMAND |
数据 |
离散 |
总 |
|
PASSENGER_COMMAND |
数据 |
离散 |
总 |
|
WINDOW_POSITION |
数据 |
连续 |
真正的 |
0 ~ 0.4 m |
MOVE_UP |
控制 |
离散 |
布尔 |
|
MOVE_DOWN |
控制 |
离散 |
布尔 |
|
有关相关的活动图,请参见活动图:验证乘客。
活动图:验证乘客数据定义
信号 | 信息类型 | 连续/ 离散 |
数据类型 | 值 |
---|---|---|---|---|
中性 |
数据 |
离散 |
布尔 |
|
向上 |
数据 |
离散 |
布尔 |
|
下来 |
数据 |
离散 |
布尔 |
|
CHECKED_UP |
数据 |
离散 |
布尔 |
|
CHECKED_DOWN |
数据 |
离散 |
布尔 |
|
有关相关的活动图,请参见活动图:检测障碍物末端停止。
活动图:检测障碍终止数据定义
信号 | 信息类型 | 连续/ 离散 |
数据类型 | 值 |
---|---|---|---|---|
ENDSTOP_MIN |
数据 |
常数 |
真正的 |
0.0米 |
ENDSTOP_MAX |
数据 |
常数 |
真正的 |
0.4米 |
OBSTACLE_MAX |
数据 |
常数 |
真正的 |
0.3米 |
当我们检查更详细的实现时,模型设计将不断迭代。有关在介绍更多细节时模型设计如何迭代的信息,请参见迭代设计。
MATLAB®和Sim金宝appulin金宝appk支持基于模型的嵌入式控制设计,从初始规范到代码生成。要组织大型项目并与其他人共享工作,请使用项目管理。
电动窗控制项目展示了如何使用MathWorks工具和基于模型的设计过程从概念到实现汽车动力窗系统。它使用项目来组织文件和其他模型组件。
此外,这个示例还展示了如何将模型链接到系统文档。
要打开电源窗口控制器项目,在MATLAB命令窗口中输入:
slexPowerWindowStart
浏览项目文件夹。特别要注意任务文件夹。此文件夹包含为模型运行频繁任务的脚本。对于Power Window Controller项目,这些脚本:
建立模型来控制控制器区域网络(CAN)上的窗口移动。
建立模型,使用statflow和Simulink软件对离散事件反应行为和连续时间行为金宝app进行建模,并采用低阶植物模型。
使用更详细的工厂模型建立模型,其中包括电气和机械领域的功率效应。植物模型验证了窗户对被困物体施加的力。
用一个包含可能改变模型的其他影响的模型来建立模型,比如测量的量化。
请注意
这些脚本还模拟模型。中仅配置模型的脚本configureModel文件夹中。
使用增加覆盖模型来生成模型覆盖报告。
的项目的快捷方式部分包含快速访问命令,您可以双击执行常见任务,例如:
将项目添加到MATLAB路径。
执行交互测试。
用模型覆盖率验证模型测试。
打开主模型。
用各种配置模拟模型。
为模型增加的覆盖率生成一个模型覆盖率报告。
打开用于增加模型覆盖率的模型。
本主题描述电源窗口控件的高级离散事件控件规范。
您可以使用状态流程图对窗口的离散事件控件建模。状态流图是具有层次和并行性的有限状态机。此状态机包含动力窗口系统的基本状态:打开、自动打开、关闭、自动关闭、休息和紧急状态。它对状态转换进行建模,并说明驱动程序命令优于乘客命令的优先级。它还包括当软件在向上移动时检测到窗口和框架之间的物体时激活的紧急行为。
动力窗控制的初始Simu金宝applink模型,slexPowerWindowControl
,是一个以给定采样率运行的离散事件控制器。
在这个实现中,打开电源窗口控制子系统,并观察带有离散事件控制的statflow图形成了CSPEC,由右下角倾斜的粗条表示。detect_obstacle_endstop子系统封装了阈值检测机制。
离散事件控制是一个statflow模型,它扩展了具有层次结构和并行性的状态转换图概念。由乘客命令引起的状态更改封装在超级状态这与活动驱动程序命令不对应。
考虑一下副驾驶窗口的控制。乘客或司机可以上下移动这个窗口。
此状态机包含动力窗口系统的基本状态:打开、自动打开、关闭、自动关闭、休息和紧急状态。
控制输入。的slexPowerWindowCntlInteract
模型将此控制输入包括为开关。双击需要手动操作的交换机。
通过运行输入测试向量,测试控制功率窗口的状态机,并检查它是否达到所需的内部状态并生成输出。电动窗的外部输入如下:
乘客输入
司机输入
打开或关闭窗口
窗户内障碍物
每个输入由一个带有这些输入的向量组成。
乘客输入
元素 | 描述 |
---|---|
中性 |
乘客控制开关未按下。 |
向上 |
乘客控制开关产生上升信号。 |
下来 |
乘客控制开关产生向下信号。 |
司机输入
元素 | 描述 |
---|---|
中性 |
驱动器控制开关未按下。 |
向上 |
驱动器控制开关产生向上信号。 |
下来 |
驱动控制开关产生down信号。 |
打开或关闭窗口
元素 | 描述 |
---|---|
0 |
窗口在顶部或底部之间自由移动。 |
1 |
由于物理限制,窗口卡在顶部或底部。 |
窗户上的障碍物
元素 | 描述 |
---|---|
0 |
窗口在顶部或底部之间自由移动。 |
1 |
窗框上有障碍物。 |
将上下信号映射到下表,生成乘客和司机输入信号:
输入 | 输出 | |||
---|---|---|---|---|
向上 | 下来 | 向上 | 下来 | 中性 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
输入显式地生成中性
事件。向上
而且下来
事件,通过按下电源窗口控制开关产生。输入作为真值表输入在乘客中立,上,下映射和司机中立,上,下映射中。
案例1:Window Up。要观察状态机行为:
打开slexPowerWindowCntlInteract
模型。
运行模拟,然后双击乘客上升开关。
如果您按下物理窗口开关超过1秒,则窗口将向上移动,直到向上开关被释放(或到达窗框的顶部,然后弹出窗口endstop
事件)。
双击所选的乘客上升开关,将其释放。
模拟模型。
设置endstop开关会产生endstop事件。
案例2:窗口自动打开。如果您短时间内(少于一秒)按下实际乘客窗口打开开关,软件将启动自动打开行为,窗口将继续向上移动。
短时间(小于1秒)按下实际乘客窗上开关。
最终,窗口到达框架的顶部,软件生成endstop
事件。此事件将状态机移回中立状态。
模拟模型。
案例3:驱动端优先级。乘客窗口的驱动程序开关优先于驱动程序命令。要观察这种情况下的状态机行为:
运行模拟,然后将系统移动到乘客了
状态通过双击乘客窗口向上开关。
双击驱动下电开关。
模拟模型。
注意状态机如何移动到驱动程序控制部分以生成窗口向下输出而不是窗口向上输出。
双击驱动程序控件以驱动向上。双击驱动下电开关。
到达驱动程序窗口打开状态,再次生成窗口打开输出,即:windowUp = 1
。
若要观察物体位于窗口和框架之间时的状态行为,请双击障碍物开关。
模拟模型。
在下一个采样时间,状态机移动到它的emergencyDown
州政府把窗户降低几英寸。软件降低窗口的程度取决于状态机在emergencyDown
状态。此行为是下一个分析阶段的一部分。
如果驾驶员或乘客窗口开关仍处于活动状态,则状态机在离开紧急状态后的下一个采样时间移动到向上或向下状态。如果障碍开关仍处于激活状态,软件将在下一个采样时间再次激活紧急状态。
控制子系统的验证。使用模型覆盖工具验证窗口的离散事件控制。这个工具帮助您确定一个模型测试用例在多大程度上练习控制器的条件分支。在给定测试用例的情况下,它有助于评估离散事件控制中的所有转换是否都已执行,以及条件中启用特定转换的所有子句是否都已变为真。多个子句可以启用一个转换,例如,当发生100个节拍或到达结束停止时,从紧急状态转换回中性状态。
为了实现完全覆盖,对于所使用的测试用例,每个子句计算为true和false。测试用例执行的转换的百分比称为它模型覆盖。模型覆盖率是测试对模型执行的彻底程度的度量。
使用金宝app仿真软件覆盖软件,您可以对电源窗口控制器应用以下测试。
位置 | 一步 | ||||||
---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3. | 4 | 5 | 6 | |
乘客了 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
乘客下来 | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
司机了 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
司机下来 | 0 | 1 | 0 | 0 | 1 | 1 | 0 |
在此测试中,所有开关在时间0时都处于非活动状态。每1 s步,一个或多个开关的状态发生变化。例如,经过1s后,驱动down开关变为active。若要自动运行这些输入向量,请将手动开关替换为指定的输入序列。要查看预构建的模型:
在MATLAB命令窗口中输入:
slexPowerWindowCntlCoverage
模拟模型以生成金宝app仿真软件覆盖覆盖率报告。
为slexPowerWindowCntlCoverage
模型,报告显示,该测试处理100%的决策结果从驱动中立,向上,向下地图块。然而,该测试对乘客中立、向上、向下地图块的覆盖率仅为50%。这个覆盖率指的是总体的覆盖率slexPowerWindowCntlCoverage
而45%是整体覆盖的吗slexPowerWindowControl
模型是42%。影响覆盖水平的几个因素是:
乘客上挡不变。
终点和障碍物不改变。
增加模型覆盖率。要将总覆盖率提高到100%,您需要考虑驾驶员、乘客、障碍物和终停设置的所有可能组合。当您对控制行为感到满意时,您可以创建动力窗口系统。有关更多信息,请参见使用基于模型的设计创建模型。
此示例增加了窗口离散事件控件验证的模型覆盖率。首先,示例使用来自的输入slexPowerWindowCntlCoverage
作为模型覆盖的基线。接下来,为了进一步执行窗口的离散事件控制,它将创建更多的输入集。电子表格文件,inputCntlCoverageIncrease.xlsx
,包含这些输入集,每个工作表使用一个输入集。
在本例中,slexPowerWindowSpreadsheetGeneration
实用函数,从控制器模型创建电子表格模板,slexPowerWindowControl
,创建inputCntlCoverageIncrease.xlsx
。在inputCntlCoverageIncrease.xlsx
,该函数使用控制器模型中的块名称作为信号名称。slexPowerWindowSpreadsheetGeneration
定义表名。的slexWindowSpreadsheetAddInput
效用函数填充inputCntlCoverageIncrease.xlsx
用信号数据。
这些输入集的表名及其描述如下:
表的名字 | 描述 |
---|---|
|
从 |
|
从 |
|
从 |
|
从 |
|
从 |
|
司机正在放下车窗,乘客没有采取任何行动 |
|
司机正在把车窗拉上,乘客没有采取任何行动 |
|
司机放下车窗一秒钟(自动放下),乘客没有任何动作 |
|
司机打开车窗一秒钟(自动打开),乘客没有采取任何行动 |
|
乘客放下车窗一秒钟(自动放下),司机没有采取任何行动 |
|
乘客打开车窗一秒钟(自动打开),司机没有采取任何行动 |
要自动运行这些输入向量,请将离散事件控件的输入替换为从电子表格使用文件阻止,inputCntlCoverageIncrease.xlsx
。该文件包含多个输入集。要查看预构建的模型:
在MATLAB命令窗口中输入:
slexPowerWindowCntlCoverageIncrease
要生成金宝app仿真软件覆盖对于多个输入集的覆盖率报告,双击模型中的Run coverage子系统。
为slexPowerWindowCntlCoverageIncrease
模型中,报告显示使用多个输入集成功地提高了模型的总体覆盖率slexPowerWindowControl
模型从42%上升到78%。由于缺少输入集,覆盖级别小于100%:
乘客上车状态
驱动器上下状态
乘客自动下降和自动上升状态
在基于模型的设计中,系统模型处于开发过程的中心,从需求开发,到设计实现,再到测试。使用基于模型的设计:
跨项目团队使用通用的设计环境。
将设计直接链接到需求。
集成测试和设计,持续识别和纠正错误。
通过多域仿真优化算法。
自动生成嵌入式软件代码。
开发和重用测试套件。
自动生成模型的文档。
重用设计以跨多个处理器和硬件目标部署系统。
有关以上下文图形式显示的需求,请参见背景图:电动窗系统。
创建一个类似于上下金宝app文图的Simulink模型。
将工厂的行为放到一个子系统中。
创建两个子系统,其中包含驱动开关和副开关。
添加一个控制机制来方便地在对象的存在和不存在之间切换。
把控制放在一个子系统中。
连接新的子系统。
要查看这个模型的实现,在MATLAB命令窗口中输入:
slexPowerWindowStart
您可以使用电源窗口控制活动图(活动图:电源窗口控制),将上下文图的功率窗口控制器分解为多个部分。该图显示了上下文图中出现的输入和输出信号,以便更容易地追踪到它们的起源。
为了满足全部要求,电动窗控制必须与驾驶员和乘客输入验证一起工作,并检测结束停止。
有关以活动图形式显示的需求,请参见活动图:电源窗口控制。
双击slexPowerWindowExample/power_window_control_system块,打开以下子系统:
有关以活动图形式显示的需求,请参见活动图:验证驱动程序而且活动图:验证乘客。
活动图为司机和乘客的命令添加了数据验证功能,以确保正确的操作。例如,当窗口到达顶部时,软件会阻塞窗口向上
命令。实现将每个验证过程分解为新的子系统。考虑驱动程序命令的验证(乘客命令的验证类似)。检查模型是否可以执行向上
或下来
命令,按照如下:
该模型允许下来
仅当窗口未完全打开时使用。
该模型允许向上
仅在窗口未完全关闭且未检测到对象时使用。
第三个活动图流程检查软件只发送三个命令中的一个(中性
,向上
,下来
)到控制器。在实际实现中,两者都有向上
而且下来
可以同时为真(例如,因为开关弹跳效果)。
来自power_window_control_system子系统,这是validate_driver_state子系统:
来自power_window_control_system子系统,这是validate_passenger er_state子系统:
有关以活动图形式显示的需求,请参见活动图:检测障碍物末端停止。
在slexPowerWindowExample
模型中,power_window_control_system/detect_obstacle_endstop块在variant Subsystem块的连续变体中实现了这个活动图。在设计迭代期间,您可以添加额外的变量。
双击slexPowerWindowExample
model power_window_control_system/detect_obstacle_endstop/Continuous/verify_position块:
在设计并验证了离散事件控制之后,将其与连续时间的植物行为集成。这一步是植物最简单版本设计的第一次迭代。
在项目中,导航到文件并点击项目。在configureModel文件夹,运行slexPowerWindowContinuous
实用程序打开并初始化模型。
window_system块使用不同的子系统块,以允许在植物建模中的不同保真度。双击window_system/Continuous/2nd_order_window_system块查看Continuous变体。
该植物被建模为输入随阶跃变化的二阶微分方程:
当状态流图生成时windowUp
,输入为1。
当状态流图生成时windowDown
,输入为-1。
否则,输入为0。
这个阶段允许分析离散事件状态行为、采样率和窗口移动的连续行为之间的相互作用。有阈值来生成窗框顶部和底部:
endStop
当存在障碍时,即障碍
其他活动
双击slexPowerWindowExample
model power_window_control_system/detect_obstacle_endstop/Continuous/verify_position块查看连续变量。
当你运行slexPowerWindowContinuous
configureModel实用程序,该模型使用连续时间求解器ode23 (Bogacki-Shampine)。
系统的结构分析结果如下:
系统的功能分解
数据定义与具体的系统信号
时间限制
结构分析还可以包括实现体系结构(超出了本文讨论的范围)。
该实现还增加了一个控制机制,可以方便地在对象的存在和不存在之间切换。
预期控制器响应。要查看窗口移动,在项目的快捷方式,双击SimHybridPlantLowOrder
。或者,您也可以运行该任务slexPowerWindowContinuousSim
。
位置范围显示来自控制器的预期结果。30厘米后,模型生成障碍
事件,状态流图移动到它的emergencyDown
状态。在这种状态下,windowDown
输出,直到窗口降低约10厘米。由于乘客窗上升开关仍处于打开状态,车窗开始再次上升,这个过程重复进行。停止模拟,打开位置范围,观察振荡过程。在紧急情况下,离散事件控件将窗口向下滚动约10厘米。
在对离散事件控制和连续动态进行初步分析之后,您可以使用详细的工厂模型在更现实的情况下评估性能。最好在动力领域设计这样一个细节级别的模型,换句话说,作为能量流。一些特定于领域的MathWorks块集可以帮助实现这一点。
为了考虑能量流,在window_system变体子系统中添加一个更详细的由电力电子和多体系统组成的变体。
要在项目中打开模型并探索更详细的植物变体,请运行configureModelslexPowerWindowPowerEffects
。
双击slexPowerWindowExample
model window_system/Power Effects—可视化/detailed_window_system块。
电力电子子系统。该模型必须放大由离散事件控制器产生的控制信号,使其足够强大,以驱动移动窗口的直流电机。
放大模块对这种行为进行建模。它们表明,一个开关要么将直流电机连接到电池电压,要么连接到地面。通过反向连接电池,系统产生负电压,窗口可以向上、向下移动或保持静止。这扇窗户总是开到最大功率。换句话说,没有直流电机控制器适用于规定的速度。
要查看实现,双击slexPowerWindowExample
model window_system/Power Effects - Visualization/detailed_window_system/amplification_up块。
多体系统。这个实现为窗口建模Simscape多体块。
要查看执行器实现,双击slexPowerWindowExample
model window_system/Power Effects - Visualization/detailed_window_system/驱动器块。
要查看窗口实现,双击slexPowerWindowExample
model window_system/Power Effects - Visualization/detailed_window_system/plant block。
该实现使用Simscape多体身体、关节和执行器的块。窗口模型包括:
蜗轮
在垂直方向上移动窗架的杠杆
该图显示机械部件是如何运动的。
迭代设计。更详细的实现的一个重要影响是没有可用的窗口位置测量。相反,该模型测量直流电机电流,并使用它来检测端停,并查看是否存在障碍物。系统设计的下一阶段分析控制,以确保当存在障碍物时,它不会造成过大的力。
在原来的系统中,该设计删除了基于窗口位置的障碍和终止检测,并将其替换为基于当前的实现。它还将该过程与控制器以及位置和力测量连接起来。要反映使用的不同信号,必须修改数据定义。此外,观察到,由于功率效应,单位现在是安培。
Pspec 1.3.1: detect endstop endstop = armature_current > endstop_max
PSPEC 1.3.2:检测障碍物障碍物= (ARMATURE_CURRENT > OBSTACLE_MAX)和MOVE_UP 500毫秒
PSPEC 1.3.3:绝对值ABSOLUTE_ARMATURE_CURRENT = abs(ARMATURE_CURRENT)
此表列出了上下文图:功率窗口系统数据定义的附加信号。
背景图:Power Window系统数据定义更改
信号 | 信息类型 | 连续/ 离散 |
数据类型 | 值 |
---|---|---|---|---|
ARMATURE_CURRENT |
数据 |
连续 |
真正的 |
-20 ~ 20a |
此表列出了活动图:检测障碍终止数据定义的更改信号。
活动图:检测障碍终止数据定义变化
信号 | 信息类型 | 连续/ 常数 |
数据类型 | 值 |
---|---|---|---|---|
ABSOLUTE_ARMATURE_CURRENT |
数据 |
连续 |
真正的 |
0 ~ 20a |
ENDSTOP_MAX |
数据 |
常数 |
真正的 |
15一个 |
OBSTACLE_MAX |
数据 |
常数 |
真正的 |
2.5 |
要查看窗口子系统,双击slexPowerWindowExample
model window_system/Power Effects - Visualization/detailed_window_system/plant/window block。
该实现使用查找表并添加噪声来评估控制的鲁棒性。要查看摩擦子系统的实现,双击slexPowerWindowExample
model window_system/Power Effects - Visualization/detailed_window_system/plant/window/摩擦块。
理想的连续装置允许进入窗口位置endStop
而且障碍
事件的一代。在更现实的实现中,模型必须从可访问的物理变量生成这些事件。对于电动窗系统,这个物理变量通常是电枢电流,Ia
,即驱动蜗轮的直流电机。
当窗口移动时,电流的近似值为2a。当你打开窗口时,模型会产生一个瞬态电流,这个电流可以达到大约10 a的值。当电流超过15a时,模型启动端停检测。尽管输入电压为正或负,但当电机的角速度保持在几乎为0时,该模型绘制出该电流。
在这种设置中,检测对象的存在更加困难。由于安全考虑限制窗口力不超过100n,电枢电流远小于10a就能检测到物体。然而,这种行为与正常操作期间实现的瞬态值冲突。
实现一个控制律,在实现瞬态值期间禁用对象检测。现在,当系统检测到电枢电流超过2a时,它认为有一个物体存在,并进入emergencyDown
离散事件控件的状态。打开力范围窗口(测量单位为牛顿),检查当物体存在时,所施加的力仍然小于100n,并且窗口将其速度反转。
在现实中,更复杂的控制法则是可能实现的。例如,可以实现基于神经网络的学习前馈控制技术,以模拟每辆车的摩擦特性以及随时间的变化。
如果你有金宝appSimulink 3D动画安装软件后,您可以通过虚拟现实世界查看系统的运动几何。如果VR接收器块尚未打开,请在slexPowerWindowExample / window_worl金宝appd Simulink_3D_Animation视图
模型,双击VR Sink块。
用刚性求解器模拟模型:
在项目中,运行任务,slexPowerWindowPowerEffectsSim
。这个批处理作业将解算器设置为ode23tb (stiff/TR-BDF2)。
在slexPowerWindowExample
model passenger er_switch/Normal block,将passenger up switch设置为on。
在slexPowerWindowExample
model driver_switch/Normal block,将驱动up开关设置为off。
模拟模型。
在10ms到1s的模拟时间内,关闭slexPowerWindowExample/passenger er_switch/Normal block passenger up开关,启动自动up行为。
观察窗口支架如何开始垂直移动以关闭窗口。当模型遇到对象时,它将窗口向下滚动。
双击slexPowerWindowExample
model passenger er_switch/Normal block driver down switch完全摇下车窗,然后模拟模型。在此块中,在小于一秒的模拟时间内,关闭驱动器下电开关以启动自动下电行为。
当窗口到达帧的底部时,停止模拟。
看位置测量(米)和电枢电流(Ia)测量(安培)。
请注意
正常状态下电枢暂态电流的绝对值不超过10a。当使窗口向上移动所需的电枢电流绝对值超过2.5 A(实际上小于-2.5 A)时,模型就会检测到障碍物。在正常运行时,这大约是2 A。你可能需要放大范围才能看到这个测量值。当电枢电流绝对值超过15a时,该模型检测窗口终停。
在正常操作期间,电枢电流的变化是由于摩擦引起的,这包括感应关节速度和位置以及应用特定窗口系数。
电动窗控制中使用的电枢电流是一个理想值,因为使用了执行器模型。在更现实的情况下,数据采集组件必须测量这个当前值。
要包含数据采集组件,可以将更实际的度量变量添加到window_system变量子系统中。这种现实的测量变体包含一个信号调理块,其中电流是基于电压测量而导出的。
要打开一个模型并配置实际的度量,在项目中,运行configureModel任务slexPowerWindowRealisticArmature
。
要查看“现实电枢-通信协议”块的内容,双击SlexPowerWindowExample
model window_system/Realistic Armature -通信协议/detailed_window_system_with_DAQ。
测量电压在模数转换器(ADC)的范围内,ADC根据给定的比特数进行离散化。您必须根据电阻的值和ADC的范围缩放结果值。
将这些操作包括为定点计算。为了在给定范围内实现必要的分辨率,需要16位而不是8位。
研究相同的场景:
在slexPowerWindowExample/passenger er_switch/Normal块中,设置passenger up开关。
运行模拟。
过了一段时间,在slexPowerWindowExample/passenger er_switch/Normal块中,关闭passenger up开关。
当窗口下拉时,单击slexPowerWindowExample/passenger er_switch/Normal块驱动下拉开关。
等待一段时间后,关闭slexPowerWindowExample/passenger er_switch/Normal块驱动下电开关。
当窗口到达帧的底部时,停止模拟。
放大armature_current作用域窗口,注意离散化的外观。
与电源窗口输出控件类似,硬件必须生成输入事件。在这种情况下,硬件是门中的窗口控制开关和中心控制面板。本地处理器生成这些事件,然后通过CAN总线将它们传递给窗口控制器。
为了包含这些事件,添加一个包含来自CAN总线和开关组件的输入的变体,这些开关组件生成的事件在CAN总线上传递给驱动交换机和副交换机变体子系统。要打开模型并配置CAN通信协议,请运行configureModel任务,slexPowerWindowCommunicationProtocolSim
。
要查看开关子系统的实现,双击slexPowerWindowExample/driver_switch/Communication Protocol/driver窗口控制开关块。
观察一个与窗口控制系统非常相似的结构。该结构包含:
表示控制开关的工厂模型
数据采集子系统,除其他外,包括信号调理组件
控制模块,将物理交换机的命令映射到逻辑命令
CAN模块张贴事件到车辆数据总线
您可以添加通信效果,例如使用can总线的其他系统,以及与所描述的阶段类似的更现实的效果。每个阶段都允许在越来越现实的情况下分析离散事件控制器。当您有足够的细节时,您可以自动为任何特定的目标平台生成控制器代码。
您可以为设计的控制模型生成代码,slexPowerWindowExample
。
显示控制器的采样率。在Simuli金宝appnk编辑器中调试选项卡上,选择信息覆盖>样品时间>颜色。观察控制器以均匀的采样率运行。
右键单击power_window_control_system块并选择C / c++代码>构建这个子系统。
Mosterman, Pieter J., Janos Sztipanovits,和Sebastian Engell,“控制系统技术中的计算机自动化多范式建模”,IEEE控制系统技术汇刊,卷12,第2期,2004年,第223-234页。