文档

电动窗

学习电动窗

汽车使用电子设备进行控制操作,例如:

  • 打开和关闭窗户和天窗

  • 调整后视镜和前灯

  • 锁门和开锁

这些系统受到严格的操作限制。失败会导致危险甚至可能危及生命的情况。因此,在部署之前需要仔细的设计和分析。

本实例着重于汽车动力窗系统的设计,特别是乘客侧窗的设计。该系统的一个关键方面是,当窗口关闭时,它不能对物体施加超过100牛的力。当系统检测到这样的物体时,它必须将窗口降低约10厘米。

作为设计过程的一部分,该示例考虑:

  • 对窗口控制系统的定量要求,如定时和力的要求

  • 在活动图中捕获的系统需求

  • 活动图中使用的信号的数据定义

这个例子包含的设计过程的其他方面是:

  • 管理系统的组件

  • 构建模型

  • 验证系统仿真结果

  • 生成代码

MathWorks本例使用的软件

除了Simulink之外,本例万博1manbetx还使用了这些附加的MathWorks®s manbetx 845产品:

  • DSP系统工具箱™

  • 定点设计师™

  • Simscape™多体™

  • Simscape Power Systems™

  • Simscape

  • 万博1manbetx®3 d动画™

  • 万博1manbetx仿真软件实时™

  • 万博1manbetx仿真软件覆盖™

  • Stateflow®

定量要求

控制的定量要求是:

  • 窗户必须在4秒内完全打开和完全关闭。

  • 如果up发出的时间在200毫秒到1秒之间,则窗口必须完全打开。如果发出down命令的时间在200毫秒到1秒之间,则窗口必须完全关闭。

  • 该窗口必须在发出命令200毫秒后开始移动。

  • 检测物体是否存在的力小于100牛。

  • 关闭窗户时,如果有物体挡道,请停止关闭窗户,并将窗户降低约10cm。

在活动图和上下文图中获取需求

活动图帮助您以图形方式捕获规范并理解系统的操作方式。层次结构甚至有助于分析大型系统。在顶层,上下文图根据数据交换和控制操作描述系统环境及其与所研究系统的交互。然后,您可以将系统分解为带有过程和控制规范(CSPEC)的活动图。

流程指导分层分解。您可以使用另一个活动图或基本规范(PSPEC)指定每个流程。您可以在许多具有正式语义的表示形式中指定PSPEC,例如Simulink方框图。万博1manbetx此外,上下文图以图形方式捕获系统操作的上下文。

背景图:电动窗系统

该图表示电动窗系统的上下文图。方形盒子捕捉环境,在这种情况下,司机,乘客和窗户。司机和乘客都可以向车窗发出上下移动的命令。控制器推断出发送给窗口执行器的正确命令(例如,驾驶员命令优先于乘客命令)。此外,diagram还监视窗口系统的状态,以确定窗口何时完全打开和关闭,并检测窗口和框架之间是否存在对象。

圆圈(也称为气泡)代表电动窗控制器。圆圈是一个过程的图形符号。流程捕获输入数据到输出数据的转换。原始过程也可能生成。cspec通常由组合或顺序逻辑组成,用于从输入控制推断输出控制信号。

有关在Simulink环境中的实现,请参见万博1manbetx上下文图的实现:电源窗系统

活动图:电源窗口控制

电动窗控制由三个进程和一个CSPEC组成。两个过程验证驾驶员和乘客的输入,以确保他们的输入在给定系统状态下是有意义的。例如,如果窗口完全打开,则向下移动命令没有意义。其余进程检测窗口是否完全打开或完全关闭,以及是否存在对象。CSPEC接受控制信号并推断是向上还是向下移动窗口(例如,如果存在对象,窗口向下移动大约一秒钟或直到它到达一个终止点)。

有关在Simulink环境中的实现,请参见万博1manbetx活动图的实现:电源窗口控制

活动图:验证驱动程序

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 = (NEUTRAL and not (CHECKED_UP and not CHECKED_DOWN))或not (CHECKED_UP or CHECKED_DOWN)

有关在Simulink环境中的实现,请参见万博1manbetx活动图的实现:验证

活动图:验证乘客

VALIDATE PASSENGER进程的内部结构与VALIDATE DRIVER进程相同。唯一的区别是输入和输出不同。

