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.
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 diDefault_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 diDefault_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 daUpdateInTask
parametro nelIO
sezione.NONE
: Nessun flag è impostato.
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 fileCustom_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.
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.
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.