0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

知识分享 | 如何通过建模规范轻松掌控Stateflow开发

北汇信息POLELINK 2026-03-26 14:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在基于模型的开发(MBD)中,Stateflow是一款功能强大的工具,尤其是在汽车等对状态机和复杂逻辑的精确控制要求极高的行业中。然而,要高效应用Stateflow,必须克服一些常见的挑战,例如语法问题以及性能优化方面的考量。

在本文中,我们将探讨来自MES模赛思调查报告中的关键洞察,并提供可操作的优化建议,助您优化Stateflow模型的性能、可靠性和可维护性。

文章目录

本文共四节,并附上主题直播活动预约链接:

  • 行业专业人士如何使用Stateflow:调查报告
  • 在使用Stateflow进行基于模型的开发(MBD)时面临哪些挑战?
  • 掌握Stateflow的十大策略
  • 总结:通过建模规范管理Stateflow的复杂性

行业专业人士如何使用Stateflow:调查报告

Stateflow在基于模型的开发(MBD)中的应用程度
为持续了解行业实践,我们于2022年联合来自梅赛德斯-奔驰集团、博世集团、大陆集团等企业的30位专家开展了聚焦Stateflow的专项调研。

我们首先询问这些从事基于模型的开发(MBD)工作的专业人士是否使用Stateflow。

如下方柱状图所示,大多数用户在其20%到50%的模型中使用了Stateflow。

wKgZPGnE0SWAQeHvAAEdn2YuQ8w495.png

图片:受访者在模型中使用Stateflow的比例

Stateflow首选动作语言

我们提出的第二个问题是关于用户使用的动作语言(Action Language)。

如下方饼图所示,多数用户更倾向于使用MATLAB而非C语言进行动作脚本编写。

这一结果反映出MATLAB的简洁性,并且能够更好地实现与Simulink生态系统的集成。

wKgZO2nE0SWAcR4QAADCNwwi8lk857.png

图片:受访者使用哪种动作语言(Action Language)?

使用Stateflow时遇到的常见障碍

第三,我们询问了受访者在使用Stateflow时遇到的挑战。

最常见的障碍是缺乏相关知识(Lacking knowledge),值得注意的是,相当一部分用户表示完全没有遇到困难(None)。功能缺失(Missing features)是最少被提及的问题,这表明:通过加强培训和完善文档,可以帮助用户更好地克服在使用Stateflow时遇到的困难。

wKgZPGnE0SWASUn5AAD7RaMrWN4114.png

图片:受访者在使用Stateflow时遇到的困难

使用Stateflow进行算术运算

第四个问题涉及是否使用Stateflow进行算术运算。

调查结果显示,56%的受访者对此表示肯定。这凸显了Stateflow的多功能性,表明其能够处理汽车系统中常见的复杂运算。

wKgZO2nE0SWAF7aJAAFUo4Q0aMA594.png

图片:受访者在Stateflow中使用算术运算的情况

最常用的Stateflow元素/模式

最后,我们调查了受访者最常用的Stateflow元素和模式。

调查结果显示,各类元素的使用分布整体较为均衡。其中,状态图(Statecharts)和条件动作(Condition actions)的使用率略高,而框(Boxes)的使用率最低。

这表明受访者更倾向于采用结构化、基于条件的建模方式,特别是在系统中实现决策逻辑时。

wKgZO2nE0SaABbuqAAFg-jTnCgY955.png

图片:Stateflow元素和模式的使用情况

关键发现

我们的调研再次证实,Stateflow已成为基于模型的开发(MBD)专业人员工具链中的重要组成部分。然而,调查结果也揭示了用户在使用Stateflow的过程中面临的若干挑战。

基于这些反馈,MES模赛思团队梳理出了常见痛点与改进方向。接下来,本文将深入剖析这些挑战,并提供最佳实践方案,助力提升Stateflow建模的效率与可靠性。

在使用Stateflow进行基于模型的开发(MBD)时面临哪些挑战?
使用Stateflow进行基于模型的开发(MBD)虽功能强大,但同时也存在影响可维护性和开发效率的挑战。主要困难包括:

  • 复杂性增加:随着状态转移数量的增长,管理它们变得更加困难。
  • 可扩展性问题:状态机可能会迅速扩展,使模型变得更难阅读和维护。
  • 语法限制:为了确保一致性并防止错误,必须遵循严格的语法规则。
  • 设计要求高:必须采用结构化的方法,并以规范化的方式使用Stateflow,以避免出现意外行为并提升模型的清晰度。

