Generatore di codice

La finestra Generatore di codice viene aperta automaticamente con i comandi "Verifica" e "Compila applicazione" delle finestre di lavoro di ISaGRAF. La finestra di generazione del codice non si chiude in modo automatico al termine dell'operazione; questo per permettere di avere ancora accesso a tutti i comandi ed alle opzioni previste per il compilatore e accessibili dai menù.

Comandi principali

Opzioni del compilatore

Produzione di codice sorgente C

Visualizzazione delle informazioni

Definizione delle risorse


Comandi principali

Il menu "File" contiene i comandi per la verifica della sintassi del programma e la generazione del codice.

Generazione del codice dell'applicazione

Controllo della sintassi del programma

Ricompilazione completa

Facendo doppio click su un messaggio di errore, il programma verrà aperto ed il cursore si posiziona sull'errore.


Generazione del codice dell'applicazione

Il comando "File / Compila" genera l'intero codice del progetto. Prima della generazione, il programma controlla la sintassi delle dichiarazioni e dei programmi. Ogni errore che non può essere rilevato durante la compilazione del singolo programma viene scoperto durante la generazione del codice. Questo vale per tavole di conversione, le connessioni di variabili I/O e i collegamenti con le librerie. Il Generazione di codice blocca la compilazione del programma quando vengono rilevati degli errori. Per poter procedere con la generazione del codice è necessario correggere il programma errato. I programmi che sono già stati controllati (ed in cui non si sono trovati errori) e che non sono stati modificati dopo la l'ultima operazione "Verifica" non vengono ricompilati. Vengono sempre eseguite la verifica delle dichiarazioni delle variabili ed il controllo di coerenza dell'applicazione. Durante il controllo del programma è possibile interrompere la procedura di compilazione premendo il tasto ESC.

Nota:	Se la dichiarazione di una variabile locale di un programma è stata modificata, solo tale programma verrà verificato. Se invece è stata modificata una variabile globale, verranno verificati tutti i programmi.


Controllo della sintassi del programma

Il comando "File / Verifica programma" consente di verificare un singolo programma. Il programma selezionato viene compilato anche se non è avvenuta alcuna modifica dopo l'ultima verifica. Il comando "File / Verifica dizionario" consente di verificare le dichiarazioni di tutte le variabili del progetto.

Il comando "File / Verifica tutti i programmi" controlla la sintassi di tutti i programmi del progetto anche se alcuni di essi non sono stati modificati. Questa procedura non si interrompe quando viene incontrato un errore in un programma. Produce un elenco completo di tutti gli errori presenti nei programmi del progetto.

E' possibile interrompere la verifica premendo ESC.


Ricompilazione completa

Il comando "File / Tocca" simula la modifica di tutti i programmi del progetto, in modo da forzarne la verifica alla successiva operazione "Compila". Il comando "File / Apri" apre l'ultimo programma su cui è stata effettuata la verifica. Questo comando si rivela molto utile per accedere direttamente ad un programma in cui siano stati rilevati degli errori di sintassi. Un doppio click sul messaggio di errore apre il programma e posiziona il cursore alla riga dell'errore.


Opzioni del compilatore

Il comando "Opzioni / Opzioni compilatore" permette di impostare i parametri principali usati dal Generatore di codice ISaGRAF per produrre ed ottimizzare il codice target. La finestra Opzioni compilatore permette di selezionare il tipo di codice da generare, a seconda dei target ISaGRAF, e di impostare i parametri di ottimizzazione per il tempo di compilazione ed i requisiti di esecuzione dell'applicazione.

Selezione del target

Elaborazione SFC

Opzioni dell'ottimizzatore

Il pulsante "Upload" (carica) apre una seconda finestra di dialogo con altre opzioni che permettono di aggiungere il codice sorgente zippato al codice scaricato sul target, per ulteriori informazioni su "Upload" riferirsi alla documentazione "Caricamento da targhet".


Selezione del target

In alto viene visualizzato l'elenco dei tipi di codice target che possono essere prodotti. Il segno ">>" indica i target selezionati. Il generatore di codice ISaGRAF è in grado di produrre fino a 3 diversi codici nella stessa sessione di compilazione. I pulsanti "Seleziona" e "Deseleziona" permettono di selezionare i codici target in relazione all'hardware target. Quelli che seguono sono i target standard ISaGRAF:

SIMULATE:	Questo tipo di codice si riferisce al Simulatore ISaGRAF dell'ambiente di debug. Non è possibile usare il simulatore (comando "Debug / Simulazione" dalla finestra Programmi) se il codice dell'applicazione non è stato prodotto selezionando anche il target SIMULATE.

ISA86M:	Questo codice TIC (Codice Target Indipendente) è per i kernel ISaGRAF installati su processori Intel. Il tipo di processore influisce sull'ordine di disposizione dei byte nel codice generato.

ISA68M:	Questo codice TIC (Codice Target Indipendente) è per i kernel ISaGRAF installati su processori Motorola. Il tipo di processore influisce sull'ordine di disposizione dei byte nel codice generato.

CC86M:	Con questo target il compilatore produce codice sorgente "C" che può essere compilato e collegato alle librerie del kernel del target ISaGRAF da incorporare nell'eseguibile.

Consultare il manuale dell'hardware per conoscere il tipo di kernel del target ISaGRAF installato sul PLC. Altri tipi di target (codice macchina, codice sorgente C…) potranno essere implementati nelle versioni successive dell'ambiente ISaGRAF.


Elaborazione SFC

Selezionando "Usa motore SFC incluso" nella finestra Opzioni compilatore si abilita l'uso del motore SFC di ISaGRAF. Questa modalità è da preferirsi, in quanto offre le migliori prestazioni in esecuzione. Tuttavia, il motore potrebbe risultare mancante in alcune particolari implementazioni del target ISaGRAF o, più comunemente, su target personalizzati basati su elaborazioni successive del codice ISaGRAF. In questo caso è necessario disabilitare questa opzione per permettere al compilatore ISaGRAF di tradurre i diagrammi SFC in istruzioni di basso livello. Consultare la documentazione hardware per ulteriori informazioni sull'uso di questa opzione.


Opzioni dell'ottimizzatore

Quelli che seguono sono i parametri, impostabili dalla finestra Opzioni compilatore, usati dal Generatore di codice ISaGRAF per ottimizzare il codice target.  Il pulsante "Predefinito" disabilita tutte le ottimizzazioni per ridurre il tempo di compilazione.

L'opzione "Esegui due passate dell'ottimizzatore" fa si che venga eseguito per due volte l'ottimizzatore di codice ISaGRAF. Le ottimizzazioni apportate nel secondo passaggio sono, generalmente, meno significative di quelle del primo passaggio.

Con l'opzione "Valuta espressioni costanti" le espressioni costanti vengono valutate dal compilatore. Ad esempio, l'espressione numerica "2 + 3" viene sostituita nel codice target da "5". Quando questa opzione non è indicata, le espressioni costanti vengono calcolate in fase di esecuzione.

L'opzione "Sopprimi le etichette non utilizzate" fa si che l'Ottimizzatore semplifichi la struttura di salti e etichette del programma eliminando le etichette destinazione non usate o i salti nulli.

L'opzione "Ottimizza la copia delle variabili" ottimizza l'uso delle variabili temporanee (usate per memorizzare risultati intermedi). Questa opzione viene comunemente usata assieme all'opzione "Ottimizza espressioni". In questo modo l'ottimizzatore è in grado di usare i risultati di espressioni e sottoespressioni usate più volte nel programma.

Con l'opzione "Sopprimi il codice non usato", l'ottimizzatore elimina le parti di codice non significative. Ad esempio, delle seguenti istruzioni: "var := 1; var := X;", verrà generato solo il codice corrispondente a: "var := X;".

Con l'opzione "Ottimizza le espressioni aritmetiche", l'ottimizzatore semplifica le operazioni aritmetiche nel caso di particolari operandi. Ad esempio, l'espressione "A + 0" viene sostituita da "A". Con l'opzione "Ottimizza le operazioni booleane", l'ottimizzatore semplifica le operazioni booleane nel caso di particolari operandi. Ad esempio, l'espressione booleana "A & A" viene sostituita da "A".

Con l'opzione "Costruisci diagrammi binari di decisione (BDD)", l'Ottimizzatore sostituisce le formule booleane (che combinano gli operatori AND, OR , XOR e NOT) con una lista ridotta di salti condizionati. La traduzione avviene solamente se il tempo di esecuzione previsto per la sequenza di salti risulta inferiore a quello previsto per l'espressione originale.

