摘要:为了解决用梯形图语言编写顺序控制设备时所存在的编程复杂、理解困难等问题,引入PLC的顺序功能图来编程是一种非常有效的方法,该方法具有编程简单而且直观等特点。本文以某高炉喷煤系统单罐循环的控制为例,采用顺序功能图与梯形图、功能块图相结合的方法编写控制程序,与以往常用的梯形图、功能块图编程方法相比具有简单、直观、逻辑性强等特点,大大提高了编程的效率。
关键词:多语言;编程;PLC;应用
Abstract: For resolving the complexity and indigestibility in programming forsequential control by use of the ladder diagram,it is an effective method toprogram the sequential control by making use of the Sequential Functional Chart(SFC) of PLC. This method is of simple and direct characteristics. This paperutilizes the method of SFC combining with Ladder diagram and Function blockdiagram to program the Pulverized Coal Injection control system of Blast Furnace.Comparing with the method of Ladder diagram and Function block diagram, wecan see that this method is more simple, direct and logical, and it improves theprogramming efficiency.Key words: SFC; Program; PLC; ApplicationhhhhApplication of SFC in PLC Control System of Pulverized Coal Injection
1 引言
在现代工业控制中,由于生产工艺的复杂性、多样性的特点,对自动控制系统的要求也必然越来越高。在实践中,我们往往发现,在解决复杂性问题时单独使用一种编程语言会有局限性,无形中增加了工作难度。而目前大部分的工控软件都会提供多种编程语言,常见的编程语言有梯形图、功能块图、指令表、结构文本、顺序功能图,每种编程语言各具特点。如果我们在实践中针对各种复杂的控制要求或难点能灵活地运用各种语言进行混合编程,往往会产生事半功倍的效果。
高炉喷煤技术已成为节焦、增铁、降低成本、改进高效冶炼效果和促进高炉顺行的主要措施,也是当今世界高炉冶炼技术进步的主要方法。但要实现连续、稳定、均匀的喷吹系统的PLC控制却较为复杂。采用多语言混合编程,就能起到良好的效果。现以该系统中的最主要的部分喷吹罐单元循环操作的控制为例,具体阐述混合编程在项目中的应用。在该项目中控制系统采用Quantum的65150控制器,编程软件采用UnityPro XL v4.0。
2 高炉喷煤喷吹罐单元的控制要求
高炉喷煤是从高炉风口向炉内直接喷吹磨细了的煤粉,以替代焦炭起提供热量和还原剂的作用,从而降低焦比,降低生铁成本,它是现代高炉冶炼的一项重大技术革命。
高炉煤粉喷吹工艺主要包括以下3步:
煤粉从煤粉仓进入喷吹罐,这是批料处理的一部分。在批料处理中,喷吹罐可以装料、充压、保持、喷吹或减压,保证气动输送管道上不断有煤粉通过。
从喷吹罐出来的输送管道中的单流煤粉在混合器中与输送空气混合,并运送到高炉附近。
单流煤粉和输送空气的混合物进入分配器中,并平均分配到各喷吹管道,喷吹管道将其输送到各风口。
某高炉喷煤系统包含三个喷吹罐单元(FT-3410、FT-3420、FT-3430),每个喷吹罐单元包括1个喷吹罐,10个电磁阀,3个调节阀,如图1所示。喷吹罐可以进行连续批料循环,通过输送管线和混合器将煤粉从煤粉仓运到煤粉输送管线中。一个喷吹罐单元完整的喷吹周期包括准备过程和喷吹过程。1个喷吹罐喷吹,另2个喷吹罐就准备。这样就可以保证不断向高炉提供煤粉。
图1 FT-3410单元设备示意图
准备周期又包含以下几个阶段:
减压阶段:喷吹罐压力从喷吹压力降至大气压(+20KPa)。打开泄压阀PBV34122,喷吹罐通过连接到煤粉仓卸压过滤器的减压管线减压。
装料阶段:煤粉在大气压下通过重力作用,通过装料阀PBV34131和PBV34132,将煤粉从煤粉仓装填到喷吹罐中。
充压阶段:喷吹罐内压力从大气压加到喷吹压力,此过程又可细分为以下步骤:
等待过程:只发生在喷吹率非常低的情况下。
慢速充压过程:在慢速充压阶段,通过进入喷吹罐的流化、常压氮气缓慢加压。
快速充压过程:正在喷吹的罐几乎变空的时候得到快速充压信号。通过充压阀PBV34114完成。
保持阶段:保持原状态,直到当前正在喷吹的罐完成喷吹周期。在保持阶段,喷吹罐的压力通过压力控制阀在设定范围内随着正在喷吹罐的压力变化而变化。极端情况下还可以使用加压阀PBV34114进行充压,压力过高时打开放散阀PBV34121进行减压。
喷吹过程是从喷吹罐达到“停止喷吹的重量”开始的。正在喷吹的喷吹罐喷吹阀关闭的同时,处于保持阶段喷吹罐的喷吹阀PBV34171立即打开,并关闭疏松阀PBV34161,这就保证了换罐时高炉不会出现喷煤中断。在喷吹过程中,通过压力控制阀控制喷吹罐中的压力,极端情况下使用加压阀PBV34114进行充压。如果喷吹罐中的压力在规定范围内过高,打开放散阀PBV34121进行减压。
在一个喷吹罐投入循环操作过程之前,首先应使阀组内的各阀处于适当的位置,即各阀进行初始化操作。在初始化操作结束之后,喷吹罐就可以进入完整的循环过程。一个喷吹罐完整的操作顺序可用图2表示:

