编写statflow有两种通用方法®在Simulink中的万博1manbetx图表®模型:
确定系统的操作模式。
标识系统接口,例如系统响应的事件。
本教程使用第一种方法,即首先确定系统的操作模式来编写图表。
这个例子展示了如何使用MATLAB构建一个状态流程图®作为行动语言。该模型表示装配线上的一台机器,它将原材料输送到生产线的其他部分。该给料机的行为如下:
在系统初始化时,检查三个传感器值是否正常。
正值表示传感器工作正常。0表示传感器没有工作。
如果所有传感器值正常,则从“系统初始化”过渡到“开”。
如果5秒后馈线仍未离开初始化模式,则强制馈线进入故障状态。
系统启动后,开始计算进给零件的数量。
在每一个时间步骤中,如果任何传感器读数大于或等于2,则该部件已移动到下一个工位。
如果报警信号响起,强制系统进入故障状态。
当操作人员打开馈线上的安全门之一或装配线上发生下游问题,导致所有上游馈线停止时,就会出现报警信号。
如有清零信号,则恢复正常操作,并将送料件数复位为零。
馈线LED会根据系统运行模式改变颜色——橙色表示“系统初始化”,绿色表示“开”,红色表示“故障状态”。
通过对馈线行为的描述,可以识别系统的关键属性。
属性 | 特征 |
---|---|
操作模式 |
|
转换 |
|
并行模式 | 没有工作模式并行运行。在任何时间只能激活一种模式。 |
默认模式 | 系统初始化 |
输入 |
|
输出 |
|
在本练习中,您将向Simulink模型添加一个状态流程图,该模型包含向馈线发送的传感器和警报输入信万博1manbetx号。
要自己实现模型,请遵循以下练习。否则,可以打开完整的模型.
开放部分建成的模型.
双击SensorSignals
块看到三个传感器信号代表脉冲发生器块。
的传感器
信号指示装配部件何时可以移动到下一工位。
双击AlarmSignal
块,以查看表示告警信号的步进块。
当报警
信号激活,机器就关闭。
运行模型,在Scope块中查看传感器和告警信号的输出。
上轴显示传感器信号。只有两个传感器信号出现,因为两个传感器具有相同的信号。下轴显示了在模拟时间45到80秒之间关闭馈线的报警信号。
通过执行打开statflow库sflib
在MATLAB命令提示符处。
选择图表
然后拖到模型中。
提示
使用MATLAB作为操作语言,用空状态流程图创建一个新的模型sfnew
.
删除SensorSignals子系统与scope、AlarmSignal子系统与scope的连接。
重命名标签图表
位于状态流程图下面的给料机
.模型现在应该是这样的:
根据前面描述的系统属性,有三种运行模式:
系统初始化
在
失败状态
为这些运行模式的行为建模添加状态:
双击馈线图开始添加状态。
请注意
图表左下角的MATLAB图标表明您正在使用带有MATLAB语法的状态流图。
单击“状态工具”图标将状态带入图表。
单击该州的左上角并输入名称,InitializeSystem
.
重复步骤2和3,添加另外两个已命名的状态在
和FailState
.
状态在执行周期的不同阶段执行动作,从活跃到不活跃。三种基本的状态行为是:
类型的行动 | 执行时 | 状态活动时执行的频率 |
---|---|---|
条目 | 当进入状态时(变为活动状态) | 一次 |
在 | 而状态是活动的,并且不能有效地转换到另一个状态 | 在每个时间步 |
退出 | 在转换到另一个状态之前 | 一次 |
例如,你可以用条目
初始化数据的操作,在
更新数据的操作,以及退出
为下一个转换配置数据的操作。有关其他类型的状态操作的更多信息,请参见状态和转换的语法.)
按回车键InitializeSystem
状态名称,并添加以下文本来定义状态入口操作:
条目:光=橙色;
InitializeSystem
状态。
的后面添加以下代码FailState
定义入口操作的状态名:
entry: Light = RED;
红色LED表示进入FailState
.
的后面添加以下代码在
定义入口操作的状态名:
入口:亮=绿;partsFed = 0;
在
状态。每次输入时,输入的零件数都被初始化为0在
状态。将以下代码添加到在
进入动作后状态检查是否有强烈的传感器信号,并增加馈送到下一站的零件:
if(any(sensor >= 2)) partsFed = partsFed + 1;结束
的在
状态检查传感器信号,以确定部件是否准备好馈送到下一个装配站。如果传感器信号很强(打开的传感器数量大于或等于2),则图表将该部分计算为已移动到下一站。
图表现在应该像这样。
转换条件指定何时从一种操作模式切换到另一种操作模式。当条件为真时,图表将过渡到下一个状态。否则,当前状态保持活跃。有关更多信息,请参见转换.
在对馈线行为描述的基础上,指定状态之间的转换规则:
将默认转换连接到InitializeSystem
表示图表入口点。
默认的转换指定从何处开始模拟。
画一个过渡InitializeSystem
状态在
状态:
将鼠标移动到控件的下边缘上InitializeSystem
状态,直到指针形状变为十字准线。
单击并拖动鼠标到上边缘在
状态。然后你会看到一个过渡InitializeSystem
状态在
状态。
双击转换以添加以下条件:
(所有(传感器> 0))
这个过渡条件验证是否所有传感器的值都大于零。
重复这些步骤来创建这些剩余的转换条件。
过渡 | 条件 |
---|---|
在 来FailState |
(报警= = 1) |
FailState 来InitializeSystem |
(报警= = 0) |
引出另一个过渡InitializeSystem
来FailState
.在此转换上,键入以下命令以创建转换事件:
后(5秒)
InitializeSystem
来FailState
.
请注意
这个转换的语法是一个事件而不是一个转换条件。有关更多信息,请参见用时序逻辑执行控制图.
图表现在看起来像这个数字。
请注意
从InitializeSystem
使用一个小标签1和2来表示转换段的计算顺序。如果图中的数字与您的模型不匹配,右键单击转换,然后单击更改它执行顺序
.看到评价秩序的过渡获取详细信息。
启动模型的模拟。出现有关未解析符号的错误,以及“符号向导”。
“符号向导”不会自动向图表添加任何数据。它识别未解析的数据,并使用statflow动作中的MATLAB表达式的推理规则推断该数据的类和范围。图:
被读取但未写入的数据被推断为输入数据。但是,如果数据的名称全是大写字母,则符号向导将该数据推断为参数
写入但不读取的数据被推断为输出数据。
读取和写入的数据被推断为当地的数据。
“符号向导”推断图表中输入数据的范围。的数据范围必须修复partsFed
输出。遵循以下步骤:
为partsFed数据:范围列,选择输出从列表中。
符号向导现在看起来像这个图形。
要添加符号向导建议的数据,请单击好吧.
为参数添加初始值。在MATLAB命令提示符处,输入:
红色= 0;
类似地,在MATLAB命令提示符处,为其余参数添加以下初始值:
参数 | 价值 |
---|---|
红色的 | 0 |
橙色 | 1 |
绿色 | 2 |
返回到模型并将输入和输出连接到它们各自的端口。
开始仿真。
双击Scope块以验证模型捕获了预期的馈线行为。
上轴为LED信号,橙色(1)、绿色(2)、红色(0)表示当前工作模式。下轴显示送至下一个装配工位的零件数量,该数量逐渐增加,直到报警信号关闭机器,然后复位。
另一种编程图表的方法是从标识系统接口的部分开始,例如系统响应的事件。
在前面的示例中,当您使用输入数据表示事件时,图表会定期唤醒并验证转换的条件是否有效。在这种情况下,如果ALARM == 1,则在下一个时间步骤过渡到故障状态。但是,创建一个对输入事件作出反应的状态流图允许您在事件触发时对警报信号作出反应。
有关何时使用基于事件的图表的详细信息,请参见通过广播事件同步模型组件.
在基于事件的方法中,首先要考虑的系统属性是事件、输入和输出。
在下表中,考虑事件驱动的馈线模型与基于过渡条件的系统不同的特征。
属性 | 特征 |
---|---|
事件 | 两个异步事件:一个报警信号和一个清除信号 |
输入 | 三个传感器读数,以检测部件是否已移动到下游装配站 |
在这个例子中时,馈线模型使用触发图对输入事件作出反应。
图表现在在左边只有一个输入端口,在顶部有一个事件触发的输入。有关如何创建由事件激活的状态流图的详细信息,请参见通过发送输入事件激活状态流程图
当报警
信号触发图表,图表在那个时间步长响应触发器。如果当前状态为在
当告警被触发时,当前状态转换为FailState
.
事件触发图表的范围输出如下图所示。
上轴为LED信号,红色(0)、橙色(1)、绿色(2)表示当前工作模式。下轴显示送至下一个装配工位的零件数量,该数量逐渐增加,直到报警信号关闭机器,然后复位。然而,由于时钟和求解器的差异,基于事件的仿真将更多的部件馈送到下一个装配站。