标准工业控制编程语言IEC61131-3简述

[1] 王永华. 现代电气控制及PLC应用技术[M]. 第5版. 北京:北京航空航天大学出版社, 2018.

1简述

IEC61131-3是IEC61131标准的第三部分,它定义了PLC的软件结构、编程语言和程序执行方式,它综合了世界上广泛流行的编程语言的特点,并使其成为一种面向未来的PLC编程语言。
IEC61131-3提供了5种PLC的标准编程语言,其中有3种图形语言:梯形图(LAD)、功能块图(FBD)和顺序功能图(SFC);两种文本语言:结构化文本(ST)和指令表(IL)

采用IL、LAD、SFC编程制作的顺控程序都通过指令 (指令表编程时的内容 )保存到可编程控制器的程序内存中, 使用如下图所示的各种输入方式编制的程序都可以相互转换后进行显示、编辑。
标准工业控制编程语言IEC61131-3简述_第1张图片

SFC在新标准中作为一种公共元素出现,其目的是要把它定义成构成PLC程序和功能块内部组织的元素,但其实质仍是一种编程语言,且主流出版物都将其作为一种编程语言看待。

2编程基础

2.1程序组织单元POU

定义

在模块化程序设计环境下,程序组织单元POU(Program Organization Unit) 是用户程序中最小的、独立的软件单元。它相当于传统编程系统中的块(Blocks),POU之间可以带参数或不带参数地相互调用。
在IEC61131-3中定义了三种类型的POU,按其功能的递增顺序依次为函数(Function,FUN)、功能块(Function Block,FB)和程序(Program,PROG)。

  1. FUN(函数)
    FUN是可以赋予参数但没有静态变量(没有记忆)的POU,当以相同的输入参数调用时,它总是生成相同的结果作为函数输出,例如算术运算指令。

函数没有存储器,不存储暂态结果、状态信息或内部数据,故称其无记忆。

  1. FB(功能块)
    FB是可以赋予参数并具有静态变量(有记忆)的POU,当以相同的输入参数调用时,它的输出状态取决于其内部和外部变量的状态,它能记忆状态信息,例如定时器和计数器等。
  2. PROG(程序)
    PROG代表PLC用户的最高层,即程序,它能存取PLC的IO变量,这些IO变量必须在POU或其上层中予以说明。
    在IEC61131-3中,一个程序可由多个部分组成,而每个部分所使用的编程语言不一定是相同的。

POU的定义

PROGRAM 程序名/FUNCTION_BLOCK 功能块名/FUNCTION 函数名:数据类型
	指令
END_PROGRAM/END_FUNCTION_BLOCK    /END_FUNCTION

POU的相互调用

标准工业控制编程语言IEC61131-3简述_第2张图片

2.2简单语言元素

PLC程序是由一定数量的基本语言元素(最小单元)组成的,把它们组合在一起形成“说明”或“语句”。

  1. 分界符
    用在“说明”或语句中起隔离、标识等作用。
    逗号用于隔开多个变量;分号标识ST中一条语句的结束;星号+括号(**)之间存放对程序和语句的解释部分;冒号加等号标识ST编程语句中的赋值等。
  2. 关键字
    包括:数据类型名称;标准FUN、FB名称及其输入(仅FB)/输出参数名称;某些变量、运算符和语言元素。
    关键字对大小写没有严格规定(大小写不敏感),但在实际使用时常用大写来表示关键字。
  3. 直接量
    表示某些常数的数值,有三种类型:数字直接量,字符串,时间直接量
  4. 标识符
    用于命名各种变量、程序、配置、资源等。

2.3数据类型

IEC61131-3定义了PLC编程中最常用的数据类型,并允许用户自己定义导出的数据类型。

  1. 基本数据类型
    标准工业控制编程语言IEC61131-3简述_第3张图片

类(ANY)数据类型:类数据类型由单个数据类型集合而成,ANY-INT表示所有整数的数据类型。

  1. 导出的数据类型:在基本数据类型的基础上,用户自定义数据类型的过程称为导出或类型定义,这种用新名词定义的数据类型称为导出数据类型
TYPE 
	变量名: 变量类型;
	PRESSURE: REAL;
END_TYPE
  1. 结构化数据类型
    以一个压力传感器的结构化数据类型定义举例:
TYPE PRESSURE_SENSOR
	STRUCT
		INPUT: PRESSURE;
		STATUS: BOOL;
		CALIBRATION: REAL;
		ALARM_COUNT: INT;
	END_STRUCT
END_TYPE
  1. 枚举
    枚举允许对同一变量的不同状态(不同值)定义不同名字,如设备工作状态包含初始状态、运行状态、停止状态和故障状态。
TYPE DEVICE_MODE:
	(INITIALISING,RUNNING,STANDBY,FAULTY)
END_TYPE

在编程中使用导出数据类型时,使用”数据类型#具体变量名“

G := DEVICE_MODE#INITIALISIN;
  1. 数组
