应用案例 | StateMachine 加速控制策略设计

发布于:2023-01-17 ⋅ 阅读:(269) ⋅ 点赞:(0)

控制策略是对某一系统或者某个设备进行控制的策略和方法。以智能网联汽车为例,其组成非常复杂,包括了传感器、智能座舱域控制器、Telematics-BOX、制动系统、转向助力系统、悬架系统、传动系统、电机或发动机、变速箱、空调、车门车窗以及其他诸多零部件等。每一个零部件都可以看做一个子系统,针对其设备特性和应用场景及工况需要设计出高效且安全可靠的控制策略。控制策略要解决的问题不仅是让各个子系统设备按照预期的功能去工作,更要解决的是一旦出现部件失效或相关部件异常的时候,必须有足够健壮的手法去消除和抑制不安因素,使得整个车辆和驾乘人员处于最低风险和最高安全保障之下。

为了使得控制策略的设计更加可靠和高效,现在智能网联上的控制系统 ECU 已经普遍采用了MBD(Model-Based Design)软件开发方式,除了关键的算法之外,占代码比例更多的是策略,就是应对各种工况需求的软件组件。同元软控的系统仿真验证软件 MWORKS.Sysplorer 是一款专业的 MBD软件,非常适合于应用在电子控制器的控制策略设计与验证中。本文就详细介绍一下控制策略中最为刚需的状态机 StateMachine 如何在MWORKS.Sysplorer 中发挥作用。

状态机概念与关键要素

状态机(State Machine),是有限状态自动机的简称,它是一种对现实事物运行规则进行抽象得到的一种离散数学模型。状态机在软件工程项目中很常用,尤其是电子控制器应用层软件开发,应用非常广泛,它具有以下几个优势:

  • 复杂的嵌套分支逻辑,可以用简单的状态图和转移组合设计出来;

  • 设计即实现,状态机模型可以直接生成 C代码。

离散状态机模型包含了4个构成元素:

◎ 状态

一个系统在某一个时刻所处的稳定情况是一个状态,在整个生命周期中可以有多个状态,如电灯有开和关两个状态,电机有正转、反转、堵转、停止四种状态。

◎ 转移

对于存在两个及以上状态的系统,同一时间只能有一个状态处于激活态,状态之间激活的切换就是通过转移实现的,它是从一个状态指向另一个状态的有向线。转移包括瞬时转移(强转移)、延迟转移(弱转移)等。

◎ 条件

依附于转移,可以执行出结果(真或假)的语句,当结果为假,则激活态不发生转移;结果为真,则发生转移。瞬时转移在条件为真时立刻转移;延迟转移在条件为真的下一个采样时刻发生转移。

◎ 动作

在状态内部,可以编写动作语句,当状态处于激活态时,每个采样周期都会执行其内部的动作语句,以实现各种控制策略的功能需求,如计时、输出控制指令或当前状态等。

过去, MWORKS.Sysplorer 提供的状态图 StateGraph 建模方式,对于一些状态的描述不够直观简洁;今年初MWORKS.Sysplorer 又推出崭新的 StateMachine 的建模方式,提供更加快捷便利的离散状态建模,为用户在 MBD 的道路上保驾护航!

MWORKS.Sysplorer 提供的StateMachine 库包括两种组件,如下图所示:

◎ Chart

在框图式建模环境中提供一个状态机的子模型建模环境。

◎ State

仅在 Chart 内部有效,提供状态的表达、转移的起点终点以及动作的载体。

MWORKS.Sysplorer 的 Chart 和 State

状态机建模操作

状态机的建模操作比较容易掌握,本节将详细介绍操作步骤。

(1)状态机模型库及其组件

启动 MWORKS.Sysplorer 后,加载 State Machine 1.0 模型库,将在模型库列表中出现包含 Chart 和 State 组件的 StateMachine 模型库。

加载 StateMachine 1.0 模型库

模型浏览库中的 StateMachine 组件

新建一个模型,将 Chart 拖拽到模型编辑器中,需要右键进入组件内部进行状态机的设计。

 右键菜单键入 Chart 内部

