4.2 程序单元
程序单元(PU)包含明确定义的程序部分(其中的FB和FC可多次被调用和执行),其目的是为了模块化和结构化。天行IDE中PRG只能被唯一调用。
- 用户在项目树“PLC软件”,“程序单元”下可选择“添加新块”,然后弹出窗可以选择程序(PRG),功能块(FB)或函数(FC),以及对应的编程语言。添加后,可以在项目设备树中查看程序单元括号内对应的属性,PRG为程序,FB为功能块,FC为函数。
提示
- PU组成部分:PU类型及命名、变量声明部分、代码指令部分
- 位串类型变量的局部寻址
- 数据类型转换
4.2.1 功能块(FB)
- 功能块是把反复使用的程序块转换成一种通用部件,它可以在程序中被任何一种编程语言所调用
- 功能块的调用成为实例。它将输入、输出和输入/输出、内部静态变量参数存储在具有全局变量属性的功能块实例名为变量名的结构变量,从而在执行块之后,有些值依然有效。所以功能块也称为“有存储器”的块
- 功能块内可以使用临时变量。临时变量并不存储在功能块实例名称变量中,而用一个循环
- 功能块的执行逻辑构成了自身的对象行为特征。所以,对于相同参数的输入变量值,由于可能存在不同的内部状态变量,当然就可能得到不同的计算结果。在控制系统中功能块可以是某种控制算法,例如PID功能块被用于闭环控制,其他功能块可用于计数器,斜坡和滤波等
功能块声明
- 功能块声明,也是功能块类型声明,类似功能函数的方式进行变量声明
- 依据功能块UI界面来定义参数,其构造包含INPUT、INOUT、OUTPUT等变量名称和相关数据类型,您可以自行选择声明变量
- 具体天行IDE可以有以下4种方式:
- 在GVS中对功能块实例变量进行变量(VAR_GLOBAL)声明;(单个实例,全局变量)
- 在其他FB中对功能块实例变量进行变量(VAR)声明;(多重实例,FB静态变量) 不支持FB中嵌套空成员FB
- 在其他FB中对功能块实例变量进行变量(VAR_IN_OUT)声明;(参数实例,FB接口变量)不支持带RETAIN成员的FB,不支持空成员FB
- 在FC中对功能块实例变量进行变量(VAR_IN_OUT)声明;(参数实例,FB接口变量)不支持带RETAIN成员的FB,不支持空成员FB
注意
- FB的功能块名不能像FC函数名一样可做带返回值的声明,其只能做不带返回值的声明
功能块调用
-
功能块FB可以被函数C、功能块FB、程序PRG所调用
-
文本化语言ST中调用FB,应包含FB实例名后跟一个参数列表
-
图形化语言LD中调用FB,FB实例名应该位于功能块的上方
-
功能块实例名,天行IDE中必须被声明为功能块数据类型的结构变量
-
功能块的输入的分配赋值和输出的访问可以是:
- 功能块的调用时立即处理
- 从调用中分开
- 未赋值或未连接的功能块输入应当保留初始化值或之前最新调用的值
-
功能块实例的名称可用作为其他功能块实例调用的接口变量,到那时只能是VAR_IN_OUT接口变量
-
FB块实例输出值 ,其结构元素名称(即成员变量)可以通过VAR_INPUT传递到其他FB块内部访问,但不能被其他FB修改
-
如果功能块A它的实例通过VAR_IN_OUT构造传入另外一个功能块B,另外一个功能块B内部可以调用功能块A
-
只有变量可以通过VAR_IN_OUT构造传入功能块。且调用FB实例时,VAR_IN_OUT必须接入变量
4.2.2 函数(FC)
函数是不带存储器的代码块。由于没有可以存储块参数值的数据存储器。因此,调用函数时,必须给所有形参分配实参。使用函数可降低代码重复率,让程序模块化,有利于程序的阅读,修改和完善。
函数声明规则
- 返回值、函数名、形参、函数体
函数使用规范
- 可以在表达式或语句中调用带返回值的函数
- 在表达式内不应该调用不带返回值的函数
- 函数(FC)可以被函数FC、功能块(FB)、程序(PRG)所调用
注意
- 功能块不同于函数,功能块它带有一个存储区,而函数没有存储区
- 函数(FC)的一个重要特性是他们不能使用内部变量存储数值,内部变量都是临时变量
- 函数(FC)内部可以使用全局变量
- 函数返回值数据类型只支持基本数据类型
4.2.3 程序(PRG)
概述
程序(PRG)是用于组织程序代码的一种结构。它通常作为工程中的主程序,负责组织和调用其他程序单元(如FB功能块、FC函数等)。 通过使用不同的TASK来调用程序(PRG),使程序(PRG)按指定规则执行,从而确保工程中的各个部分能够按照预定的逻辑顺序执行。
注意
- 程序只能被TASK调用