PSPEC 1.2.1: CHECK DOWN CHECKED_DOWN = DOWN而不是RESET
PSPEC 1.2.2:检查CHECKED_UP = UP而不是RESET
PSPEC 1.2.3: MAKE EXCLUSIVE VALIDATED_DOWN = CHECKED_DOWN VALIDATED_UP = CHECKED_UP and not CHECKED_DOWN VALIDATED_NEUTRAL = (NEUTRAL and not (CHECKED_UP and not CHECKED_DOWN))或not (CHECKED_UP or CHECKED_DOWN)

有关在Simulink环境中的实现,请参见万博1manbetx活动图:验证乘客

活动图:检测障碍终点

POWER WINDOW CONTROL活动图中的第三个进程检测障碍物的存在或当窗口到达其顶部或底部时(ENDSTOP).该检测机构基于窗口执行器的电枢电流。在正常工作时,该电流在一定范围内。当窗口到达顶部或底部时,电动机会吸收大电流(大于15 a或小于-15 a)以试图维持其角速度。同样,在正常操作时,电流约为2a或- 2a(取决于窗口是否打开或关闭)。当有对象时,与此值有轻微偏差。当检测到电流小于-2.5 a时,为了使窗口作用在物体上的力小于100n,控制器将切换到紧急运行状态。只有当窗口卷起时才需要进行此操作,这对应于该模型的特定布线中的负电流。DETECT OBSTACLE ENDSTOP活动图体现了这个功能。

CSPEC 1.3:检测障碍结束停止复位=障碍或结束停止
Pspec 1.3.1: detect endstop endstop = window_position > endstop_max . 0
PSPEC 1.3.2: DETECT OBSTACLE OBSTACLE = (WINDOW_POSITION > OBSTACLE_MAX) and MOVE_UP for 500 ms

有关在Simulink环境中的实现,请参见万博1manbetx活动图:检测障碍终点

数据定义

功能分解通过其分解或原语规范(PSPEC)明确地指定每个过程。此外,它还必须正式指定活动图中的信号。对这些规范使用数据定义。

下表是活动图中使用的信号的数据定义。

有关相关的活动图,请参见背景图:电动窗系统

背景图:电源窗系统数据定义

信号 信息类型 连续/
离散
数据类型

DRIVER_COMMAND

数据

离散

中性向上下来

PASSENGER_COMMAND

数据

离散

中性向上下来

WINDOW_POSITION

数据

连续

真正的

0 ~ 0.4米

MOVE_UP

控制

离散

布尔

“真正的”“假”

MOVE_DOWN

控制

离散

布尔

“真正的”“假”

有关相关的活动图,请参见活动图:电源窗口控制

活动图:电源窗口控制数据定义

信号 信息类型 连续/
离散
数据类型

DRIVER_COMMAND

数据

离散

中性向上下来

PASSENGER_COMMAND

数据

离散

中性向上下来

WINDOW_POSITION

数据

连续

真正的

0 ~ 0.4米

MOVE_UP

控制

离散

布尔

“真正的”“假”

MOVE_DOWN

控制

离散

布尔

“真正的”“假”

有关相关的活动图,请参见活动图:验证驱动程序

活动图:验证驱动程序数据定义

信号 信息类型 连续/
离散
数据类型

DRIVER_COMMAND

数据

离散

中性向上下来

PASSENGER_COMMAND

数据

离散

中性向上下来

WINDOW_POSITION

数据

连续

真正的

0 ~ 0.4米

MOVE_UP

控制

离散

布尔

“真正的”“假”

MOVE_DOWN

控制

离散

布尔

“真正的”“假”

有关相关的活动图,请参见活动图:验证乘客

活动图:验证乘客数据定义

信号 信息类型 连续/
离散
数据类型

中性

数据

离散

布尔

“真正的”“假”

向上

数据

离散

布尔

“真正的”“假”

下来

数据

离散

布尔

“真正的”“假”

CHECKED_UP

数据

离散

布尔

“真正的”“假”

CHECKED_DOWN

数据

离散

布尔

“真正的”“假”

有关相关的活动图,请参见活动图:检测障碍终点

活动图:检测障碍终点数据定义

信号 信息类型 连续/
离散
数据类型

ENDSTOP_MIN

数据

常数

真正的

0.0米

ENDSTOP_MAX

数据

常数

真正的

0.4米

OBSTACLE_MAX

数据

常数

真正的

0.3米