(2)状态与默认转移

在内层模型编辑器中拖入两个 State 组件,则如下图所示:

两个状态构成的模型

多个状态根据创建先后,默认名字为 StateN (N = 1,2,3...),第一个被创建的 State 左上角是黑色实心,表示其为默认状态,即系统模型运行时第一个被激活的状态。根据设计需求,需要更改默认状态时,可以单击其它状态左上角的空心圆圈,则被单击的状态将变为默认状态,同时原来状态左上角的实心圆圈置为空心圆圈,自动满足同一层次下仅能有一个默认状态的约束。

更新后的状态如下图:

默认状态变更后的模型

双击状态,可以进入动作编辑窗口,在窗口中可以编写执行动作,动作语句支持简单的计算和赋值,也支持条件执行语句编程甚至 for 循环。编写完毕后单击空白处可以将编辑的动作语句显示到状态内部:

状态内部动作语句的编辑与显示

位于状态内的赋值动作语句,在所属状态处于激活状态的情况下,每个周期都需要运行一次。

(3)数据管理

状态机内部使用的变量,需要在变量对话框中进行设计。在 Chart 组件内部右键空白处,在弹出菜单中选择“设置状态机变量”:

右键菜单设置状态机变量

则会弹出状态机专用的数据管理器,如下图:

状态机变量窗口

左上角绿色按钮添加一行数据,其旁边的红色按钮删除当前选中行的数据。新添加的数据行包括了属性、类型、名称、值、端口5个属性。

◎ 属性

表明数据的传递属性,包括 Input,Local, Output 分别表示从状态机外部输入、本地数据(对外部不可访问)、向状态机外部输出。

◎ 类型

数据类型包括 Real,Integer,Boolean 三种类型。

◎ 名称

状态机变量的名字,须合法字符。

◎ 值

变量的初始值。

◎ 端口

当属性选择为 Input、Output 时,会在父层 Chart 组件上产生对应数据类型和数目的端口,此处端口号表示父层排列的顺序。

通过端口 Input、Output 可以将状态机与其它组件连接起来共同构成模型来仿真,在最后的案例中将会展示。

(4)转移

状态之间的转移可以直接从源状态的边缘按住鼠标左键拖出,保持鼠标左键不放,拖拽到目标状态边缘后放开鼠标左键自动产生。

通过鼠标左键拖拽产生转移线

新产生的转移上条件为 true ,双击转移线可以打开转移的属性对话框,在对话框中可编辑转移条件、设置转移类型、增加描述。

即时转移不进行勾选则表示转移是延迟转移,转移线上将多出一根竖线。

不同类型的转移线型

转移也可以根据鼠标操作变为折线或者曲线。拖出转移的过程中,鼠标左键放开,然后拖动转移线的箭头在编辑器中移动,单击一次增加一个锚点,转移线会根据用户单击锚点的位置自动绘制出曲线或折线,这样可以帮助建模用户通过转移形成自转移,或者通过直角折线形成整洁明了的建模风格:

不同锚点形成的转移线

另外,相信细心的读者们也发现了,对于从同一个状态发出的多个转移,起始端带有数字标记,这是表示转移的优先度,数字越小,优先度越高。

本节以一个自动变速器控制策略作为建模对象,展示使用同元软控 MWORKS.Sysplorer 中提供的状态机建模能力搭建它的便利之处。本案例的自动变速器的控制策略如下图:

自动变速器控制策略模型

本演示案例的自动变速器有四个档位,档位变换策略是基于油门踏板开度和车速这两个信号,通过二维查表得出换挡车速的上下限阈值,共同给状态机进行换挡控制。

换挡二维数据表内容为:

换挡二维数据表

此二维数据表中,横轴为档位,纵轴为车速。档位分别对应1~4档,车速则从10~40分配为5个离散点,当输入当前档位和车速时,根据双线性插值算法,可以得出当前车辆状态下的换挡上限阈值。同理,再使用另外一个二维数据表模块可以得到当前车辆状态的换挡车速下限阈值。