在循环操作的各个过程中,喷吹罐阀组中各阀需要按照规范进行操作。
在初始化过程中,阀组内各阀应按照以下的顺序动作:
(1)喷吹阀 PBV34171 关闭 (2)疏松阀 PBV34161 打开
(3)压力阀 PBV34112 关闭 (4)充压阀 PBV34114 关闭
(5)减压阀 PBV34122 打开 (6)装料阀1 PBV34131 关闭
(7)装料阀2 PBV34132 关闭 (8)采样除尘阀 PBV34133 打开
(9)放散阀 PBV34121 关闭 (10)事故阀
PBV34141 打开在阀组内各阀都按上述要求动作并处于正确的位置后,如果满足单罐循环的启动条件,则进入装料阶段。
在装料阶段,启动装料的顺序是:
(1)采样除尘阀 PBV34133 关闭
(2)装料阀2 PBV34132 打开
(3)装料阀1 PBV34131 打开
在喷吹罐填充装料期间,重量将达到“料满”信号,这个信号启动下列停止装料顺序:
(1)装料阀1 PBV34131 关闭
(2)装料阀2 PBV34132 15秒延时后关闭
(3)采样除尘阀 PBV -34133 打开
喷吹罐结束“装料”阶段,开始进入“充压”阶段。如果单罐循环启动时喷吹罐已经处于料满的条件下,将跳过装料阶段而直接进入充压阶段。
在充压、喷吹、减压等各阶段,阀组内各阀也将按照规范进行动作。在这里就不一一细说了。
在所有阶段中,包括装料、充压、保持、喷吹、减压阶段,喷吹罐都要通过流化气控制阀FCV-34152进行流化调节。且在所有阶段中,下列操作不允许手动:
• 在PBV34131没有关闭的情况下打开PBV34133;
• 在PBV34133没有关闭的情况下打开PBV34131;
• 在喷吹罐压力 >20kPa的情况下打开PBV34132。
实际生产中,在正常情况下高炉喷吹系统的每个喷吹罐单元都将按上述规定自动执行循环操作。但在调试、检修及事故情况下,还必须允许操作人员对单体设备进行远程手动操作。
3 多语言编程的准备工作
我们常见的PLC编程语言有梯形图、功能块图、指令表、结构文本、顺序功能图。在高炉喷煤喷吹循环的控制中,重点应用了顺序功能图、并以功能块图及梯形图为辅助应用。
梯形图(Ladder Diagram,LD)是使用得最多的PLC图形编程语言。梯形图与继电器电路图很相似,具有直观易懂的优点,很容易被工厂熟悉继电器控制的电气人员掌握,特别适合于数字量逻辑控制。梯形图由触点、线圈和用方框表示的指令框组成。触点代表逻辑输入条件;线圈通常代表逻辑运算的结果,常用来控制外部的负载和内部的标志位等;指令框用来表示定时器、计数器或者数学运算等附加指令。
功能块图(Function Block Diagram,FBD)使用类似于布尔代数的图形逻辑符号来表示控制逻辑。一些复杂的功能(例如数学运算功能等)用指令框来表示,有数字电路基础的人很容易掌握。功能块图用类似于与门、或门的方框来表示逻辑运算关系,方框的左侧为逻辑运算的输入变量,右侧为输出变量,方框被“导线”连接在一起,信号自左向右滚动。
顺序功能图(Seqquential Function Chart,SFC)是一种位于其他编程语言之上的图形语言,用来编制顺序控制程序。在这种语言中,工艺过程被划分为若干个按顺序出现的步,步中包含控制输出的动作,从一步到另一步的转换由转换条件控制。用顺序功能图表达复杂的顺序控制过程非常清晰,用于编程及故障诊断更为有效,使PLC程序的结构更加易读,它特别适合于顺序控制过程。
一个顺序控制过程可以分为若干个状态,状态与状态之间由转换分隔,相邻的状态具有不同的动作,当相邻状态之间的转换条件得到满足时,就实现状态的转换,即上一个状态的动作结束而下一状态的动作开始,描述这一过程的方框图称为顺序功能图。
顺序功能图主要由步、转移和动作三大要素组成,如图3所示。