掌握Stateflow的十大策略

1. 确保转移标签语法正确

在Stateflow中使用正确的转移标签语法,既能提升模型的可读性、可维护性和可预测性,又有助于在TargetLink等工具中生成准确的代码。结构化的方法有助于创建清晰、可靠且易于维护的模型。

首先,让我们对转移标签各部分的含义进行分解和解释:

  • 事件(Event):指定触发状态转移的事件。
  • 条件(Condition):指定一个布尔表达式,当其为true时,允许执行该转移。
  • 条件动作(Condition Action):当条件被评估为true时立即执行的动作。
  • 转移动作(Transition Action):在条件满足且转移目标被判定为有效后执行。

如下展示了一种可能的语法。其格式为:

trigger [condition] {condition_action} /transition_action

需要注意的是,并不一定需要使用以上所有。通常建议避免使用事件(Event),而优先使用条件(Condition),因为这种方式更为标准。此外,应在条件动作(Condition Action)或转移动作(Transition Action)间做出选择。

wKgZPGnE0SWAYNzJAABb68AdySs832.png

图片:转移标签的正确语法示例

2. 遵循安全建模语言子集

基于建模规范:mes_slsf_3110 | misra_slsf_047_ab | misra_slsf_046_a

应避免使用历史结点,因为它们可能导致:

  • 导致模型解释错误。
  • 验证流程复杂化。
  • 隐藏功能,使系统更难理解和维护。

下图展示了以H符号标识的历史结点,这可能引发上述问题。

wKgZO2nE0SWARqBsAAAhz6uc_BY038.png

图片:可能导致错误的历史结点

还应避免使用事件(Events),因为它们可能:

  • 导致递归问题。
  • 造成非预期功能。
  • 隐藏功能,导致模型难以理解和维护。

哪些Stateflow动作规范是安全的?
建议选择一种动作类型(条件动作、转移动作或状态动作),并在整个模型中保持一致。

3.正确使用条件动作和转移动作

基于建模规范:misra_slsf_045_e | misra_slsf_045_f | misra_slsf_045_g

避免在条件动作和转移动作中写入变量:在条件动作或转移动作中修改变量可能导致非预期行为,并增加调试难度。

wKgZO2nE0SWAAJAWAABgQB_gwdA251.png

图片:在条件或转移动作中修改变量可能导致错误

避免在后续转移中读取由转移动作写入的变量:在转移动作中被修改的变量不应在后续的转移中被读取,否则可能导致执行顺序不一致。

wKgZO2nE0SWAXrbwAABcbhnYPV8327.png

图片:在转移动作中读取被修改的变量可能导致执行不一致的情况

单一转移动作写入:为保持可预测的行为,一个变量在状态之间转移时应仅由单个转移动作进行修改。

wKgZPGnE0SWAM23RAABxYA9h6iM146.png

图片:为保持可预测的行为,一个变量在状态之间转移时应仅由单个转移动作进行修改

4. 避免在Stateflow中出现交叉转移

基于建模规范:mes_slsf_3109

为了保持清晰性并防止图形重叠,应避免在Stateflow图中使用跨越状态边界的转移。交叉的转移会使图表难以阅读,从而增加误解和错误的风险。

此外,布局杂乱会使调试和维护变得更加复杂,使得跟踪执行流程更加困难。通过对转移进行合理组织并保持路径清晰,可以提高模型的可读性、可维护性以及整体可靠性。

在下图中,可以看到明显的跨越并行状态边界的转移。避免这类交叉非常重要,因为它们可能导致混淆和潜在的建模错误。

wKgZO2nE0SeASqo5AATnTeZRC8A339.png

图片:跨越并行状态边界的转移

5. 避免在浮点数中使用相等运算符

基于建模规范:jc_0481 | mes_sltl_002

应避免使用以下相等比较运算符比较浮点数:

  • ==
  • !=
  • ~=
  • <>

由于浮点数采用二进制表示,通常会产生微小的舍入误差,因此精确比较不可靠。这可能导致错误的结果,因为两个在数学上相等的值在内存中可能存在微小差异。因此,对于浮点数来说,不建议使用硬等值比较(严格逐位比较)。

6. 避免在Stateflow中出现回溯

基于建模规范:mes_sf_002 | misra_slsf_043_h

Stateflow不支持回溯。这说明所有已执行的动作均保持有效,无论转移路径是否达到预期的最终状态。如果某个转移路径未能到达有效的结束状态,可能会导致非预期的行为。

