本文描述Switch模块的建模并研究生成的代码。
文章目录
- 1 Simulink中的Switch模块
- 2 Switch模块建模及代码生成
- 3 Switch模块其他用法
- 3.1 多重Switch
- 3.2 通过标定量Switch
- 4 总结
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模块比较简单也比较常用,需要掌握好它的用法。
>>返回个人博客总目录