EcoStruxure Machine Expert versión 1.1 no soporta los controladores M258, LMC058 y LMC078.

Implementación de interfaces

Descripción general

Para admitir la programación orientada a objetos, un bloque de funciones puede implementar varias interfaces que permiten utilizar métodos.

Sintaxis

FUNCTION_BLOCK <nombre de bloque de funciones> IMPLEMENTS <nombre de interfaz_1>|,<nombre de interfaz_2>, ..., <nombre de interfaz_n>

Un bloque de funciones que implementa una interfaz debe contener todos los métodos y propiedades (propiedades de interfaz) definidas por esa interfaz. Se incluyen el nombre, las entradas y la salida del método o propiedad concretos, que deben ser exactamente los mismos.

Por este motivo, al crear un nuevo bloque de funciones que implemente una interfaz, todos los métodos y propiedades definidos en esa interfaz se insertarán automáticamente debajo del nuevo bloque de funciones en el árbol Aplicaciones.

NOTA: Si después se añaden métodos a la definición de interfaz, estos no se añadirán automáti­camente a los bloques de funciones correspondientes, por lo que se producirán errores del compilador. Ejecute el comando Implementar interfaces... para realizar esta actualización explícitamente.

Al utilizar la herencia para bloques de funciones, si se crearon métodos o atributos por herencia de una interfaz, impleméntelos o elimínelos si se va a utilizar el bloque de funciones base. Los atributos de pragma se insertan automáticamente. Estos se detectan durante la compilación y se generan mensajes para recordarle que se deben verificar los métodos o las propiedades heredados. Elimine los atributos de pragma después de haber implementado por completo el nuevo bloque de funciones.

Para obtener más información, consulte la descripción del comando Implementar interfaces....

Ejemplo

INTERFACE I1 incluye el método GetName:

METHOD GetName : STRING

Los bloques de funciones A y B implementan cada uno de ellos la interfaz I1:

FUNCTION_BLOCK A IMPLEMENTS I1
FUNCTION_BLOCK B IMPLEMENTS I1

Así, en los dos bloques de funciones, el método GetName debe estar disponible y se insertará automáticamente debajo de cada uno cuando los bloques de funciones se inserten en el árbol Aplicaciones.

Tenga en cuenta esta declaración de una variable de tipo I1:

FUNCTION DeliverName : STRING 
VAR_INPUT 
  l_i : I1; 
END_VAR 

Esta entrada puede recibir todos los bloques de funciones que implementan la interfaz I1.

Ejemplo de llamadas a funciones:

DeliverName(l_i := A_instance); // call with instance of type A 
DeliverName(l_i := B_instance); // call with instance of type B 

NOTA: Para poder llamar a un método, debe asignarse una instancia de un bloque de funciones a una variable de tipo interfaz. Una variable de tipo interfaz siempre es una referencia a la instancia de bloque de funciones asignada.

De este modo, una llamada al método de interfaz produce una llamada a la implementación del bloque de funciones. En cuanto se asigna la referencia, la dirección correspondiente se supervisa en modalidad online. En caso contrario, si todavía no se ha asignado ninguna referencia, se mostrará el valor 0 en la supervisión en modalidad online.

Para este ejemplo, consulte la parte de implementación de la función DeliverName:

DeliverName := l_i.GetName(); // in this case it depends on the "real" type of l_i whether A.GetName or B.GetName is called

NOTA: Consulte también la posibilidad de extender un bloque de funciones utilizando la palabra clave EXTENDS en la declaración.