TYPE VESSEL_PRESS_DATA:
	ARRAY[1..20] OF PRESSURE;
END_TYPE

关于数据范围
在对变量进行数据类型定义时可增加。

TYPE
	PRESSURE(0.1..30.0): REAL; (*压力范围0.1~30*)
END_TYPE

关于初始值
数据变量的初始缺省值是“0”,字符串的初始缺省值是空串,日期的缺省值是“D#0001-01-01”。
外部变量和输入/输出变量以外的数据变量可定义初始值。

2.4变量

2.4.1主要变量简介

在编制POU之前,必须对变量进行定义和声明,使用变量的地方不同,所使用的变量也会有区别。

  1. 输入变量 VAR-INPUT:可以像传统PLC中的输入量一样,为POU提供外部接口的输入数据,也可以是专为FUN或FB定义的没有外部物理输入接口的变量
  2. 输出变量 VAR-OUTPUT:可以像传统PLC中的输出量一样,POU提供输出数据到外部接口,也可以仅仅是FUN或FB的输出,没有相对应的外部物理输出接口
  3. 输入/输出变量 VAR-IN-OUT:具有输入变量和输出变量的功能,没有传统意义上的物理接口,在编写FUN、FB时用到
  4. 全局变量 VAR-GLOBAL,该变量可在结构、源或程序中任何POU(除FB)中使用
  5. 外部变量 VAR-EXTERNAL,用于解决全局变量、直接地址变量和FB之间的连接问题
  6. 临时变量 TEMP:在POU内部定义的一种可以存储中间计算结果的变量
  7. 存取通径变量 VAR-ACCESS 它提供了一种配置(Configuration)之间进行数据交换(通信)的渠道

输入/输出概念不同于外部物理输入/输出,而是用于FUN/FB。

2.4.2 变量类型的属性

在IEC61131-3中设置了一些限定符,使用它们可以将附加的特性赋给变量。
RETAIN具有带电保持功能的变量。
CONSTANT常数变量。带有变量名的常数。

(下述两种属性只对VAR_INPUT有效)
R_EDGE上升沿。
Q_EDGE下降沿。

当用到上升沿或下降沿功能时,更多会使用相应标准功能块。

(下述两种属性只对VAR_ACCESS有效)
READ_ONLY只读
READ_WRITE读写

2.4.3定义变量

模板:

VAR_变量类型 变量类型
变量名 数据类型:=初始值;
END_VAR

举例:

VAR_OUTPUT RETAIN
	Motor1: BOOL := FALSE;
	Message: STRING(10);
END_VAR

可以以逗号隔开的方式连续定义几个相同类型的变量:

VAR_变量类型 变量类型
变量名1,变量名2,变量名3 数据类型 :=初始值;
SB1,SB2,SB3 BOOL:= FALSE;
END_VAR

2.4.4变量地址的直接表示

在传统PLC中,当使用其内部资源时,用的是直接地址。在IEC61131-3中,这种变量也可以用地址直接表达或以符号变量的形式出现(即使用变量来表达地址)。它们以%开始,然后表示I(输入)、Q(输出)和M(中间继电器)的字母,接下来是表示PLC地址数据宽度的字母,如X(位)、B(字节)、W(字)、D(双字)等,最后使用分级地址表示的具体的直接地址。对这种变量进行说明时,要通过关键字AT指定。

分级地址,位置的数量和解释取决于制造商。Z-位、Y-字、X-模块、W-机架、V-PLC

2.5资源、任务与系统配置

资源

PLC的处理器被称为资源(RESOURCE),对资源可以进行定义或说明,定义从关键词RESOURCE开始,以END_RESOURCE结束。在资源说明中,其内容一般包括全局变量说明、通径变量说明和任务定义等。(这里的全局变量限于同一个资源。)

RESOURCE 资源名 ON Resource
全局变量说明
TASK说明
END_RESOURCE

任务

在实时控制系统中,由于控制对象不同阶段的任务和工作过程不同,相应的程序也不同,因而需要对这些不同的程序进行灵活调用和组态。
在IEC61131-3中,若干个程序能同时运行于同一个资源,它们可以有不同的优先权和类型,即程序可以是单周期执行、循环执行、按不同优先级执行。实现这样的功能由任务(TASK)来完成,每一个程序与一个任务相关联(使用关键字WITH),这样就可以使程序进入运行期。
与POU开始部分进行类型说明的PROGRAM含义不同,在一个资源内,关键字PROGRAM…WITH用于将一个任务链接到类型为PROGRAM的一个POU。
因此,定义任务的目的就在于规定程序以及功能块的运行期特性。在配置时,没有被说明的程序也可以运行,但其优先级最低。

配置

使用配置(CONFIGURATION)将PLC系统的所有资源集合起来。

CONFIGURATION 变量名
全局变量说明
RESOURCE说明
ACCESS说明
END_CONFIGURATION

3标准函数及功能块