图3 由三个步构成的SFC结构
步是一种逻辑块,即对应于特定的控制任务的编程逻辑。对应于系统初始状态的工作步,称为初始步。步只有处于活动状态时,相应的动作才被执行。
动作是步中的独立部分,表明步中要执行的逻辑任务。每一步可以没有动作,也可以有多个动作。
转移就是从一个步过渡到另外一个步时的切换条件。它只能是BOOL类型的数据。只有该转移的前步为活动步且该转移条件满足时,才能失活前一步,激活下一步。
SFC的基本结构可分为单序列、选择序列、并行序列和复合序列几种。单序列结构没有分支,它是单流程重复形式,动作不断重复循环。选择序列的结构有分支,根据分支转移条件来决定究竟选择哪一个分支。若在某一步执行完后,需要同时起动若干条分支,那么这种结构称为并行序列。复合序列就是一个集单序列、选择序列、并行序列于一体的结构。
由于每种工控软件中的SFC编程语言的用法会稍有区别,为方便读者阅读,在UnityPro软件的SFC编程语言中各种步示意及说明见表1。
4 分析控制要求确定编程的思路
笔者对控制要求进行分析后发现,整体系统包含三个喷吹罐单元,但三个单元执行的功能和操作是相同的,只是在时间上有些延迟,以保证在一个时刻只能有一个罐处于喷吹阶段。所以,我们只要完成了单罐的控制程序,然后稍加处理就可以完成三罐的整体控制。因此控制的重点就落在了单罐的循环动作控制上。单罐循环操作的控制主要体现在10个电磁阀和3个调节阀的控制上。对于调节阀的控制,笔者认为使用常用的LD进行编程控制就可以满足要求,而且一般的工控软件会提供一些内置的调节控制功能,在使用起来也比较得心应手。对于阀组的控制,又分为两种情况:在自动控制模式下每个喷吹罐在不同的阶段间进行循环,且在每个阶段阀组内各阀都要按照设定的动作顺序执行。这属于比较典型的顺序控制要求,使用SFC进行编程相对比较容易。而在手动控制模式下,阀组内各阀的控制基本上属于数字量逻辑控制,使用常用的FBD或LD编写控制程序会相对简单、明了。然而,不管是自动控制模式还是手动控制模式,控制的对象是相同的。如果我们单独使用一种语言进行编程,必然会顾此失彼。综合考虑后,确立了用SFC与FBD相结合的方法编制阀组控制程序,这样就能兼顾两者的优势,势必形成事半功倍的效果。
自动模式下,单罐循环动作过程控制主要采用SFC中的单序列结构为主,选择序列为辅进行控制,选择序列主要用于步间的跳转。由于喷吹罐在初始化、装料、充压、喷吹、减压等阶段又分别包含多个动作,为使程序具有良好的可读性,充分利用Unity软件的特点,为每个阶段采用宏步的方式进行编程。这样就可以对整个循环过程按阶段进行分割,构成结构化的循环控制过程。
在SFC、 LD、FBD之间,通过项目的变量(I/O变量或内部变量)进行数据的传递,使整个项目成为一个有机的整体,实现对设备的完整控制。在SFC中用到的转换条件,如“是否满足循环启动条件”、“料满”、“料空”、“罐压力满足”等,将在LD或FBD中进行逻辑判断,判断的结果通过中间变量传递到顺序功能图中。即SFC中的转换条件在梯形图或功能块图中进行判断。另一方面,如阀组内各阀的控制在FBD中编制控制逻辑,如图4所示。