La seguente tabella riassume i tempi di compilazione rispetto ad ogni parametro di ottimizzazione:

guadagno (prestazioni)	tempo di compilazione

2 passaggi	xxxx	(*)

Espressioni costanti	xxxxxxxxxx	xxxx

Etichette non usate	xxxx	xxxxxxxxxx

Copia di variabili	xxxx	xxxxxxxxxx

Espressioni	xxxx	xxxxxxxxxx

Codice non usato	xxxx	xxxxxxxxxx

Operazioni aritmetiche	xxxxxxxxxx	xxxx

Operazioni booleane	xxxxxxxxxx	xxxx

Diagrammi binari decisionali	xxxxxxxxxxxxxxx	xxxxxxxxxxxxxxx

(*) il tempo di compilazione può anche raddoppiare.


Produzione di codice sorgente C

L'ambiente ISaGRAF permette la produzione di codice sorgente in linguaggio "C". In questo caso, tutti i componenti dell'applicazione, inclusi diagrammi SFC, definizioni di data base e sequenze di codice, vengono generati in formato codice sorgente "C". Ci sono due possibilità per la generazione di codice C:

CC86M (C source code - V3.04)	produce sorgente codice "C" non strutturato. Questa opzione deve essere selezionata se il software per il target è basato su una versione ISaGRAF precedente alla 3.23.

SCC (structured C source code)	produce sorgente codice "C" strutturato. Questa opzione è da preferire se il software per il target è basato su una versione ISaGRAF 3.23 o successiva.

I seguenti due file vengono creati nelle cartella del progetto:

APPLI.C	codice sorgente dell'applicazione

APPLI.H	definizioni del linguaggio "C"

Nel caso di generazione di codice sorgente "C" strutturato, per ogni programma dell'applicazione vengono creati un file sorgente ".C" e un file di definizioni ".H", oltre ai file comuni "APPLI.C" e "APPLI.H".

Questi file devono essere compilati e collegati alle librerie target ISaGRAF per poter produrre il codice eseguibile finale. Consultare la Guida Utente al sistema di sviluppo I/O ISaGRAF per ulteriori informazioni sulle tecniche di implementazione consigliate.

Nota:	Alcune possibilità offerte in fase di debug. come lo scaricamento dell'applicazione, modifiche on line e breakpoint, non sono disponibili quando l'applicazione ISaGRAF è stata compilata in "C".


Visualizzazione delle informazioni

Il menù "Modifica" della finestra Generatore di codice comprende i comandi per la visualizzazione, dei diversi file di testo prodotti in fase di generazione del codice o di controllo sintattico. Tutte le informazioni vengono memorizzate su disco così da poter essere esaminate con i comandi del menù

Comandi di editing

Il comando "Modifica / Cancella" serve a ripulire l'area di testo della finestra. La finestra viene ripulita automaticamente prima di ogni operazione di generazione di codice o controllo sintattico. Il comando " Modifica / Copia" permette di copiare il testo visualizzato negli appunti di Windows, così da poter essere usato da altre applicazioni come gli editor di testo ISaGRAF.

Visualizzare i messaggi di output del compilatore

Il comando "Modifica / Messaggi esecuzione" visualizza, nell'area di testo della finestra, tutti i messaggi prodotti dall'ultima operazione "Compila" o "Verifica". Riguarda tutti i messaggi di errore.

Altre voci del menù "Modifica" permettono di vedere i file di testo ausiliari prodotti durante la verifica sintattica e la generazione di codice. Questi file non vengono generalmente usati nel caso di un progetto comune ISaGRAF.


Definizione delle risorse

La voce "Risorse" del menù "Opzioni" permette di definire le risorse. Per risorsa si intende qualsiasi dato prodotto dall'utente (configurazioni di rete, impostazioni hardware…) in qualsiasi formato (file, elenco di valori) che debba essere unito al codice generato per poter essere trasferito al PLC target. Questi dati non vengono elaborati direttamente dal kernel ISaGRAF e sono comunemente rivolti ad altro software installato sul PLC target. Consultare il manuale hardware per ulteriori informazioni sulle risorse disponibili.

Il file di definizione delle risorse

