基于有限状态机的PLC程序设计

ARMFLYING 2018-03-28

云南民族大学电气信息工程学院的研究人员范雄涛、沈勇、和淑芬,在2018年第2期《电气技术》杂志上撰文指出,在PLC程序设计中,通常需要考虑系统可靠性和实用性,同时需要满足其工艺要求,以及对程序进行优化。

本文以计算器的PLC程序设计为模型,将有限状态机理论知识应用于PLC程序设计中,深化加强对S7-GRAPH编程语言的学习和理解。同时,提出的一些PLC设计思路与技巧,该方法能有效的运用于到实际工艺控制系统中,有利于系统的维护和程序的扩展与修改。

可编程序控制器(Programmable Logic Controller,PLC),其本质是一个微型计算机,在现代化工厂中大量采用PLC完成控制系统的逻辑控制[1]。根据是否与原来的状态有关分为组合逻辑电路和时序逻辑电路,时序逻辑电路的输出取决于当前的输入和原来的状态[2]。

根据存储电路的状态变化时刻,时序电路分为同步时序电路和异步时序电路。同步时序电路的所有触发器的状态变化都在同一脉冲作用下发生[3]。

1有限状态机

时序电路是状态依赖的,故称状态机[4]。因输入和输出都是有限的,故称有限状态机。有限状态机理论已经形成了一整套完整的体系,根据输出信号是否与输入信号有关,状态机分为Moore状态机和Mealy状态机[5]。

状态机可以归纳为4个因素:现态、次态、动作、条件[6]。其中,次态是指条件满足后执行动作要迁移的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”。

作进一步归纳总结,“现态”、“次态”可以统一起来为“状态”,“条件”、“动作”可以统一起来为“迁移条件”,并可以用函数的表示方法更加直观的认识其中的关系:

状态:{现态×迁移条件→次态}

状态机采用的表示方法有许多种,在此采用的是表格和图形的表示方法[7]。

2同步时序电路

异步时序电路进行分析就必须考虑每个状态时刻触发器与时钟信号的关系[8],对于复杂性输入的电路来说,其设计的工作量较大,并且各存储单元的状态转换因受到时钟信号触发而存在时间差异从而可能造成输出状态短时间的不稳定,而这种不稳定有时可能是无法预计的,从而电路设计的复杂性以及调试的工作量。

时钟同步状态机所有触发器的状态更新是在同一时刻[9],其输出状态变化的时间不存在差异或者差异绩效,在时钟脉冲两次作用的间隔期间,从触发器输入到状态输出的通路被切断,也不会改变个触发器的输出状态,所以很少发生输出不稳定的现象[10]。

更重要的是,其电路的状态很容易用固定周期的时钟脉冲边沿清楚地分离为序列步进,每一个步进都而已通过输入信号和所有触发器的现态单独进行分析,从而有一套较系统、易掌握的分析和设计方法。

对于PLC的CPU启动后,系统将循环执行主程序OB1,并可在执行过程中调用其他逻辑功能块如FC、FB、DB、SFB和SFC等[9]。将有限状态机理论应用于PLC程序设计,关键在于分析整个系统的状态集和迁移条件、现态迁移到次态的具体逻辑、迁移条件与系统的输入之间的关系。

状态集包含了PLC系统的起始状态、现态与次态,输入对应于PLC系统的状态转换函数的动作过程,输出对应于整个PLC系统的状态与动作的响应。复杂型输入状态的PLC程序设计的基本思路如图1所示。

图1 PLC程序设计思路

基于有限状态机的PLC程序设计

程序状态流程图是程序分析中最实用的分析技术,它是进行程序流程分析过程中最基本的工具。利用程序流程图与状态机视图的相结合可以有效地描述PLC系统中状态、输入、状态转换之间的相互关系。

3 基于有限状态机的PLC程序设计的应用

本文以一个无浮点四则运算的计算器PLC程序设计为例,分析有限状态机理论在复杂PLC程序设计的应用。本计算器包括数字键0~9,操作码+ - * / 、= 、清零键C在内的16个输入按键。

计算器程序的复杂性在于:1、输入操作数的程序设计;2计算时输入按键顺序的随机性强,并且输入的历史有关。而利用有限状态机理论分析该计算器程序的难点是如何合理划分整个系统的所有状态和输入属性从而减少工作量。

对于输入操作数的程序,可做个一个FC的函数块,命名为DATA_IN,其输入操作数程序的核心是buff=buff*10+KeyData,其中buff代表按键缓冲区,KeyData为数字键。

因输出与输入的历史有关,故只采用组合逻辑电路的设计方法不能解决记忆的问题,同样因异步时序逻辑电路设计的复杂性和不稳定难调试等缺点会给本程序设计增加困难,故采用同步时序逻辑电路的设计方法指导该计算器的程序设计。

PLC主程序OB1扫描是自上而下、自左而右循环扫描执行的,故要使得系统的状态在一个扫描周期只改变一次,应在主程序OB1不应设计成一个触点驱动两个状态的情况,避免程序在一个扫描的过程中因一个触点驱动状态寄存器改变引起后面的程序运行的混乱从而减少程序设计的复杂性[11]。

