Comando: Genera
Simbolo:
Questo comando (categoria "Compositore") avvia un processo di compilazione che genera automaticamente il file CODESYS applicazione dall'albero dei moduli e dalle impostazioni del file Configurazione del generatore.
I messaggi e gli errori verranno visualizzati nella vista messaggi.
Tutti gli oggetti creati dal generatore standard (eccetto gli oggetti attività e le applicazioni) verranno archiviati nella sottocartella dell'applicazione risp. Pool di POU denominato AC_Std
E AC_FBs
. Se esiste già una cartella con lo stesso nome, verrà creato un nome univoco aggiungendo un suffisso _0
.

Tutti gli oggetti creati da creare i comandi sono contrassegnati da un'icona blu in sovrimpressione. Se l'utente tenta di eliminare, spostare o modificare uno di questi oggetti si aprirà una finestra di dialogo che informa che questa azione potrebbe causare problemi di compilazione. Se l'utente continua, il colore dell'icona in sovrapposizione diventa rosso (vedere blocco funzione AC_PRG_RMP (PRG)
nello screenshot qui sopra).
Suggerimento
Se usi Application Composer insieme a CODESYS SVN:
Tutti gli oggetti generati da Composer sono contrassegnati con un Ignore on Commit
per SVN. Inoltre SVN passa alla modalità offline per evitare blocchi SVN mentre viene eseguito il comando Costruito.
Creazione di istanze di blocchi funzione tramite il generatore standard
Per ogni istanza del modulo verrà creato un blocco funzione (nella cartella AC_FBs
). Questo blocco funzione deriva dal blocco funzione del modulo.
Il blocco funzione contiene variabili di ingresso
Istanze di sottomodulo
Array di dimensioni configurabili
Variabili buffer delle connessioni I/O dirette
Array di multislot e riferimenti a istanze
Il nome della rispettiva variabile di array viene creato dal prefisso AC_ARRAY_
seguito dal nome della variabile della rispettiva variabile puntatore. Per gli array con dimensione dell'indice variabile (VarArray) il nome può essere sovrascritto dal parametro VarArray.InstName
.
La parte di implementazione del blocco funzione contiene il comando SUPER^();
che richiama la parte di implementazione del blocco funzione del modulo.
L'istanza del modulo ModuleInstanceA
è di tipo ModuleA
e relativo blocco funzione ModuleA_FB
. Questa istanza ha un'istanza di sottomodulo di tipo ModuleB
.
L'istanza del modulo ModuleInstanceA
è di tipo ModuleA
e relativo blocco funzione ModuleA_FB
. Questa istanza ha un'istanza di sottomodulo di tipo ModuleB
.
FUNCTION_BLOCK AC_ModuleInstanceA EXTENDS ModuleA_FB VAR_INPUT Inst_Sub1 : AC_ModuleInstanceB ; END_VAR
Il nome del blocco funzione viene creato dal percorso dell'istanza del modulo e dal prefisso AC_
.
Il nome della variabile dell'istanza del sottomodulo è creato da un prefisso seguito dal nome della rispettiva istanza del sottomodulo.
Ogni blocco funzione viene istanziato una volta, l'istanza FB del modulo di livello superiore direttamente nel GVL, il resto nei blocchi funzione corrispondenti delle istanze padre.
Per ogni istanza del modulo referenziato che si trova in un'altra applicazione, verrà creata esattamente un'istanza del blocco funzione dell'FB proxy in un GVL dell'istanza del modulo di riferimento. Il nome dell'istanza proxy è AC_PROXY_<InstanceName>
dove <InstanceName> è il nome dell'istanza di destinazione nell'altra applicazione.
A tutte le istanze del modulo vengono assegnati indirizzi univoci. Le istanze FB proxy vengono assegnate dagli indirizzi delle istanze del modulo nell'applicazione remota.
Il metodo IBaseInstance.Main
delle istanze proxy viene richiamato ciclicamente nel task di comunicazione.
Creazione dell'applicazione e chiamate di attività
Se un modulo viene assegnato a un'applicazione che non esiste, questa applicazione verrà creata.
Creazione di attività standard inesistenti
TASK_MODULE_HIGH
TASK_MODULE_MEDIUM
TASK_MODULE_LOW
La priorità e il tempo di ciclo delle attività vengono impostati in base alle impostazioni del generatore. Inoltre verranno create attività specifiche del modulo con le impostazioni specificate.
Creazione di un elenco di variabili globali per livello superiore. In questo GVL verranno create le istanze del modulo che si trovano sotto le istanze del modulo di livello superiore della stessa applicazione. L'elenco delle variabili globali ha il nome definito nel modulo o, se non ha un nome definito, otterrà il nome
GVL_MODULE
. Il GVL si trova sotto l'applicazione selezionata o nell'albero POU globale.Creazione di un GVL con il nome
GVL_ MODULE_TREE
per ogni applicazione. Questo elenco contiene variabili per gestire l'albero dei moduli. Il GVL verrà creato nella cartellaAC_Std
.Creazione del codice di inizializzazione che viene richiamato automaticamente al momento del download e della modifica online:
Verrà creata la struttura ad albero.
Verranno impostati i valori dei parametri.
Verranno assegnati riferimenti e istanze di sottomodulo.
Verranno riempiti gli array con dimensione variabile.
Verranno impostati i riferimenti alle istanze.
Durante il download verranno impostati solo i parametri che non sono impostati sul loro valore predefinito. Durante la modifica online verranno impostati tutti i parametri. Le POU verranno create nella cartella
AC_Std
.Per ciascun punto di ingresso definito a
PROGRAM
Verrà creata la POU (linguaggio ST) che contiene le chiamate dei moduli di primo livello. La chiamata di questa nuova POU verrà aggiunta sotto l'attività. Nel caso dell'attività standard i nomi delle POU sono:MODULE_CALL_<TASKNAME>_START
MODULE_CALL_<TASKNAME>_END
Le POU verranno create nella cartella
AC_Std
.Per i moduli di primo livello in POU pool le chiamate alle attività verranno create in tutte le applicazioni.
Creazione dell'assegnazione I/O
A seconda del tipo di assegnazione degli I/O verranno eseguite le seguenti azioni:
[Canale I/O]: nel canale del dispositivo corrispondente verrà aggiunto il nome dell'istanza degli I/O dell'istanza del modulo.
[Espressione ST]: le assegnazioni delle espressioni agli input o degli output alle espressioni saranno per tutte le istanze del modulo sotto la stessa istanza di livello superiore. Se sono presenti assegnazioni corrispondenti, per ciascuna istanza di livello superiore viene assegnata una funzione denominata
AC_Io_SetInputs_<instance name>
OAC_Io_SetOutputs_<instance name>
verrà creato.
L'attività che definisce input e output sarà identificata dal flag
UPDATE-IOS
nella descrizione del modulo. Questa attività verrà chiamata "attività I/O" nella seguente descrizione.La funzione per gli ingressi verrà chiamata nel task I/O prima che venga chiamato il metodo del task dell'istanza del modulo. (Se il task I/O è un task standard, prima del metodo di avvio.) La funzione per le uscite verrà richiamata nel task I/O dopo il metodo del task dell'istanza del modulo. (Se l'attività I/O è un'attività standard, dopo il metodo finale.)
[Connessione diretta agli I/O del modulo, locale]: una variabile buffer di tipo compatibile verrà creata nel blocco funzione dell'istanza dell'ingresso. Il nome della variabile buffer inizia con il prefisso
AC_Io_Buffer_
.Le variabili del buffer verranno inizializzate sui valori correnti delle uscite collegate durante l'inizializzazione dell'applicazione. Il generatore gestisce le assegnazioni di input e output come un'assegnazione ST a questa variabile buffer (vedere [Espressione ST].
[Connessioni dirette all'I/O del modulo, remoto]: per ciascuna uscita collegata a un ingresso di un'istanza del modulo da un'altra applicazione, verrà creata una variabile buffer di tipo compatibile nella corrispondente rete di invio GVL. Il nome della variabile buffer inizia con il prefisso
AC_RemoteIo_Buffer_
e sarà costruito dal percorso dell'istanza e dal percorso variabile dell'output. Le variabili buffer verranno inizializzate con l'espressione di inizializzazione della variabile di output, se esiste. Se il valore di questa espressione di inizializzazione non è contenuto nelle informazioni di precompilazione (perché l'espressione utilizza ad esempio: variabili, funzioni e costanti), viene creato un errore.Il generatore gestisce l'assegnazione dell'output come un'assegnazione a questa variabile buffer. L'assegnazione dell'ingresso nell'altra applicazione viene gestita come un'assegnazione dalla variabile corrispondente nel ricevitore NVL (vedi [Espressione ST]).
Nota: la sincronizzazione tra il task in cui la variabile di rete verrà aggiornata e il task I/O del modulo non è ancora stata realizzata. Pertanto è possibile che i valori siano stati scritti in modo incompleto mentre il task I/O li legge.
Creazione dell'infrastruttura di comunicazione
Definizione: nella seguente descrizione l'applicazione A1 invia all'applicazione A2 (o A2 riceve da A1) se sono soddisfatte le seguenti condizioni:
Un'istanza del modulo assegnata all'applicazione A1 fa riferimento a un'istanza del modulo assegnata all'applicazione A2 o viceversa.
Un'uscita di un'istanza del modulo assegnata ad A1 è collegata a un'istanza del modulo assegnata ad A2 mediante una connessione I/O diretta del modulo.
Tutti gli oggetti menzionati di seguito verranno creati nella cartella AC_RMP
per ogni applicazione creata dal generatore.
Verrà creata un'attività di comunicazione. (Tempo di ciclo e priorità in base alle impostazioni della configurazione del generatore). In questa attività verranno chiamate le istanze proxy e verranno lette le variabili FB proxy del modulo mirrorato. scritto.
Per ciascuna applicazione che invia all'applicazione corrente, verrà creato un GVL (di invio) e verranno definite le impostazioni di rete. (Protocollo "UDP", trasmissione ciclica, checksum, tempo di ciclo secondo le impostazioni, compito di comunicazione). L'"identificatore della lista" che deve essere un valore intero compreso tra 1 e 2^15-1 verrà determinato in modo casuale all'inizio della generazione e incrementato di 1 dopo ogni invio GVL. Questo valore è almeno 128 ed è compreso nell'intervallo valido. Se sono presenti riferimenti a moduli tra le applicazioni una variabile di tipo
RMPExchangeData
verrà creato nel GVL. Il nome della variabile contiene il nome dell'applicazione sorgente e di destinazione. Se un'istanza del modulo definisce le variabili nella sua definizione proxy di cui eseguire il mirroring (MirrorVar
) ed è referenziato da un'altra istanza del modulo, per ciascuna di queste MirrorVars verrà creata una variabile nel GVL (di invio) dell'istanza del modulo a cui si fa riferimento. Il suo nome contiene il percorso dell'istanza del modulo e il TargetID della corrispondente definizione "MirrorVar".Per ciascuna applicazione A2, a cui invia l'applicazione corrente, verrà creata una NVL (di ricezione) e collegata al corrispondente GVL di invio di A2 e all'attività di comunicazione.
Un blocco funzione di tipo
RMPService
verrà istanziato inGVL AC_RMP
e inizializzato nella dichiarazione (con attributoinit_on_onlchange
). Due matrici di tipoRMPConnection
verranno creati che fanno riferimento alle variabili di tipo createRMPExchangeData
nelle GVL e nelle NVL.Un programma
AC_PRG_RMP
verrà creato il blocco funzione di tipoRMPService
. Questo programma verrà aggiunto all'attività di comunicazione. Inoltre il valore delle variabili specchiate ("MirrorVars") verrà impostato e letto nel fileAC_PRG_RMP
programma. Ciò significa che il proxy "MirrorVars" verrà assegnato alle variabili corrispondenti del GVL (di ricezione). Poi ilMain
viene chiamato il metodo dell'istanza proxy e infine le variabili corrispondenti del GVL (mittente) del modulo "MirrorVars". Ciò avviene in base alla direzione di invio delle istanze del modulo ai proxy.