[西门子] 芯选好课 | 标准工业控制编程语言IEC61131-3

[复制链接]
查看87705 | 回复0 | 2024-1-18 13:58:17 | 显示全部楼层 |阅读模式
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,当以相同的输入参数调用时,它总是生成相同的结果作为函数输出,例如算术运算指令。

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

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



PROGRAM 程序名/FUNCTION_BLOCK 功能块名/FUNCTION 函数名:数据类型  指令END_PROGRAM/END_FUNCTION_BLOCK    /END_FUNCTIONPOU的相互调用





2.2 简单语言元素

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

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

1.基本数据类型




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

2.导出的数据类型:在基本数据类型的基础上,用户自定义数据类型的过程称为导出或类型定义,这种用新名词定义的数据类型称为导出数据类型。
TYPE   变量名: 变量类型;  PRESSURE: REAL;END_TYPE3.结构化数据类型以一个压力传感器的结构化数据类型定义举例:TYPE PRESSURE_SENSOR  STRUCT    INPUT: PRESSURE;    STATUS: BOOL;    CALIBRATION: REAL;    ALARM_COUNT: INT;  END_STRUCTEND_TYPE4.枚举枚举允许对同一变量的不同状态(不同值)定义不同名字,如设备工作状态包含初始状态、运行状态、停止状态和故障状态。TYPE DEVICE_MODE:        (INITIALISING,RUNNING,STANDBY,FAULTY)END_TYPE在编程中使用导出数据类型时,使用”数据类型#具体变量名“G := DEVICE_MODE#INITIALISIN;5.数组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_RESOURCE2.6任务

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

    自由运行(Freewheeling):自由运行任务没有固定持续时间,一个运  行周期结束后,任务将在下一个周期中重启;

    周期(cyclic):任务按照设定的周期事件执行;

    事件(event):仅在指定的事件发生时执行一次;

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

同一个任务下可以关联一个以上的程序POU,其排列顺序则会决定各POU实际执行时的顺序。

未关联的程序拥有最低优先权,仍会被以自由运行方式执行;但实际上绝大部分厂商会将其设置为不会参与执行。
2.7配置

使用配置(CONFIGURATION)将PLC系统的所有资源集合起来。CONFIGURATION 变量名全局变量说明RESOURCE说明ACCESS说明END_CONFIGURATION3标准函数及功能块

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;2.条件判断语句 IFIF<条件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语句。3.多重选择语句CASECASE <整数表达式> OF  <整数选择值>:<语句块1>  <整数选择值>:<语句块2>  ...ELSE <备选语句块>END_CASE;常被当做CASE状态机。整数选择值除了可以是一个数,也可以是一组数(2,3,4:)或一个数值范围内的数(5..10:),或者参数化的变量。4.迭代循环语句FORFOR <索引变量>:=<起始值> TO <结束值> [BY<增量值>]  DO <语句块>;END_FOR;省略BY时,默认增量值为1.5.RETURN语句
用于中止当前的POU的执行。
6.EXIT语句
使程序跳出当前迭代语句的循环。

嵌套循环时,可使用EXIT语句跳出内部循环,执行外部循环。
4.2.3函数和功能块的调用

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



作者 | 田凫。

全力去摧毁。

更多精彩内容请关注“中控微电子”公众号,需要相关开发环境与例程代码,请前往中控微电子官网(www.nz-ic.com)了解更多公司资讯,或电话咨询:0574-87288895。


公司简介Company Profile
宁波中控微电子有限公司是一家集控制芯片研发和智能控制系统应用于一体的高新技术企业,拥有芯片相关核心专利、软件著作权和集成电路布图设计权共五十余项。公司的片上控制系统(CMC芯片)项目入选宁波市“3315计划”高 端创业创新A类项目,荣获第八届中国创新创业大赛电子信息行业的全国总决赛初创组优秀企业,所开发的CMC芯片完全自主可控,已成功应用于非标自动化、3C装备、汽配自动化、数控机械、楼宇智能化、木工机械、水利监控、伺服与驱动等领域。

公司拥有完整的软硬件开发与项目管理团队,为客户提供从芯片定制到产品解决方案的全产业链服务。帮助客户降低研发和产品成本,有效提升市场竞争力。

技术优势

标准化和自主可控;

简洁易用的部署环境;

强大的运动控制功能;

丰富的通信和第三方工具接入功能。

全国产芯片 自主可控

提供开发资料可快速开发产品

欢迎关注



中控微电子公众号



中控微电子B站
欢迎关注

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则