本文利用有限状态机理论分析整个计算过程的所有状态集和动作输入,能够全面的枚举所有的计算过程。显然,无浮点四则运算的计算过程通常为:a?b=c,其中a表示第一操作数OP1,?表示操作OP,b表示第二操作数OP2,c表示a、b进行运算的结果,为了能再进行下一步的运算,可将计算结果放在OP1中。即可得到3个输入过程:输入第一操作数OP1、输入操作OP、输入第二操作数OP2。

在进行运算时,根据输入的可能性会出现以下情况:上电初始化,输入第一个操作数并且能继续输入第一个操作数,接着输入操作,再输入第二个操作数,按下等号键,计算结果放在第一操作数中,接着等待操作码进行下一次运算,其中如果输入的操作数或计算结果有可能因溢出而导致出错或者按下清零键直接恢复初始化。

根据以上分析并区分因输入的情况而使状态转换可得到以下6种状态:

Stat0:初始即上电程序初始化;

Stat1:输入第一操作数,并且还能继续输入第一操作数,如输入第一操作数“12”,并且接着按下“3”、“4”使得第一操作数为“1234”;

Stat2:有第一操作数和操作,如第一操作数“1234”和操作“+”;

Stat3:有第二操作数,如第二操作数“567”;

Stat4:有第一操作数,等待操作码,即前面计算的结果“1801”放在第一操作数OP1中,等待下一次计算;

Stat5:出错,如计算溢出导致出错等。

由此得出6个状态*16个输入按键=96种组合逻辑的情况,但因输入按键的特性可以分为4种按键属性,为了方便表示,可将PLC的I点对应赋值为:0~9数字键,10~13分别为+、-、*、/的操作键,14为=、15为清零键,一共4种按键属性。

因此可以化简6个状态*4种按键属性=24种组合逻辑。如下表所示Qn表示现态,Qn+1表示次态,KeyIn表示输入键,Display表示结果显示。

表1 组合逻辑表

基于有限状态机的PLC程序设计

例如,上电初始化后→Stat0→数字键→Stat1→操作键→Stat2→数字键→Stat3→等号键→Stat4→计算溢出→Stat5;Stat1、Stat3→输入溢出→Stat5;Stat1、Stat2、Stat3、Stat4、Stat5→清零键C→Stat0等,其中在输入操作数的过程中调用DATA_IN。完整的状态转换机如图2所示。

图2 完整的状态转换机

基于有限状态机的PLC程序设计

如图3所示,初始化后根据按键KeyIn判断整个系统的状态Stat;根据状态转换视图来分析每个状态转换的具体流程图,如图4所示的Stat1的具体流程图;再根据具体流程图依次写出PLC梯形图,最后进行检查仿真验证,限于篇幅的原因在此就不详细列出每个状态转换的具体程序。其优化方法在于:

多级顺序条件控制策略:即将被控对象的控制按照条件分成多级控制,每一级之间都定义有对应的接口。如图4所示的Stat1的具体流程图,根据KeyData的值满足对应的转移条件时,继续进行下一步的动作。当出现故障时,可以在相应的控制级别查询,从而为系统的开发和调试带来了极大的方便。

状态机逻辑控制方案:赋予每个状态一个状态字如0、1、2等,该状态字标志着当前系统处于何种状态。另外对每个状态分配专用的状态查询单元,当检测到根据用户需要或系统运行情况需要改变状态时,便对状态位进行操作,修改对应的状态位,从而通过软件实现状态机的切换。

图3主程序框图

基于有限状态机的PLC程序设计

图4 Stat1的流程图

基于有限状态机的PLC程序设计

4 西门子S7-GRAPH编程语言结构

在西门子顺序功能图的S7-GRAPH的编程语言结构中,有步、转换条件、选择分支、并行分支等结构元素。根据功能将控制任务分解为若干步,其顺序用图形方式显示出来并且可形成图形和文本方式的文件[12]。其核心是根据系统逻辑结构分析每一步和步与步之间的转换条件,其中会根据实际转换条件相应嵌套选择分支和并行分支等。

这与有限状态机理论有异趣同工之效,其核心也是分析状态集和现态与次态之间的迁移条件,其中也会根据其实际逻辑结构和状态迁移条件存在多种状态与并行。

这种基于有限状态机程序设计的方法与常规的顺序控制设计、逻辑控制设计等有一定的关联性与相似性,但是采用有限状态机理论的方法使得分析程序的思路更加清晰,设计逻辑更加全面而又严格,分析清楚每个状态与每个输入之间逻辑关系后,根据所画的程序流程图能因避免其他状态输入的干扰而更加快速而要完整的编写梯形图程序。

5总结

本文以传统的PLC设计方法为基础,并在时序逻辑电路的理论的指导下结合同步时序逻辑电路的分析方法和一般的设计步骤,参考和对比西门子S7-GRAPH编程语言,根据自己所学知识理解提出一种基于有限状态机理论的复杂PLC程序设计方法,能够较为清晰地分析整个PLC系统的所有状态,避免因为时序逻辑的复杂造成程序编程的混乱,从而有序的编写每个状态转换的程序,并且能在检查调试时更加方便,使得编程效率大幅度提高,并且能深化加强对S7-GRAPH编程语言学习和理解,达到由浅入深的效果。

该方法思路能有效的运用于到实际工艺控制系统中,有利于系统的维护和程序的扩展与修改。

¥40.1
购买

相关推荐