PLC编程实用指南(第3版)
上QQ阅读APP看书,第一时间看更新

1.2 PLC程序语言

PLC程序要用编程语言表达。传统PLC编程语言只有两种,指令表(Instruction List,IL)及梯形图(Ladder Diagram,LD,有的称梯形逻辑图,Ladder Logic Diagram,LLD)。而今为便于各类型的工程技术人员都能使用PLC,PLC厂商都增加了它的编程语言。国际电工组织也制定与几次修订了PLC编程语言国际标准。并在1993年做了全面修订后称之为IEC 61131-3的修订版。我国在1995年11月发布了GB/T 15969-1/2/3/4标准,与IEC 61131-1/2/3/4等同。该标准推荐了6种编程语言,除了指令表及结构化文本(Struc-turedText,ST)为文字语言,还有梯形图、功能块图(Function Block Diagram,FBD)、连续功能图(Continuous Function Chart,CFC)及顺序功能图(Sequential Function Chart,SFC)等图形语言。

目前,IEC61131-3编程语言不仅用于PLC,而且还用于集散型控制系统、工业控制计算机、数控系统和远程终端单元。

如果所有PLC厂商都使用这样的编程语言,那将好处多多:可减少培训、调试、维护和咨询的花费;可使高水平软件重复使用;可减少了编程中的误解和错误;可连接来自不同程序、项目、公司、地区或国家的部件。

然而,由于这个标准的建立是在PLC已广泛使用之后,加上它不是强制性标准,所以,有些老的PLC厂商多数还是在原来语言的基础上做了扩展。并没有完全采用这个标准。如日产PLC多数就没有采用功能块图语言。再就是,即使语言名称相同,但细节还是有不少差异。

倒是国产的PLC,如和利时公司的LM、LK系列机,是在有了标准之后才开发的。没有与原有PLC的兼容问题,所以能全面采用这个标准。再就是瑞士ABB公司的PLC也使用标准规定的6种语言编程。

1.2.1 指令表(Instruction List,IL)

指令表也叫助记符。有的称布尔助记符(Boolean Memonic),也叫列表,西门子称之为STL语言。是基于字母符号的一种低级文本编程语言。是所谓面向累加器(Accu)的语言,即每条指令使用或改变当前Accu内容。IEC 61131-3将这一Accu标记为“结果”。通常,指令总是以操作数LD(“装入Accu命令”)开始。

表1-1所示为4个厂商用这个语言写出的功能相同的程序。

1-1 IL语言程序

978-7-111-56641-0-Chapter02-6.jpg

这里列了5条指令。除第5条外,其它几条都含有如下3个部分:

1)指令地址:这里的第1条,为0,标志该指令存于PLC程序存储区的位置。一般讲,指令总是从0地址开始顺序执行,一直执行到最后一条指令为止。

2)操作码:这里的第1条为LD,用它告知PLC应该进行什么操作,是必不可缺的。

3)操作数:是操作码操作的对象。各厂商PLC操作数的拼写多不相同。如这里的第1条操作数,有的为000.00,有的为X000,有的为I0.0,有的为%IX0.0。指令有无操作数,以及有多少操作数,视操作码而定。如这里的第5条END指令,它只是表示程序到此结束,就没有操作数。

西门子、和利时程序不用END指令表示程序结束,后面无指令即表示程序的结束。

指令表语言容易记忆、便于操作,还便于用简易编程器编写程序,与其它语言多有一一对应关系,有些其它语言无法表达的程序,用它都可表达。指令表语言是PLC编程最基本的语言。但是,用它编的程序,可读性较差。所以,目前已不常用。有的公司编程软件,如AB公司的RSLogix5000,现在已不使用这种语言了。

1.2.2 结构化文本语言(Structured Text,ST)

结构化文本语言是基于文本的高级编程语言。它与BASIC语言、PASCAL语言或C语言等高级语言相类似。只是为了PLC应用方便,在语句的表达及语句的种类等方面都做了简化。

