martes, 5 de noviembre de 2013

Unidades de organización de programa (POU)

POU:

  • Programas (PRG)
  • Bloques funcionales (FB)
  • Funciones (FC)
Compuesto de:
  • Parte de programación 
  • Parte de programa

La jerarquía es la siguiente:
En la parte más alta se encuentra el POU tipo programa (PRG), PROGRAM … END_PROGRAM.
En el punto medio se encuentran los bloques funcionales (FB), FUNCTION_BLOCK … END_FUNCTION_BLOCK.
En la parte inferior se encuentran las funciones (FC), FUNCTION … END_FUNCTION.
Funciones (FC): No pueden contener información de estado interno. La invocación de una función con los mismos parámetros de entrada debe suministrar siempre la misma salida. Pueden ser funciones estándar (ADD, ABS, SQRT, etc.) o funciones definidas por usuario, que una vez implementadas pueden ser usadas en cualquier POU. 
     Suministra exactamente un dato.
Su llamada puede realizarse en lenguajes de texto como operador en expresiones.
En la declaración se ha de asignar un tipo de dato (NOMBRE FUNCION: TIPO DE DATO).
Hay que asignar un resultado a la función. El nombre de la función se utiliza con una variable de salida. 
Declaración de una función:
-          La palabra FUNCTION seguida del nombre de la función, dos puntos y el tipo de dato del resultado de la función.
-          La construcción VAR_INPUT… END VAR, con los nombres y tipos de datos de las variables de entradas de la función.
-          Según corresponda, la construcción VAR…END VAR con los nombres y tipos de datos de las variables internas (aquellas que al terminar la función desaparecen).
-          El núcleo de la función, escrito en alguno de los lenguajes de programación que se explicarán más adelante.
-          La palabra clave END_FUNTION.
-          Opcionalmente también se pueden usar las construcciones VAR_OUT…END VAR, con la que se fijan las variables de salida cuyos valores pueden verse modificados; y VAR_IN_OUT…END VAR, con la que se fijan las variables de paso cuyos valores también pueden verse modificados.

Ejemplo en IL:

FUNCTION Fct: INT
VAR_INPUT
         PAR1: INT;
         PAR2: INT;
         PAR3: INT;
END_VAR

LD       PAR1

MUL      PAR2        ;Devuelve como resultado el producto de los dos primeros                 
DIV       PAR3         ;dividido por la última
ST         Fct


Llamada a la función:  
 


Bloques funcionales (FB): equivalentes a los circuitos integrados (IC). Contienen datos e instrucciones y pueden guardar valores de variables. Tienen un interfaz de entrada y salida bien definido y un código interno oculto. Una vez definido puede ser usado una y otra vez, en el mismo o en diferentes programas. Además pueden ser llamados varias veces, creando copias del FB denominadas instancias.
Suministra uno o varios valores.
No proporciona ningún valor de devolución.
Se pueden crear instancias de un FB. 
Declaración de un bloque de funciones:
-          FUNCTION_BLOCK seguido del nombre del FB.
-          La construcción VAR_INPUT…END_VAR, con el nombre y tipo de dato de las variables de entrada.
-          La construcción VAR_OUTPUT…END_VAR, con el nombre y tipo de dato de las variables de salida (se pueden declarar varias).
-          La construcción VAR_IN_OUT…END_VAR con el nombre y tipo de dato de las variables de paso cuyo valor puede verse modificado por el programa dentro del FB.
-          La construcción VAR…END_VAR, con el nombre y tipo de dato de las variables de estado del FB. También se utiliza para generar una instancia del FB.
-          La construcción VAR_TEMP…END_VAR, para el almacenamiento temporal de variables en FB y programas (PRG).
-          El núcleo del bloque funcional con el programa a ejecutar.
-          La palabra clave END_FUNCTION_BLOCK.

Ejemplo en IL:

FUNCTION_BLOCK   FUB
VAR_INPUT
         PAR1: INT;
         PAR2: INT;
END_VAR
VAR_OUTPUT
         MULERG: INT;
         VERGL: BOOL;


LD            PAR1 
MUL        PAR2                  ;Producto de las entradas
ST           MULERG



D             PAR1
MUL       PAR2                 ;Comparación de igualdad
ST          MULERG


Instancias: Cada una posee su propio indicador (nombre de instancia) y una estructura de datos que contiene sus entradas, salidas y variables internas. 
Se declaran como locales o globales, indicando como tipo de un identificador el nombre de FB. 
INSTANZ: FUB --> Nombre instancia, INSTANZ; del FB, FUB. 
Las llamadas a los FB se realizan a través de las instancias, y se puede acceder a los parámetros de entrada y salida a través de ella, pero no se puede acceder a sus variables internas.  
PROGRAM     prog
VAR
Inst1: fb;                                     ;ejemplo de acceso a una variable
END_VAR                                  ;de entrada in1 del tipo inst
LD                 17
ST                  inst1.1
CAL              inst1
END_PROGRAM

Las declaraciones de los FB y programas no pueden contener declaración de instancias, y a su vez no se admiten declaraciones de instancias en las funciones.
El nombre de una instancia de un FB se puede utilizar como entrada en una función o FB. Todos los valores se conservan después de cada ejecución del FB.
Llamada a un BF:
<nombre de instancia>.<nombre de variable>

Para fijar los valores de entrada: IL y ST, asignando valores entre paréntesis después del nombre de la instancia (asignación “:=”).

VAR                                       ;ejemplo para la llamada de una VAR_IN_OUT, 
 inst: fubo;                            ;inout1 del FB en un módulo ST        

var1: int;                                    ;No se permite inst (inout1:=2;) o inst.inout1:=2
    END_VAR
var1:=2; 
inst (inout:=var1);
  
En SFC las llamadas a FB sólo se pueden realizar en pasos.
Programa: Puede contener, aparte de la declaración de tipo de datos, variables y su código interno, distintas instancias de funciones y FB.
Módulo que al ejecutarse suministra uno o varios valores.
Incluidos en el proyecto de forma global.
Tras cada ejecución se conservan todos los valores.
Pueden recibir llamadas de otros programas y FB.
Una función no admite llamadas a programas. 
No existen instancias a programas. 
Ejemplo de llamadas a programa (PRGbeispiel):

  


Acción: Definible para FB y programas.
Funciona con los datos del FB o del programa al que pertenece. Se llama con:
         <nombre de programa>.<nombre de accion>
         <nombre de instancia>.<nombre de accion>
Si se llama desde un módulo propio, en los editores de texto sólo se utilizan los nombres de acción y en los gráficos la llamada al FB sin datos de instancia.

Recursos: Para la configuración y organización del proyecto y para el seguimiento de valores de variables. 




No hay comentarios:

Publicar un comentario