首页 > 其他分享 >PLC结构化文本(ST)——This&Super(关键字)

PLC结构化文本(ST)——This&Super(关键字)

时间:2024-09-04 11:38:34浏览次数:12  
标签:super ST DoIt FB PLC VAR METH Super 指针

PLC Structured Text Object Oriented Programming

PLC结构化文本(ST)——This&Super(关键字)

关键字This和Super是什么?

this 是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。
super 可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。---Java 中 this 和 super 的用法总结|菜鸟教程

在 C++ 中,this 指针是一个特殊的指针,它指向当前对象的实例。
在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。
this是一个隐藏的指针,可以在类的成员函数中使用,它可以用来指向调用对象。---C++ this 指针|菜鸟教程

参考JavaC++thissuper的定义,thissuper本质上就是指针,分别指向对象本身父类。在IEC61131-3THISSUPER也是同样的作用,是系统内置隐藏的关键字。

但是有一点不同的是,在JavaC#中存在值类型引用类型的概念,因此它们在使用thissuper时可以直接使用 "this.变量" 的方式,而在PLC ST中需要使用 "THIS^.变量" 的方式。其中符号"^"为指针的解引符(解除引用的符号)

Tips : Java中的关键字thissuper是区分大小写的,并且在IEC61131-3中也是THISSUPER这两个关键字,而在 C# 中则分别是thisbase(区分大小写)。

this 和 super 的使用方法

// this
class Person {
    private int age = 10;
    public Person(){
    System.out.println("初始化年龄:"+age);
}
    public int GetAge(int age){
        this.age = age;
        return this.age;
    }
}
 
public class test1 {
    public static void main(String[] args) {
        Person Harry = new Person();
        System.out.println("Harry's age is "+Harry.GetAge(12));
    }
}
// super
class Country {
    String name;
    void value() {
       name = "China";
    }
}
  
class City extends Country {
    String name;
    void value() {
    name = "Shanghai";
    super.value();      //调用父类的方法
    System.out.println(name);
    System.out.println(super.name);
    }
  
    public static void main(String[] args) {
       City c=new City();
       c.value();
       }
}
  • IEC61131-3代码示例
FUNCTION_BLOCK FB_A
VAR_INPUT
    nVarA: INT;
END_VAR
--------------
nVarA := 1;
---------------------------
FUNCTION_BLOCK FB_B EXTENDS FB_A
VAR_INPUT
    nVarB : INT := 0;
END_VAR
--------------
nVarA := 11;
nVarB := 2;
---------------------------
// 这里的方法是属于FB_B功能块的
METHOD DoIt : BOOL
VAR_INPUT
END_VAR
VAR
    nVarB : INT;
END_VAR
-------------
nVarB := 22; // 指的是DoIt方法本地声明的nVarB变量
THIS^.nVarB := 222; // 指的是功能块FB_B声明的nVarB变量

方法内部变量与功能块内部成员变量名重复时可以用THIS指针来指定。

// 父类
FUNCTION_BLOCK FB_Base
VAR_OUTPUT
    nCnt : INT;
END_VAR
-------------------------
// METH_DoAlso 和 METH_DoIt都属于FB_Base方法成员
METHOD METH_DoAlso : BOOL
VAR_INPUT
END_VAR
-------------
METH_DoAlso := TRUE;
------------------------
METHOD METH_DoIt : BOOL
-------------
nCnt := -1;
------------------------
// 子类
FUNCTION_BLOCK FB_1 EXTENDS FB_Base
VAR_OUTPUT
    nBase: INT;
END_VAR
------------
THIS^.METH_DoIt();
THIS^.METH_DoAlso();

SUPER^.METH_DoIt();
SUPER^.METH_DoAlso();
nBase := SUPER^.nCnt;
------------------------
// METH_DoAlso 和 METH_DoIt 是 FB_1 的方法成员
METHOD METH_DoAlso : BOOL
------------
nCnt := 123;    
METH_DoAlso := FALSE;
------------------------
METHOD METH_DoIt : BOOL
------------
nCnt := 1111;    
METH_DoIt := TRUE;

父类方法成员和子类方法成员相同时,可以使用THISSUPER指针来指定目标成员。

总结

