标准工业控制编程语言IEC61131 您所在的位置:网站首页 控制器编程基础是c语言吗知乎 标准工业控制编程语言IEC61131

标准工业控制编程语言IEC61131

2024-05-31 18:21| 来源: 网络整理| 查看: 265

[1] 王永华. 现代电气控制及PLC应用技术[M]. 第5版. 北京:北京航空航天大学出版社, 2018. [2] 台达. ISPSoft软件使用手册[M]. 第10版. , 2019.

写这篇文章时,除了对IEC61131-3基本内容做摘录以外,也参考了遵循IEC61131-3标准的控制器用户手册内容,目的是了解IEC61131-3标准的实际落地情况。

1简述

IEC61131-3是IEC61131标准的第三部分,它定义了PLC的软件结构、编程语言和程序执行方式,它综合了世界上广泛流行的编程语言的特点,并使其成为一种面向未来的PLC编程语言。IEC61131-3提供了5种PLC的标准编程语言,其中有3种图形语言:梯形图(LAD)、功能块图(FBD)和顺序功能图(SFC);两种文本语言:结构化文本(ST)和指令表(IL)。其中使用IL、LAD、SFC编制的程序都可以相互转换后进行显示、编辑。 在这里插入图片描述

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

传统PLC程序架构与IEC61131-3程序架构区别见下:

传统PLC程序架构IEC61131-3 程序架构主程序1. 将单一的程序切割为许多独立的程序单元(Prog POU)。 2. 将建立的程序单元指定为周期性的工作(TASK)。一般子程序1. 将子程序建立为功能块(FB POU)。2. 在其它的程序单元中对建立好的功能块(FB)进行调用。中断子程序1. 为不同的中断程序,分别建立独立的程序单元(Prog POU)。2. 将建立好的程序单元指定至对应的中断型工作(TASK)中。

在这里插入图片描述 IEC61131-3软件模型见下: 在这里插入图片描述

2编程基础 2.1程序组织单元POU 基本概念

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

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

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

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

在这里插入图片描述 在这里插入图片描述

2.2简单语言元素

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

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

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

基本数据类型 在这里插入图片描述

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

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

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

G := DEVICE_MODE#INITIALISIN; 数组 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之前,必须对变量进行定义和声明,使用变量的地方不同,所使用的变量也会有区别。

输入变量 VAR-INPUT:可以像传统PLC中的输入量一样,为POU提供外部接口的输入数据,也可以是专为FUN或FB定义的没有外部物理输入接口的变量输出变量 VAR-OUTPUT:可以像传统PLC中的输出量一样,POU提供输出数据到外部接口,也可以仅仅是FUN或FB的输出,没有相对应的外部物理输出接口输入/输出变量 VAR-IN-OUT:具有输入变量和输出变量的功能,没有传统意义上的物理接口,在编写FUN、FB时用到全局变量 VAR-GLOBAL,该变量可在结构、源或程序中任何POU(除FB)中使用外部变量 VAR-EXTERNAL,用于解决全局变量、直接地址变量和FB之间的连接问题临时变量 TEMP:在POU内部定义的一种可以存储中间计算结果的变量存取通径变量 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 2.6任务

定义任务的目的在于规定程序以及功能块的运行期特性。

在实时控制系统中,由于控制对象不同阶段的任务和工作过程不同,相应的程序也不同,因而需要对这些不同的程序进行灵活调用和组态。 在IEC61131-3中,若干个程序能同时运行于同一个资源,它们可以有不同的优先权和类型,即程序可以是单周期执行、循环执行、按不同优先级执行。实现这样的功能由任务(TASK)来完成,每一个程序与一个(或多个)任务相关联(使用关键字WITH),这样就可以使程序进入运行期。

任务运行方式可分为自由运行、周期以及事件。

自由运行(Freewheeling):自由运行任务没有固定持续时间,一个运行周期结束后,任务将在下一个周期中重启;周期(cyclic): 任务按照设定的周期事件执行;事件(event):仅在指定的事件发生时执行一次;

控制器无法同时执行多个任务。每个任务须分配一个唯一的优先顺序(Priority),相同运行方式的任务按照设定的优先顺序执行,其中0为最高优先级;对于不同运行方式的任务,当条件同时成立时,其运行顺序为事件>自由运行>周期。

同一个任务下可以关联一个以上的程序POU,其排列顺序则会决定各POU实际执行时的顺序。 未关联的程序拥有最低优先权,仍会被以自由运行方式执行;但实际上绝大部分厂商会将其设置为不会参与执行。

2.7配置

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

CONFIGURATION 变量名 全局变量说明 RESOURCE说明 ACCESS说明 END_CONFIGURATION 3标准函数及功能块

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

3.1标准函数

IEC61131-3定义了以下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程序由一定数量的语句组成,语句间用分号(;)隔开,注释需放在两个星号(**)之间。

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

举例:

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

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

多重选择语句CASE CASE OF : : ... ELSE END_CASE;

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

迭代循环语句FOR FOR := TO [BY] DO ; END_FOR;

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

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

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

4.2.3函数和功能块的调用

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

更新记录

2021.1.19 初次发布; 2022.1.2 例行维护; 2022.9.10 例行维护;



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有