PLC结构化文本(ST)——结构函数(FB_init)
PLC Structured Text Object Oriented Programming
PLC结构化文本(ST)——结构函数(FB_init)
结构函数的效果
简略来说,结构函数是一种办法,用来初始化类的实例也便是目标。类在创立时会有一个默许的结构函数,假如自定义一个结构函数,那么默许结构函数失效。
与高档言语的差异
高档言语C#、Java和C++都有结构函数这个概念,那么IEC61131-3
有没有这个特别的办法呢?当然是有的,只不过ST的结构函数与高档言语稍有不同。
- 1.高档言语比方
C#
和Java
,它们的结构函数办法名与类名相同,而在IEC61131-3
ST
中所有PRG
和FB
的结构函数名均为FB_init
。 - 2.
C#
和Java
的默许结构函数是无参的,PLC ST中的默许结构函数有两个参数。
METHOD FB_init : BOOL
VAR_INPUT
bInitRetains : BOOL; // if TRUE, the retain variables are initialized (warm start / cold start)
bInCopyCode : BOOL; // if TRUE, the instance afterwards gets moved into the copy code (online change)
END_VAR
增加结构函数
以CODESYS
源生渠道或二次开发渠道为例:
- 1.在PRG或许FB程序块上右键--->增加--->Method--->称号(右侧下拉框)--->挑选FB_init--->Open。
- 2.在PRG或许FB程序块上右键--->增加--->Method--->称号--->直接输入FB_init--->Open。
上述两种办法均能够,个人主张挑选榜首种办法较好,避免编译器抽风。
运用结构函数
创立Dog类
FUNCTION_BLOCK FB_Dog
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
name : STRING;
END_VAR
自定义结构函数
METHOD FB_init : BOOL
VAR_INPUT
bInitRetains : BOOL; // if TRUE, the retain variables are initialized (warm start / cold start)
bInCopyCode : BOOL; // if TRUE, the instance afterwards gets moved into the copy code (online change)
sname : STRING; // 初始化姓名
END_VAR
----------------------------------------------
THIS^.name := sname;
主程序调用
PROGRAM MAIN
VAR
dog : FB_Dog('laifu'); // 初始化dog name 来福
END_VAR
激活下载,程序初始化时主动调用(隐式调用)FB_init
,无需手动调用(显式调用)。
自定义结构函数中增加了一个参数,所以在声明FB变量时有必要给出对应参数,不然编译不通过。
体系只要在每次初始化FB时主动调用一次,后续周期不再持续调用履行。
Tips : FB_init
能够隐式调用也能够显式调用,但是在显式调用时需求补全输入参数。
dog.FB_init(bInCopyCode := TRUE,bInitRetains :=TRUE ,sname := 'laifu');
因而,一般在变量声明区初始化输入参数,很少直接调用结构函数。
总结
结构函数首要用来初始化目标,一般不会将它暴露在PLC
扫描周期内循环履行,要是这样与一般Method
有什么差异。主张运用之前先去学习高档言语C#
和Java
的运用办法,宁可不必也不乱用。