图4 FBD中阀控制逻辑示意图
图4中的“手动控制命令”可以直接接受操作员指令。但“自动控制命令”则在SFC的步动作中发出命令,通过中间变量传递到功能块图中参与逻辑控制。
5 单罐动作循环控制要求的实现
根据FT-3410喷吹罐的控制要求编制的顺序控制流程图如图5所示:

图5 单罐循环操作顺序控制流程图
在图5所示的顺序控制图中,包含了五个宏步,分别为“宏步_初始化”、“宏步_装料”、“宏步_充压”、“宏步_喷吹”和“宏步_减压”,分别代表实际生产中喷吹罐初始化、装料、充压、喷吹、减压五个阶段。其中每个宏步调用一个宏段,每个宏段可视为一个“子顺序控制段”。这五个宏段通过转换连接起来,就完成了单罐循环过程的顺序控制。为方便读者了解程序结构,图5中各步(或宏步)包含的具体动作并未展开。下面的图6表示了“宏步_初始化”的顺序控制过程,此过程包含了10个电磁阀的顺序动作,其内容如图6所示。

图6 宏步_初始化”的顺序控制过程图
在另一个段中,使用我们熟悉的功能块图FBD编写各阀的输出控制。以PBV34131阀为例,控制逻辑如图7所示。

