筒濂 发表于 2025-6-6 13:22:08

PLC结构化文本(ST)——继承(inheritance)

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 在定义和特点上基本一致,只是某些特性用法不同。在实际项目使用中需多加注意。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: PLC结构化文本(ST)——继承(inheritance)