IEC61131-3中定义了典型的PLC函数和功能块,它们的名字作为关键字保留。
注意: 编程软件不一定能提供IEC61131-3全部标准函数。

3.1标准函数

IEC61131-3定义了以下8组标准函数:

  1. 数据类型转换函数
  2. 数值函数
  3. 算术函数
  4. 位-串函数
  5. 选择和比较函数
  6. 字符串函数
  7. 用于时间数据类型的函数(未单独列出)
  8. 用于枚举数据类型的函数(未单独列出)

重载(Overload)
若函数的输入变量以类数据类型描述,则称为重载。使用重载函数时,编程系统会自动选择合适的类型化函数。
可以把一个重载的标准函数限制为某一数据类型,称为类型化(Typed)的标准函数,这时需要把一个下划线及相应数据类型附加到该函数名字后。
可扩展(Extensible)
若函数的输入变量数可变,则称其为可扩展的。

3.2标准功能块

功能块是一种重要的POU,它按一定的算法和动作组成一段程序,在某一个给定条件下产生新的输出数据,类似子程序。
功能块有输入变量、输出变量、内部变量以及临时变量等。功能块的程序段由各种算法、动作和传递等组成。当功能块执行时,它会组合属于它的变量和程序来产生新的输出数据和内部数据。
功能块和函数之间最大的区别就是它有储存功能,因而被应用于需要有数据保持功能的地方。
使用功能块时需要将其实例化,简单来讲就是给使用的功能块取专用名,编程系统会自动生成内部绝对编号。
IEC61131-3定义了5组标准功能块:双稳态元素(置复位)、边沿检测、计数器、定时器和通信。

4 IEC61131-3编程语言及使用举例

此处仅列举梯形图(LD)和结构化文本(ST)。

4.1梯形图LD

梯形图适合在以开关量为主的简单的顺序逻辑控制系统中使用,在复杂的具有数值计算的过程控制系统或逻辑判断系统中,显得不够方便和灵活。

梯形图编程语言是从继电器控制系统原理图的基础上演变而来的,其基本思想是一致的,只是在使用符号和表达方式上有一定区别。

梯形图的一个关键概念是能流(能流在梯形图中实际上不存在,引入此概念是为了和继电接触器控制系统相比较)。在梯形图中,把左边的母线假想为电源相线,右边的母线假想为电源零线。如果有能流从左至右流向线圈,则线圈通电;如没有能流,则线圈不通电。能流在任何时候都不会通过触点自右向左流。

IEC61131-3为用户提供了线条连接、触点、线圈、执行控制等常用的基本元素,线条连接元素包括水平连接和垂直连接等。不建议在LD中使用执行控制类的指令。

4.2结构化文本ST

结构化文本编程语言ST是一种文本化的高级编程语言,源自PASCAL,适合数值计算、循环和选择等复杂应用的场合。

4.2.1表达式和操作符

ST中最基本的元素是表达式,表达式由操作数和操作符组成。操作数为直接量或变量。操作符的优先级决定一个表达式中的计算顺序。

4.2.2常用语句

一个ST程序由一定数量的语句组成,语句间用分号(;)隔开,注释需放在两个星号(**)之间。

  1. 赋值语句 :=
a := 1;
  1. 条件判断语句 IF
IF<条件1>
THEN<语句块1>
[ELSIF<语句块2>] (*可省*)
[ELSE<语句块3>] (*可省*)
END_IF;

举例:

IF A = 1 THEN
	B := 1;
ELSIF A = 2 THEN
	B := 2;
ELSE
	B:=0;
END_IF;

IF语句可进行嵌套,ELSE部分可进行判断的嵌套,即使用ELSIF…THEN…ELSE语句。

  1. 多重选择语句CASE
CASE <整数表达式> OF
  <整数选择值><语句块1>
  <整数选择值><语句块2>
  ...
ELSE
 <备选语句块>
END_CASE;

常被当做CASE状态机。
整数选择值除了可以是一个数,也可以是一组数(2,3,4:)或一个数值范围内的数(5…10:),或者参数化的变量。

  1. 迭代循环语句FOR
FOR <索引变量>:=<起始值> TO <结束值> [BY<增量值>]  DO
 <语句块>;
END_FOR;

省略BY时,默认增量值为1.

  1. RETURN语句
    用于中止当前的POU的执行。

  2. EXIT语句
    使程序跳出当前迭代语句的循环。
    嵌套循环时,可使用EXIT语句跳出内部循环,执行外部循环。

4.2.3函数和功能块的调用

函数只有一个返回值,其调用属于表达式的范畴;FB的调用属于语句的范畴,因为FB可能有多个输出值,所以在一个表达式中不允许调用FB。
由于一个形式参数包括每个参数的名称和实际值,因此形式参数的顺序是任意的。 如果不写参数
允许在调用时使用“=>”,直接把输出值赋给指定变量。

更新记录

2022.1.2 补充与改写。

在这里插入图片描述

你可能感兴趣的:(编程语言,编程语言,iec)