Simulink代码生成: Switch模块及其代码

news/2024/11/26 0:29:30/

本文描述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模块比较简单也比较常用,需要掌握好它的用法。

>>返回个人博客总目录


http://www.ppmy.cn/news/6051.html

相关文章

漏洞扫描的应用范围和场景

漏洞扫描服务范围 安全漏洞扫描服务可以为客户提供包括网络设备、操作系统、数据库、常见应用服务器以及WEB应用等范围的扫描。 漏洞扫描的详细服务范围如下: 操作系统 Windows、发行版Linux、AIX、UNIX通用、Solaris、FreeBSD、HP-UX、BSD等主流操作系统。 数据…

leetcode997. 找到小镇的法官,同样的思路,被佬的操作秀到了_图篇

题目 小镇里有 n 个人,按从 1 到 n 的顺序编号。传言称,这些人中有一个暗地里是小镇法官。 如果小镇法官真的存在,那么: 小镇法官不会信任任何人。 每个人(除了小镇法官)都信任这位小镇法官。 只有一个人…

C#个人珍藏基础类库分享 — 9、基本排序算法类SortHelper

做.NET开发的同学,一套简单易用的基础类库是必不可少的,这里把我混迹C#圈子十余载珍藏的类库分享出来,希望能够给刚踏入开发门槛的朋友一些帮助。 后续会逐步分享基础库的其余部分,先列个大纲: C#个人珍藏基础类库分享…

【栈与队列】——栈的实现及应用

目录概念栈的实现初始化栈入栈出栈获取栈顶元素获取栈中有效元素个数判断栈是否为空栈的销毁栈的应用概念 栈 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底栈中的数据元素遵…

Java守护线程简述

Java守护线程简述前言前置知识线程JVM退出代码测试查看子线程是否继承父线程的类型守护线程在程序退出时的表现普通线程在程序退出时的表现总结前言 最近再看《Java并发编程实战》,正好有一小节关于守护线程的知识,这里做一点小总结。 前置知识 这里只…

圣诞节学算法---线段树

线段树 快到圣诞节了,圣诞树是不是很漂亮?今天我们就来学习一下它的近亲的线段树 (话说这两玩意好像除了读音相似没啥关系) 引入 例题 1 给定一个数组 aaa 求数组中下标为l−rl - rl−r元素的和 看到这题大家都很容易想到用前缀和以O(n)O(n)O(n)预处…

聊聊首次使用航顺HK32F030C8T6的体验

先说结论,项目基本上开发测试完成了,mcu运行正常。 这个项目是一个智能家居的项目,主板和副板都使用了HK32F030C8T6,这也是笔者第一次使用航顺的芯片。 关于这个芯片的资料,从官网只能下载到datasheet和user mannal的pdf文档&am…

IO多路复用实现方式

IO分类 NIO NIO即同步非阻塞IO。非阻塞的recvfrom系统调用之后,进程并没有被阻塞,内核马上返回进程,如果数据还没准备好,此时会返回一个error。进程在返回之后,可以干点别的事情,然后再发起recvfrom系统调…