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_SECLos detalles sobre la sintaxis de los tipos de definición se describen en la sección Declaración del módulo.
GVL_Namedefine 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_Applicationdefine 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_POUPoolno es posible.El parámetro
Default_POUPooldefine 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_Applicationno es posible.El parámetro
Pragmascontiene 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 elUpdateInTaskparámetro en elIOsección.NONE: No hay ningún indicador establecido.
SEC Standard_Task : MEDIUM
Name := MainTask ;
Desc := TL.TaskMedium_Desc ;
Flags := READONLY | CREATE_IF_MISSING ;
END_SECMediante 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_TaskLa 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_SECSugerencia
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_MISSINGconjunto 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_MISSINGestablecido 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.