ST语言没有单一的指令,只有由一组指令构成的含义完整的各种语句。具体语句有赋值语句、条件语句、选择语句、循环语句及其它语句。

1.赋值语句

其格式为

变量A:=表达式;(∗这是注解∗)

它有被赋值变量(变量A)、赋值符号(:=)、表达式、结束分号(;)及注解组成。注解不是必要的,而其它则不可缺少。其含义是,进行表达式运算,运算结果赋值给被赋值变量。而表达式则是由变量、运算符及括号组成。表1-2所示为ST语言使用的运算符。

1-2 ST语言使用的运算符

978-7-111-56641-0-Chapter02-7.jpg

此外,系统还提供有初等数学函数,也可在表达式中使用。

提示:不同品牌PLC的ST语言所提供的函数、运算符可能略有不同。以下就是ST语言的赋值语句。它把一组变量进行逻辑运算,然后再赋值给变量“work”。

work:=(start or work)and(NOT stop);(∗赋值语句∗)

这里“work”“start”及“NOT stop”为布尔变量。使用之前一般要先定义。在“(∗”与“∗)”之间为程序注解。它表达的就是以前介绍过的起、保、停(电路)逻辑。

2.条件语句

ST语言有“假如、那么”语句。可用于逻辑处理。有多种格式。如上述work赋值也可用条件语句实现。即

978-7-111-56641-0-Chapter02-8.jpg

3.Case(选择)语句

其格式为

CASE变量 OF

变量值为1:表达式1;

变量值为2:表达式2;

变量值为3:表达式3;

ELSE表达式m;

END_CASE;

上述语句的含义为:当整形变量值为1,执行语句1;当整形变量值为2,执行语句2;……余类推。如果没有合适的值,则执行语句m。

4.循环语句

循环语句可使一些语句重复执行。有FOR loop、WHILE loop及REPEAT loop,与计算机高级编程语言循环语句相当。

5.其它语句

有EXIT语句(与IF语句配合,可根据条件终止重复语句执行)、RETURN语句(用以结束本功能块,返回调用它的主程序)、功能块调用语句等。提示如同其它语言,同样为ST语言,各PLC厂商的细节不完全一样。

结构化文本语言功能比图形语言强,可读性比指令表语言好。用它编写复杂的程序,既方便、又易读,是很有发展前途的PLC编程语言。但是,它不如图形语言直观。所以,目前用的还不大普及。如欧姆龙PLC只是在自编功能块的程序中才可使用它。

1.2.3 梯形图(Ladder Diagram,LD)

梯形图来源于美国,是一种基于梯级的图形符号布尔语言。它通过连线,也称链接元素,把PLC指令、功能及功能块的梯形图符号连接在一起,以表达PLC指令、功能或功能块,以及它们执行的前后顺序。

1.梯形图元素

根据编程标准规定,梯形图的语言元素有连线、触点、线圈以及功能或功能块。只是不同的PLC其内含不完全相同。

(1)连线

有左右垂直母线以及水平链路、垂直链路。左右垂直母线画在梯形图左右两侧,称电源柱,也称电力轨线。左侧垂直母线名义上为功率流起点。水平链路、垂直链路也就是梯形图内部的小横、竖线。功率流从左向右通过内部小横、竖线,经触点,流向相关的线圈、功能、功能块,最终到达右侧的电力轨线,也即功率流的终点。

(2)触点

有常开触点、常闭触点等。在梯形图中它用水平链路、垂直链路相互连接,并为连接在其后的线圈、功能或功能块的执行建立逻辑条件。

(3)线圈

有正常线圈、反向线圈、设置(锁存)线圈、复位(取消锁存)线圈等。线圈通常跟在触点或功能和功能块后面,但个别PLC(如施耐德)在它们后面也可以连接触点。线圈也是梯形图程序的输出。

(4)功能及功能块

除了线圈,可产生输出的还有功能及功能块。它的调用还可运用EN/ENO机制,即在调用时,在功能或功能块输入加EN端,输出加ENO端。当此功能或功能块无误运行,则EN=ENO;否则EN≠ENO。用此可方便应对调用出错。