Riferimenti al linguaggio

Esempio

Compilazione delle risorse

Implementazione


Il file di definizione delle risorse

Le risorse vengono definite in un "File di definizione delle risorse" memorizzato con gli altri file del progetto ISaGRAF. SI tratta di un file testo ASCII, che viene elaborato dal Compilatore di risorse ISaGRAF. Il compilatore viene avviato automaticamente nel momento in cui viene prodotto il codice dell'applicazione. In questa sezione viene esaminata la sintassi di questo file. Il file di definizione delle risorse fa uso delle regole lessicali del linguaggio ST. I commenti iniziano con i caratteri "(*" e terminano con "*)" e possono essere inseriti dovunque nel testo. Le stringhe sono delimitate da singoli apostrofi. Consultare la seconda parte di questo manuale per ulteriori spiegazioni sul formato lessicale in uso per l'inserimento di valori numerici.


Riferimenti al linguaggio

Quello che segue è un elenco di parole chiave ed istruzioni usate in un file di definizione delle risorse.

ULONGDATA

VARLIST

BINARYFILE

TEXTFILE

TARGET

ANYTARGET

FROM

TO


ULONGDATA

Significato:	Indica una risorsa costituita da un elenco di valori interi. I valori vengono memorizzati all'interno del codice del target  come interi a 32 bit senza segno. I valori vengono memorizzati nell'ordine specificato dal file di definizione delle risorse. I valori devono essere separati da virgole. Il nome della risorsa non può eccedere i 15 caratteri.

Sintassi:	ULONGDATA '<nome_risorsa>'

BEGIN

...selezione_target...

...elenco dei valori...

END

Esempio:	ULongData 'MYDATA'

Begin

...

0, -1, 100_000,	(* decimale*)

16#A0B1, 2#1011_0101	(* esadecimale, binario *)

End


VARLIST

Significato:	Indica una risorsa costituita da un elenco di indirizzi di variabili. Le variabili nel file di definizione delle risorse vengono identificate dal nome. Gli indirizzi di variabili vengono memorizzati nel codice del target come interi a 16 bit senza segno. Gli indirizzi vengono memorizzati nell'ordine specificato dal file di definizione delle risorse. I valori devono essere separati da virgole. Il nome della risorsa non può eccedere i 15 caratteri.

Sintassi:	VARLIST '<nome_risorsa>'

BEGIN

...selezione_target...

...elenco di nomi di variabili...

END

Esempio:	VarList 'LIST'

Begin

...

Var100, MyParameter, Command, Alarm

End


BINARYFILE

Significato:	Indica una risorsa costituita da un File Binario. I dati sorgente sono memorizzati in un file MS-DOS. La definizione delle risorse del target viene completata dal percorso del target. I caratteri end of line non vengono convertiti dal Compilatore di Risorse ISaGRAF. Il nome della risorsa non deve eccedere i 15 caratteri.

Sintassi:	BINARYFILE '<nome_risorsa>'

BEGIN

...selezione target...

FROM '<percorso_sorgente>'

TO '<percorso_destinazione>'

END

Esempio:	BinaryFile 'MYFILE'

Begin

...

From 'c:\user\config.bin'

To '/dd/user/appl/config.dat'

End


TEXTFILE

Significato:	Indica una risorsa costituita da un File Testo. I dati sorgente sono memorizzati in un file ASCII. La definizione delle risorse del target viene completata dal percorso del target. I caratteri end of line vengono convertiti dal Compilatore di Risorse ISaGRAF secondo le convenzioni del sistema host. Il nome della risorsa non deve eccedere i 15 caratteri.

Sintassi:	TEXTFILE '<nome_risorsa>'

BEGIN

...selezione target...

FROM '<percorso_sorgente>'

TO '<percorso_destinazione>'

END

Esempio:	TextFile 'MYFILE'

Begin

...

From 'c:\user\config.bin'

To '/dd/user/appl/config.dat'

End


TARGET

Significato:	Indica il nome del codice target in cui deve essere inclusa la risorsa. Consultare la precedente sezione (opzioni del compilatore) per ulteriori informazioni sui target possibili. L'istruzione "Target" può essere presente più volte all'interno dello stesso blocco di risorsa, per permettere più target. Non è possibile usare questa direttiva se è stato specificata la direttiva "AnyTarget".