当我们检查更详细的实现时,模型设计迭代。有关在引入更多细节时模型设计如何迭代的信息,请参见迭代设计

万博1manbetx电源窗控制器万博1manbetx项目

MATLAB®和Sim万博1manbet万博1manbetxxulink支持基于模型的嵌入式控制设计,从最初的规范到代码生成。要组织大型项目并与他人共享您的工作,请使用万博1manbetx仿真软件项目

电动车窗控制项目这个示例展示了如何使用MathWorks工具和基于模型的设计过程,从概念到实现汽车动力窗系统。它使用Simul万博1manbetxink Projects来组织文件和其他模型组件。

另外,这个例子展示了如何将模型链接到系统文档。

探索电动窗控制器项目

  1. 要打开电源窗口控制器项目,在MATLAB命令窗口中输入:

    slexPowerWindowStart

  2. 浏览项目文件夹。特别要注意任务文件夹。此文件夹包含为模型运行频繁任务的脚本。对于Power Window Controller项目,这些脚本:

    • 在控制器局域网(CAN)上建立控制窗口移动的模型。

    • 建立模型,利用Stateflow和Simulink软件对离散事件反应行为和连续时间行万博1manbetx为进行建模,并建立低阶工厂模型。

    • 用更详细的工厂模型建立模型,其中包括电气和机械领域的功率效应。植物模型验证了窗户施加在被困物体上的力。

    • 使用包含可能改变模型的其他影响的模型来建立模型,例如测量的量化。

      请注意

      这些脚本也模拟模型。要只配置模型,请参阅configureModel文件夹中。

    • 使用增加覆盖模型来生成模型覆盖报告。

  3. 快捷方式管理部分包含快速访问命令,您可以双击这些命令来执行常见任务,例如:

    • 建立和清理项目。

    • 将项目添加到MATLAB路径。

    • 执行交互式测试。

    • 用模型覆盖率验证模型测试。

    • 打开主模型。

    • 用各种配置模拟模型。

    • 为增加的模型覆盖率生成一个模型覆盖率报告。

    • 打开用于增加模型覆盖率的模型。

万博1manbetx电源窗控制器

活动图的实现:电源窗口控制

介绍电源窗口控件的高级离散事件控制规范。

您可以使用状态流程图对窗口的离散事件控件进行建模。状态流图是具有层次和并行性的有限状态机。此状态机包含电动车窗系统的基本状态:启动、自动启动、关闭、自动关闭、休息和紧急状态。它对状态转换进行建模,并说明驾驶员命令的优先级高于乘客命令。它还包括紧急行为,当软件在向上移动时检测到窗口和框架之间的物体时激活。

电动车窗控制的初始Sim万博1manbetxulink模型,slexPowerWindowControl是一个以给定采样率运行的离散事件控制器。

在这个实现中,打开电源窗控制子系统,观察到带有离散事件控制的状态流图形成了CSPEC,由右下角倾斜的粗条表示。detect_obstle_endstop子系统封装了阈值检测机制。

离散事件控制是一种状态流模型,它扩展了具有层次和并行性的状态转换图概念。由于乘客命令而导致的状态更改封装在超级状态这与激活的驱动程序命令不对应。

考虑一下副驾驶车窗的控制。乘客或司机可以上下移动这个窗户。

此状态机包含电动车窗系统的基本状态:启动、自动启动、关闭、自动关闭、休息和紧急状态。

交互式测试

控制输入。slexPowerWindowCntlInteract模型包括这个控制输入作为开关。双击这些开关手动操作。

通过运行输入测试向量来测试控制电源窗口的状态机,并检查它是否达到所需的内部状态并生成输出。电动窗有以下外部输入:

  • 乘客输入

  • 司机输入

  • 窗户向上或向下

  • 窗户内有障碍物

每个输入由这些输入的向量组成。

乘客输入

元素 描述
中性

乘客控制开关未按下。

向上

乘客控制开关产生上升信号。

下来

乘客控制开关产生下行信号。

司机输入

元素 描述
中性

驱动器控制开关未按下。

向上

驱动控制开关产生上升信号。

下来

驱动控制开关产生下行信号。

向上或向下窗口

元素 描述
0

窗口在顶部或底部之间自由移动。

1

由于物理限制,窗口卡在顶部或底部。

窗户内障碍物

元素 描述
0

窗口在顶部或底部之间自由移动。

1

