Sección: Toplevel
Los módulos que se encuentran en el primer nivel del árbol de módulos se denominan módulos de nivel superior. A diferencia de otros módulos, tienen métodos que se pueden llamar directamente desde una o varias tareas. Los módulos de nivel superior contienen la sección Toplevel
.
SEC Toplevel //optional: yes, modifier: [UPDATE] GVL_Name := <GVL name>; //optional: yes, type: literal Default_Application := <default application>; //optional: yes, type: QID Default_POUPool := <TRUE/FALSE>; //optional: yes, type: BoolFlag Pragmas := [<pragma1>, <pragma2>,...]; //optional: yes, type: Pragmalist SEC Standard_Task : <task name> //optional: yes, modifier: [HIDE,UPDATE] Name := <task name>; //optional: no, type: ID Desc := <task description>; //(optional: no, type: Text) Flags:= <flag>; //(optional: no, type: StdTaskFlags) END_SEC SEC Custom_Task : <task name> //optional: yes, modifier: [UPDATE] Priority := <priority>; //optional: no, type: Subrange(0 .. 31) Interval := <interval>; //optional: no, type: TimeLiteral) Flags:= <flag>; //optional: no, type: CustomTaskFlags) END_SEC END_SEC
Los detalles sobre la sintaxis de los tipos de definición se describen en la sección Declaración del módulo.
GVL_Name
define el nombre de la GVL en la que se declarará la instancia del módulo y todas sus subinstancias. El marcador de posición%Instancename%
(La ortografía en mayúsculas o minúsculas no es relevante), será reemplazada por el nombre de la instancia del módulo.El parámetro
Default_Application
define la asignación de la aplicación para todas las instancias de este módulo a una aplicación específica. Si se define una aplicación predeterminada, el uso deDefault_POUPool
no es posible.El parámetro
Default_POUPool
define la asignación de la aplicación para todas las instancias de este módulo al grupo de POU. Si se define un grupo de POU predeterminado, el uso deDefault_Application
no es posible.El parámetro
Pragmas
contiene una lista de pragmas del compilador, que se insertarán antes de la declaración de las instancias FB del módulo.
La sección Standard_Task
define las tareas desde las cuales se ejecutarán las llamadas. Para esto están disponibles tres tareas estándar: LOW
, MEDIUM
, y HIGH
. Las definiciones de Standard_Task
son:
Name
: Nombre de tarea predeterminado que se definirá como asignación de tarea después de crear la instancia del módulo.Desc
: Identificador de la llamada de tarea. Esto debe ser breve y significativo (ejemplo:I/O task
).Flags
: Los siguientes valores se pueden combinar con el|
personaje:CREATE_IF_MISSING
: La tarea se creará si no existe.READONLY
: La asignación de tareas es de solo lectura y el usuario no puede cambiarla.UPDATE_IOS
: La tarea se utiliza para actualizar las E/S. Cada E/S puede ser sobrescrita por elUpdateInTask
parámetro en elIO
sección.NONE
: No hay ningún indicador establecido.
SEC Standard_Task : MEDIUM Name := MainTask ; Desc := TL.TaskMedium_Desc ; Flags := READONLY | CREATE_IF_MISSING ; END_SEC
Mediante el uso de la sección Custom_Task
un módulo puede definir una o más tareas personalizadas. El destino de la sección debe ser el nombre de un método del bloque de funciones del módulo. El método no debe tener argumentos (ni INPUT
, OUTPUT
, ni INOUT
).
Priority
: Define la prioridad de la tarea.Interval
: Define el intervalo de la tarea (constante de tipo de datos "TIME" o "LTIME").Flags
: Los siguientes valores se pueden combinar con el|
personaje:SHARED
: Por motivos de compatibilidad, este indicador todavía existe, pero siempre se supone implícitamente que está configurado. Básicamente significaría que si una tarea con las propiedades especificadas en elCustom_Task
La sección ya existe, se utilizará esta tarea. Pero debido a que se creará una nueva tarea si no existe ninguna tarea con propiedades coincidentes, esta bandera queda obsoleta. El nombre de la tarea creada esTASK_<ModuleInstanceName>_<MethodName>
.UPDATE_IOS
: La tarea se utilizará para actualizar las E/S que están conectadas a expresiones ST o directamente a las E/S del módulo.NONE
: No hay ningún indicador establecido.
No existe una implementación predeterminada en la clase de módulo para el método especificado.
SEC Custom_Task : Method1 Priority := 7 ; CycleTime := t#14ms ; Flags := NONE ; END_SEC
Sugerencia
Exactamente una tarea estándar o específica debe tener la UPDATE_IOS
conjunto de banderas.
Si existen tareas estándar que no tienen la
CREATE_IF_MISSING
conjunto de indicadores, debe existir una tarea con el nombre especificado y las propiedades de la configuración del generador. Si las propiedades no coinciden con la especificada, se muestra un mensaje de advertencia.Si existen tareas estándar, ¿cuál tiene la
CREATE_IF_MISSING
establecido el indicador, primero se genera una tarea con propiedades específicas. Ahora, cada vez que se cambia la configuración del generador para esta tarea, la tarea se adapta, sin ningún mensaje de advertencia.No se permiten tareas estándar de diferentes tipos que hagan referencia al mismo nombre de tarea. En este caso, no se emite ningún error.
Dependiendo del estándar configurado, se llaman los siguientes métodos al principio y al final de la tarea definida para cada instancia de nivel superior:
METHOD CallPrioHighStart: BOOL METHOD CallPrioHighEnd: BOOL METHOD CallPrioMediumStart: BOOL METHOD CallPrioMediumEnd: BOOL METHOD CallPrioLowStart: BOOL METHOD CallPrioLowEnd: BOOL
Cada módulo es responsable de llamar a sus instancias de submódulo. No se deben llamar referencias de submódulos. La implementación predeterminada en el FB. Module
llama a los métodos respectivos de todas las instancias de submódulos en el orden de su posición en el árbol de módulos.
Sugerencia
El puntero SUPER ofrece acceso a la instancia del bloque de funciones base. Por lo tanto, por ejemplo, la llamada SUPER^.CallPrioHighStart()
se puede utilizar para llamar al método Module.CallPrioHighStart()
si el bloque de funciones se extiende Module
. De esta manera, la implementación en Module
se asegurará de que se llamen todos los submódulos.