0
点赞
收藏
分享

微信扫一扫

IEC61131内容

诗与泡面 2021-10-09 阅读 47
日记本

1:IEC历史

随着微处理技术在性能上的不断提高以及在体积上的日趋小型化的发展,计算机在工业控制领
域的应用也在不断推陈创新,原先的众多生产厂商的互不相同的硬件及配套软件也不断升级换
代。但是,最终用户希望使用与设备制造商无关的、统一标准的、高水平的工业控制软逻辑编
程语言。于是,一个统一的而又非常重要的国际标准 IEC61131-3 产生了。IEC61131-3 充分利用
现代软件编程技术的最新概念与成果,创立了统一的、实用的、功能完善丰富的近乎完美的控
制逻辑编程语言。不论是在 DCS(Distributed Control System) 应用领域,还是在 PLC(Programmed
Logical Controller)应用领域,IEC61131-3 已经成为一个事实上的行业标准,国内的 DCS、PLC
用户已经普遍接受此标准,并在实际工作中大量应用。
IEC61131-3 做为工控领域的软逻辑编程的行业标准,大大地拉近了设备制造商与最终用户之间
的距离,可有效节约编程语言的培训费用,尤其对逻辑越来越复杂、规模日趋庞大的工业控制
工程项目组态的规范化实施,效果更为显著。
IEC61131-3 本身是软逻辑编程灵活的指导性准则,而不仅仅是一套呆板的条文。在 IEC61131-3
标准的指导下,各个制造商的软逻辑编程系统都将尽可能地遵循 IEC61131-3 所定义的大量详细
的标准,但实际中往往不可能与所有的内容完全一致。在此意义下,符合 IEC61131-3 标准的软
逻辑编程系统之间都存在各种各样的诸如编程界面、灵活性、功能实现方案等等的差异,但都
与标准所定义的各种概念、范畴和实现相一致。

2:IEC61131-3 标准的主要特点

2.1:变量定义的方便性及安全性

IEC61131-3 按照一定的语法,将一定字
节长度及地址偏移的硬件地址 IO 映射为
相应数据类型的变量,通过此变量实现
对硬件的读写操作,易用性及安全性大
大提高;
IEC 编程工具通过关键字自动识别全局
变量和局部变量,保证在不同的程序中均可正确访问全局变量。不同的子程序允许定义自己的
局部变量,不与全局变量矛盾;
IEC61131-3 必须为每个变量指定唯一的数据类型,变量定义采用统一的格式;
用户可自定义数组及结构类型的变量(如枚举、联合等),使实际编程更为简洁和方便;
所有类型数据可以自由定义初始值,或使用该类型变量的缺省值;
用户自定义的数据类型允许定义相应的初始值;

2.2 统一的编程语言标准

IEC61131-3 使用统一且标准的 6 种控制逻辑编程语言(IL、LAD、FBD、SFC、ST、CFC),基
本可覆盖大部分工业控制的应用范围。统一标准的编程语言,更有利于降低工程成本,统一文
档,提高工程效率。

2.3 面向对象的 IEC 编程方法

为使 IEC 编程语言成为不依赖于硬件平台的多平台通用语言,IEC6131-3 标准定义了基本的大
量的函数和功能块,而且允许用户按照输入变量、输出变量、中间变量等既定接口来自定义函
数和功能块。每个功能块实例就是一个独立的可完成特定逻辑功能的活动对象,不同的程序、
不同的任务都可以定义和调用各种功能块的应用实体,每个调用实体都占用独立的内存,保留
独立的逻辑状态。这种面向对象编程的方法,具有非常明确的现实意义。

2.4 结构化的 IEC 程序结构

IEC61131-3 强调结构化的程序结构,采用自底向上或自顶向下的编程方法,通过硬件配置与软
件逻辑的分离、IEC 任务调度、IEC 程序调用等手段,使应用工程的逻辑结构更加清晰。

2.5 方便、高效的库函数管理

用户可自己编辑内部库,这些库函数可任意选择 6 种编程语言进行逻辑实现,通过接口变量定
义来确定调用接口,以特定方式存为内部库文件。用户在组态工程中包含库文件后,即可进行
任意的库函数实例定义与调用。编译器将这些内部库连同用户组态程序,直接编译成为二进制
执行代码,再下装到目标控制器中执行。对这些内部库函数的封装,既是基于面向对象编程思
想的体现,又增加了程序的可读性。很多的内部库,如数控逻辑内部库、连续控制系统 PID 调
节内部库、智能仿人控制内部库、对象仿真(一阶、二阶、高阶等复杂对象)内部库、各种流
量补偿、信号选择内部库等等,大大丰富了标准的应用范围,易于实现工程的规模化。
外部库将 6 种编程语言之外的编程语言(如 C、C++等)所编写程序的目标文件直接连接到控制
器的目标执行系统环境中,并通过外部库的接口变量加以定义。用户组态程序包含外部库后,
编译系统根据接口变量定义来分配外部库函数的内存空间。在组态程序下装到目标控制器后,
由目标执行系统去调用该外部库的执行代码。此方法符合软件编程的习惯,易于进行算法移植,
执行效率也大大提高。

2.6 更加开放的 IEC61131-3 编程系统

IEC61131-3 编程系统的开放性体现在如下方面:不依赖于不同的制造商硬件平台,不同的软件
制造商逻辑组态软件数据可相互导入导出,IEC 编程器支持离线仿真,多种调试手段(如断点、
单步、跳进跳出、单循环执行),支持多种通讯协议(如 TCP/IP、CAN、Profibus DP PA、RS232
等),对不同 HMI(人机界面软件)的驱动适应能力,算法库的兼容能力,二次开发接口的能力,
等等。