窗框上有障碍物。

根据下表映射上下信号生成乘客和驾驶员输入信号:

输入 输出
向上 下来 向上 下来 中性

0

0

0

0

1

0

1

0

1

0

1

0

1

0

0

1

1

0

0

1

输入显式地生成中性事件中的向上下来事件,由按下电源窗控制开关产生。输入作为真值表输入到乘客空挡,上下地图和驾驶员空挡,上下地图中。

交互测试的实验结果

案例1:窗户向上。观察状态机行为:

  1. 打开slexPowerWindowCntlInteract模型。

  2. 运行模拟,然后双击乘客向上开关。

    如果您按下物理窗口开关超过一秒,窗口将向上移动,直到向上开关被释放(或到达窗口框架的顶部),并且endstop事件生成)。

  3. 双击选中的乘客向上开关,释放该开关。

  4. 模拟模型。

    设置结束开关会产生结束事件。

案例2:Window Auto-Up。如果你按下实际的乘客窗口上升开关一小段时间(少于一秒钟),软件会激活自动上升行为,窗口继续向上移动。

  1. 短时间(少于1秒)按下物理乘客窗口向上开关。

    最终,窗口到达框架的顶部,软件生成endstop事件。此事件将状态机移回其中立状态。

  2. 模拟模型。

案例3:驾驶员侧优先。乘客窗口的驾驶员开关优先于驾驶员命令。要观察这种情况下的状态机行为:

  1. 运行模拟,然后将系统移动到乘客了双击乘客窗口向上开关。

  2. 双击驱动程序关闭开关。

  3. 模拟模型。

  4. 请注意状态机是如何移动到驱动程序控制部分以生成窗口向下输出而不是窗口向上输出的。

  5. 双击驱动控件来驱动。双击驱动程序关闭开关。

    到达驱动程序窗口向上状态,再次生成窗口向上输出,即:windowUp = 1

  6. 当一个对象位于窗口和框架之间时,要观察状态行为,双击障碍物开关。

  7. 模拟模型。

    在下一个采样时间,状态机移动到它的emergencyDown把窗户调低几英寸。软件将窗口降低的程度取决于状态机处于状态的时间emergencyDown状态。这种行为是下一个分析阶段的一部分。

    如果驾驶员或乘客的车窗开关仍处于活动状态,则状态机在离开紧急状态后的下一个采样时间进入向上或向下状态。如果障碍开关仍然处于激活状态,软件将在下一个采样时间再次激活紧急状态。

模型覆盖

控制子系统的验证。使用模型覆盖工具验证窗口的离散事件控制。此工具可帮助您确定模型测试用例执行控制器的条件分支的程度。它有助于评估在给定测试用例的情况下,是否采取了离散事件控件中的所有转换,以及支持特定转换的条件中的所有子句是否都变为真。多个子句可以实现一个转换,例如,当发生100个tick或到达终点时,从紧急状态转换回中性状态。

为了实现完全覆盖,对于所使用的测试用例,每个子句计算为真和假。测试用例执行的转换的百分比称为its模型覆盖.模型覆盖率是测试对模型执行的彻底程度的度量。

使用万博1manbetx仿真软件覆盖软件方面,您可以对电动窗控制器应用以下测试。

位置 一步
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步,一个或多个开关的状态会发生变化。例如,1秒后,驱动器down开关变为活动状态。要自动运行这些输入向量,请用规定的输入序列替换手动开关。查看预构建模型:

  1. 在MATLAB命令窗口中,输入:

    slexPowerWindowCntlCoverage

  2. 模拟模型以生成万博1manbetx仿真软件覆盖覆盖率报告。

slexPowerWindowCntrlCoverage模型,报告显示此测试处理来自驾驶员中立,上,下地图块的100%决策结果。然而,对于乘客中立,上下地图块,该测试仅实现50%的覆盖率。这个覆盖范围是指对的总体覆盖范围slexPowerWindowCntrlCoverage是45%而整体的承保范围为slexPowerWindowControl模型是42%。影响覆盖率的几个因素是:

  • 乘客向上阻塞不变。

  • 终点和障碍块不会改变。

增加模型覆盖率。为了将总覆盖率提高到100%,您需要考虑驾驶员、乘客、障碍物和终点设置的所有可能组合。当您对控制行为满意时,您可以创建电动窗系统。有关更多信息,请参见使用基于模型的设计创建模型