为了避免这样的问题,应确保每一个转移路径包括一个无条件的默认路径。此外,应仅在转移的最后一段使用条件动作,或改用转移动作。

(如第三节所述,选择使用转移动作是有充分理由的。)

请见以下回溯问题示例:

wKgZO2nE0SWAQUFpAADX6OLqpgQ759.png

图片:Stateflow中回溯导致问题的示例

7. 遵循设置执行顺序的最佳实践

基于建模规范:mes_is_0002

在Stateflow中,执行顺序通常按照顺时针方向定义,尤其是在并行状态中。即使是对图形布局的细微调整,或新增一个元素,都可能导致执行顺序发生变化。

下图展示了在Stateflow图中引入一个新的事件(Event1)后,转移的执行顺序如何发生变化,强调了手动指定执行顺序的重要性。

wKgZPGnE0SWAIGN9AAIxSqQWyRQ129.png

图片:添加Event1会改变转移顺序,因此建议手动控制

8. 避免使用全局Stateflow函数

基于建模规范:mes_slsf_3106

将Stateflow函数在各自的图中本地定义是保持模块化并防止产生非预期交互的推荐方法。

使用“导出图表级函数(设为全局)”功能可以使图形函数在模型的任何图中被全局访问。然而,这些函数难以追踪(仅能通过搜索函数名称查找),并且会导致行为不透明。

此外,启用“允许Simulink调用导出函数”(自R2014b起可用)会增加函数管理和数据流方面的复杂性,因此不建议启用该选项。

wKgZPGnE0SWADFQzAABv4oTt-z8392.png

图片:避免选择“允许Simulink调用导出函数”选项

9. 避免递归循环

基于建模规范:jc_0804

确保Stateflow中的图形函数既不以递归方式定义,也不调用其他图形函数,对于防止非预期行为并保持模型的完整性至关重要。递归调用可能导致无限循环、栈溢出,并增加调试和维护的复杂性。

下图展示了Stateflow图形函数中的递归循环问题。当执行func1(x)时,它会调用func2(x),而func2(x)又调用func1(x),从而形成无限递归。为避免此问题,建议在Stateflow图形函数中避免直接或间接的递归函数调用。

wKgZPGnE0SWAI9w0AABlFiQpHbk684.png

图片:Stateflow中的递归循环,函数func1与func2相互调用,导致无限递归

10. 明确定义输入变量以实现无缝集成
在使用TargetLink、Simulink以及Stateflow时,明确定义输入变量对于维持接口的一致性和良好的结构十分重要。来自dSPACE的TargetLink Property Manager(如下图所示)能够帮助管理这些变量定义,确保模型与最终实现之间的一致性。

wKgZO2nE0SWAcFPfAAFJheUFYMo959.png

图片:dSPACE的TargetLink Property Manager

总结:通过建模规范管理Stateflow的复杂性

Stateflow为用户提供了强大的建模功能,但如果使用不当,也可能带来风险。

为了更好地管理复杂性,请遵循以下最佳实践:

  • 保持简单!避免在转移和状态逻辑中引入不必要的复杂性。
  • 在Simulink中执行算术运算:否则,图表可能会变得过于庞大而难以控制。
  • 遵循既定的建模规范,以避免出现非预期行为和容易出错的模式。
  • 保持布局清晰且结构化,提高模型的可读性和可维护性。
  • 使用MES Model Examiner® (MXAM)等工具,自动化检查模型是否符合建模规范。


通过遵循这些最佳实践,可以构建稳健、高效且易于维护的Stateflow模型,并实现与Simulink和TargetLink的无缝集成。

