1.5 PLC的编程语言
PLC是专为工业控制而开发的装置,其主要使用者是工厂广大电气技术人员,为了适应他们的传统习惯和掌握能力,通常PLC不采用微机的编程语言,而常常采用面向控制过程、面向问题的“自然语言”编程,这些编程语言有梯形图、语句表、功能块、结构文本。
1.5.1 梯形图
梯形图(LAD)表达式是在原电器控制系统中常用的接触器、继电器梯形图基础上演变而来的。它与电气控制原理图相呼应,形象、直观和实用,广大电气技术人员很容易掌握,是PLC的主要编程语言。图1-9所示为两种梯形图。
图1-9 两种梯形图
由图1-9可以看出,PLC梯形图在形式上类似于继电器控制梯形图。它是用图形符号、、、、等连接而成,这些符号依次为常开触点、常闭触点、并联连接、串联连接、继电器线圈。梯形图按自上而下、从左到右的顺序排列。一般每个继电器线圈对应一个逻辑行。梯形图的最左边是起始母线,每一逻辑行必须从起始母线开始画起,然后是触点的各种连接,最后终了于继电器线圈。梯形图的最右边是结束母线,有时可以省去不画。
在梯形图中的每个编程元件应按一定的规则加注字母和数字串,不同的编程元件常用不同的字母符号和一定的数字串来表示。
PLC梯形图具有以下特点:
1)梯形图中的继电器不是物理继电器,每个继电器实际上是映像寄存器中的一位,因此称为“软继电器”。相应位的状态为1,表示该继电器线圈通电,其常开触点闭合,常闭触点断开;相应位的状态为0,表示该继电器线圈失电,其常开触点断开,常闭触点闭合。
梯形图中继电器线圈是广义的,除了输出继电器、辅助继电器线圈外,还包括定时器、计数器、移位寄存器以及各种算术运算等。
2)每个继电器对应映像寄存器中的一位,其状态可以反复读取,因此可以认为继电器有无限多个常开触点和常闭触点,在程序中可以被反复引用。
3)梯形图是PLC形象化的编程手段,梯形图两端是没有任何电源可接的。梯形图中并没有真实的物理电流流动,而仅是“概念”电流,是用户程序解算中满足输出执行条件的形象表示方式。“概念”电流只能从左向右流动。
4)输入继电器供PLC接收外部输入信号,而不是由内部其它继电器的触点驱动,因此梯形图中只出现输入继电器的触点,而不出现输入继电器的线圈。输入继电器的触点表示相应的输入信号。
5)输出继电器供PLC作输出控制用。它通过开关量输出模块对应的输出开关(晶体管、双向晶闸管或继电器触点)去驱动外部负载。因此,当梯形图中输出继电器线圈满足接通条件时,就表示在对应的输出点有输出信号。
6)当PLC处于运行状态时,PLC就开始按照梯形图符号排列的先后顺序(从上到下、从左到右)逐一处理,也就是说,PLC对梯形图是按扫描方式顺序执行程序。
7)用户程序解算时,输入触点和输出线圈状态是从I/O映像寄存器中读取的,不是解算时现场开关的实际状态。梯形图中前面程序解算的结果马上可以被后面程序的解算所利用。
1.5.2 语句表
语句表(STL)是一种与汇编语言类似的助记符编程表达式。在许多小型PLC的编程器中没有CRT屏幕显示,或没有较大的液晶屏幕显示,就用一系列PLC操作命令组成的语句表将梯形图控制逻辑描述出来,并通过编程器输入到机器中去。
不同的PLC,语句表使用的助记符不相同。以OMRON的PLC为例,对应图1-9b的语句表为:
LD 0.00(表示逻辑操作开始,常开触点与母线连接)
OR 100.00(表示常开触点并联)
AND NOT 0.01(表示常闭触点串联)
OUT 100.00(表示输出)
语句是用户程序的基础单元,每个控制功能由一条或多条语句组成的用户程序来完成。每条语句是规定CPU如何动作的指令,它的作用和微机的指令一样,PLC的语句也由操作码和操作数组成,故其表达式也和微机指令类似。
PLC的语句:操作码+操作数
操作码用来指定要执行的功能,告诉CPU该进行什么操作;操作数内包含执行该操作所必需的信息,告诉CPU用什么地方的数据来执行此操作。
操作数应该给CPU指明为执行某一操作所需要信息的所在地,所以操作数的分配原则是:
1)为了让CPU区别不同的编程元件,每个独立的元件应指定一个互不重复的地址。
2)所指定的地址必须在该型机器允许的范围之内。超出机器允许的操作参数,PLC不予响应,并以出错处理。
语句表编程有键入方便、编程灵活的优点,但不如梯形图形象、直观。
1.5.3 功能块
功能块(FB)是一个将处理功能标准化的基本程序单元。功能块由PLC生产厂家以库文件形式提供,或由用户自行定义。
功能块定义时包括两部分:算法和变量定义。
1.算法
功能块的算法可由梯形图或结构文本编写,OMRON由编程软件CX-P(5.0及以上版本)实现。
2.变量定义
变量定义要求列出每个变量的类型和属性。
(1)变量类型
内部变量:只能在功能块内部使用的变量。内部变量不能与功能块的I/O参数直接建立联系,例如,从功能块的输入参数直接获得数据,或将数据直接从功能块输出。
输入变量:输入变量从功能块外面指定的输入参数中获得数据。每个功能块都有一个默认输入变量EN,EN为使能变量,功能块创建时自动生成,不需要用户定义,当EN处于ON时,功能块执行。
输出变量:输出变量可以将数据赋给功能块外面指定的输出参数。每个功能块都有一个默认输出变量ENO,ENO为使能输出变量,功能块创建时自动生成,不需要用户定义,功能块执行时,ENO处于ON状态。
外部变量:外部变量是由CX-P定义保存的系统变量(条件标志和一些辅助区域位),或用户定义的全局符号(可用于每个实例中)。
(2)属性
属性是为变量指定名称、数据类型、初始值等。
编程时,功能块嵌入到程序中,称作“例程”或“功能块例程”,每个例程要有一个名称。一个功能块可以创建多个例程嵌入到程序中,如果这些例程具有相同的名称,则它们使用相同的内部变量;如果这些例程具有不同的名称,则它们使用的内部变量不同。
在程序中每创建一个例程,就需要为功能块的输入变量、输出变量设置相应的参数:I/O内存地址或者常数。
使用功能块编程便于程序结构化,具有更好的设计质量和更短的设计时间。一旦为功能块创建了标准程序并将其保存为文件,便可将功能块嵌入程序中并设置功能块的I/O参数,功能块可在程序中反复使用。当创建/调试程序时,反复使用现有功能块将节省大量的时间并减少编码错误,而且程序更容易理解。
OMRON为用户提供了功能强大的功能块库文件,可安装在CX-P(5.0及以上版本)中,使用非常方便。OMRON新型号的PLC(如CS1、CJ1/CJ2、CP1等)支持功能块编程。
1.5.4 结构文本
随着PLC技术的发展,PLC的高级功能越来越多,如果仍然用梯形图来实现,会很不方便。为了方便用户使用PLC的数学运算、数据处理、图形显示、打印报表等功能,许多大中型或先进的PLC都配备了结构文本(ST)编程语言。
结构文本是一种类似于Pascal的高级编程语言,使用诸如选择语句和迭代语句的语言结构。
结构文本使用语句来编写结构化的文本程序,语句用变量和方程式来配置。
方程式是包含运算符和操作数(变量或常数)的表达式。运算符包括算术运算符、比较运算符和逻辑运算符等。
语句既可以是赋值语句,也可以是控制语句。赋值语句将方程式计算的结果保存于变量中。控制语句包括选择语句和迭代语句等。
OMRON的CS1、CJ1/CJ2、CP1等新型号的PLC均可使用结构文本编程,一般使用结构文本来创建功能块。OMRON编程软件CX-P(5.0及以上版本)支持结构文本编程。
实际上,熟悉计算机编程的人很容易使用结构文本,采用结构文本编程来实现一些更为复杂的数学运算并生成功能块不但极大地节省编程时间,而且使源程序清晰、易读,降低了出错率。
与梯形图相比,结构文本有两个很大优点,其一是能实现复杂的数学运算,其二是非常简洁和紧凑。