这个例子增加了窗口离散事件控制验证的模型覆盖率。首先,该示例使用来自的输入slexPowerWindowCntlCoverage作为模型覆盖率的基线。接下来,为了进一步执行窗口的离散事件控制,它创建了更多的输入集。电子表格文件,inputCntlCoverageIncrease.xlsx,包含这些输入集,每张纸使用一个输入集。

在这个例子中,slexPowerWindowSpreadsheetGeneration实用程序函数,从控制器模型创建电子表格模板;slexPowerWindowControl,创建inputCntlCoverageIncrease.xlsx.在inputCntlCoverageIncrease.xlsx,该函数使用控制器模型中的块名作为信号名。slexPowerWindowSpreadsheetGeneration定义工作表名称。的slexWindowSpreadsheetAddInput效用函数填充inputCntlCoverageIncrease.xlsx带有信号数据。

这些输入集的表名及其描述如下:

表的名字 描述

记录

slexPowerWindowCntlCoverage

LoggedObstacleOffEndStopOn

slexPowerWindowCntlCoverage有能力击中终点

LoggedObstacleOnEndStopOff

slexPowerWindowCntlCoverage窗户上有障碍物

LoggedObstacleOnEndStopOn

slexPowerWindowCntlCoverage有障碍在窗口和能力击中终点停止

DriverLoggedPassengerNeutral

slexPowerWindowCntlCoverage仅供司机使用,乘客不采取任何行动

DriverDownPassengerNeutral

司机放下车窗,乘客没有采取任何行动

DriverUpPassengerNeutral

司机拉起车窗,乘客无动于衷

DriverAutoDownPassengerNeutral

司机放下车窗一秒钟(自动放下),乘客没有采取任何行动

DriverAutoUpPassengerNeutral

司机打开车窗一秒钟(自动启动),乘客没有采取任何行动

PassengerAutoDownDriverNeutral

乘客放下车窗一秒钟(自动放下),司机没有采取任何行动

PassengerAutoUpDriverNeutral

乘客打开车窗一秒钟(自动启动),司机没有采取任何行动

要自动运行这些输入向量,请将离散事件控件的输入替换为从电子表格阻塞使用文件,inputCntlCoverageIncrease.xlsx.该文件包含多个输入集。查看预构建模型:

  1. 在MATLAB命令窗口中,输入:

    slexPowerWindowCntlCoverageIncrease

  2. 生成万博1manbetx仿真软件覆盖对于多个输入集的覆盖报告,双击模型中的运行覆盖子系统。

    slexPowerWindowCntrlCoverageIncrease模型,报告显示,使用多个输入集已成功地提高了总体覆盖率slexPowerWindowControl模型从42%到78%。由于缺少以下输入集,覆盖率水平低于100%:

    • 乘客向上状态

    • 司机上下州

    • 乘客自动下降和自动上升状态

使用基于模型的设计创建模型

为什么使用基于模型的设计?

在基于模型的设计中,系统模型处于开发过程的中心,从需求开发到设计、实现和测试。使用基于模型的设计:

  • 跨项目团队使用共同的设计环境。

  • 将设计直接与需求联系起来。

  • 将测试与设计相结合,不断识别和纠正错误。

  • 通过多域仿真改进算法。

  • 自动生成嵌入式软件代码。

  • 开发和重用测试套件。

  • 自动为模型生成文档。

  • 重用设计以跨多个处理器和硬件目标部署系统。

有关更多信息,请参见基于模型的设计

上下文图的实现:电源窗系统

对于以上下文图形式表示的需求,请参见背景图:电动窗系统

创建一个类似于上下万博1manbetx文图的Simulink模型。

  1. 将工厂行为置于一个子系统中。

  2. 创建包含驾驶员和乘客开关的两个子系统。

  3. 添加一个控制机制,方便地在对象的存在和不存在之间切换。

  4. 将控制放在一个子系统中。

  5. 连接新的子系统。

  6. 要查看该模型的实现,在MATLAB命令窗口中输入:

    slexPowerWindowStart

你可以使用电动车窗控制活动图(活动图:电源窗口控制)将上下文图的动力窗控制器分解为若干部分。这个图显示了上下文图中出现的输入和输出信号,以便更容易地跟踪它们的来源。

实施电动车窗控制系统

为了满足全部要求,电动车窗控制必须与驾驶员和乘客输入的验证一起工作,并检测到终点。

