PLC结构化文本(ST)——继承(inheritance)
1.PLC结构化文本(ST)——类(Class)2.PLC结构化文本(ST)——方法(Method)3.PLC结构化文本(ST)——接口(Interface)4.PLC结构化文本(ST)——特殊指针(This&Super)
5.PLC结构化文本(ST)——继承(inheritance)
6.PLC结构化文本(ST)——属性(Property)7.PLC结构化文本(ST)——指针和引用(Pointer&Reference)8.PLC结构化文本(ST)——访问修饰符9.PLC结构化文本(ST)——构造函数(FB_init)10.PLC结构化文本(ST)——变量类型和变量属性11.PLC结构化文本(ST)——临时&静态&实例-变量(TEMP&STAT&INST)12.PLC结构化文本(ST)——数组越界与PLC异常(CheckBounds)13.PLC结构化文本(ST)——异常捕获(__TRY__CATCH)14.PLC结构化文本(ST)——接口指针转换(__QUERYPOINTER)15.PLC结构化文本(ST)——接口引用转换(__QUERYINTERFACE)16.PLC结构化文本(ST)——区域代码折叠(Region)17.PLC结构化文本(ST)——枚举_to_string(to_string)18.PLC结构化文本(ST)——FB系统内置方法(Init、exit、reinit)19.PLC结构化文本(ST)——结构体属性外部调用(Issue)20.PLC结构化文本(ST)——AND_THEN & OR_ELSE21.PLC结构化文本(ST)——实例路径属性(attribute 'instance-path')22.PLC结构化文本(ST)——隐式枚举(implicit enum)23.PLC结构化文本(ST)——泛型常量(Generic Constatnt)PLC Structured Text Object Oriented Programming
PLC结构化文本(ST)——继承(inheritance)
继承的概念
继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。
当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。---C#继承|菜鸟教程
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。---Java继承|菜鸟教程
继承特点
- 1.不支持多重继承,但一个类可以实现多个接口。
- 2.可以继承类的三大成员(字段、属性、方法等),除非这些成员被标记为Private(私有)。只能继承非私有成员。
Tips : 同样在结构化文本编程中,若属性(Property) 和方法(Method) 被标记为Private那么子类也将无法继承私有成员,该规则与C#和Java一致。
继承的格式
IEC61131-3增加了对面向对象编程的支持,继承关键字为EXTENDS
。
- 1.类(FB)继承
// 父类FB_Animal FUNCTION_BLOCK FB_Animal VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR END_VAR ------------------------- // 子类FB_Dog FUNCTION_BLOCK FB_Dog EXTENDS FB_Animal VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR END_VAR
- 2.接口继承
// 父类接口“汽车” INTERFACE I_Car // 子类接口“比亚迪” INTERFACE I_BYD EXTENDS I_Car
- 3.结构体继承
TYPE ST_Fruits : STRUCT colour : STRING; // 颜色 weight : REAL; // 重量 END_STRUCT END_TYPE ------------------------- // ST_Apple 继承 ST_Fruits,子类拥有三个成员:colour,weight,price TYPE ST_Apple EXTENDS ST_Fruits : STRUCT price : REAL; // 价格 END_STRUCT END_TYPE
在C#或Java高级语言中,父类类型变量可以接收子类类型对象,此特性也适用于PLC ST。
PROGRAM MAIN
VAR
animal : FB_Animal;
dog : FB_Dog;
END_VAR
----------------------
animal := dog;
Tips : 虽然编译没有错误也能正常运行,但是在程序初始化的时候已经创建了两个不同的对象 animal 和 dog ,通过赋值“:=”只是将 animal 对象数据拷贝到 dog 对象,并没有将内存地址拷贝过去。
实际PLC OOP编程中,并不会采用此种方式接收子类对象,较为常见的作法是使用接口(INTERFACE)
。
总结
PLC ST OOP的继承与 C#
和 Java
在定义和特点上基本一致,只是某些特性用法不同。在实际项目使用中需多加注意。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验