1. 课程导入与协同开发全景
在基于模型的设计(Model-Based Design)流程中,Simulink 与 Stateflow 是一对高度互补的工具。理解它们各自擅长什么、边界在哪里、如何通过信号与事件交互,是后续 29 章内容能够顺利展开的前提。本节不急于进入具体建模操作,而是先建立一张"全景地图":谁负责连续动态,谁负责离散逻辑,两者在同一个模型里如何分工,工具链如何衔接,以及整门课的学习路线如何铺开。
一、分工:连续动态与离散逻辑的两条主线
Simulink 的核心抽象是"信号随时间连续或离散演化"。它用模块(Block)和连线(Line)描述微分方程、传递函数、增益、积分、采样保持、滤波器等,求解器(如 ode45、ode4、定步长离散求解器)负责在时间轴上推进状态。典型对象是电机转速、温度、电压、位置这类可以用数值状态描述的物理量。
Stateflow 的核心抽象是"状态与迁移"。它用状态(State)、迁移(Transition)、条件(Condition)、动作(Action)、并行与层次结构描述事件驱动的逻辑:什么时候进入某个模式、满足什么条件切换、切换时执行什么动作。典型对象是挡位切换、启停逻辑、故障分级、通信协议状态机、模式管理。
两者不是替代关系,而是分工关系。一个常见的误区是"用 Simulink 搭逻辑"或"用 Stateflow 算动态"。前者会导致大量开关、使能、记忆模块堆叠,可读性迅速下降;后者则会把连续计算塞进状态动作里,破坏求解器对连续状态的统一处理。正确的做法是:连续量交给 Simulink,离散决策交给 Stateflow,两者通过明确的接口交换信号与事件。
二、协同的三种典型耦合方式
在实际工程中,Simulink 与 Stateflow 的耦合主要有三种形态,理解它们有助于判断"该把逻辑放在哪一层"。
- 逻辑控制器 + 被控对象:Stateflow 作为控制器,输出使能、模式、目标值等离散或分段信号;Simulink 作为被控对象模型,接收这些信号并演化连续状态。这是最经典的协同结构,例如发动机启停控制。
- Simulink 计算 + Stateflow 调度:Simulink 先完成信号处理、查表、滤波,把结果送入 Stateflow 做判断与模式切换,Stateflow 再把决策回送 Simulink 执行。常见于故障诊断与降级策略。
- Stateflow 内部调用 Simulink 函数:在状态动作中通过 Simulink Function 调用封装好的算法,使状态机保持简洁,同时复用 Simulink 侧的计算能力。
这三种形态在同一个模型里往往同时存在。判断依据很简单:凡是"随时间连续变化、需要求解器积分"的量,放 Simulink;凡是"由事件触发、按条件跳转、有明确模式"的逻辑,放 Stateflow。
三、工具链关系:从模型到代码与验证
Simulink 与 Stateflow 同属 MATLAB 工具链,共享同一套模型文件(.slx)。Stateflow 不是独立软件,而是 Simulink 的一个子系统级建模环境,因此两者在同一个模型层次中无缝嵌套。围绕它们的关键工具包括:
- Simulink Editor:搭建连续/离散动态模型,配置求解器与采样时间。
- Stateflow Editor:绘制状态图、迁移、条件与动作,定义事件与数据。
- Simulink Test / Test Manager:编写测试用例,对协同模型做回归与覆盖率验证。
- Simulink Coverage:统计状态覆盖率、迁移覆盖率、条件覆盖率,判断逻辑是否被充分测试。
- Embedded Coder / Simulink Coder:将协同模型生成产品级 C 代码,Stateflow 逻辑会转换为状态机代码。
- Simulink Design Verifier:对 Stateflow 逻辑做形式化分析,查找死逻辑、不可达状态等隐患。
这条工具链的意义在于:同一个模型既是设计文档,又是仿真对象,又是代码来源,又是测试基准。这正是基于模型的设计相对于传统手写代码的核心优势。
四、典型应用场景
协同开发在以下场景中尤为常见:汽车电子中的整车控制器(VCU)、电池管理系统(BMS)状态机、变速箱换挡逻辑;航空中的飞控模式管理、余度切换;工业自动化中的产线节拍控制、安全联锁;电力电子中的并网/离网模式切换。这些场景的共同特征是:既有连续物理动态,又有明确的离散模式与事件驱动逻辑。
五、学习路线图
本课程后续内容按"先分后合"的顺序展开:先分别掌握 Simulink 建模与 Stateflow 状态机建模的基本功,再进入两者的接口、事件、数据传递与采样时间协调,最后落到测试、覆盖率、代码生成与工程实践。下面的 SVG 给出了整门课的知识结构与协同关系全景。
六、一个最小协同示例的预期形态
为了给后续章节建立直观预期,这里描述一个最小协同模型的结构(不涉及具体搭建步骤):被控对象是一个一阶惯性环节,输入为加热功率,输出为温度;控制器是一个 Stateflow 状态机,包含"待机""加热""保温""故障"四个状态。温度低于 40 ℃ 且无故障时进入加热,输出功率 100%;温度达到 60 ℃ 时进入保温,输出功率 30%;温度超过 80 ℃ 或收到故障事件时进入故障,输出功率 0%。Simulink 侧负责温度动态演化,Stateflow 侧负责模式判断与功率决策,两者通过一个输出信号和一个事件通道交互。这个结构虽小,却完整覆盖了本课程后续要展开的全部要素:连续动态、离散逻辑、接口、事件、采样时间、测试与覆盖率。