Saltar a contenido

Metodo tipos de variables de retorno

Tipos de variables de retorno:

  • No es obligatorio en el metodo retornar un tipo de variable.
    • Ejemplos de declaración de Métodos que nos devuelve una variable de diferentes tipos:
      1
      2
      3
      4
      METHOD Method1 : BOOL
      METHOD Method1 : INT
      METHOD Method1 : REAL
      METHOD Method1 : STRING
      

Retorno por STRUCT:

Acceso a un único elemento de un tipo de retorno estructurado durante la llamada a método/función/propiedad.

La siguiente implementación se puede utilizar para tener acceso directamente a un elemento individual del tipo de datos estructurado que devuelve el método/función/propiedad cuando se llama a un método, función o propiedad.

Un tipo de datos estructurado es, por ejemplo, una estructura o un bloque de funciones.

El tipo devuelto del método/función/propiedad se define como:

1
2
3
REFERENCE TO <structured type>
//en lugar de simplemente  
<structured type>
Tenga en cuenta que con este tipo de retorno, si, por ejemplo, se va a devolver una instancia local FB del tipo de datos estructurados, se debe usar el operador de referencia REF= en lugar del operador de asignación "normal" :=.

Las declaraciones y el ejemplo de esta sección se refieren a la llamada de una propiedad. Sin embargo, son igualmente transferibles a otras llamadas que ofrecen valores devueltos (por ejemplo, métodos o funciones).

Ejemplo:

Declaración de la estructura ST_Sample (STRUCTURE):

1
2
3
4
5
6
TYPE ST_Sample :
STRUCT
    bVar  : BOOL;
    nVar  : INT;
END_STRUCT
END_TYPE
Declaración del bloque de funciones FB_Sample:
1
2
3
4
FUNCTION_BLOCK FB_Sample
VAR
    stLocal     : ST_Sample;
END_VAR
Declaración de la propiedad FB_Sample.MyProp con el tipo de devolución "REFERENCE TO ST_Sample":
1
PROPERTY MyProp : REFERENCE TO ST_Sample
Implementación del método Get de la propiedad FB_Sample.MyProp:
1
MyProp REF= stLocal;
Implementación del método Set de la propiedad FB_Sample.MyProp:
1
stLocal := MyProp;
Llamando a los métodos Get y Set en el programa principal MAIN:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
PROGRAM MAIN
VAR
    fbSample    : FB_Sample;
    nSingleGet  : INT;
    stGet       : ST_Sample;    
    bSet        : BOOL;
    stSet       : ST_Sample;
END_VAR
// Get - single member and complete structure possible
nSingleGet := fbSample.MyProp.nVar;
stGet      := fbSample.MyProp;

// Set - only complete structure possible 
IF bSet THEN
    fbSample.MyProp REF= stSet;
    bSet            := FALSE;
END_IF

Mediante la declaración del tipo devuelto de la propiedad MyProp como "REFERENCE TO ST_Sample" y mediante el uso del operador de referencia REF= en el método Get de esta propiedad, se puede acceder a un único elemento del tipo de datos estructurados devuelto directamente al llamar a la propiedad.

1
2
3
4
5
VAR
    fbSample    : FB_Sample;
    nSingleGet  : INT;
END_VAR
nSingleGet := fbSample.MyProp.nVar;
Si el tipo de retorno solo se declarara como "ST_Sample", la estructura devuelta por la propiedad tendría que asignarse primero a una instancia de estructura local. Los elementos de estructura individuales podrían consultarse sobre la base de la instancia de estructura local.
1
2
3
4
5
6
7
VAR
    fbSample    : FB_Sample; 
    stGet       : ST_Sample; 
    nSingleGet  : INT;
END_VAR
stGet      := fbSample.MyProp;
nSingleGet := stGet.nVar;


Retorno por INTERFACE:

Ejemplo de declaración de un método que nos devuelve una variable del tipo INTERFACE.

1
METHOD Method1 : interface1


Retorno por FUNCTION_BLOCK:

Ejemplo de declaración de un método que nos devuelve una variable del tipo FUNCTION_BLOCK.

1
METHOD Method1 : FB1