Skip to main content

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.

. Especificación:
  • 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 de Default_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 de Default_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 el UpdateInTask parámetro en el IO sección.

    • NONE: No hay ningún indicador establecido.

ejemplo 17. Ejemplo
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 el Custom_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 es TASK_<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.

ejemplo 18. Ejemplo
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.

. Aquí se mencionarán algunas reglas básicas sobre cómo se generan las tareas:
  • 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.