基于当前车速和档位,以及通过两个二维查表得到的换挡上下限车速阈值,可以设计出一个针对本案例的换挡策略。状态机中包含三个状态,分别是 SteadyState(不换挡)、升档(GearUp)、降档(GearDown)。每个采样时刻模型都会根据当前车速和档位计算出换挡的上下限车速阈值,当实际车速大于车速阈值上限时,则转移到升档状态;当实际车速小于车速阈值的下限时,则转移到降档状态。

在升档状态中档位+1,在降档状态中档位-1。为了避免连续换挡,在 GearUp 和 GearDown 状态的转移上增加了档位变换则转移到 SteadyState 的设计,从而规避了一直处于某个换挡状态中持续换挡的情况。并且由于换挡车速阈值二维表中做了限制,使得 Gear 最高无法突破4,最低不会低于1,所以状态机里不再对 Gear 进行限幅(Saturation)的重复处理。

在 SteadyState ,由于不换挡状态,为了保证驾驶性平顺,避免换挡状态切回到 SteadyState 后短时间内又回到换挡过程中去,造成顿挫,所以增加了一个延迟功能,在状态机处于 SteadyState 中不超过6个采样时间时,不允许向外部转移。

基于状态机的换挡控制策略 

经过开环仿真验证的自动变速箱控制器,结合同元自主研发的车辆模型库,构成完整的闭环来验证真实工况及反馈下控制策略的功能是否正确。同元车辆模型库为自动变速箱控制器提供动力源、变速箱、传动系统、整车结构、制动系统和道路模型。

自动变速箱控制器模型在环验证环境

自动变速箱控制器是 MWORKS.Sysplorer 以状态机为核心所搭建的控制策略,以当前档位、驾驶员油门踏板开度以及车速为输入,共同决策调整档位与否,并输出当前档位给变速箱和传动系统。

被控对象这边,动力源是一个发动机,它根据车辆的推进力和油门踏板开度计算出发动机的转速。传动系统基于发动机转速、当前档位以及传动系统转速计算推进力并输出扭矩。车辆机械结构通过对整车的系统建模,配合传动系统完成动力性的分析。

内部结构跟真实车辆相同,包括车身模型、转向模型、前悬架、后悬架、四个轮胎模型,其拓扑连接如下图:

车辆模型组成

模型在环仿真的工况为,车辆从静止状态下开始起步,驾驶员周期性踩下油门踏板,踩到100%后保持短暂时间后放开踏板,如此反复。

驾驶员周期性工况

在这种工况下,车辆从静止开始起步,并随着驾驶员踩下加速踏板而逐步加速,并在放开加速踏板后依靠惯性前行,由于地面摩擦力逐步减缓产生减速的趋势。好在驾驶员周期性的踩踏使得车速再次提升起来,并整体呈现波浪式上升。

车速变化过程

随着车速的上升和加速踏板的变化,车辆的档位也逐步提升,在10秒内完成加速提档到顶档:

档位上升过程

整个过程可以通过 MWORKS.Sysplorer 的 3D 视景展示出来:

车辆起步运行动画

本文通过展示 MWORKS.Sysplorer 中状态机建模方法以及在自动变速器控制策略上的应用案例,证明了国产自主的建模仿真软件已经具备了相当的成熟度,可以帮助用户以最简单的方式实现控制策略的设计,从而满足最广大工程领域设计开发的需求。

在 MWORKS.Sysplorer 多领域统一建模仿真环境下,新增的状态机与框图式模块以及物理组件模型均可以无缝连接,实现一体化建模仿真。另外,状态机 StateMachine 也已经具备了生成 C 代码的能力,经过早期仿真验证的模型可以直接生成C代码,部署到多种不同的嵌入式芯片中去,帮助用户快速构建电子控制器产品。

结合 MWORKS.Sysplorer 本身强大的物理建模能力,从 MIL/SIL 到 HIL 验证都能够在一个软件平台内实现模型与代码的多模式闭环和半物理实时仿真。MWORKS.Sysplorer 从设计到验证,助控制策略开发者一臂之力!


网站公告

今日签到

点亮在社区的每一天
去签到