CAN/CANFD
CCP/UDS
Bootloader/OTA
ECU/VCU/FCU
Simulink/ECUCoder
Ethernet
Hardware
Download
上一篇
下一篇
Stateflow快速参考手册
-1.Stateflow常用快捷键
-2.Stateflow快捷工具栏
-3.State状态的状态动作
-4.数据变量作用域
-5.Stateflow时序逻辑
-6.慎用的功能
回到顶部
Stateflow快速参考手册
-1.Stateflow常用快捷键
-2.Stateflow快捷工具栏
-3.State状态的状态动作
-4.数据变量作用域
-5.Stateflow时序逻辑
-6.慎用的功能
回到顶部
# Stateflow快速参考手册 Stateflow提供了一种图形语言,包括状态转移图、流程图和真值表。 使用 Stateflow,您可以对组合逻辑和时序决策逻辑进行建模,使其可作为Simulink模型中的模块进行仿真,或作为MATLAB中的对象来执行。图形动画使您能够在执行逻辑时对其进行分析和调试。编辑时和运行时检查可确保在实现前具有设计一致性和完整性。 本参考手册只涉及Stateflow最基础最常用的部分,更详细的帮助文档请参考[Stateflow官方文档](https://ww2.mathworks.cn/help/stateflow/index.html)。 ### 1.Stateflow常用快捷键
Stateflow最常用的快捷键(快捷方式)有三个: 1. MATLAB命令`sf`,在MATLAB窗口中输入`sf`,可以快速新建一个包含Stateflow的Simulink模型并且打开Stateflow模块库sflib。 ```matlab sf %新建一个包含Stateflow的Simulink模型并且打开Stateflow模块库sflib ``` 在某些版本的MATLAB中,命令sf可能仅打开Stateflow模块库sflib而不会新建一个包含Stateflow的Simulink模型,这时候就需要自己手动新建一个Simulink模型。 2. 空格键,在搭建与调试模型的过程中,经常会放大或者缩小模型视图,使用空格键,可以将模型视图自适应整个模型窗口,因此空格键是Stateflow最常用的快捷键。 3. 鼠标滚轮,尽管Stateflow提供了多种缩放模型的操作方式(包括鼠标点击与快捷键等),滚动鼠标滚轮缩放模型毫无疑问是最方便快捷的操作方式。按住鼠标滚轮时,鼠标光标会变成一只小手,这时候可以移动模型。 ### 2.Stateflow快捷工具栏
进入Stateflow模型,在模型的左侧会有一个Stateflow快捷工具栏,Stateflow快捷工具栏一共15个图标(不同版本的MATLAB可能略有不同),是Stateflow建模与调试过程中经常需要用到的,每个图标的功能说明请见下表。 ![](images/2022-12-06-16-04-47-image.png) ![](images/2022-12-06-16-22-17-image.png) | 序号 | 名称 | 功能说明 | |:---:| -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | | 1 | Hide/Show Explorer Bar | 用于隐藏或者显示模型路径管理器工具条,通过工具条可以看到当前模型在整个模型中的路径,也可以通过鼠标点击进入到上层路径中去。通过工具条右侧的下拉按钮可以浏览整个模型的所有路径,也可以通过鼠标点击进入到其它路径中去。 | | 2 | Zoom | 放大模型视图,相比鼠标滚轮放大Zoom可以先选择区域再放大,即实现模型特定区域的放大。 | | 3 | Fit to View | 将模型视图自适应整个模型窗口,功能相当于空格键。 | | 4 | State | 状态(图块),在大部分Stateflow模型中,State状态都是最常用的模块,每个状态可以包含多种状态动作。 | | 5 | Junction | 节点,节点是转移通路的判决点或汇合点,在各种条件判断中尤其常用。 | | 6 | Default transition | 默认转移,确定当有限状态机或者父层次状态处于活动状态的时候,在其所有的子状态中第一个被激活的状态。默认转移通常是无条件的,用户可以根据需要加上必要的条件、事件和动作。 | | 7 | Box | 图形盒,Box图形盒通常用来封装函数与状态。从外观上看,Box与State最大的区别在于Box为直角矩形而State为圆角矩形。 | | 8 | Simulink State | Simulink状态机封装模块,因为Stateflow模型中必须采用Simulink实现的功能非常少,因此本模块并不常用。 | | 9 | Simulink Function | Simulink函数封装模块,因为Stateflow模型中必须采用Simulink实现的功能非常少,因此本模块并不常用。 | | 10 | [Graphical Function](https://ww2.mathworks.cn/help/stateflow/graphical-functions.html) | 图形函数,Stateflow模型中大多数函数(比如各种条件判断与循环结构)都可以采用图形函数来实现。 | | 11 | [MATLAB Function](https://ww2.mathworks.cn/help/stateflow/matlab-functions.html) | MATLAB函数,Stateflow模型中调用成熟的MATLAB脚本函数。 | | 12 | [Truth table](https://ww2.mathworks.cn/help/stateflow/truth-table-functions.html) | 真值表,真值表是在逻辑代数中用于穷举各种逻辑可能的方法。使用真值表可以简化逻辑系统的设计,特别是简化系统中根据若干条件进行决策判断的分支结构。 | | 13 | History | 历史节点,记住离开时的历史状态,历史节点使用起来较为复杂,非必要不使用。 | | 14 | Annotation | 注释,功能相当于双击模型空白处添加模型注释。 | | 15 | Image | 图片,图片注释有时候比文字注释更加有效。 | ### 3.State状态的状态动作
State状态可以包含多种状态动作,常用的状态动作如下表。 | 状态动作 | 简写 | 功能说明 | | ------ | --- | ----------------- | | entry | en | 状态被激活时执行相应的动作 | | during | du | 状态保持其活动状态时执行相应的动作 | | exit | ex | 状态退出活动状态时执行相应的动作 | 状态动作是可选的,在建模过程中,推荐为所有的执行语句加上状态动作前缀,这样可以明确语句执行的时机,减少模型歧义。一个状态动作可以由一条或者多条语句构成,如果没有需要执行的语句则不需要添加状态动作。 ### 4.数据变量作用域
在Stateflow模型中,数据通常都需要指定变量作用域,变量作用域一共有6种,详见下表。 | 序号 | 作用域 | 含义 | |:---:| ----------------- | --------------------------------------------- | | 1 | Local | 局部范围内,只在对象内部使用。 | | 2 | Constant | 模型中的常量数据,常量数据必须设置初始值。 | | 3 | Parameter | Stateflow框图的上层Simulink子系统封装之后的参数获取初值,仿真中不能修改。 | | 4 | Input | 输入数据,从Simulink模块读取的数据。 | | 5 | Output | 输出数据,输出给Simulink模块的数据。 | | 6 | Data Store Memory | 与Simulink数据空间共享,命名和Simulink同名。 | Stateflow模型中并不是每一个变量都需要指定变量作用域的,比如对于图函数中的局部变量,Stateflow往往会自动处理该变量而不需要用户指定。建模过程中,根据仿真的提示就可以合理设置数据的变量作用域,而并不需要记忆设置规则。 ### 5.Stateflow时序逻辑
Stateflow提供了四种常用的时序逻辑运算符,可以用来实现各种时序逻辑功能。 | 运算符 | 用法示例 | 说明 | 速记 | | ------ | ----------------------------------- | ------------------------------------------ | ------- | | after | after(10,tick)
after(10,msec) | 如果图自关联状态激活以来至少经过了n次,则返回true;否则,运算符返回false。 | 至少经过了n次 | | at | at(100,tick)
at(1,sec) | 如果图自关联状态激活以来恰好经过了n次,则返回true;否则,运算符返回false。 | 恰好经过了n次 | | before | before(10,tick)
before(10,msec) | 如果图自关联状态激活以来经过少于n次,则返回true;否则,运算符返回false。 | 少于n次 | | every | every(100,tick)
every(1,sec) | 如果图自关联状态激活以来每经过n次,则返回true;否则,运算符返回false。 | 每经过n次 | Stateflow时序逻辑结合Stateflow事件可以实现强大的逻辑功能,但是Stateflow事件会大幅增加软件的复杂性,因此非必要不使用Stateflow事件。 ### 6.慎用的功能
Stateflow功能非常强大,其中某些功能由于各种原因需要谨慎使用: 1. Simulink State与Simulink Function,因为Stateflow模型中必须采用Simulink实现的功能非常少,因此本模块并不常用。 2. History,History历史节点使用起来较为复杂易造成错误,非必要不使用。 3. Stateflow事件,Stateflow事件会大幅增加软件的复杂性,因此非必要不使用Stateflow事件。 4. 状态转移表,由于状态转移表的功能通常都可以使用状态转移图来实现,状态转移图的可读性比状态转移表更好,因此状态转移表并不常用。