2.梯形图梯级

有了水平链路、垂直链路,即可把若干个梯形图相关图形元素(即指令)连成一个梯级(Rung,有的称节,有的称为Network)。它是一组前后连贯,能代表一个完整逻辑含义的梯形图指令集,是设计梯形图程序的基本单位。

梯形图的各个梯级则由垂直母线连接成连通的整体(但有的厂商母线不是连通的)。从而构成完整的PLC梯形图程序。只是为了方便,有时右垂直母线可以省略。这样的图形类似于梯子,梯形图也因此而得名。

3.梯形图特点

梯形图语言与电气原理图相对应,与原有继电器逻辑控制技术相一致,易于被电气技术人员使用。与原有的继电器逻辑控制技术不同的是,梯形图中的功率流(Power Flows)不是实际意义的电流,内部的继电器也不是实际存在的继电器。

提示:梯形图的左母线好像电气原理图的电源线一样,一般不直接与输出类指令(相当于电气原理图的负载)相连,中间总要有能建立逻辑条件的一些指令(相当于电气原理图的控制元件)。但有的PLC也允许这么做。

用梯形图符号编的PLC程序,很像电气原理图。图1-6a为电气原理图,图1-6b为梯形图,可它们是何等的相似。图1-6b为施耐德公司NazaPLC用的梯形图,图上既注有直接地址(如%Q0.4),又注有符号地址(如M1),便于理解。

978-7-111-56641-0-Chapter02-9.jpg

图1-6 电气原理图和梯形图对比

图1-7所示为与表1-1对应的梯形图程序。

978-7-111-56641-0-Chapter02-10.jpg

图1-7 与表1-1对应的梯形图程序

1.2.4 功能块图(Function Block Diagram,FBD)

PLC还用有功能块图(FBD)语言(一种对应于逻辑电路的图形语言)。与电子线路图中的信号流图非常相似,在程序中,它可看作两个过程元素之间的信息流。FBD广泛地用于过程控制。

图中功能块有输入端、输出端。图1-8所示为和利时PLC用的功能块程序。这里有两个功能块,一个为逻辑“OR”功能块,另一个为“AND”功能块。前者的输出作为后者的输入。

该图的“OR”块类似于逻辑电路的“或门”,含义为逻辑或。“AND”块类似于逻辑电路的“与门”,含义为逻辑与。该图“OR”块有两个输入,一个为%IX0.0,另一个为%QX0.0。“OR”的输出直送给“AND”块。“AND”块的两个输入。一个来自“OR”块,另一个来自%IX0.1的非(这里的小圆圈为逻辑非之意)。AND功能块的输出为%Q0.0。显然,图1-8表达的操作数间逻辑关系,与本章的图1-6程序相似,也是起、保、停逻辑。

978-7-111-56641-0-Chapter02-11.jpg

图1-8 功能块图

功能块图语言是以功能模块为单位,描述控制功能。逻辑关系清晰、便于理解。特别是控制规模较大、控制关系较复杂的系统,用它表达将更为方便。

此外,一些含有标准功能的程序,用功能块语言则更便于调用。目前,PLC厂商推出一些高功能及高性能的硬件模块的同时,多提供与其有关的功能块图程序,这为用户使用这些硬件模块及进行编程提供了很大方便。

功能模块图语言占用内存较大,执行时间也较长,因此,这种设计语言多只在大、中型可编程序控制器和集散控制系统的编程和组态中采用。

1.2.5 连续功能图(Continuous Function Chart,CFC)

连续功能图与功能块语言类似,也是按需要选用种种功能块,每个功能块也有输入、输出,块间的联系也用连线。所不同的是,它更灵活,块的位置可任意摆放,特别有信号反馈时,画起来更方便。

为了块的执行有明确的顺序,它的每个块的右上角都标有序号。但在实际表达时,这个标号也可选择不显示。

