Skip to main content

Sezione: Livello superiore

I moduli che si trovano al primo livello dell'albero dei moduli sono chiamati moduli di primo livello. A differenza di altri moduli hanno metodi che possono essere richiamati direttamente da uno o più task. I moduli di primo livello contengono la sezione 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

I dettagli riguardanti la sintassi dei tipi di definizione sono descritti nella sezione Dichiarazione del modulo.

. Specifica:
  • GVL_Name definisce il nome del GVL in cui verrà dichiarata l'istanza del modulo e tutte le sue sottoistanze. Il segnaposto %Instancename% (L'ortografia maiuscola o minuscola non è rilevante), verrà sostituito dal nome dell'istanza del modulo.

  • Il parametro Default_Application definisce l'assegnazione dell'applicazione per tutte le istanze di questo modulo a un'applicazione specifica. Se è definito un'applicazione predefinita, l'uso di Default_POUPool non è possibile.

  • Il parametro Default_POUPool definisce l'assegnazione dell'applicazione per tutte le istanze di questo modulo al pool POU. Se è definito un pool POU predefinito, l'uso di Default_Application non è possibile.

  • Il parametro Pragmas contiene un elenco di pragma del compilatore, che verranno inseriti prima della dichiarazione delle istanze FB del modulo.

La sezione Standard_Task definisce le attività da cui verranno eseguite le chiamate. Per questo sono disponibili tre attività standard: LOW, MEDIUM, E HIGH. Le definizioni di Standard_Task Sono:

  • Name: nome dell'attività predefinito che verrà definito come assegnazione dell'attività dopo la creazione dell'istanza del modulo.

  • Desc: identificatore per la chiamata dell'attività. Dovrebbe essere breve e significativo (esempio: I/O task).

  • Flags: I seguenti valori possono essere combinati con | carattere:

    • CREATE_IF_MISSING: l'attività verrà creata se non esiste.

    • READONLY: l'assegnazione dell'attività è di sola lettura e l'utente non può modificarla.

    • UPDATE_IOS: l'attività viene utilizzata per aggiornare gli I/O. Ogni I/O può essere sovrascritto da UpdateInTask parametro nel IO sezione.

    • NONE: Nessun flag è impostato.

Esempio 17. Esempio
SEC Standard_Task : MEDIUM
        Name  := MainTask ;
        Desc  := TL.TaskMedium_Desc ;
        Flags := READONLY | CREATE_IF_MISSING ;
END_SEC


Utilizzando la sezione Custom_Task un modulo può definire una o più attività personalizzate. Il target della sezione deve essere il nome di un metodo del blocco funzione del modulo. Il metodo non deve avere argomenti (né INPUT, OUTPUT, né INOUT).

  • Priority: Definisce la priorità dell'attività.

  • Interval: Definisce l'intervallo dell'attività (costante del tipo di dati "TIME" o "LTIME").

  • Flags: I seguenti valori possono essere combinati con | carattere:

    • SHARED: Per ragioni di compatibilità, questo flag esiste ancora, ma si presuppone sempre implicitamente che sia impostato. Fondamentalmente significherebbe che se un'attività con le proprietà specificate nel file Custom_Task esiste già, verrà utilizzata questa attività. Ma poiché verrà creata una nuova attività se non esiste alcuna attività esistente con proprietà corrispondenti, questo flag viene reso obsoleto. Il nome dell'attività creata è TASK_<ModuleInstanceName>_<MethodName>.

    • UPDATE_IOS: L'attività verrà utilizzata per aggiornare gli I/O collegati alle espressioni ST o direttamente agli I/O del modulo.

    • NONE: Nessun flag è impostato.

Non esiste alcuna implementazione predefinita nella classe del modulo per il metodo specificato.

Esempio 18. Esempio
SEC Custom_Task : Method1
        Priority := 7 ;
        CycleTime := t#14ms ;
        Flags := NONE ;
END_SEC


Suggerimento

Esattamente un compito standard o specifico deve avere il file UPDATE_IOS set di bandiere.

. Alcune regole di base, come vengono generate le attività, devono essere menzionate qui:
  • Se esistono attività standard, che non hanno il file CREATE_IF_MISSING flag impostato, dovrebbe esistere un'attività con il nome e le proprietà specificati delle impostazioni del generatore. Se le proprietà non corrispondono a quella specificata viene visualizzato un messaggio di avviso.

  • Se esistono attività standard, che ha il file CREATE_IF_MISSING flag impostato, viene prima generata un'attività con le proprietà specificate. Ora, ogni volta che le impostazioni del generatore per questa attività vengono modificate, l'attività viene adattata, senza alcun messaggio di avviso.

  • Non sono consentite attività standard di tipo diverso che fanno riferimento allo stesso nome di attività. In questo caso non viene emesso alcun errore.

A seconda dello standard configurato, per ogni istanza di livello superiore vengono richiamati i seguenti metodi all'inizio e alla fine dell'attività definita:

METHOD CallPrioHighStart: BOOL
METHOD CallPrioHighEnd: BOOL
METHOD CallPrioMediumStart: BOOL
METHOD CallPrioMediumEnd: BOOL
METHOD CallPrioLowStart: BOOL
METHOD CallPrioLowEnd: BOOL

Ogni modulo è responsabile di chiamare le sue istanze di sottomodulo. I riferimenti ai sottomoduli non devono essere richiamati. L'implementazione predefinita nell'FB Module chiama i rispettivi metodi di tutte le istanze del sottomodulo nell'ordine della loro posizione nell'albero del modulo.

Suggerimento

Il puntatore SUPER offre l'accesso all'istanza del blocco funzione di base. Quindi ad esempio la chiamata SUPER^.CallPrioHighStart() può essere usato per chiamare il metodo Module.CallPrioHighStart() se il blocco funzione si estende Module. In questo modo, l'implementazione in Module si assicurerà che tutti i sottomoduli vengano richiamati.