电动车窗控制工程
此示例说明如何使用工程为汽车的电动车窗系统建模。该工程使用基于模型的设计和以下大型建模方法。
Model 模块,用于将层次结构分成若干单独的模型。
Variant Subsystem 模块,用于对设计选择项建模以及在不同设计选择项之间切换。
库,用于捕获算法以在可变子系统中重用。
工程,用于管理系统开发所需的文件。
设计需求
在此示例中,以汽车的乘客侧电动车窗系统为例。在关闭车窗时,此系统不能对物体施加 100 N 以上的作用力。
当检测到存在此类物体时,模型必须将车窗降下约 10 厘米。
有关设计需求的详细信息,请参阅电动车窗。
浏览工程
通过目测工程,您可以看到用于组织该示例的功能。这些功能用于组织工程:
文件夹
文件分类
快捷方式
文件夹
工程组织到以下文件夹中:
configureModel
- 控制主系统模型变体配置的 MATLAB® 文件data
- 工程所需的图像hmi
- 以动画形式显示电动车窗响应的文件model
- 主系统模型、控制器模型、控制器测试模型以及支持这些模型的库task
- 仿真不同模型配置的模型并为控制器生成覆盖率报告的 MATLAB 文件utilities
- MATLAB 文件,用于初始化模型、生成电子表格输入、向生成的电子表格添加数据,以及在启动和关闭时管理工程环境
文件分类
“工程”中的“文件”在“标签”窗格中显示有不同的分类。每个标签都描述了文件在工程主体中所起的特定作用。
Configuration
- 配置工程或模型的文件。PrjConfig
- 通过在启动时将文件添加到路径中并在关闭时删除这些文件来配置工程的文件DesignConfig
- 确定在给定时间哪个模型配置处于活动状态的文件Design
- 主系统模型及其引用的控制模型DesignSupport
- 库、数据和模型仿真等文件Simulation
- 仿真特定配置的模型的文件Test
- 控制覆盖率、控制交互和测试框架模型Visualization
- 以动画方式显示电动车窗运动的文件
快捷方式
工程快捷方式可用于快速访问最常用的工程文件。一些快捷方式包含常规任务,例如在启动时将工程添加到路径中,以及在关闭时将其删除。此外,工程快捷方式组有助于组织快捷方式。
交互式测试 - 用于控制器交互式测试的文件
主模型 - 顶层 Simulink 模型的文件
模型覆盖率 - 用于控制器模型覆盖率的文件
仿真 - 用于模型变体配置仿真的文件
浏览工程中的 Simulink 模型
此工程的 Simulink 模型位于 model
文件夹中。
主要系统模型
用于测试的模型
主要系统模型
主系统模型是 slexPowerWindowExample
。此模型由 driver_switch
和 passenger_switch
子系统模块组成,这些模块可生成 power_window_control_system
模块的输入。power_window_control_system
模块可验证乘客和驾驶员输入的状态。此模块还可确定障碍物是否会阻挡车窗的路径。引用的控制器会生成车窗运动命令信号,该信号发送到车窗系统的活动变体。window_system
模块输出是对控制系统模块的反馈。
为了可视化仿真结果,仿真数据检查器会记录输出数据,而 Simulink 3D Animation™ 会生成窗口运动的动画。
模型变体
此工程中的主系统模型使用 Variant Subsystem 模块,以使一个子系统中有多个实现。您可以在仿真之前以编程方式更改处于活动状态的实现。主模型包含四个 Variant Subsystem 模块,其中每个模块都有可通过编程方式修改的变体选择项。这四个可变子系统是:
slexPowerWindowExample/driver_switch
slexPowerWindowExample/passenger_switch
slexPowerWindowExample/window_system
slexPowerWindowExample/power_window_control_system/detect_obstacle_endstop
每个变体选择项都与一个变体控制项相关联。当变体选择项的变体控制项的计算结果为 true
时,该变体选择项处于活动状态。
您可以控制变体选择项的组合,以使用 DesignConfig
分类下的文件创建模型变体配置。模型变体配置包括:
电动车窗控制器混合系统模型
电动车窗控制器和详细的被控对象模型
具有数据采集效果的电动车窗控制器
具有控制器局域网 (CAN) 通信的电动车窗控制器
电动车窗控制器混合系统模型
此模型变体使用 Stateflow® 和 Simulink 对离散事件反应行为和连续时间行为进行建模。模型使用低阶被控对象模型来验证上滚和下滚行为。您可以使用 SimHybridPlantLowOrder
快捷方式对此变体配置进行仿真。此快捷方式仅激活与此模型配置对应的可变子系统。由于此模型没有考虑到电效应,因此记录的唯一输出是位置。仿真数据检查器显示记录的位置数据。
电动车窗控制器和详细的被控对象模型
该模型变体显示更详细的被控对象模型,其中包括电气域和机械域中的电效应。此变体验证车窗施加在被卡物体上的力不超出 100 N。此模型变体需要 Simscape™ Multibody™ 和 Simscape™ Electrical™ 许可证。您可以使用 SimHybridPlantPowerEffects
快捷方式对此变体配置进行仿真。与电动车窗控制器混合系统模型不同,此变体配置考虑到了电效应。仿真数据检查器显示电动车窗电枢电流、位置和所施加力的记录数据。
具有数据采集效果的电动车窗控制器
此模型变体显示影响控制的实现所产生的额外效应。包括的现象是测量电枢电流的信号调节和测量的量化。此模型变体需要 Simscape Multibody、Simscape Electrical、DSP System Toolbox™ 和 Fixed-Point Designer™ 许可证。您可以使用 SimHybridPlantPowerEffects+ControlDAQEffects
快捷方式对此变体配置进行仿真。与电动车窗控制器和详细的被控对象模型一样,仿真数据检查器显示电动车窗电枢电流、位置和所施加力的记录数据。
具有 CAN 通信的电动车窗控制器
此模型变体显示如何使用 CAN 来传递控制车窗移动的命令。此模型变体中包含可能位于车辆中控台上并生成命令的开关。此模型变体需要 Simscape Multibody、Simscape Electrical、DSP System Toolbox 和 Fixed-Point Designer 许可证。您可以使用 SimCANCommunication
快捷方式在运行 Windows 操作系统的计算机上对此变体配置进行仿真。
用于测试的模型
要测试控制电动车窗的状态机,您可以运行用于测试的工程快捷方式。用于测试控制器的模型快捷方式包括:
InteractiveExample
CoverageExample
IncreaseCoverageExample
InteractiveExample
此模型快捷方式可打开模型 slexPowerWindowCntlInteract
。此模型包含电动车窗控制器,后者是一个状态机。此模型还包含通过 Manual Switch 模块选择的控制器的输入。
电动车窗控制器有四个外部输入:
Passenger Input
输入由一个包含以下三个元素的向量组成:
neutral
:乘客控制开关未按下。up
:乘客控制开关生成上移信号。down
:乘客控制开关生成下移信号。
Driver Input
输入由一个包含以下三个元素的向量组成:
neutral
:司机控制开关未按下。up
:司机控制开关生成上移信号。down
:司机控制开关生成下移信号。
Window Frame Endstops
输入由一个包含以下两个元素的向量组成:
0
:车窗在顶部和底部之间自由移动。1
:车窗由于物理限制停在顶部或底部。
Obstacle Present
输入由一个包含以下两个元素的向量组成:
0
:车窗在顶部和底部之间自由移动1
:车窗窗框内有障碍物
通过仿真模型并利用 Manual Switch 模块选择所需的输入组合,您可以交互方式测试控制器。在选择输入后,您可以根据特定输入集的期望结果来验证内部控制器状态和控制器输出。
CoverageExample
此模型快捷方式可打开模型 slexPowerWindowCntlCoverage
。该模型包含具有 Repeating Sequence 模块输入的状态机电动车窗控制器。
您可以使用 Simulink Coverage 模型覆盖率工具来验证车窗的离散事件控制。模型覆盖率工具确定模型测试用例执行到的控制器条件分支的范围。该工具用于评估在给定测试用例的情况下,离散事件控制中的所有转移是否都已覆盖。该工具还用于评估实现特定转移的某个条件的所有子句是否都为真。一项状态转移可以通过多个子句来实现,例如,当经过 100 个计时单位后或到达停止位时,就会从 emergency 状态回到 neutral 状态。
IncreaseCoverageExample
此模型快捷方式可打开模型 slexPowerWindowCntlCoverageIncrease
。此模型包含作为状态机的电动车窗控制器。此模型还包含 From Spreadsheet 模块,用于向控制器提供多组输入。这些输入集与 CoverageExample 模型中的一个输入集相结合,用来执行电动车窗控制器中的更多逻辑:
Logged
:从CoverageExample
记录。LoggedObstacleOffEndStopOn
:从CoverageExample
记录,能够到达停止位。LoggedObstacleOnEndStopOff
:从CoverageExample
记录,车窗内有障碍物。LoggedObstacleOnEndStopOn
:从CoverageExample
记录,窗口存在障碍物并且能够到达停止位。DriverLoggedPassengerNeutral
:从CoverageExample
中记录,仅针对驾驶员。乘客不执行操作。DriverDownPassengerNeutral
:驾驶员降下车窗。乘客不执行操作。DriverUpPassengerNeutral
:驾驶员升起车窗。乘客不执行操作。DriverAutoDownPassengerNeutral
:驾驶员降下车窗 1 秒(自动下降)。乘客不执行操作。DriverAutoUpPassengerNeutral
:驾驶员升起车窗 1 秒(自动上升)。乘客不执行操作。PassengerAutoDownDriverNeutral
:乘客降下车窗 1 秒(自动下降)。驾驶员不执行操作。PassengerAutoUpDriverNeutral
:乘客升起车窗 1 秒(自动上升)。驾驶员不执行操作。
模型覆盖率快捷方式 GenerateIncreasedCoverage
通过 Simulink Coverage 模型覆盖率工具使用多个输入集来验证车窗的离散事件控制,并针对多个输入集生成覆盖率报告。