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 把变量/事件绑定到状态 保证只有本状态能修改它

模型验证

嵌入式代码生成

相关推荐
嵌入式阿蔡2 小时前
传感器_02:MPU6050 六轴 IMU 姿态入门——从一串看不懂的数,到一个不漂的角度
网络·stm32·单片机·嵌入式硬件·嵌入式实时数据库
MartinYeung52 小时前
[论文学习]δ-STEAL:基于本地差分隐私的大语言模型窃取攻击
网络·学习·语言模型
St_rive2 小时前
webUI自动化实现及封装
运维·自动化
乐橙开放平台2 小时前
监控开放平台是什么?从设备接入到视频能力开放一次讲清
网络·人工智能·音视频
xx~t2 小时前
嵌入式——Linux软件编程2
linux·运维·服务器·c语言·学习方法
云深处@3 小时前
【Linux】UDP套接字---执行指令
网络
Shell运维手记3 小时前
Linux (挂载|rpm|yum|源码编译)
linux·运维·笔记·网络协议·bash
-今昭-3 小时前
MFS高可用负载均衡
运维·负载均衡
ITyunwei09873 小时前
SSL 证书过期排查实战:openssl + Nginx 4步从发现到续签
运维·网络