对于以活动图形式表示的需求,请参见活动图:电源窗口控制

双击slexPowerWindowExample/power_window_control_system模块,打开如下子系统:

活动图的实现:验证

对于表示为活动图的需求,请参见活动图:验证驱动程序活动图:验证乘客

活动图为驾驶员和乘客命令添加了数据验证功能,以确保正确操作。例如,当窗口到达顶部时,软件会阻塞向上命令。实现将每个验证过程分解到新的子系统中。考虑对驾驶员命令的验证(对乘客命令的验证与此类似)。检查模型是否可以执行向上下来命令,按如下所示:

  • 该模型允许下来命令,仅在窗口未完全打开时使用。

  • 该模型允许向上命令,仅在窗口未完全关闭且未检测到任何对象时使用。

第三个活动图过程检查软件只发送三个命令中的一个(中性向上下来)到控制器。在实际实现中,两者都有向上下来可以同时为真(例如,由于开关弹跳效应)。

从power_window_control_system子系统来看,这是validate_driver_state子系统:

从power_window_control_system子系统来看,这是validate_passenger_state子系统:

活动图的实现:检测障碍终止

对于以活动图形式表示的需求,请参见活动图:检测障碍终点

slexPowerWindowExample模型中,power_window_control_system/detect_obstacle_endstop块在variant Subsystem块的连续变体中实现该活动图。在设计迭代期间,您可以添加额外的变体。

双击slexPowerWindowExamplemodel power_window_control_system/detect_obstacle_endstop/Continuous/verify_position block:

混合动态系统:离散事件控制与连续对象控制的结合

在设计并验证了离散事件控制之后,将其与连续时间工厂行为集成。这一步是设计的第一次迭代与最简单的版本的工厂。

在Si万博1manbetxmulink项目中,导航到文件并点击项目文件.在configureModel文件夹中,运行slexPowerWindowContinuous实用工具打开并初始化模型。

window_system块使用不同的子系统块,以允许不同级别的保真度在植物建模。双击window_system/Continuous/2nd_order_window_system块来查看连续变量。

该对象被建模为输入阶跃变化的二阶微分方程:

  • 当状态流图表生成时windowUp,输入为1。

  • 当状态流图表生成时windowDown,输入为-1。

  • 否则,输入为0。

这个阶段允许分析离散事件状态行为、采样率和窗口移动的连续行为之间的相互作用。有阈值来生成窗框的顶部和底部:

  • endStop

  • 当障碍存在时的事件,即,障碍

  • 其他活动

双击slexPowerWindowExamplemodel power_window_control_system/detect_obstacle_endstop/Continuous/verify_position块查看连续变量。

当你运行slexPowerWindowContinuousconfigureModel实用程序,该模型使用连续时间求解器ode23 (bogacki - shammpine)。

对系统进行结构分析的结果是:

  • 系统的功能分解

  • 带有系统信号细节的数据定义

  • 时间限制

结构分析还可以包括实现体系结构(超出了本讨论的范围)。

该实现还添加了一种控制机制,以便在对象的存在和不存在之间方便地切换。

期望控制器响应。要查看窗口移动,请在Simulink项目中的万博1manbetx项目的快捷方式节中,双击SimHybridPlantLowOrder.或者,您可以运行该任务slexPowerWindowContinuousSim

位置范围显示来自控制器的预期结果。30cm后,模型生成障碍事件,状态流图移到它的emergencyDown状态。在这种状态下,windowDown输出,直到窗口降低约10厘米。因为乘客的窗户向上开关仍然打开,窗户又开始向上移动,这个过程重复。停止模拟,打开位置示波器,观察振荡过程。在紧急情况下,离散事件控制器将车窗向下滚动约10厘米。

权力效应的详细建模

在对离散事件控制和连续动力学进行初步分析之后,可以使用详细的工厂模型在更实际的情况下评估性能。最好在功率域(换句话说,作为能量流)的这样一个细节级别上设计模型。几个特定于领域的MathWorks块集可以帮助实现这一点。

为了考虑能量流,在window_system变体子系统中增加一个由电力电子和多体系统组成的更详细的变体。

要打开模型并探索更详细的植物变体,请在Simulink Project中运行configureModel万博1manbetxslexPowerWindowPowerEffects

双击slexPowerWindowExamplemodel window_system/Power Effects - Visualization/detailed_window_system块。

