本文描述Switch模块的建模并研究生成的代码。

1 Simulink中的Switch模块

在Simulink中Switch模块时非常常见的,通常用于根据一定地条件选择信号进行输出,类似于C语言中的if-else语句。

Switch模块如下:
在这里插入图片描述
左侧有三个信号输入端口,其中中间的那个是条件端口。如果条件为真,则输出上路信号,反之则输出下路。

另外还有个MultiSwitch模块,其效果类似,只是能够切换多种输入。
在这里插入图片描述

本文就以Switch模块为例研究用法。

2 Switch模块建模及代码生成

本文就以Switch模块进行一个简单的建模。例如,CAN信号传来车速,车速低于30kph时判断车辆为低速,否则为高速。

1)首先拖出一个Switch模块,双击进入属性,将判断条件改成u2 ~ = 0;
在这里插入图片描述
这一步操作是遵循《MAAB规范》主工的 jc_0141: Use of the Switch block。该规范要求第二个端口(条件)必须是该信号不等于0,不能是大于或小于0。

2)然后把判断条件建模为车速小于30kph,Port1为LowSpeed的宏定义,Port3为HighSpeed的宏定义,如下:
在这里插入图片描述
模型比较容易理解,即VehSpd小于30时,输出LowSpeed,否则输出HighSpeed。

3)配置Embedded Coder并生成代码如下:
在这里插入图片描述
生成的代码用了一段if-else语句,其中if中的条件就是判断车速大小。

3 Switch模块其他用法

3.1 多重Switch

在Switch模块的port3可以接入其他Switch模块的输出,形成一连串Switch,例如下图:
在这里插入图片描述
车速小于30,对应LowSpeed;车速介于30~60,对应MiddleSpeed;否则车速大于60,对应HighSpeed;

生成代码如下:
在这里插入图片描述

3.2 通过标定量Switch

汽车实车测试的时候,经常通过标定量切换信号来调试。假设ADAS软件通过当前道路环境,在一系列复杂算法后得出应该向发动机请求一个扭矩(即图中的TorqueRequest)。当SwitchFlag标定为1时,将软件算出的请求值发给Engine,然后发动机进行响应。如果将SwitchTorque标定为一个工程师想要的一个自定义的数值,再将SwitchFlag标定为0,就可以发出自定义的一个扭矩请求,从而不依赖算法去调试车辆的性能。
在这里插入图片描述

4 总结

在Simulink中Switch模块比较简单也比较常用,需要掌握好它的用法。

>>返回个人博客总目录

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