首页 > 其他分享 >PLC结构化文本(ST)——构造函数(FB_init)

PLC结构化文本(ST)——构造函数(FB_init)

时间:2024-09-05 17:19:04浏览次数:7  
标签:调用 FB ST --- init VAR 构造函数

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

相关文章

  • MyRequestsHelper
    importrequestsimporttimeclassStateCodeError(Exception):"""状态码异常"""passclassContentError(Exception):"""内容异常"""passclassRequestHelper:"""未使用代理......
  • C++ STL queue容器——队列
    queue容器基本概念queue是一种**先进先出的数据结构,它有两个出口,queue容器允许从一端新增元素,从另一端移除元素。queue容器没有迭代器,所有元素进出都必须符合“先进先出”条件,只有顶端的元素才有机会被外界取用,所以也不提供遍历功能。queue容器常用操作构造函数queue<T>qu......
  • D15 kubernetes 初始化容器(initContainers)
    初始化容器(initContainers)是Pod中一种特殊类型的容器,专用于在主容器启动之前执行一些初始化任务和操作,以满足主容器所需的环境。 初始化容器在整个pod的生命周期内仅运行一次,并且在主容器启动之前完成它们的任务,既初始化容器一旦任务完成,就必须退出。初始化容器有以下应用场......
  • java.lang.ClassNotFoundException: net.logstash.logback.appender.LogstashTcpSocke
    出现以下错误,是因为项目缺少依赖:atorg.springframework.boot.logging.logback.LogbackLoggingSystem.reportConfigurationErrorsIfNecessary(LogbackLoggingSystem.java:189)atorg.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(Log......
  • java知识点——String类常用方法
    字符串常用方法: 方法描述int字符串.length()获取字符串长度boolean字符串.equals比较字符串内容是否相等boolean字符串1.equalsIgnoreCase(字符串2)不分大小写比较内容String字符串.toLowerCase()将字符串全部转成小写的String字符串.toUpperCas......
  • C++ STL stack容器——栈
    stack容器基本概念stack是一种先进后出的数据结构,它只有一个出口,形式如下图所示。stack容器允许新增元素,移除元素,取得栈顶元素,但是除了最顶端外,没有任何地方可以存取stack的娶她元素。换句话说,stack不允许有遍历行为。元素推入栈的操作称为push,将元素推出栈的操作称为pop。st......
  • pgsql计算加减乘除:深入探索PostgreSQL中的数学运算
    pgsql计算加减乘除:深入探索PostgreSQL中的数学运算在数据库管理系统中,进行基本的数学运算是非常常见的需求。PostgreSQL(简称pgsql),作为一个功能强大的开源对象-关系数据库系统,提供了丰富的数学函数和操作符来支持加减乘除等基本运算。本文将深入探讨如何在PostgreSQL中执行这些运算......
  • 记录一个opencv的imread方法无法读取成功的问题,【设计到visual studio和静态库(lib)匹配
    一、为什么会遇到这个问题公司需要对多图进行拼接,经过多番查找发现了OpenStitching这个库。可以实现多图拼接。在python段尝试了之后感觉效果不错,所以使用VisualStudio进行C++开发。在读取图片的时候发现imread方法无论怎么样都无法读取到图片。二、解决办法我一开始以为是路......
  • test3
    与AI共舞的哈夫曼(399人攻克150pts)修改flag得到flag正确格式年轻人就要年轻,正经人谁自己写代码啊~打开二进制文件,Nepctf{human_zi6}……2个p,3个f,2个_,3个6……它再描述flag的样子p就是zip和Nep第二个_放在zip后面得到Nepctf{huffman_zip_666}......
  • freepbx和asterisk的关系和不同之处
    FreePBX和Asterisk之间的关系是,FreePBX是基于Asterisk的图形化管理界面,用于简化对Asterisk的配置和管理。Asterisk是一个开源的PBX(私有分支交换)软件,功能强大但主要通过命令行和配置文件进行操作。而FreePBX是一个Web界面,提供更友好的用户体验,让用户不需要直接编......