Simulink建模的基础知识(精)

01--Stateflow建模

1.背景

很多时候,我们在拿到需求之后搭建模型,到底是选用Simulink还是Stateflow,经常会不够清晰,也跟自己掌握的技能有关系,有些人接触Simulink较多,不管什么逻辑都要Simulink来做。其实往往是需要去区别情况的,看看哪一个更加方便的去实现需求。

当逻辑仅仅是数据流,一般的算法时可以选择Simulink,而逻辑较多且状态量切换比较复杂等应该选用Stateflow进行建模。

2.按需求建模

下面我们以一个简单的例子来串一下Stateflow建模可能常用的一些功能

假设有如下需求:

①有一个混动变速器,上电后需要自检,假设所有部件均是低压供电,自检后上高压,整车进入ready状态,档位在P档

②整车根据控制开关选择进入纯电或者混动模式

③根据模式和档位传感器的信号进行简单的档位判断,档位有PRND档位,其中混动模式D档中包含4个档位

④纯电模式和混动模式在模式开关切换的过程中能够去到对应的档位

⑤混动模式升降档可根据车速进行简单的判断

3.枚举量介绍

只要涉及了状态的跳转,就有专门的数据类型来支撑这个功能的实施。有很多工程师不太习惯运用枚举来进行状态量的定义,取而代之的是用常数进行定义,每次看到数字后还需要再进行查找表格,而枚举量能够直接以字面意思进行命名,非常直观,便于管理且可读性高。

根据上述需求,我们需要定义如下4个枚举量

传感器读来的档位信号:lever_pos_raw

模式切换开关传过来的信号:VehMode

档位显示信号:lever_pos

模式显示信号:ModeState

定义上述信号,需要新建sldd数据字典,在字典中定义枚举量

打开Model Explorer→File→New→Data Dictionary

在新增里面选择枚举类型

将新增的4个变量命名为上述名字

VehMode

lever_pos_raw

pos(对应上述lever_pos)

State(对应上述ModeState)

4.模型关联数据字典sldd

定义好之后,需要新建一个模型,把sldd与新模型关联起来

关联有如下2种方法:

直接在模型内空白处右键,选择模型属性(Model Properties)

在对话框中选择Data,并把sldd导入即可

第二种方法直接在刚刚的Model Explorer中按下图选择即可

5.建模

按需求简单搭建,如下模型:

这里的建模细节跳过了,主要是为了引出后续需要记录的笔记

模型内的输入及输出量需要在Model Explorer进行定义,也就是说除了sldd中定义的那几个枚举量,在本处也需要再定义一次,不然状态机将无法识别,此处上述枚举量定义时关键点是变量的数据类型的选取,由于sldd中已经定义,所有在数据类型下拉中会出现

运行后,发现没有报错

给定p r n d几个点进行步进仿真,仿真时间设置为无穷大inf

lever_pos_raw.p模拟传感器的p档信号,车速(Sine Wave)按照如下设置

代表最高车速95

给定r档

内部激活的状态:

给定n档

给定d档,步进一次之后,直接继续运行仿真

由于车速Sine Wave的原因,档位一直在D1-D4之间来回跳转

6.state flow的语言选择

可以看到右下角为matlab语言,如果模型引用了跟C代码相关的逻辑,则需要改为C语言

在该界面右键点击属性,如下图进行语言切换

语言的不同会导致逻辑符号的差别,这点需要格外注意

02--模型引用

我们把刚刚建立好的模型连上输入输出,并命名为lever后保存

新建一个模型,在库里面找到模型引用,

双击之后把之前保存的lever模型导入进来,如下:

可以看到显示了所有的输入输出,双击进去后多了一个图示的图标

如果想找到源模型,让该模型成为Top层,需要点击左下角图标

会自动跳转到源模型中

为什么要介绍模型引用,因为很多时候有新项目的话,很多模型是可以复用的,只需要微调或者较小改动一些参数,这就引出了模型平台化的概念。

变体模型  模块此时派上用场了

前面我们已经有了模型lever

此时我们再新增2个模型,一个模型只有纯电模式,一个模型只有燃油模式

纯电模式的模型接口信号我们全部保留,但是把内部Hev这一路的逻辑全部删掉

如下,并把该模型命名为lever_EV

内部逻辑:运行没有报错

同样的,另外一个模型,把EV相关的删掉,并命名为lever_HEV

内部:

处理上面的时候,sldd及Model Explorer内的变量定义均不需要修改

接下来新建一个模型,在模型库内找到变体模型

默认只有2个模型引用框,我们新增一个并且把上述3个模型导入进去,再把所有的输入输出信号新增,信号与系统直接不需要连接(也连不上)

现在可以看到所有的模块都是显示的透明颜色,说明都没有被激活

