1 引言
在PLC中有多种程序设计语言,如梯形图语言、布尔助记符语言、功能表图语言、功能模块图语言及结构化语句描述语言等。梯形图语言和布尔助记符语言是基本程序设计语言,它通常由一系列指令组成,用这些指令可以完成大多数简单的控制功能,例如,代替继电器、计数器、计时器完成顺序控制和逻辑控制等。通过扩展或增强指令集,它们也能执行其它的基本操作。功能表图语言和语句描述语言是高级的程序设计语言,它可根据需要去执行更有效的操作,例如,模拟量的控制,数据的操纵,报表的报印和其他基本程序设计语言无法完成的功能。功能模块图语言采用功能模块图的形式,通过软连接的方式完成所要求的控制功能www.cechina.cn,它不仅在PLC中得到了广泛的应用,在集散控制系统的编程和组态时也常常被采用。由于它具有连接方便、操作简单、易于掌握等特点,为广大工程设计和应用人员所喜爱。
2 常用的程序设计语言分类
根据PLC应用范围,程序设计语言可以组合使用,常用的程序设计语言有以下几种:
(1) 梯形图(Ladder Diagram)程序设计语言
梯形图程序设计语言是用梯形图的图形符号来描述程序的一种程序设计语言。采用梯形图程序设计语言,这种程序设计语言采用因果关系来描述事件发生的条件和结果,每个梯级是一个因果关系。在梯级中,描述事件发生的条件表示在左面,事件发生的结果表示在右面。
梯形图程序设计语言是最常用的一种程序设计语言,它来源于继电器逻辑控制系统的描述。在工业过程控制领域,电气技术人员对继电器逻辑控制技术较为熟悉。因此,由这种逻辑控制技术发展而来的梯形图受到欢迎,并得到广泛的应用。
梯形图程序设计语言的特点是:
·与电气操作原理图相对应,具有直观性和对应性;
·与原有继电器逻辑控制技术相一致,易于撑握和学习;
·与原有的继电器逻辑控制技术的不同点是:梯形图中的能流(Power FLow)不是实际意义的电流,内部的继电器也不是实际存在的继电器,因此应用时需与原有继电器逻辑控制技术的有关概念区别对待;
·与布尔助记符程序设计语言有一一对应关系,便于相互转换和程序检查。
(2) 布尔助记符(Boolean Mnemonic)程序设计语言
布尔助记符程序设计语言是用布尔助记符来描述程序的一种程序设计语言。布尔助记符程序设计语言与计算机中的汇编语言非常相似,采用布尔助记符来表示操作功能。
布尔助记符程序设计语言具有下列特点:
·采用助记符来表示操作功能,具有容易记忆,便于撑握的特点;
·在编程器的键盘上采用助记符表示,具有便于操作的特点,可在无计算机的场合进行编程设计;
·与梯形图有一一对应关系,其特点与梯形图语言基本类同。
(3) 功能表图(Sepuential Function Chart)程序设计语言
功能表图程序设计语言是用功能表图来描述程序的一种程序设计语言。它是近年来发展起来的一种程序设计语言。采用功能表图的描述,控制系统被分为若干个子系统,从功能入手,使系统的操作具有明确的含义,便于设计人员和操作人员设计思想的沟通,便于程序的分工设计和检查调试。功能表图程序设计语言的特点是:
·以功能为主线,条理清楚,便于对程序操作的理解和沟通;
·对大型的程序,可分工设计,采用较为灵活的程序结构,可节省程序设计、调试时间;
·常用于系统规模校大、程序关系较复杂的场合;
·只有在活动步的命令和操作被执行,对活动步后的转换进行扫描,因此整个程序的扫描时间较其他程序编制的程序扫描时间要短得多。
功能表图来源于佩特利(Petri)网,由于它具有图形表达方式,能比较简单清楚地描述并发系统和复杂系统的所有现象,并能对系统中存在的象死锁、不安全等反常现象进行分析和建模,在模型的基础上可以直接编程,因此得到了广泛的应用。近几年推出的可编程控制器和小型集散控制系统中也已提供了采用功能表图描述语言进行编程的软件。
(4) 功能模块图(Function Block)程序设计语言
功能模块图程序设计语言是采用功能模块来表示模块所具有的功能,不同的功能模块有不同的功能。它有若干个输入端和输出端,通过软连接的方式,分别连接到所需的其它端子,完成所需的控制运算或控制功能。功能模块可
以分为不同的类型,在同一种类型中,也可能因功能参数的不同而使功能或应用范围有所差别,例如,输入端的数量、输入信号的类型等的不同使它的使用范围不同。由于采用软连接的方式进行功能模块之间及功能模块与外部端子的连接,因此控制方案的更改、信号连接的替换等操作可以很方便实现。功能模块图程序设计语言的特点是:
·以功能模块为单位,从控制功能入手控制工程网版权所有,使控制方案的分析和理解变得容易;
·功能模块是用图形化的方法描述功能,它的直观性大大方便了设计人员的编程和组态,有较好的易操作性;
·对控制规模较大、控制关系较复录的系统控制工程网版权所有,由于控制功能的关系可以较清楚地表达出来,因此,编程和组态时间可以缩短,调试时间也能减少;
·由于每种功能模块需要占用一定的程序内存,对功能模块的执行需要一定的执行时间,因此,这种设计语言在大中型PLC和集散控制系统的编程和组态中才被采用。
(5) 结构化语句(Structured Text)描述程序设计语言
结构化语句描述程序设计语言是用结构化的描述语句来描述程序的一种程序设计语言。它是一种类似于高级语言的程序设计语言。在大中型的可编程序控制器系统中,常采用结构化语句描述程序设计语言来描述控制系统中各个变量的关系。它也被用于集散控制系统的编程和组态。
结构化语句描述程序设计语言采用计算机的描述语句来描述系统中各种变量之间的运算关系,完成所需的功能或操作。大多数制造厂商采用的语句描述程序设计语言与BASIC语言、PASCAL语言或C语言等高级语言相类似,但为了应用方便,在语句的表达方法及语句的种类等方面都进行了简化。
结构化程序设计语言具有下列特点:
·采用高级语言进行编程,可以完成较复杂的控制运算;
·需要有一定的计算机高级程序设计语言的知识和编程技巧,对编程人员的技能要求较高,普通电气人员难以完成。
·直观性和易操作性等较差;
·常被用于采用功能模块等其他语言较难实现的一些控制功能的实施。
部分PLC的制造厂商为用户提供了简单的结构化程序设计语言,它与助记符程序设计语言相似,对程序的步数有一定的限制。同时,提供了与PLC间的接口或通信连接程序的编制方式www.cechina.cn,为用户的应用程序提供了扩展余地。
3 PLC程序设计语言应用实例
温度控制是许多机器的重要的构成部分。它的功能是将温度控制在所需要的温度范围内www.cechina.cn,然后进行工件的加工与处理。PID控制系统是得到广泛应用的控制方法之一,下面较为详尽地介绍了PID温度控制的PLC程序设计实例。
(1) 系统组成
本套系统采用Omron的PLC与其温控单元以及Pro-face的触摸屏所组成。系统包括CQM1H-51、扩展单元TC-101、GP577R以及探温器、加热/制冷单元。
(2) 触摸屏参数设置
设002代表现在的温度,而102表示输出的温度。如按下开始设置就可设置参数。需要设置的参数有6个,分别是比例带、积分时间、微分时间、滞后值、控制周期、偏移量。它们在PLC的地址与一些开关的地址如下:
比例带 : DM51 积分时间 : DM52
微分时间 : DM53 滞后值 : DM54
控制周期 : DM55 偏移量 : DM56
数据刷新 : 22905
(3) PLC程序
002:PID的输入字
102:PID的输出字
[NETWORK]
Name="Action Check" //常规检查
[STATEMENTLIST]
LD 253.13 //常ON
OUT TR0
CMP 002 #FFFF
//确定温控单元是否完成初始化
AND NOT 255.06 //等于
OUT 041.15 //初始化完成
LD TR0
AND 041.15
OUT TR1
AND NOT 040.10
//不在参数设置状态
MOV DM0050 102
//将设置温度DM50传送给PID输出字
LD TR1
MOV 002 DM0057
//将002传送到DM57
[NETWORK]
Name="Setting Start" //设置开始
[STATEMENTLIST]
LD 253.13
OUT TR0
AND 229.05
//触摸屏上的开始设置开关
DIFU 080.05 //设置微分
LD TR0
AND 041.15
AND 080.05
SET 040.01 //开始设置标志位1
SET 040.10 //开始设置标志位2
[NETWORK]
Name="Poportion" //比例带设置
[STATEMENTLIST]
LD 040.01
OUT TR0
AND NOT 042.01
MOV #C110 102
//读输出边与输入边的比例带
CMP 002 #C110
//比较输入字是否变成C110
AND 255.06 //等于
SET 042.01 //设置比例带标志
LD TR0
AND 042.01
MOV DM0051 102
//将比例带的设定值写入输出字
CMP 002 DM0051 //是否写入
AND 255.06
SET 040.01 //复位标志1
RSET 042.01 //复位比例带标志
SET 040.02 //向下继续设置标志
[NETWORK]
Name="Integral"//积分时间设置
[STATEMENTLIST]
LD 040.02
OUT TR0
AND NOT 042.02
MOV #C220 102
//读输出边与输入边的积分
CMP 002 #C220
//比较输入字是否变成C220
AND 255.06
SET 042.02 //设置积分标志
LD TR0
AND 042.02
MOV DM0052 102
//将积分的设定值写入输出字
CMP 002 DM0052 //是否写入
AND 255.06
RSET 040.02
RSET 042.02
SET 040.03 //向下继续设置标志
[NETWORK]
Name="differential"//微分时间设置
[STATEMENTLIST]
LD 040.03
OUT TR0
AND NOT 042.03
MOV #C330 102
//读输出边与输入边的微分
CMP 002 #C330
//比较输入字是否变成C330
AND 255.06
SET 042.03 //设置微分标志
LD TR0
AND 042.03
MOV DM0053 102
//将微分的设定值写入输出字
CMP 002 DM0053 //是否写入
AND 255.06
RSET 040.03
RSET 042.03
SET 040.04 //向下继续设置标志
[NETWORK]
Name="Hysteresis"//滞后值设置
[STATEMENTLIST]
LD 040.04
OUT TR0
AND NOT 042.04
MOV #C440 102
//读输出边与输入边的滞后值
CMP 002 #C440
//比较输入字是否变成C440
AND 255.06
SET 042.04 //设置滞后值标志
LD TR0
AND 042.04
MOV DM0054 102
//将滞后值的设定值写入输出字
CMP 002 DM0054 //是否写入
AND 255.06
RSET 040.04
RSET 042.04
SET 040.05 //向下继续设置标志
[NETWORK]
Name="Period" //控制周期设置
[STATEMENTLIST]
LD 040.05
OUT TR0
AND NOT
042.05
MOV #C550 102
//读输出边与输入边的控制周期
CMP 002 #C550
//比较输入字是否变成C550
AND 255.06
SET 042.05 //设置控制周期标志
LD TR0
AND 042.05
MOV DM0055 102
//将控制周期的设定值写入输出字
CMP 002 DM0055 //是否写入
AND 255.06
RSET 040.05
RSET 042.05
SET 040.06 //向下继续设置标志
[NETWORK]
Name="Shift" //偏移量设置
[STATEMENTLIST]
LD 040.06
OUT TR0
AND NOT 042.06
MOV #C660 102
//读输出边与输入边的偏移量
CMP 002 #C660
//比较输入字是否变成C660
AND 255.06
SET 042.06 //设置偏移量标志
LD TR0
AND 042.06
MOV DM0056 102
//将偏移量的设定值写入输出字
CMP 002 DM0056 //是否写入
AND 255.06
RSET 040.06
RSET 042.06
SET 040.00
[NETWORK]
Name="Return" //返回
[STATEMENTLIST]
OUT TR0
AND NOT 042.00
MOV #C070 102 //读输入边的处理值
CMP 002 #C070 //比较输入字变成C070
AND 255.06
SET 042.00 //返回标志
LD TR0
AND 042.00
MOV DM0050 102
//将设定温度值写入输出字
RSET 040.00
RSET 042.00
RSET 040.10
4 结束语
以上是PID温度控制的PLC程序设计实例,经过反复试验,该系统可以维持温度在1℃之间变化,保证了好的生产状况,减少了不合格品发生的几率。