En la programación orientada a objetos (OOP) en PLCs, el puntero SUPER^ se utiliza para referirse al objeto o instancia de una clase superior o padre. Supongamos que tienes una clase llamada "Sensor" y otra clase llamada "Sensor_de_Temperatura", que hereda de la primera. La clase "Sensor" es la clase padre o superior y la clase "Sensor_de_Temperatura" es la clase hija o inferior. Si estás programando en la clase "Sensor_de_Temperatura" y necesitas acceder a un método o propiedad de la clase "Sensor", puedes utilizar el puntero SUPER^ para referirte a la instancia de la clase "Sensor" a la que pertenece el objeto actual. Por ejemplo, si quieres acceder al método "obtener_valor()" de la clase "Sensor", puedes hacerlo así: SUPER^.obtener_valor(). Esto indica que quieres llamar al método "obtener_valor()" de la instancia de la clase "Sensor" a la que pertenece el objeto actual.
cada bloque de funciones que se deriva de otro bloque de funciones tiene acceso a un puntero llamado SUPER^.
Esto se puede usar para acceder a elementos (métodos, propiedades, variables locales, etc.) desde el bloque de funciones principal.
En lugar de copiar el código del bloque de funciones principal al nuevo método, el puntero SUPER^ se puede usar para llamar al método desde el bloque de funciones . Esto elimina la necesidad de copiar el código.
12
SUPER^();// Llamada del cuerpo FB de la clase base.SUPER^.METH_DoIt();// Llamada del método METH_DoIt que se implementa en la clase base.
Ejemplo:
Usando los punteros SUPER y THIS:
Bloque de Función -- FB_Base:
1234
FUNCTION_BLOCKFB_BaseVAR_OUTPUTnCnt:INT;END_VAR
Metodo -- FB_Base.METH_DoIt:
12
METHODMETH_DoIt:BOOLnCnt:=-1;
Metodo -- FB_Base.METH_DoAlso:
12
METHODMETH_DoAlso:BOOLMETH_DoAlso:=TRUE;
Bloque de Función -- FB_1:
1 2 3 4 5 6 7 8 910
FUNCTION_BLOCKFB_1EXTENDSFB_BaseVAR_OUTPUTnBase:INT;END_VARTHIS^.METH_DoIt();// llamada al metodo METH_DoIt del FB_1.THIS^.METH_DoAlso();SUPER^.METH_DoIt();// llamada al metodo METH_DoIt del FB_Base.SUPER^.METH_DoAlso();nBase:=SUPER^.nCnt;