去到图下所示的选项去设置

在红框处标记出来的变量,我们可以设置一个标定量来对不同模型进行选择

这个标定量我们可以去sldd中进行设置

默认值我们设置为3,数据类型给uint8

设置好后,我们需要再把这个sldd关联到当前这个模型

再把该变量填到下面的地方

再回到模型中,发现被选中的模型已经高亮了

由于变量veh_mode_select的默认值为3,所以模型lever被高亮选中

现在我们在sldd中把该变量值veh_mode_select标定为1

可以看到模型lever_HEV被高亮

我们再把之前的常数值给进来进行仿真

模型运行正常

同样的,我们还可以用相同的方法来处理变体子系统

03--定点数据类型

我们注意到,在数据类型的选取时,除了我们常用的整型数据外,还有定点数据类型,在现如今的软件开发过程中,定点的数据类型已经很少被使用,但是在以前的软件开发过程中,由于处理器的限制比如32位或64位,使得我们使用定点类型数据来精准的利用数据的存储空间。

定点数据最容易带来的问题就是数据溢出。

现在普遍使用了浮点处理器之后,定点数据已经很少使用,可以用数据类型single进行代替。

定点数据类型的优势是节省空间(RAW)

一般single占用4个字节,而定点数2字节

有时候如果RAW空间不够,可以使用一部分数据用定点数据类型

下面来看一些例子,认识下定点数据类型

fixdt(1,16,1)

第一个1代表符号位,(0-无符号,1-有符号),第二个数据16代表位数,也就是2字节,第三个符合代表小数位(精度位),1为2的-1次方即0.5,2为2的-2次方即0.25

我们如果设置0.24,0.24没有到0.5的一半,那么不足单位精度0.5,结果应为0

设置0.26,超过0.5一半,结果应为0.5

所谓最小精度0.5,代表的意思是最终的结果都是最小精度的整数倍

而上述中位数为16位,2的16次方为65535,由于小数(精度)只占用1位,符号占用1位,故该数的最大值为2的14次方,即16384,如果超出这个数,则会造成数据溢出

检测到数据类型溢出错误

但是如果把符号位去掉,则数据范围扩大一倍,但不支持负数的表达了

同样的,最大数来到2的15次方,即32768,由于包含了0,实际最大整数为32767

溢出如下

如果使用定点数去做运算,那么经常会出现精度的丢失

假设有如下数据的计算,数据类型设置为fixdt(1,16,3)

即精度为0.125

那么数10+3.122将不等于13.122了,而是13.125

并且该数,符号位和精度位占用4位,那么最大值将为4096

在使用定点数的模型中出现最多的将是数据类型的问题以及溢出等等,需要特别注意。

上述使用的模型在附件进行下载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/615176.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端】桌面版docker并部署前端项目

环境 win10专业版 2004 , 需科学 官网下载安装包并安装4.29.0版本 终端输入 wsl --installdocker桌面版和模拟器只能选一个,不然一直转圈圈 镜像配置加速,在settings—>docker engine下 {"builder": {"gc": {"defaultKee…

基于JSP动漫论坛的设计与实现(四)

目录 功能模块测试 6.1 测试概述及所用方案 6.1.1软件测试概述 6.1.3 测试的步骤 6.1.4 测试的主要内容 6.1.5 测试方案 6.1.6测试设计 6.2 前端功能测试 6.2.1 登录功能测试 6.2.2 注册功能测试 6.2.3 发帖功能测试 6.2.4 回复帖子测试 6.3 后台功能测试 6…

【每日刷题】Day37

【每日刷题】Day37 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 2391. 收集垃圾的最少总时间 - 力扣(LeetCode) 2. 1614. 括号的最大嵌套深度…

【吴恩达机器学习-week2】多个变量的特征缩放和学习率问题

特征缩放和学习率(多变量) 目标 利用上一个实验中开发的多变量例程在具有多个特征的数据集上运行梯度下降探索学习率对梯度下降的影响通过 Z 分数归一化进行特征缩放,提高梯度下降的性能 import numpy as np np.set_printoptions(precisio…

分布式链路追踪 Zipkin+Sleuth(8)

项目的源码地址 Spring Cloud Alibaba 工程搭建(1) Spring Cloud Alibaba 工程搭建连接数据库(2) Spring Cloud Alibaba 集成 nacos 以及整合 Ribbon 与 Feign 实现负载调用(3) Spring Cloud Alibaba Ribbo…

Proxmox VE 8 SDN创建VLAN隔离用户网络

作者:田逸(formyz) 在上一篇文章中,我们用SDN的Simple对租户(用户)网络实现了隔离功能,但它有个限制,仅仅能在单个物理节点上进行通信,而不能跨越物理节点(除…

mysql oceanbase数据库alter语句阻塞,解决方案

获取当前阻塞事件 select d.trx_started, a.thread_id, b.processlist_id, a.SQL_text from performance_schema.events_statements_current ajoin performance_schema.threads b on a.thread_id b.thread_idjoin information_schema.processlist c on b.processlist_id c.i…

深入理解指针(1)

在之前我们学习了许多c语言的基础知识,让我们初步了解了c语言,接下来将来到c语言中一个重点的知识章节--指针,学习完指针后将会让我们对c语言有更深入的理解,接下来就开始指针的讲解 1.内存与地址 1.指针 在了解内存与地址前&am…

Java 7大排序

🐵本篇文章将对数据结构中7大排序的知识进行讲解 一、插入排序 有一组待排序的数据array,以升序为例,从第二个数据开始(用tmp表示)依次遍历整组数据,每遍历到一个数据都再从tmp的前一个数据开始&#xff0…

ASP.NET学生信息管理系统

摘 要 本文介绍了在ASP.net环境下采用“自上而下地总体规划,自下而上地应用开发”的策略开发一个管理信息系统的过程。通过分析某一学校学生管理的不足,创建了一套行之有效的计算机管理学生的方案。文章介绍了学生管理信息系统的系统分析部分&#xff0c…

终端安全管理防护软件排行榜2024(四大终端监控软件推荐)

你的企业存在这些问题吗? 数字化转型的深入和远程办公模式的普及,企业对终端安全管理的需求日益凸显。 确保终端设备的安全性不仅关乎数据保护、业务连续性,更直接影响企业的声誉与合规性。 2024年终端安全防护软件排行榜,有谁荣…

搞嵌入式需要什么条件?

嵌入式系统是一种将计算机系统嵌入到物理设备中的技术,是现代电子技术的重要组成部分,具有广泛的应用领域。 那么,搞嵌入式需要什么条件呢? 嵌入式可以简单分为硬件与软件两个方向。做嵌入式软件需要对语言有一定的基础&#xf…

使用in运算符检查状态活动

在具有并行状态分解的Stateflow图表中,子状态可以同时处于活动状态。如果检查状态活动,则可以在两个平行状态下同步子状态。 例如,此图表有两个平行的状态:Place和Tracker。Tracker中的转换会在适当的位置检查状态活动&#xff0c…

服务器远程桌面局域网连接不上的解决方法

在企业网络环境中,服务器远程桌面局域网连接不上是一个常见且棘手的问题。这种问题可能导致工作效率下降,甚至影响业务运营。因此,我们需要采取专业的方法来解决这一问题。 服务器远程桌面局域网连接不上的解决方法: 1、确保服务器…

弱监督语义分割-对CAM的生成过程进行改进1

一、仿射变换图像结合正则项优化CAM生成 论文:Self-supervised Equivariant Attention Mechanism for Weakly Supervised Semantic Segmentation (CVPR,2020) 1.SEAM方法 孪生网络架构(Siamese Network Architecture&#xff09…

【CTF Web】XCTF GFSJ0478 cookie Writeup(HTTP协议+信息收集+Cookie)

cookie X老师告诉小宁他在cookie里放了些东西,小宁疑惑地想:‘这是夹心饼干的意思吗?’ 解法 按 F12,点击网络。 刷新页面。查看请求头中的 Cookie。 look-herecookie.php访问: http://61.147.171.105:53668/cookie.…

智慧互联,统信UOS V20桌面专业版(1070)解锁办公新模式丨年度更新

从小屏到大屏 突破,就在方寸之间 从人机到智脑 融合,旨在新质生产力 统信UOS一直致力于将先进科技与用户场景相结合,不断提升用户的工作效率和生产力。在最新发布的统信UOS V20桌面专业版(1070)版本中,我们…

MySQL指令

MySQL指令 1.数据库管理 查看已有的数据库(文件夹) show databases;创建数据库(文件夹) create database 数据库名字; #可能有汉字,编码方式可能不适用,产生乱码create database 数据库名字 DEFAULT CHARSET utf8 COLLATE utf8_general_ci ; #使用utf8…

Scala编程入门:从零开始的完整教程

目录 引言环境准备创建第一个Scala项目基本语法高阶概念进阶资源结语 引言 Scala是一种强大的、静态类型的、多范式编程语言,它结合了面向对象和函数式编程的特点。本教程将指导您如何从零开始学习Scala,并搭建一个简单的开发环境。让我们开始探索Scala…

2024数维杯数学建模B题完整论文讲解(含每一问python代码+结果+可视化图)

大家好呀,从发布赛题一直到现在,总算完成了2024数维杯数学建模挑战赛生物质和煤共热解问题的研究完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 B题论…