Matlab(Simulink)使用详解

Matlab函数名和文件名要一致

定点数(Fixed-point number)是一种"小数点位置固定"的数值表示法

定点数 = "把小数当整数存、用整数算、最后再缩回去" 的技巧; 它牺牲了自动范围调整来换取硬件简单、功耗低、误差可预测,在成本敏感或确定性要求高的场合是浮点无法替代的选择

Matlab中时间单位都是秒(s)

在 MATLAB/Simulink 里做「嵌入式软件」代码生成时,solver(求解器)的选择只有一条铁律------必须让模型在"固定步长 +离散"框架下跑,否则 Embedded Coder 无法把算法翻译成周期可调、内存可测、无浮点异常的 C 代码

总结:

嵌入式 Solver 只认「Fixed-step + discrete/ode4」;步长=中断周期,Hardware 页选对 MCU,生成后再看栈和 FPU 报告------照做就能一次编译通过

车辆系统里两种步长都会用,但分工非常明确------"离线做算法研发"用变步长,"上车/进 ECU"一律改定步长

特性 模型变体 (Model Variants) 子系统变体 (Subsystem Variants)
作用范围 整个模型 子系统内部
定义位置 在模型级别定义 在子系统内部定义
主要用途 管理整个模型的多种配置 管理子系统内部的多种配置
实现方式 使用 Variant Subsystem 模块 使用 Variant Subsystem 模块
参数设置 在模型参数对话框中设置 在子系统参数对话框中设置
代码生成 为整个模型生成不同配置的代码 为子系统生成不同配置的代码
应用场景 不同的测试场景、硬件平台、操作模式 子系统内部的不同控制策略、硬件配置
示例 不同的控制器选择(如 PID、模糊控制器) 子系统内部的不同控制器选择(如 PID、模糊控制器)
灵活性 高,适用于整个模型的多种配置 高,适用于子系统内部的多种配置
维护成本 低,减少模型冗余 低,减少子系统冗余
多平台支持 支持,为不同硬件平台定义配置 支持,为子系统内部的不同硬件平台定义配置
测试和验证 支持,快速切换不同测试场景 支持,快速切换子系统内部的不同测试场景

slblocks 用于管理和操作 Simulink 库中的模块。通过 slblocks,可以轻松地列出库中的模块、获取模块的属性、添加或删除模块、检查模块的依赖关系以及生成模块的文档。

特性 模块工作空间(Module Workspace) 基础工作空间(Base Workspace)
作用范围 局部,仅在模块内部有效 全局,整个模型有效
主要用途 局部参数管理,封装和重用 全局参数管理,数据共享
变量访问 只能被该模块访问 可以被模型中的任何模块访问
独立性 每个模块独立,互不干扰 全局统一,所有模块共享
适用场景 模块内部的参数和变量 模型中共享的参数和变量
存储位置 模块的参数对话框或模块工作空间 MATLAB 工作空间或模型设置中的基础工作空间

数据字典 提供了更集中、更安全、更易于管理的数据管理方式。

通过使用数据字典,可以:

  • 集中管理模型中的所有数据,减少数据冗余和冲突。
  • 确保数据的隔离和独立性,避免数据冲突。
  • 使用版本控制系统管理数据字典文件,确保数据的可追溯性和可恢复性。
  • 便于团队协作,确保所有成员使用的是最新的数据定义。
  • 确保代码生成的一致性和准确性。

因此,数据字典通常被认为比基础工作空间更安全、更高效的数据管理工具。
Simulink Project 是一个项目管理工具,用于帮助你更好地组织和管理 Simulink模型项目。它就像是一个"项目管家",帮你把所有相关的文件(模型、脚本、数据字典、文档等)放在一起,方便管理和使用。

主要功能

  1. 文件管理:把所有项目文件集中管理,文件夹分类清晰。
  2. 版本控制:集成 Git 等工具,方便跟踪文件变更和协作。
  3. 依赖管理:自动分析文件依赖,确保文件完整性和一致性。
  4. 团队协作:支持多人协作,共享项目文件,避免冲突。
  5. 文档管理:集成文档,方便查阅和更新。
    逻辑相关的用StateFlow,矩阵相关的用Matlab Function,数据流用Simulink

StateflowMATLAB/Simulink 环境下用于事件驱动系统建模与仿真的图形化编程工具,其核心思想是状态机理论。它通过状态图(State Diagram)的形式,将复杂的控制逻辑、状态转换、事件响应等行为可视化

inf无穷大

  • []表示条件
  • {}表示逻辑

在 Stateflow 里,每个状态都可以写 "动作标签",常用的有:

关键字 全称 触发时机 典型用法
en / entry entry 刚进入状态(仅一次) 初始化变量、开中断、点灯
du / during during 停留在本状态的每个激活步 持续控制、累加计数
ex / exit exit 将要离开状态(仅一次) 清标志、关中断、保存现场
on event_name on 本状态内收到给定事件 事件驱动动作(如 on SWITCH
on after(n, sec) after 进入状态 n 秒之后仍未退出 超时保护、看门狗
on before(n, sec) before 进入状态未满 n 秒就离开 防误触、短按过滤
on at(n, sec) at 进入状态恰好第 n 秒 精确定时触发
on every(n, sec) every 每隔 n 秒触发一次 周期采样、闪烁
bind bind 把变量/事件绑定到状态 保证只有本状态能修改它

模型验证

嵌入式代码生成

相关推荐
_itgo4 小时前
意图识别落地方案
运维·docker·容器
mengge.cloud4 小时前
0909华为云计算类综合服务小白实验教程
linux·运维·服务器·网络·华为云·云计算
QYR-分析6 小时前
蓝海赛道高速扩容!全球小型观察ROV市场格局、细分场景与发展趋势分析
大数据·运维·云计算
陈皮糖..6 小时前
从零搭建一个简易 AI 运维问答机器人(RAG + LangChain + Streamlit)
运维·人工智能·ai·langchain·机器人
制造业的搬运工7 小时前
AI服务器背板与传统背板差异:三大设计升级解析
运维·服务器·人工智能·科技·制造·pcb工艺
制冷技术咨询与服务7 小时前
某纯电牵引车整车CAN网络
网络·汽车·can·某纯电牵引车整车can网络
zhengqweasd7 小时前
Linux网络(一):服务器数据包从网卡到应用程序,完整收包流程详解
linux·服务器·网络
顶点多余7 小时前
仿muduo库实现高并发服务器项目
运维·服务器
脚踏实地,坚持不懈!7 小时前
Linux 6.18.7 内存分配与回收 —— 代码梳理
linux·运维·网络
2601_962300478 小时前
python在运维上可以干什么,请举几个具体的例子
运维·python·系统管理·网络监控·自动化脚本