欢迎您申请MXAM免费试用,如您有任何疑问,也欢迎与北汇信息取得联系,我们竭诚为您服务!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • MES
    MES
    +关注

    关注

    5

    文章

    1305

    浏览量

    32978
  • 模型
    +关注

    关注

    1

    文章

    3810

    浏览量

    52253
  • 汽车
    +关注

    关注

    15

    文章

    4224

    浏览量

    41316
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Matlab/Simulink/Stateflow建模开发及仿真测试

    matlab 模拟仿真 熟悉Matlab/Simulink/Stateflow建模开发及仿真测试,熟悉V模型开发流程。 熟悉自动代码生成,能够编写或者配置自动代码生成脚本。
    发表于 10-24 17:23

    matlab simulink stateflow

    近期在学习simulink里面的stateflow,可是我按着书上的例子搭建的模型,运行就是有错误,不晓得是什么错误,找不出来,哪位大侠帮我看看,指导下啊
    发表于 06-24 17:39

    MatLab/Stateflow定时

    利用stateflow实现实时定时功能:stateflow接收一个输入Timer,我的单片机底层定时器里会每个5ms把Timer加1,加到65535时,下一个会清零(单片机自动清零,重新计数)。现在
    发表于 05-04 09:18

    招兼职Stateflow建模,RealTime Workshop建模,simulink汽车电子等人员

    企业培训公司面向单位员工培训,长期招Stateflow建模,RealTime Workshop建模,simulink汽车电子等人员兼职老师,一般三天左右的短周期培训,周末为主,有2人左右的小辅导
    发表于 09-22 16:43

    如何开发符合AUTOSAR规范的电机控制器软件

    软件开发的基本知识,CAN通信基础,UDS诊断协议基础,CCP/XCP数据标定基础,永磁同步电机矢量控制基础,基于模型建模的软件开发基础;实战篇内介绍如何基于TC277芯片完成电机控制
    发表于 08-30 08:59

    基于ESP32的掌控板介绍

    众所周知,掌控板在创客教育中用的非常广泛,它是一块基于 ESP32 的学习开发板。大家对掌控板编程,用的比较多的都是图形化编程的方式,比如 mPython、Mind+ 等。但是,既然掌控
    发表于 02-17 06:31

    stateflow教程

    stateflow详细教程,适合新手学习。stateflow是matlab下一个重要工具箱,可以用于控制逻辑设计。
    发表于 10-27 18:15 0次下载

    Stateflow用户使用指南pdf下载

    Stateflow用户手册,用于自动代码生成
    发表于 02-05 11:30 41次下载

    Simulink建模规范(MAAB)之模型架构设计

    更多精彩干货分享,请关注我的个人微信公众号:MBD开发者星球;​1、na_0006: Guidelines for mixed use of Simulink and Stateflow ID
    发表于 11-05 20:51 9次下载
    Simulink<b class='flag-5'>建模</b><b class='flag-5'>规范</b>(MAAB)之模型架构设计

    用simulink的stateflow建模规范

    建模规范适用于电动车整车控制策略开发阶段,快速原型模型的开 发和维护。 预期读者对象为:熟悉整车结构,具有较强的 Simulink/Stateflow 建 模能力,并熟悉整车控制思想
    发表于 08-31 14:53 5次下载

    使用TPT完成Stateflow动态测试

    本文总结了一套使用TPT针对Stateflow的具有普适性的测试方法。以Fan Management单元模块的动态测试为例进行介绍。
    的头像 发表于 08-01 14:50 2190次阅读
    使用TPT完成<b class='flag-5'>Stateflow</b>动态测试

    零编程建模开发报表,提升决策速度

    全面提升企业的数据分析挖掘效率,从而提高企业决策速度与质量。 1、零编程建模 奥威BI系统提供了直观的界面和丰富的组件,用户无需编程知识,即可轻松搭建数据模型,进行数据分析和报表开发
    的头像 发表于 08-04 09:47 1084次阅读
    零编程<b class='flag-5'>建模</b>、<b class='flag-5'>开发</b>报表,提升决策速度

    知识分享 | 轻松实现优质建模

    知识分享在知识分享栏目中,我们会定期与读者分享来自MES模赛思的基于模型的软件开发相关Know-How干货,关注公众号,随时掌握基于模型的软件设计的技术知识
    的头像 发表于 09-12 08:08 1306次阅读
    <b class='flag-5'>知识</b>分享 | <b class='flag-5'>轻松</b>实现优质<b class='flag-5'>建模</b>

    知识分享 | 建模规范:建立优质模型的关键

    Simulink已经有许多成熟且有用的指导规范,可通过MES Model Examiner® (MXAM)进行自动检查。MXAM的自动修复功能还能帮助您安全高效地修复发现的问题。
    的头像 发表于 09-17 17:18 1279次阅读
    <b class='flag-5'>知识</b>分享 | <b class='flag-5'>建模</b><b class='flag-5'>规范</b>:建立优质模型的关键

    如何通过建模与仿真提升电力电子组件的设计与性能?

    电力电子组件建模与仿真的基础知识,以及建模与仿真工作中的优缺点。图1建模与仿真的概述建模与仿真概念涉及使用模型作为仿真的基础,以
    的头像 发表于 11-25 11:35 1699次阅读
    如何<b class='flag-5'>通过</b><b class='flag-5'>建模</b>与仿真提升电力电子组件的设计与性能?