SFC顺序功能图编程方式是一种图形化编程模式,它的好处就是把很多不同功能的复杂程序分割为较小的可管理的单元,并管理和控制这些单元之间的执行流。这就使得程序的控制结构非常清晰,执行程序的效率得到了提高。
就像指挥交通一样,指挥得好,窄的马路也会畅通。指挥得不好,再宽的马路也会拥堵不堪,行动缓慢。不要指望马路不断扩宽,要不断挖掘有效的管理。编程也是一样,要把不同的程序执行规划好,就能提高效率。SoMachine平台给出了制定规则的手段,这就是SFC编程语言。大家可用这个语言来搭建你的程序结构,优化执行规则。
如果编写的程序条理不清,变量繁杂无定义规则,就像公路交通没有警察和红绿灯,后果是可想而知的,再宽阔的马路也会拥堵不堪,行动缓慢。把所有程序都堆到MAST任务,参与扫描,无疑会增加扫描时间,如图5-89、图5-90所示。
图5-89 所有程序都堆到MAST任务
图5-90 增加了扫描时间
采用SFC编程可以合理规划程序结构,让干事儿的程序及时参与扫描,让辅助程序按需加入扫描,从而大大提高CPU的使用效率,缩短程序扫描时间,如图5-91、图5-92所示。
图5-91 干事儿的程序及时参与扫描
图5-92 减少了扫描时间
采用SFC编程的结构,在创建POU程序组织单元时,在实现语言菜单中,选择SFC即可,如图5-93所示。
点击“打开”后,出现如图5-94所示画面。
在编程区域内出现的双线框为初始化功能框,双击“Init”,如图5-95所示,可建立一个初始化程序例如Init_active,采用结构化文本方式编程,如图5-96所示。
在打开的编程区里写入一段程序或一段赋值语句。
自动弹出的变量名解释,填好确认后,都写入POU_SFC主程序的变量声明表里,如图5-97所示。
图5-93 选择SFC
图5-94 打开SFC编程画面
图5-95 建立功能框内执行程序
图5-96 编辑一段执行程序
图5-97 变量声明
我们把POU_SFC配置到任务表里,参与运行扫描。点击任务配置下的MAST,打开配置如图5-98所示。
图5-98 配置执行程序
点击添加POU。打开输入助手,点击“Application”选择POU SFC,按“确定”,如图5-99所示。
图5-99 选择要执行的程序
这时,要执行的程序加入到POU,如图5-100所示。按“F11”编译后,程序名由灰暗变亮,表示已加入扫描,如图5-101所示。
图5-100 把要执行的程序加入到主任务
图5-101 加入后的显示
启动仿真并登录运行,我们可以看到执行情况,如图5-102所示。
图5-102 仿真执行程序
我们还可以在初始化方框内,点击鼠标右键,打开编辑功能菜单,添加入口动作和出口动作程序,如图5-103~图5-105所示。
图5-103 在功能框打开编辑菜单
图5-104 创建功能框入口和出口程序单元
图5-105 仿真执行一个功能框程序
在初始化方框内,点击鼠标右键,打开编辑功能菜单。选择插入后部转移,则加入一个程序块Step0。把Step0上口的条件trans0写为程序开关k1,下口条件写为开关k2。用这两个开关,我们就可以控制程序执行流了。(www.daowen.com)
闭合开关k1程序扫描离开初始化框,启动了Init_exit程序,使s3被赋值,如图5-106所示。
图5-106 建立一个程序执行流程控制观察出口执行效果
打开k1,闭合k2,程序扫描离开Step0,重新进入初始化框,启动了Init entry程序,使s2被赋值,如图5-107所示。
图5-107 仿真流程控制观察入口效果
修改参数,再次闭合k1,程序执行流又流到Step0可以看到各个程序的执行情况,如图5-108所示。
图5-108 仿真程序流的控制
同理,在Step0框中,我们也可以建立入口执行程序、可执行程序和出口执行程序。也可以建立左分支程序和右分支程序。例如,在Step0我们建立一个右分支程序,即在框内点鼠标右键,打开编辑菜单,选择插入右分支后,即建立右分支程序框Step1,如图5-109所示。
注意:这两个程序框是双线连接,因此对程序的扫描是并行的。如果想让程序的执行非此即彼,则要用鼠标点在双线处,激活图标行然后点击“选择分支”图标。但要注意的是:一旦选择了“选择分支”,则分支的各个程序框的入口和出口都必须要有条件开关来守门,如图5-110所示。
图5-109 向右扩展一个程序框
图5-110 有条件开关守门
向下插入一个程序框,得到一个条件转移Trans0和程序框Step2,如图5-111所示。
向上插入一个程序框,得到一个条件转移Trans1和程序框Step3。
同理在Step1上编辑,加入Step4、Step5功能框,得到Trans2、Trans3条件判断,如图5-112所示。
图5-111 向下插入一个程序框
图5-112 加入Step4、Step5功能框,得到Trans2、Trans3条件判断
当我们把Step2、Step3、Step4、Step5、k1、k2删除,得到如下符合编程语法的分支执行结构,如图5-113所示。
图5-113 符合编程语法的分支执行结构
注意,如果不删除k1、k2,在编译时会出现错误。
双击Trans1,我们可以创建一个条件转移程序,程序的编程方式可以在菜单中选择。例如,选择结构文本ST,如图5-114所示。
图5-114 选择结构文本ST
打开后,在编程区编辑一个比较语句,如果语句为真,则进入下边程序框,如图5-115所示。
图5-115 建立一个条件转移程序Trans1
同理,我们可以建立条件转移程序Trans0、Trans2、Trans3,如图5-116所示。
图5-116 建立多个条件转移程序
我们开始仿真程序,初始程序流状态如图5-117所示。
图5-117 初始程序流状态
给S4赋值,使得条件满足,进入Step0,如图5-118所示。
图5-118 满足条件后进入下一步程序块
给S4赋值100,使之满足出口条件,导引程序流出,如图5-119所示。
图5-119 满足出口程序条件
给S4赋值20,使之满足入口程序Trans3的条件,导引程序流进Step1,如图5-120所示。
图5-120 满足Trans3条件判断
综上所述,从这个程序案例来看,我们可以通过条件判断或程序运算的生成结果来控制程序的执行流程或决定哪些程序块投入运行,就像警察指挥交通一样,使你的程序执行效率大大提高。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。