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 : 虽然编译没有错误也能正常运行,但是在程序初始化的时候已经创建了两个不同的对象 animaldog ,通过赋值“:=”只是将 animal 对象数据拷贝到 dog 对象,并没有将内存地址拷贝过去。

实际PLC OOP编程中,并不会采用此种方式接收子类对象,较为常见的作法是使用接口(INTERFACE)

总结

PLC ST OOP的继承与 C#Java 在定义和特点上基本一致,只是某些特性用法不同。在实际项目使用中需多加注意。