Sintassi:	TARGET '<target_name>'

Esempio:	BinaryFile 'MYFILE'

Begin

Target 'ISA86M'

Target 'ISA68M'

...

End


ANYTARGET

Significato:	Indica che la risorsa deve essere aggiunta al codice di tutti i target prodotti dal Generatore di Codice. Il Generatore di Codice ISaGRAF può produrre molteplici codici target con un unico comando "Compila". Non è possibile usare questa direttiva se sono state inserite una o più direttive "Target".

Sintassi:	ANYTARGET

Esempio:	ULongData 'MYDATA'

Begin

AnyTarget

...

End


FROM

Significato:	Indica il percorso sorgente (sul PC in cui è installato l'ambiente ISaGRAF) di una risorsa BinaryFile o TextFile. I caratteri usati per separare i componenti del percorso (drive, cartella, prefisso, estensione) devono essere conformi al sistema MS-DOS.

Sintassi:	FROM '<percorso sorgente>'

Esempio:	BinaryFile 'MYFILE'

Begin

...

From 'c:\user\config.dat'

To '/dd/user/appl/config.dat'

End


TO

Significato:	Indica il percorso destinazione (sul sistema target) di una risorsa BinaryFile o TextFile. I caratteri usati per separare i componenti del percorso (drive, cartella, prefisso, estensione) devono essere conformi al sistema MS-DOS.

Sintassi:	TO '<percorso destinazione>'

Esempio:	TextFile 'MYFILE'

Begin

...

From 'c:\user\config.dat'

To '/dd/user/appl/config.dat'

End


Esempio

Quello che segue è un esempio completo di un file di definizione delle risorse:

(* file di definizione delle risorse *)

ULongData 'DATA1'	(* elenco di valori *)

Begin

   Target 'ISA86M'	(* solo per questo target *)

   1, 0, 16#1A2B3C4D, +1, -1	(* valori numerici *)

End

VarList 'VLIST1'	(* elenco di variabili *)

Begin

   Target 'ISA86M'	(*solo per questo target *)

   Valve1, StateX, Command, Alrm1	(* nomi di variabili *)

End

BinaryFile 'FILE1'	(* risorsa file binario *)

Begin

   AnyTarget	(* rivolto a tutti i target *)

   From 'c:\user\updatef.bin'	(* file sorgente sul PC *)

   To 'updatef.cfg'	(* file target sul PLC *)

End

TextFile 'FILE2'	(* risorsa file di testo *)

Begin

   Target 'ISA68M'

   From 'c:\nw\nwbd.txt'	(* file sorgente sul PC *)

   To '/nw/dat/nwbd'	(* file target sul PLC *)

End


Compilazione delle risorse

Se sono state inserite delle risorse nel file di definizione, in fase di compilazione viene avviato anche il compilatore delle risorse. Nel caso vengano rilevati degli errori nel file di definizione delle risorse, viene visualizzata una finestra nella quale è riportata la lista degli errori. Premendo "Exit" si abbandona la finestra ed in questo caso, le risorse non verranno aggiunte al codice ISaGRAF.


Implementazione

Il numero di risorse, la dimensione delle righe dati ed i file non sono limitati da ISaGRAF. Le risorse vengono aggiunte alla fine del codice generato con una cartella di risorse. Quello che segue è il formato (in notazione C) della cartella delle risorse.

__RESOURCE:

{

  long nbres;	/* numero di risorse definite */

  {

    char name[16];	/* nome risorsa */

    long type;	/* tipo di dati delle risorsa */

    long size;	/* dimensione del blocco dati */

    void *data;

    char *path_offset;	/* puntatore ad una stringa */

  } /*nb di records */

}

Quelli che seguono sono i possibili valori del campo "type":

1 = file binario

2 = file testo

3 = dati ulong (il campo path_offset in questo caso non viene usato)

4 = elenco di variabili (il campo path_offset in questo caso non viene usato)

Per i file di testo, i caratteri di fine riga vengono tradotti dal compilatore di risorse, secondo le convenzioni del sistema target. Tutti i puntatori hanno offset a 32 bit a partire dall'indirizzo della corrispondente struttura. Tutti i nomi e percorsi delle risorse sono stringhe terminate da NULL. Percorsi e dati seguono la cartella delle risorse.