电力电子子系统。该模型必须放大离散事件控制器产生的控制信号,使其足够强大,以驱动移动窗口的直流电机。

放大模块模拟了这种行为。它们表明,一个开关将直流电机连接到电池电压或地。通过反向连接电池,系统产生负电压,窗口可以向上、向下或保持静止。窗户总是以最大功率打开。换句话说,没有直流电机控制器应用一个规定的速度。

要查看实现,请双击slexPowerWindowExamplemodel window_system/Power Effects - Visualization/detailed_window_system/amplification_up块。

多体系统。该实现使用Simscape多体多体块。

要查看执行器实现,请双击slexPowerWindowExamplemodel window_system/Power Effects - Visualization/detailed_window_system/actuator block

要查看窗口实现,请双击slexPowerWindowExamplemodel 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 > obstle_max)和MOVE_UP为500 ms
PSPEC 1.3.3:绝对值ABSOLUTE_ARMATURE_CURRENT = abs(ARMATURE_CURRENT)

此表列出了上下文图:电源窗口系统数据定义的附加信号。

背景图:电源窗系统数据定义变更

信号 信息类型 连续/
离散
数据类型

ARMATURE_CURRENT

数据

连续

真正的

-20至20华氏度

该表列出了Activity Diagram: Detect Obstacle Endstop数据定义的变化信号。

活动图:检测障碍物终止数据定义的变化

信号 信息类型 连续/
常数
数据类型

ABSOLUTE_ARMATURE_CURRENT

数据

连续

真正的

0 ~ 20a

ENDSTOP_MAX

数据

常数

真正的

15一个

OBSTACLE_MAX

数据

常数

真正的

2.5

要查看窗口子系统,请双击slexPowerWindowExamplemodel window_system/Power Effects - Visualization/detailed_window_system/plant/window block

该实现使用查找表并添加噪声以允许评估控制鲁棒性。要查看摩擦子系统的实现,请双击slexPowerWindowExamplemodel window_system/Power Effects - Visualization/detailed_window_system/plant/window/friction block

控制律评价

理想的连续装置允许进入窗口位置endStop障碍事件的一代。在更实际的实现中,模型必须从可访问的物理变量生成这些事件。对于电动窗系统,这个物理变量通常是电枢电流,Ia驱动蜗轮的直流电动机。

当窗口移动时,该电流约为2a。当你打开窗户时,模型会产生一个瞬时电流,可以达到大约10a的值。当电流超过15a时,模型启动停止检测。当电机的角速度保持在几乎为0时,无论输入电压是正的还是负的,模型都会得出这个电流。

在这种设置中,检测对象的存在更加困难。由于安全考虑限制窗口力不超过100n,因此电枢电流远小于10a应检测到物体。然而,这种行为与正常操作期间获得的瞬态值相冲突。

实现一个控制律,在达到的瞬态值期间禁用对象检测。现在,当系统检测到电枢电流超过2a时,它认为有物体存在并进入emergencyDown离散事件控制的状态。打开力范围窗口(测量单位为牛顿),检查当物体存在时,施加的力是否仍然小于100牛,并且窗口将其速度反转。

在现实中,更复杂的控制法律是可能的和实施的。例如,您可以实现基于神经网络的学习前馈控制技术,以模拟每辆车的摩擦特性及其随时间的变化。

运动中的系统可视化

如果你有万博1manbetxSimulink 3D动画安装软件后,您可以通过虚拟现实世界查看运动中的系统几何图形。如果VR Sink块尚未打开,则在slexPowerWindowExample / window_worl万博1manbetxd Simulink_3D_Animation视图模型,双击VR Sink块。

用刚性求解器对模型进行模拟:

  1. 在Si万博1manbetxmulink项目中,运行任务,slexPowerWindowPowerEffectsSim.该批处理作业将求解器设置为ode23tb (stiff/TR-BDF2)。

  2. slexPowerWindowExamplemodel passenger_switch/Normal块,设置乘客up开关为on。

  3. slexPowerWindowExamplemodel driver_switch/Normal块,设置驱动启动开关为off。

  4. 模拟模型。

  5. 在模拟时间的10毫秒到1秒之间,关闭slexPowerWindowExample/passenger_switch/Normal block passenger up开关以启动自动启动行为。

  6. 观察窗口支架如何开始垂直移动以关闭窗口。当模型遇到该对象时,它将窗口摇下。

  7. 双击slexPowerWindowExamplemodel passenger_switch/正常块驱动器下开关,完全摇下窗口,然后模拟模型。在此块中,在不到一秒的模拟时间内,关闭驱动器关闭开关以启动自动关闭行为。

  8. 当窗口到达框架底部时,停止模拟。

  9. 查看位置测量(以米为单位)和电枢电流测量(以安培为单位)。

    请注意

    电枢在正常工作时暂态电流的绝对值不超过10a。当移动窗口所需的电枢电流绝对值超过2.5 A(实际上小于-2.5 A)时,该模型检测到障碍物。在正常运行时,这大约是2a。您可能需要放大范围以查看此测量结果。当电枢电流的绝对值超过15a时,该模型检测到窗口终止。

    电枢电流在正常工作期间的变化是由于摩擦引起的,摩擦包括在感应关节速度和位置以及应用窗口特定系数时。

实际电枢测量

电枢电流用于动力窗控制是一个理想的值,是可访问的,因为使用的执行器模型。在更现实的情况下,数据采集组件必须测量这个当前值。

要包含数据采集组件,请将更实际的测量变量添加到window_system变量子系统中。这种实际的测量变体包含一个信号调理块,其中电流是基于电压测量得出的。

要在Simulink Project中打开模型并配置实际测量,请运行configureModel任务万博1manbetxslexPowerWindowRealisticArmature

要查看现实电枢-通信协议块的内容,请双击SlexPowerWindowExamplemodelwindow_system /Realistic电枢-通信协议/detailed_window_system_with_DAQ。

测量电压在模数转换器(ADC)的范围内,该转换器根据给定的位数进行离散。必须根据电阻器的值和ADC的量程对结果值进行缩放。

将这些操作包括为定点计算。为了在给定范围内达到必要的分辨率,需要16位而不是8位。

研究同样的场景:

  1. 在“slexPowerWindowExample/passenger_switch/Normal”块中设置乘客up开关。

  2. 运行模拟。

  3. 一段时间后,在slexPowerWindowExample/passenger_switch/Normal块中,关闭乘客向上开关。

  4. 当窗口已经下拉后,单击“slexPowerWindowExample/passenger_switch/Normal块驱动下拉”开关。

  5. 一段时间后,关闭slexPowerWindowExample/passenger_switch/Normal块驱动关闭开关。

  6. 当窗口到达框架底部时,停止模拟。

  7. 放大到armature_current作用域窗口并注意离散的外观。

通信协议

与电源窗口输出控制类似,硬件必须生成输入事件。在这种情况下,硬件是门上的窗口控制开关和中央控制面板。本地处理器生成这些事件,然后通过CAN总线将它们传递给窗口控制器。

为了包含这些事件,添加一个变体,其中包含来自CAN总线和交换机组件的输入,这些组件生成在CAN总线上传递给驱动开关和乘客开关变体子系统的事件。要打开模型并配置CAN通信协议,请运行configureModel任务。slexPowerWindowCommunicationProtocolSim

要查看开关子系统的实现,双击slexPowerWindowExample/driver_switch/Communication Protocol/驱动程序窗口控制开关块。

观察一个与窗口控制系统非常相似的结构。这个结构包含:

  • 表示控制开关的植物模型

  • 数据采集子系统,除其他外,包括信号调节组件

  • 控制模块将物理交换机上的命令映射为逻辑命令

  • CAN模块发布事件到车辆数据总线

您可以添加通信效果,例如其他系统使用can总线,并且与所描述的阶段相似。每个阶段都允许在日益现实的情况下分析离散事件控制器。当你有足够的细节时,你可以自动为任何特定的目标平台生成控制器代码。

控制子系统的自动代码生成

您可以为设计的控制模型生成代码,slexPowerWindowExample

  1. 显示控制器的采样率。在Simuli万博1manbetxnk编辑器中,选择显示>样品时间>颜色.观察到控制器以均匀的采样率运行。

  2. 右键单击power_window_control_system块并选择C / c++代码>构建这个子系统

参考文献

Mosterman, Pieter J., Janos Sztipanovits和Sebastian Engell,“控制系统技术中的计算机自动化多范式建模”,IEEE控制系统技术汇刊,第12卷第2期,2004年,第223-234页。

相关的例子

更多关于

这个话题有帮助吗?