机电系统设计与仿真
“Stateflow is a Finite State Machine
Stateflow是有限状态机器,通过改变状态,
有限状态反映为事件 (Events)。
返回
“Stateflow Adds Flow Diagrams to the State Machine”
通过连接 (junction) 把状态流图添加到
同一个源到多目标的节点
到一个共同事件的节点
节点传递举例
8位ADC流程图举例
8位ADC流程图举例
当状态Sensor被执行,且事件UPDATE发生时。从Sensor到节点的 内部传递有效,下一段的条件动作 {start_adc()}被执行,启动ADC。 第二个节点的自循环回路循环检测ADC的状态,当[adc_busy()]为假, 结束自循环。 执行下一段的条件动作{sensorValue=read_adc()},读ADC结果到变量。 如果 [sensorValue<100],执行Low。如果[sensorValue>200],执行 High。如果 [200>sensorValue>100],执行Normal.
状态机器中。
返回
“Stateflow Simulates its State Machine”
当完成一个 Stateflow 图后,可以对它
进行仿真。发生的事件变成红色。
返回
“Stateflow Generates Code”
在仿真过程中 Stateflow 产生它自己
的 C-code来仿真状态流图。 用Real-Time Workshop(RTW)工具可以 从Simulink和Stateflow得到代码,并 可以用于其它环境的控制过程。
2 动作Action
1)动作类型 (1)状态动作类型State Action Types
每个State Action后面都跟(:)号,以(;)或者(,)结束。
Entry Actions:进入模块Entry actions第一个被执行。 Exit Actions:当出口条件满足时执行Exit actions。 如果进入后不满足出口条件,则执行During Actions。否 则不执行During Actions,而直接执行Exit actions During Actions:当没有到其它的状态的传递时, During Actions才能被执行。
例:温度控制(stateflow_tempreture.mdl)
要求:对加热器进行定时加热并保证被加热 物体温度不超过30摄氏度。
状态1:加热 — on ;
触发条件:上升沿 — on_switch ;
状态2:停止加热 — off;
触发条件:下降沿 — off_switch ; 初始状态:停止加热 — off; 检测温度:20度、40度 — temp
在有限状态机的描述中,可以设计出从一 个状态到另一个状态转换的条件,在每对相互 可转换的状态下都设计出状态迁移的事件,从 而构造出状态迁移图。
返回
“Stateflow is Part of Simulink”
在 Simulink中, Stateflow作为其中的
一个模块,用状态流图来表示。
返回
3. 传递Transition
是连接图形之间的代箭头的连线。它从一个原对象出 发,在一个目的对象终止,箭头代表传递方向。
多向传递
单向传递
1)传递语句说明Transition Label Notation
基本结构 event[condition]{condition_action}/transition_action
Event. 定义什么条件会引起传递发生,当[ off_count==0] 真,从ON传递到OFF。 Condition. [off_count==0] Condition Action. 当条件 [off_count==0] 真,执行 off_count++ Transition Action. 传递的执行结果Light_off
2.3.2. Build a Stateflow Model
通过以下步骤可以建立一个Stateflow模型 1) “Create a Simulink Model” 2) “Create a Stateflow Diagram” 3) “Define Input Events and Input Data 4) “Define the Stateflow Interface 5) “Define Simulink Parameters” 6)“Parse the Stateflow Diagram” 7) “Run a Simulation”
Using the Stateflow Editor
从Add menu 选 Event
设置新的 event’s Properties
双击选定的event 出现 event properties 对话框后设置properties。
从 Scope 选择event 范围(类型) ,包括Local,Input from Simulink,Output to Simulink,Exported,Imported, Trigger,Index,Port,Description,Document Link 等
机电系统设计与仿真
Lecture2.4 Stateflow简介
2.3 Stateflow
Stateflow 是一种与 Simulink 联 合使用的用于控制和管理逻辑的图形设 计开发工具。它用有限状态机理论,为 复杂的系统行为提供清晰的,简明的描 述。
2.3.1 Stateflow 的特点
“Stateflow is Part of Simulink” “Stateflow is a Finite State Machine “Stateflow Adds Flow Diagrams to the State Machine” “Stateflow Simulates its State Machine” “Stateflow Generates Code”
Stateflow 模块
stateflow_temp_event
stateflow_heat_data
2.3.3 语法说明
1 状态语句说明State Label Notation
1) 语句的一般形式
name/
entry: entry actions during: during actions bind: events, data exit: exit actions
2) 定义 Data Using the Stateflow Editor to Add Data 与添加event的 方法相同
Setting
Data Properties 与设置event 的 方法相同
例 试用Stateflow编写机械手
作业空间判断程序。
已知极坐标式两自由度机械手的极角范围为 -90°~+90°,极半径范围为200~400mm. 解: command为程序运行状态:1--表示工作在轨迹 控制模式,需要作业范围的判断; alarm是报警信号:1--表示超出作业空间; R为给定的极半径;R_min和R_max分别表示最 小极半径和最大极半径; a为极角;a_min和a_max分别表示最小极角和 最大极角;
on event_name: on event_name actions
2) 状态分解(State Decomposition)
OR 状态分解
图中或是A被执行,或是B被执行。当A被执行 时,A1或A2可以在某一时刻被执行。
AND状态分解
图中当A被执行后,A1 A2被同时执行。或 B C 同时被执行。
自传递节点
当A 被执行,事件e 发生,且满足条件 [c1] 时,从A 到B 的传递发生,且执行 a1. 当A 被执行,事件e 发生,且不满足条件 [c1] ( 满足 [~c1] ) 时,从A 到A 的传递发生,且执行 a2.
自回路
在状态 A, 当事件 E发生,从A 向B传递,且执行 {i=0}。 然后执行 {i++;func1()},直到[i<10] 假。 这里{i=0}为循环确定了初值。由於到B的传递没有条件, 最后结束于B。
状态之间的传递
通过节点的传递
高层状态之间的传递
当OFF被执行,且 Switch_on发生时,ON被执行。 当ON被执行,且Switch_off发生时,OFF 被执行。 这里ON状态是高层次。
自回路传递
缺省传递 Default Transition (1) 去状态的缺省事件
当第一次被激活时,必须决定执行S还是B,因为S 和B是并行的,且没有条件。由於缺省传递指向S,以 此S先被执行。
(2) 传递动作类型Transition Action Types
Event Triggers 在传递标号中,Event triggers是第一个出 现的事件名。不需要用特殊的字符来区分其它 部分。它发出一个确定的事件,使传递开始执 行,提供执行的条件。如果缺省,表示可以无 条件执行。多个事件用或逻辑符 (|) 来分隔。
也可以从状态流图产生代码。
返回
(2)去节点的缺省事件
4 节点Connective Junctions
有相同条件的情况
有一个不确定条件的情况
满足事件E 时,且 [C_one] 真,A到B被执行。 满足事件E 时,且[C_two] 真,A到C被执行。 满足事件E 时,且[C_one] 和 [C_two] 都假,A到D被执行。
5 事件和数据 Events and Data
1) 定义 Events
事件 是 Stateflow 的对象,用来触发一个行为
Adding Events to the Data Dictionary