图1-9所示为和利时PLC用的连续功能图程序。也是起、保、停逻辑。这里的功能块就是随意摆放的。它的输出%QX0.0以反馈的形式作为功能块OR的输入,但它有标号。所以,肯定是先“或”后“与”,再输出,不会有二义。

978-7-111-56641-0-Chapter02-12.jpg

图1-9 连续功能图程序

提示:功能块图及连续功能图语言在DCS系统编程中用得较多。此外,由于这两种语言差别不大,有时,仅使用功能块图语言。因而,有的也把IEC61131-3自动化编程语言说成5种,而不是6种。

1.2.6 顺序功能图(Sequential Function Chart,SFC)

顺序功能图以描述控制程序的顺序为特征,能以图形方式,简单、清楚地描述系统的所有现象,并能对系统中存有的像死锁、不安全等反常现象进行分析和建模,并可在此基础上编程。所以,得到了广泛的应用。

其实,顺序功能图语言仅仅是一种组织程序的图形化方式。其实际使用要与其它语言配合,否则无法实现其功能。所以,严格地讲,它不能算是完整的编程语言。

1.顺序功能图组成

由步、有向线、转移等组成。每个步含有相应的动作。而步间的转换靠其间的转移条件实现。

(1)步(Step)

步是系统工作顺序组成部分,用方框表示。分有初始步、活动步、不活动(休止)步三种。初始步是与系统初始状态对应的步;活动步,正处于工作阶段;不活动步,处于等待或已完成工作的阶段。一个步是否为活动步,即是否处于激活状态,则取决于上一步及与其相应的转移。

(2)动作(Action)

动作是步的组成部分,一个步含有一个或多个动作,用一个附加在步上的矩形框来表示。每一动作中的程序代码都可以用IEC的任一语言如ST、FBD、LD或IL来编写。每一动作还有一个修饰词(Qualifier),用来确定步激活时其动作什么时候执行或终止。修饰词及其含义略。

(3)有向连线

从上到下、从左到右的步间连线。也可用加箭头做非上下、左右的步间连线。

(4)转移。

在有向连线上的垂直短线。与转移相关的逻辑条件,用文字、布尔代数表达式、图形符号标注在转移短线旁。

2.顺序功能图步转移规则

步的转移指的是有向线相连的前后步激活状态的转换。步间转移的规则是:①步间的转移逻辑条件为真;②被转移步的前一步是活动的。不满足此两条件,将不转移。为了启动顺序功能流程图程序的执行,总是要指定一个初始步,其标志为S0,是程序运行开始时被激活的那个步。有了这个初始步,则随着相应转移逻辑条件满足,流程图中步的激活状态将逐步转换,直至最后一步被激活,或根据有向线指定路线不停地循环转换。

3.顺序功能图主要形式

根据结构的不同,顺序功能流程图可分为以下几种形式:单序列控制、并行序列控制、分支结构序列、转移序列等。

图1-10所示为一段“顺序功能图语言”编写的程序。

图中S0(起始步)、S1、S2、S3为步,t1、t2、t3、t4、t5为“转移”。“转移”的条件是位逻辑值。为1转换,进入(激活)下一步,而原来步的激活则终止。为0不转换,停留在所在步,执行所在步的程序。图中t1条件为梯形图编程,t2为逻辑图编程。图中S0步转换到S1、S2是分支结构,到底转换到哪个步,要依逻辑条件t1(转换到步S1条件)、t4(转换到步S2条件)哪个先满足确定。而S1、S2转换S3是逻辑或,执行S1步及t2为1,则从S1转换到S3,执行S2步及t5为1,则从S2转换到S3。S3往下转换,则由逻辑条件t3确定。至于在各个“步”中含有多少动作,以及各动作的程序代码是什么,即PLC要做什么,可用不同语言编写。

提示:同样称SFC语言,但有的是合乎标准的,如欧姆龙CJ2所用的,其Action有以上修饰词。有的没有,使用时要看具体软件的说明。

978-7-111-56641-0-Chapter02-13.jpg

图1-10 顺序功能图程序