图7 用FBD编写PBV-34131阀控制逻辑图
对调节阀的控制,我们单独创建一个段,用熟悉的梯形图来编写控制程序。按照以上的过程,我们就可以较轻松地完成单罐循环的动作过程。
6 实践中的几点体会
在以上的控制系统的实现中,在原来常用的梯形图、功能块图的基础上,针对系统顺序控制要求的特点,增加了SFC语言的应用,实现多语言混合编程的模式。在实践中总结出以下几点体会:
(1)混合编程模式能充分发挥每种编程语言的优势,减少编程的工作量,提高工作效率。
在高炉喷煤系统单罐自动循环操作的控制中,由于控制系统的主要任务是完成顺序控制,因此我们使用了SFC编程的方法。因为在顺序控制方面,SFC语言具有无可比拟的优势。使用SFC语言进行顺序控制,只要根据控制要求列出系统工作过程的顺序控制流程,就可以编制出系统控制程序,既能满足控制要求,又减少了编程工作量。虽然使用梯形图语言也可以实现系统的顺序控制,但经过实践的对比,完成单罐循环控制的梯形图程序至少要300行以上,还要使用到大量的中间变量来存储过程状态。另一方面,在阀组中各阀的输出线圈的控制中,我们使用了FBD编程方法,充分利用了FBD语言在数字量逻辑控制方面的优势及编程界面简洁易懂、位置调整灵活的特点,将自动控制模式与手动控制模式单独考虑,通过简单的控制架构,完成设备在自动和手动模式下的控制要求。
在调节阀控制方面,使用传统的、应用最广泛的LD语言,并最大限度地利用了工控软件提供的系统功能块(如PID调节功能块),使得编程简单快捷、得心应手。
在分析系统要求的基础上,针对不同的要求采取不同的策略,充分发挥各种编程语言的优势,取长补短,并通过必要的手段使它们形成一个有机的整体,完成系统全部的控制要求,大大地减少设计和编程的工作量,提高了工作效率。
(2)程序结构清晰,逻辑简单、直观,便于理解。
我们都知道,控制系统的自动控制比手动控制要复杂,在编程时我们往往需要把大部分的精力放在系统自动控制的实现上。在单罐循环自动控制部分,如果使用梯形图或功能块图语言编写控制程序时,由于没有固定的编程规则,对于不同的控制系统,没有一种通用的容易掌握的设计方法,还需要用大量的中间单元来完成记忆、联锁和互锁功能。由于需要考虑的因素很多,它们往往又交织在一起,分析起来非常困难,一般不可能把所有的问题都考虑得很周到。程序设计出来后,需要模拟调试或在现场调试,发现问题后再针对问题对程序进行修改。不同的设计者会按照各自不同的编程习惯、思路、方法来设计出相同功能的程序,以至于其他人要理解起来可能会有一定的困难。而这次我们改用SFC语言编写单罐循环自动控制的程序后,在程序中可以很直观地看到设备的动作顺序。不同的人员都比较容易理解其他人编写的程序,因为程序是按照设备动作的顺序进行编写的。在阀组的控制方面,由于各阀间复杂的联锁条件已经在SFC中考虑过了,所以我们在功能块图中只需要考虑一般情况下必要的联锁(如手动操作时阀组间的联锁),就可以实现对各阀的输出线圈的控制。这样就减少了多因素交织状态的发生,简化了分析和调试的过程。通过这种多语言结合的编程方式,我们就可以把复杂的控制问题简单化,同时使程序的整体结构清晰,便于理解。进一步地,为日后系统的维护和修改也创造了一个良好的基础。
(3)方便系统调试与维护,提高试车成功率。
以往用梯形图编程时,一般不可能把所有的问题都考虑得很周到,程序设计出来后,需要模拟调试或在现场调试,发现问题后再针对问题对程序进行修改。修改某一局部逻辑时,很可能会引发出别的问题,对系统的其他部分产生意想不到的影响。在这个项目中的单罐循环自动控制是一个顺序控制的要求,而顺序控制系统在梯形图中实现较为复杂,即使是非常有经验的工程师,也很难做到设计出的程序能试车一次成功。而我们在这个应用中,通过多语言混合编程,就可以很好地解决这个问题。在调试过程中,通过FBD编写的阀输出线圈控制段中,我们可以很容易地区分出是自动模式下逻辑出了问题还是手动模式下的逻辑出了问题,或者是设备本身的问题;如果是自动模式下的问题,进一步地,我们可以在SFC中非常直观地看到设备的动作顺序、步骤,找出问题所在之处。通过这种方式,可以大大地缩短调试周期,降低调试难度。该项目在现场调试阶段,喷吹罐的循环控制部分基本上是一次试车成功。
参考文献:[1] 廖常初. S7-300/400 PLC应用技术[M]. 北京: 机械工业出版社, 2008.
张玉红(1971-)
女,河北唐县人,本科,1992年毕业于西安工业学院,自动化专业工程师,现就职于北京首钢自动化信息技术有限公司,从事自动化编程与调试工作。
摘自《自动化博览》2011年第八期
|