其他分享
首页 > 其他分享> > 从整车控制器VCU模型入门simulink(3)

从整车控制器VCU模型入门simulink(3)

作者:互联网

2.加速控制子系统 Accelerator

这个部分主要是用来处理采集到的加速踏板模拟信号,将其转换为有效的加速踏板开度信号,当然其中也对信号的有效性进行判断,如果超出正常范围则会报错。

为了保证可靠性,加速踏板信号通常会有两路信号进行互相校验,所以模型中会看到ATD_mean_Drive_Signal1和ATD_mean_Drive_Signal2两个输入信号。(除了加速踏板,通常制动踏板的信号一般也会有两路进行校验)

图片

先来看下模型的上半部分。

图片

From & Goto 模块

From和Goto模块一般成对出现,Goto模块接收前一模块计算完送进来的值,而From模块则是调用与其有相同标签(tag)的Goto模块中已有的值。

图片

说得有点绕,其实就是Goto模块和From模块要设置相同的标签,先给Goto模块赋值,再用From模块进行调用,这样就可以避免各种信号线交叉重叠,使模型条理清楚美观。

标签的设置在对话框中进行,十分简单。

图片

图片

Saturation 限幅模块

图片

顾名思义,限幅模块就是用来限制输出值范围的,当输入的值在上下限范围之内不受影响,输入多少就输出多少,但输入值超过上限或者下限就只能输出模块中设定的阀值。

如下图,当输入101则只能输出上限(Upper limit)100,输入-3则只能输出下限(Lower limit)0。

图片

再来看下模型的下半部分:

图片

之前讲了switch模块的使用,但是这里出现的又有所不同了。

Multiport Switch 多输入选择模块

图片

Multiport Switch模块和C语言中的switch case语句功能相似,根据输入端口的值进行判断,若跟某个分支的值相同,则输出该分支端口的输入值。

如上图所示,模型最上边的是判断信号输入端口,下边三个端口为数据端口,这个数量可以通过对话框进行设置。当最上边判断信号端口是1时,则输出标注为1的端口值(即APP1),若为2则输出标注为2的端口值(即APP2),若为3或者其他值则输出标注为*.3的端口值(即0)。

图片

再来看下AccP_Select这个子系统,这里主要是想来说说if else控制。

图片

If 控制模块

图片

模块库中的if模块看起来比较简单,没有模型中看起来那么复杂。我们先从简单说起,根据输入u1进行判断,如果满足if()语句中的条件,则从上分支输出信号,若不满足则从下分支else端口输出。这两个信号再分别使能一个If Action Subsystem模块,使用Merge模块将所有If Action Subsystem模块的输出结果汇总,就可以得到一个完整的逻辑输出。

以上就是If控制模块的“套娃”式用法,模型中看起来复杂的一大片也就是多套了几层。

图片

对话框设置说明以下:

Number of inputs: 输入端口数量;

If expression: If条件语句后面括号的条件,条件中变量可以是输入的u1,u2,。。。

但要注意这里不支持+,-,*,/,^等数学运算符,也不支持&&,||等逻辑关系操作符。

Elseif expressions: 用法同If expression,同时支持多个判断逻辑同时输入,每个判断逻辑之间需要以逗号隔开。

If expression和Elseif expression后面都要跟一个If Action Subsystem模块进行输出,下面依次看下模型中的几个模块内容:

图片

                

图片

图片

                  

图片

最后所有If Action Subsystem输出的值都要通过Merge模块合并输出到一个信号中,它起到的作用是自动从多个输出中取出更新的值并进行输出,但前提条件是在某一时刻,最多有一个子系统被使能计算,其他子系统是不计算的。

标签:输出,simulink,Goto,端口,控制器,信号,VCU,模块,输入
来源: https://blog.csdn.net/weixin_53035484/article/details/120827373