THISSUPER是指针,存储的是16进制的内存地址,使用时需要解除引用,但也看具体编程需求。
THISSUPER不仅仅只有上面描述的使用场景,它们的功能用法与高级语言的Java & C# 对应关键字类似,但是毕竟PLC主要应用在工业,服务对象和使用场景不同,因此高级语言中的很多特性在PLC ST中是没有的,具体有哪些不同,还需要继续挖掘。

标签:super,ST,DoIt,FB,PLC,VAR,METH,Super,指针
From: https://www.cnblogs.com/JSheng/p/18396127

相关文章

  • bacnet mstp设备数据 转IEC61850项目案例
    目录1 案例说明 12 VFBOX网关工作原理 13 使用YABE软件读取BACNETMSTP设备信息 24 配置网关采集BACNETMSTP数据 45 用IEC61850协议转发数据 66 网关使用多个逻辑设备和逻辑节点的方法 87 案例总结 91 案例说明使用Yabe软件获取bacnetmstp设备信息,如果已知bacnet设备......
  • 每天认识几个maven依赖(acegisecurity+activation+activecluster+activeIO)
    四、acegisecurity1、是什么?acegisecurity是早期版本的SpringSecurity框架的名称。SpringSecurity是一个功能强大的认证和授权框架,用于保护Java应用程序的安全性。acegisecurity这个名称来源于它的前身项目AcegiSecurity。2、有什么用?认证:验证用户的身份,确保......
  • 腾讯&浙大提出定制化视频生成框架CustomCrafter,只需通过少量图像就可以完成高质量视频
    腾讯联合浙大提出了一种定制化视频生成框架-CustomCrafter,它能够基于文本提示和参考图像生成自定义视频,同时保留运动生成和概念组合的能力。通过设计一系列灵活的模块,使得模型实现了无需额外视频,通过少量图像学习,就能生成高质量的个性化视频。上图为CustomCrafter可视化结果。Cus......
  • Stable Diffusion【XL Lora】推荐!AI助力服装设计,让服装拆分设计就是这么高效!
    今天给大家介绍一个服装饰品分类背景的基于SDXL的Lora模型:分类背景XUER。该模型是由作者(B站绪儿已成精)炼制,非常适合饰品服装分类背景。绪儿大佬其实推出了很多非常棒的模型,比如之前非常受大家喜欢的敦煌飞天、超梦幻场景等模型。下面我们来实际体验一下,看使用这个模型出来的图片......
  • 一致性哈希(Consistent Hashing)
    基本概念        一致性哈希(ConsistentHashing)是一种特殊的哈希算法,主要用于解决分布式系统中数据分布的问题,尤其是在需要动态添加或移除服务器(节点)的情况下。传统哈希算法在节点变化时可能会导致大部分甚至全部的数据重新分布,这样会导致大量的数据迁移,增加了系统的......
  • DevExpress WinForms v24.1亮点- TreeList、折叠组件全新升级
    DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!DevExpressWinForms控件2024年第一个重大版本......
  • 第T1周:Tensorflow实现mnist手写数字识别
    一、Tensorflow实现mnist手写数字识别......
  • Python 默认列表(Default List):一种灵活的数据结构
    Python中的默认列表(DefaultList)是一种特殊的数据结构,它允许我们创建一个包含特定元素类型的列表,并在需要时动态地添加或删除元素。这种灵活性使得默认列表成为了处理一些不确定或变化的数据的有力工具。创建列表时指定元素类型在Python中,我们可以在创建列表时指定元素类型,如果......
  • ElasticSearch入门到掌握,用心看完这三篇就够了【完结2】
    文章目录二、ElasticSearch详解1.DSL查询文档(1)DSL查询语法分类(2)DSLQuery基本语法(3)查询所有(4)全文检索查询(5)精确查询(6)地理查询(7)复合查询相关性算分fuctionscorebool查询2.搜索结果处理(1)排序(2)分页(3)深度分页问题(4)高亮3.RestClient查询文档(1)查询所有(2)全文检索查询(3......
  • static 数据 编程中的作用
      编程的开发语言有静态强类型语言和动态弱类型语言。静态强类型语言有C/C++,JAVA。静态的开发语言是编译型的开发语言。计算机的编程开发由程序设计师编写代码,源代码文件通过不同语言的编译器编译后会生成不同的机器执行文件。解释性语言为动态弱类型语言,编译型语言是静态强......