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的使用方法,宁可不用也不滥用。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |