Skip to main content

Objeto: Método

Símbolo: _cds_icon_method.png

Palabra clave: METHOD

Los métodos son una extensión del estándar IEC 61131-3 y una herramienta para la programación orientada a objetos que se utiliza para la encapsulación de datos. Un método contiene una declaración y una implementación. Sin embargo, a diferencia de una función, un método no es una POU independiente y está subordinado a un bloque de función o programa. Un método puede acceder a todas las variables válidas del POU superior.

Puede agregar un método debajo de un programa o un bloque de funciones. Hacer clic Proyecto → Agregar objeto → Método. Entonces el Añadir método se abre el cuadro de diálogo.

Puede utilizar interfaces para la organización de métodos.

Para más información, ver: Implementar una interfaz

Importante

Cuando copia un método debajo de una POU y lo agrega debajo de una interfaz, o mueve el método allí, la implementación contenida se elimina automáticamente.

Declaración

Sintaxis:

METHOD <access specifier> <method name> : <type of return value>

<access specifier>

Opcional

Especificador de acceso

Según el especificador de acceso declarado, se puede llamar a un método solo dentro de su propio espacio de nombres (INTERNAL), únicamente dentro de su propio POU y sus derivados (PROTECTED), o solo dentro de su propia POU (PRIVATE). Para PUBLIC, el método se puede llamar desde cualquier lugar.

<method name>

Identificadores de métodos

<type of retur value>

Opcional

Tipo de retorno del método

Nota: En el caso de métodos que no tienen un tipo de retorno explícito, la primera salida declarada se usa como valor de retorno. Un método no devuelve un valor solo si no se declaran ni el tipo de retorno ni la salida. Sin embargo, no se genera un error del compilador en ningún caso.

tabla 59. Posibles ámbitos con declaración de variable (parámetro)

<scope list>

Alcances:

  • VAR_IN_OUT <variable declaration list> END_VAR

    Para declaración de variables para variables de entrada/salida

  • VAR_INPUT <variable declaration list> END_VAR

    Para declaración de variables para entradas

  • VAR_OUTPUT <variable declaration list> END_VAR

    Para declaración de variables para salidas

    Al igual que las funciones, los métodos pueden tener salidas adicionales. También debe pasar argumentos (variables) a las salidas adicionales cuando llama al método.

  • VAR <variable declaration list> END_VAR

    Para declaración de variables con fines locales

<variable declaration list>

Declaración de variables

<variable name> : <data type> := <initial value> ;

Lista delimitada por punto y coma de variables (parámetros) asignadas a un ámbito de acuerdo con su propósito.

  • Las variables de entrada y de entrada/salida pueden tener asignado un valor inicial

    La asignación de un valor inicial es opcional. Sin embargo, si se especifica uno, se puede omitir pasar un argumento para este parámetro al llamar al método. Este tipo de parámetros se denominan parámetros opcionales.

  • Las variables de un método (parámetro) contienen datos temporales que son válidos solo durante la ejecución del método (variables de pila). Todas las variables que se declaran e implementan en un método se reinicializan cada vez que se llama al método.



ejemplo 517. Ejemplo

Declaración

METHOD PUBLIC DoIt : BOOL
VAR_INPUT
        iInput_1 : DWORD;
        iInput_2 : DWORD;
        sInput_3 : STRING(12);
END_VAR


Implementación

Opcional

  • Se permite el acceso a instancias de bloques de funciones oa variables de programa para la implementación del método.

  • El ESTE El puntero permite el acceso a su propia instancia de bloque de funciones. Por lo tanto, el puntero solo se permite en métodos que están asignados a un bloque de funciones.

  • Un método no puede acceder VAR_TEMP variables del bloque de funciones.

  • Un método puede llamarse a sí mismo recursivamente.

  • No hay implementación para los métodos de interfaz.

    Métodos de interfaz puede haber declarado entrada, salida y VAR_IN_OUT variables, pero no contienen una implementación.

Llamar a un método

Sintaxis para llamadas:

<return value variable> := <POU name> . <method name> ( <argument passing> );

<return value variable>

Variable para el valor de retorno

El tipo tiene que coincidir con el tipo de retorno del método.

Nota: En el caso de métodos que no tienen un tipo de retorno explícito, la primera salida declarada se usa como valor de retorno. Un método no devuelve un valor solo si no se declaran ni el tipo de retorno ni la salida. Sin embargo, no se genera un error del compilador en ningún caso.

<POU name>

Identificador de la instancia del bloque de funciones bajo el cual se organiza el método

<method name>

Identificadores de métodos

<argument passing>

Lista delimitada por comas con los argumentos reales

Se pasa un argumento a cada parámetro (variable) del método:

<parameter name> := <actual argument>

  • A cada entrada/salida o entrada declarada se le asigna el argumento real. El argumento puede ser un valor (literal), una expresión o una variable con un tipo coincidente.

  • El argumento real (variable del mismo tipo) se asigna a cada salida declarada. El argumento tiene que ser una variable con el tipo coincidente.

  • Se puede omitir pasar un argumento para una entrada o una entrada/salida.

    Por lo tanto, la cantidad de argumentos en la lista puede ser menor que la cantidad de parámetros (ámbito de entrada o entrada/salida). En particular, si se trata de un parámetro opcional para el que se especificó un valor predeterminado o inicial en la declaración, se puede omitir el paso de un argumento.

    Sugerencia: si obtiene ayuda del Asistente de entrada al llamar al método, le notificará sobre los valores iniciales existentes.

  • Es opcional pasar un argumento con la especificación del parámetro con nombre y operador de asignación.

    Especificar solo el argumento es suficiente. El orden de las variables en la declaración determina qué argumento se pasa a qué parámetro.

ejemplo 518. Ejemplo

Declaración

METHOD PUBLIC DoIt : BOOL
VAR_INPUT
        iInput_1 : DWORD;
        iInput_2 : DWORD;
        sInput_3 : STRING(12);
END_VAR

Llamada con pasar un argumento a un parámetro

bFinishedMethod := fbInstance.DoIt(sInput_3 := 'Hello World ', iInput_2 := 16#FFFF, iInput_1 := 16);

Cuando se llama al método, el valor de retorno del método se asigna a una variable declarada localmente.



ejemplo 519. Ejemplo

Si omite los nombres de las variables de entrada, la asignación de los argumentos resulta del orden de declaración.

Declaración

METHOD PUBLIC DoIt : BOOL
VAR_INPUT
        iInput_1 : DWORD;
        iInput_2 : DWORD;
        sInput_3 : STRING(12);
END_VAR
IF iInput_1 = iInput_2 THEN
	DoIt := TRUE; // explicit return value
END_IF

Llamada pasando un argumento según el orden en la declaración

bFinishedMethod := fbInstance.DoIt( 16, 16#0010,'Hello World ');


Llamada de método recursivo

Dentro de la implementación, un método puede llamarse a sí mismo, ya sea directamente por medio del ESTA puntero, o por medio de una variable local para el bloque de función asignado.

  • <return value variable> := <POU name> . <method name> ( <argument passing> );

    Llamada directa de la instancia de bloque de función relevante con el THIS puntero

  • <return value variable> := <POU name> . <method name> ( <argument passing> );

    Llamada por medio de una variable local del método que instancia temporalmente el bloque de función relevante

Se emite una advertencia del compilador en el caso de una recursiva llamar. Si el método se proporciona con el pragma {attribute 'estimated-stack-usage' := '<estimated stack size in bytes>'}, se suprime la advertencia del compilador.

Para ver un ejemplo de implementación, consulte "Atributo: 'uso estimado de la pila'" capítulo.

Para llamar a métodos recursivamente, no es suficiente especificar solo el nombre del método. Si solo se especifica el nombre del método, se emite un error del compilador: Se espera el nombre del programa, la función o la instancia del bloque de funciones en lugar de

Métodos especiales de un bloque de función

FB_Init

Declaraciones automáticamente implícitas, pero también es posible una declaración explícita

Contiene código de inicialización para el bloque de funciones, tal como se define en la parte de declaración del bloque de funciones.

FB_Reiniciar

Es necesaria una declaración explícita.

Llame después de que se haya copiado la instancia del bloque de funciones (como durante un cambio en línea). Reinicializa el nuevo módulo de instancia.

FB_Salir

Es necesaria una declaración explícita.

Llame para cada instancia del bloque de funciones antes de una nueva descarga o reinicio o durante un cambio en línea para todas las instancias desplazadas o eliminadas.

Propiedades

proporciona Set y/o Get métodos de acceso.

Diálogo: Añadir método

Función: define un método debajo de la POU seleccionada cuando se cierra el cuadro de diálogo.

Llamada: Proyecto → Agregar objeto → Método; Menú de contexto

Requisito: Un programa (PRG) o un bloque de funciones (FUNCTION_BLOCK) está seleccionado en el POU ver o el Dispositivos vista.

Aviso

La interfaz de un método insertado debajo de un bloque de funciones básico se copia cuando un método con el mismo nombre se inserta debajo de un bloque de funciones derivado.

Nombre

Ejemplo: meth_DoIt.

Los métodos estándar FB_Init y FB_Exit se ofrecen en un cuadro de lista si aún no están insertados debajo de la POU. Si se trata de un bloque de funciones derivado, el cuadro de lista también ofrece todos los métodos del bloque de funciones básico.

Tipo de retorno

Tipo de datos predeterminado o tipo de datos estructurados de valor de retorno

Ejemplo: BOOL

Idioma de implementación

Ejemplo: Texto estructurado (ST)

Especificador de acceso

Controla el acceso a los datos.

  • PÚBLICO o no especificado: El acceso no está restringido.

  • PRIVADO: El acceso está restringido al programa, bloque de funciones o GVL.

    El objeto está marcado como (private) en la vista de POU o dispositivo. La declaración contiene la palabra clave PRIVATE.

  • PROTEGIDO: El acceso está restringido al programa, bloque de función o GVL con sus derivaciones. La declaración contiene la palabra clave PROTECTED.

    El objeto está marcado como (protected) en la vista de POU o dispositivo.

  • INTERNO: El acceso al método está restringido al espacio de nombres (biblioteca).

    El objeto está marcado como (internal) en la vista de POU o dispositivo. La declaración contiene la palabra clave INTERNAL.

Resumen

standard icon: Identifica que el método no tiene una implementación y la implementación la proporciona el FB derivado.

Agregar

Agrega un nuevo método debajo del objeto seleccionado.

Soporte de entrada al generar POU heredadas

Al realizar una programación orientada a objetos y utilizar la herencia (EXTENDS palabra clave) de las POU, puede obtener soporte de la siguiente manera:

Cuando inserta una acción, una propiedad, un método o una transición debajo de una POU derivada de una POU base, el Agregar … se abre el cuadro de diálogo. Luego, el campo de entrada para el nombre se extiende a un cuadro de lista. El cuadro de lista contiene una selección válida de las acciones, propiedades, métodos o transiciones disponibles en la POU base. Ahora puede, por ejemplo, aceptar fácilmente un método de la POU base y luego adaptarlo a la función derivada de la POU.

Métodos y propiedades con el modificador de acceso PRIVATE no se enumeran aquí porque tampoco se heredan. Métodos y propiedades con el modificador de acceso PUBLIC obtiene automáticamente un campo modificador de acceso en blanco al aceptar en la POU derivada, lo que significa lo mismo funcionalmente.

Para obtener más información, consulte: Propiedad, Método, Transición, Acción,

ejemplo 520. Ejemplo
_cds_img_input_wizzard_for_blocks.png