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的使用方法,宁可不用也不滥用。
标签:调用,FB,ST,---,init,VAR,构造函数 From: https://www.cnblogs.com/JSheng/p/18398858