3 程序组织单元 POU

3.1 程序组织单元 POU(Programming Organisation Unit)

是IEC61131-3 标准中重要的、被广泛使用的基本 IEC 编程单
位。POU 由 3 种类型的基本单元组成:程序(Program)、
功能块(Function Block)、函数(Function)。

1 程序 Program

是 IEC 的逻辑执行主体。一般而言分为主
程序、子程序,广义上讲,也包含硬件配置、任务配置、
通讯配置及目标设置信息;
一般在程序中定义普通全局变量、映射硬件地址全局变量、
局部变量。通过程序间调用实现应用逻辑。

2 功能块 Function Block

是面向对象特性的基本算法单元。功能块保留有自己特殊的内部变量,即
私有数据,控制器目标执行系统必须给功能块的内部状态变量分配内存,这些内部变量构成自身的
状态特征。功能块的执行逻辑构成了自身的对象行为特征。所以,对于相同参数的输入变量值,由
于可能存在不同的内部状态变量,当然就可能得到不同的计算结果。在实际过程控制中,如 PID 功
能块,由于不同回路的 PID 功能块的内部参数如比例带、积分时间、微分时间不尽相同,尽管设定
值、过程值相同,但是阶跃响应特性绝对不同。诸如顺序控制中的电动机、电动门、调节门的控制
逻辑更是如此。这种面向对象的特性大大增加了 IEC 编程的灵活性和复杂性。

3 函数 Function

是没有内部状态(没有运行时的内存分配)的基本算法单元。也就是说,只要给定
相同的输入参数,调用函数必定得到相同的运算结果,绝对没有二义性。我们平时使用的各种数学
运算函数,如 sin(x)、sqrt(x)等,就是典型的函数类型。

3.2 POU的组成

一般而言,程序组织单元包含 2 部分:变量定义及代码逻辑实现。

1 变量定义

IEC标准定义了丰富的基本变量类型,包括BYTE、WORD、DWORD、SINT、 USINT、INT、UINT、
DINT、UDINT、REAL、LREAL、STRING、TIME、 TIME、DATE 、ARRAY、POINTER、 Enumeration、
Structures等等,这些基本的数据类型极大程度地满足工业控制行业的需求。
在POU中,按照功能类型划分,一般包括如下7类变量:VAR、VAR_INPUT、VAR_OUTPUT、
VAR_IN_OUT、VAR_EXTERNAL、VAR_GLOBAL、VAR_ACCESS。一般以上述关键字及END_VAR
加以定义。

2 逻辑实现

IEE61131-3 支持功能强大的 6 中编程语言,其中 LAD、FBD、CFC、SFC 都是用图形化的编程界面,
工程使用极为方便,逻辑思路清晰,早已成为控制领域中公认的编程标准。限于篇幅,本文不详细
介绍各种编程语言的细则。

姓名 技能
ST 结构化文本语言。类似于 PASCAL、BASIC语言,易于编写各种循环及嵌套计算、复杂数学计算、先进智能算法等高级应用程序。ST 语言为高级工程师编程首选的得力编程工具。
LAD 梯形图语言。使用图形化方法实现布尔量的各种常规逻辑运算。以节为计算顺序划分单位。按照使用习惯,由标准梯形图和美式梯形图,两者的风格不尽相同。
FBD 功能图语言。用图形化方法实现常规浮点、逻辑运算。以节为计算顺序划分单位
CFC 连续功能图语言。实际上是 FBD 的另外一种形式。在整个程序中可自定义运算块的计算顺序,易于实现大规模、数量庞大但又不易细分功能的流程运算。在连续控制行业中,得到大量使用。
SFC 顺序功能图语言。非常适合于顺序控制的领域,如电动机设备程控启停、连锁保护等逻辑,在石化、水泥建材、电力行业等行业均有典型应用。
IL 指令表语言。虽然类似于低级汇编语言,可进行直接的汇编操作,控制程度非常细致入微。也可作为上述几种高级编程语言的基本载体。也就是说,ST、LAD、FBD、CFC、SFC 都能以 IL 为基本内部处理基本单位,通过 IL 语言实现IEC61131-3的标准功能(Infoteam的OpenPCS编译器正是以 IL 语言为基础,实现不同语言间的内部转化。各种 IEC61131-3 编程系统的编译器处理不尽相同)。

3.3 功能块 FUNCTION BLOCK

前文已经较多地介绍了功能块的内涵。这里再强调功能块类型(简称功能块)与功能块实例(简称
实例)的概念。
功能块类型是抽象的结构类型的定义,而不是现实的数据实体,只能定义,当然不能被调用和执行。
功能块实例是拥有私有数据、可按照既定逻辑完成特定功能、完全封装的、独立的结构型变量。功
能块实例是数据实体,不是抽象的类型定义。实例需要按照类型进行合法定义,允许在程序中进行
权限允许的调用。在控制器的目标执行平台上必须获得固定的静态内存分配(只不过 VAR_IN_OUT
方式定义的静态内存可共享使用,内存消耗最节约)。实例的类型可以同名,但实例名决不允许相同。
不同的实例具有功能块类型定义中共同的已定义的属性。如在功能块类型定义中,如果对 VAR 项定
义了保持型 RETAIN(需要掉电保护、主从 CPU 冗余拷贝特殊处理的数据)属性,则所有该类型实
例的 VAR 项都具有保持型 RETAIN 属性。

3.4 函数 FUNCTION

函数是有至少一个输入变量、无私有数据、仅仅有一个返回值的基本算法单元。
功能块实例和函数支持使能端(EN)的添加与删除,使逻辑控制更加方便。图 3.2 为梯形图程序中
的带使能端的功能块实例和函数。

举报

相关推荐

0 条评论