[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)。

  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的相互调用


2.2简单语言元素

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

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

2.3数据类型

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

  1. 基本数据类型

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

  1. 导出的数据类型:在基本数据类型的基础上,用户自定义数据类型的过程称为导出或类型定义,这种用新名词定义的数据类型称为导出数据类型
TYPE 变量名: 变量类型;PRESSURE: REAL;
END_TYPE
  1. 结构化数据类型
    以一个压力传感器的结构化数据类型定义举例:
TYPE PRESSURE_SENSORSTRUCTINPUT: 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

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

TYPEPRESSURE(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 RETAINMotor1: 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组标准函数:

  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 THENB := 1;
ELSIF A = 2 THENB := 2;
ELSEB:=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。
由于一个形式参数包括每个参数的名称和实际值,因此形式参数的顺序是任意的。 如果不写参数
允许在调用时使用“=>”,直接把输出值赋给指定变量。

更新记录

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

标准工业控制编程语言IEC61131-3简述相关推荐

  1. 除了labview你还知道哪些工业控制领域的软件?

    除了LABVIEW,你还知道哪些工业控制领域的软件呢?下面纳米软件Namisoft小编将给大家盘点一下除了LABVIEW,工业控制领域的常用软件. 1.Intouch,一种工业自动化组态软件.由Won ...

  2. ethercat通讯协议_工业控制常用接口协议大全,长见识了

    I/O接口概念 I/O接口是一电子电路(以IC芯片或接口板形式出现 ),其内有若干专用寄存器和相应的控制逻辑电路构成.它是CPU和I/O设备之间交换信息的媒介和桥梁.CPU与外部设备.存储器的连接和数 ...

  3. 工业以太网在工业控制中的运用

    在工业生产中,随着生产规模的扩大和复杂程度的提高,实际应用对控制系统的要求越来越高.那么,工业以太网交换机在工业控制中的应用有哪些?接下来我们就跟随飞畅科技的小编一起来了解下吧! 在20世纪50-60 ...

  4. 无线数传电台工业控制的应用

    无线数传电台简单的说就是无线数传模块与多种工业通信接口的组合,无线数传电台具有工作温度范围广,电磁性能优良,抗干扰能力强,安装方便等优点.下面给大家介绍两款DTU,成都亿佰特有限公司的"E8 ...

  5. 无线模块在工业控制上的应用

    工业控制现状 随着计算机.通信.自动控制.微电子等科学技术的发展,无线通讯在工业控制上的应用越来越广泛.在工业控制应用中,有线传输受环境的影响较大,不利于工业控制.为了加强对工控设备的实时监测和控制, ...

  6. 史上最全网络通讯(IIOT、工业控制、5G、区块链)协议全景图

    ​ 写在前面 大家好,我是小智,智能制造之家号主~ 工业物联网浪潮的到来,IT.OT与CT技术之间联系越来越紧密,我们在完成各种ERP.PLM.MES/MOM.SCADA.DCS以及工业自动化项目的时 ...

  7. 详解OPC协议-工业控制和自动化领域的接口标准

    OPC全称是OLE for Process Control,即用于过程控制的OLE,是针对现场控制系统的一个工业标准接口,是工业控制和生产自动化领域中使用的硬件和软件的接口标准.基于微软的OLE(现在 ...

  8. 工业控制计算机系统总线,工业控制计算机总线技术.ppt

    工业控制计算机总线技术 第三章工业控制计算机总线技术 主要内容 第一节 总线的基本概念: 第二节 计算机总线的分类: 第三节 计算机总线的数据传输过程: 第四节 计算机总线的数据传输方式: 第五节 计 ...

  9. 中易云嵌入式工业主机-低功耗工业控制智能终端

    中易云嵌入式工业主机EY-EUAI40 性能强劲    厂家直销    支持定制 产品介绍 中易云嵌入式工业主机EY-EUAI40由中易云技术团队基于全志工控行业平台级处理器四核Cortex-A7 A ...

最新文章

  1. 3.实现串口功能及消息邮箱
  2. Django、Flask、Tornado的比较
  3. 关于yii验证和yii错误处理
  4. centos6 rsync+inotify 数据同步
  5. Mysql下载以及安装(新手入门,超详细)
  6. Scala _10Actor Model
  7. SQL Server-SQL事务处理(Stransaction)
  8. java mvc 源码分析_SpringMVC 源码解读笔记
  9. commit git 删除文件夹_从Git提交中删除文件
  10. 《了凡四训》,仅仅12句,改变你的命运
  11. Linux用户的福音,记忆力解放!快速调用复杂命令...
  12. Pytorch——3.1. 热身:Pytorch基础
  13. Linux开发环境搭建与使用——Linux简史
  14. 系统管理员已经限制你可以使用的登录类型(网络或交互式)
  15. WIN7 64 安装串口驱动和mini2440USB驱动
  16. 酷派android4.4.4到5.0,酷派大神F2和大神F1安卓5.0系统升级将到来
  17. 查看电脑操作系统版本
  18. vue部门结构图_基于 Vue 实现动态组织结构图
  19. 做软件测试工程师真的很容易吗
  20. 计算机无法连接iphone,为什么iphone连不上电脑

热门文章

  1. 分享网上流行的50+开源源码下载
  2. 张小龙发布2018微信全新计划(内附演讲全文)
  3. KubeSphere 社区双周报 | 2022-09-02
  4. 多商户商城系统功能拆解43讲-平台端应用-客服话术
  5. 齐次、非齐次线性方程和特征值特征向量的联系及关系
  6. 官场四大名枪,四大暗箭
  7. 学生就业前,带学生复习软件测试知识(每天5道试题-第1天)
  8. autocad不能画图_Autocad中的文字样式及标注样式设置
  9. 科普:为啥手机不能用两张电信卡?
  10. GitHub 项目被爆 刷 Star!阿里这波又摊上事了...