Simulazione di un progetto

Il simulatore di kernel ISaGRAF viene avviato dal debugger con il comando "Simulazione" del menu "Debug" della finestra di Gestione Programmi. Il simulatore di kernel è costituito da un completo sistema target ISaGRAF in grado di supportare le peculiarità standard ISaGRAF e tutte le funzioni e blocchi funzione "C" della libreria standard fornite dalla CJ International. Le schede I/O vengono simulate graficamente in una finestra. è possibile simulare qualsiasi tipo di scheda I/O, anche le schede definite come "Virtuali" durante la connessione I/O.

Collegamenti con il debugger

Simulazione I/O

Componenti della libreria

Opzioni

Il simulatore ISaGRAF include anche potenti strumenti per la simulazione e la diagnostica di un'applicazione:

Salvataggio e ripristino degli stati di ingresso

Profiler dei tempi di ciclo

Script di simulazione


Collegamenti con il debugger

Il simulatore di kernel supporta la completa comunicazione con il debugger ISaGRAF, in modo da poter usare anche in simulazione tutte le possibilità offerte dal debugger. Il simulatore di kernel funziona sempre con il progetto ISaGRAF corrente. Durante la simulazione i comandi del debugger "Ferma applicazione", "Avvia applicazione", "Scarica applicazione" e "Aggiornamento applicazione" non sono disponibili. Non è possibile usare il simulatore se non è stato selezionato il target "SIMULATE" nelle opzioni del compilatore durante la generazione del codice target. La chiusura della finestra del simulatore implica che anche la finestra Debugger (assieme a qualsiasi altra finestra ISaGRAF aperta durante la sessione di debug) venga chiusa..


Simulazione I/O

Le schede di I/O appaiono nella finestra del simulatore indicate da nome e numero di alloggiamento. Può essere gestito qualsiasi tipo di I/O (booleano, analogico o di messaggio). I canali delle schede di input vengono visualizzati con tasti e campi speciali. I canali delle schede di output sono visualizzati con led grafici di stato e campi dati.

 	Ingressi booleani: Un ingresso di tipo booleano viene rappresentato da un pulsante quadrato verde. Il numero di canale viene visualizzato con il pulsante di I/O. Il valore di ingresso è "TRUE" quando il pulsante è premuto. Premendo il pulsante si modifica il corrispondente valore della variabile di I/O. Il tasto di destra del mouse permette di impostare l'ingresso solamente quando è premuto il pulsante.

 	Uscite booleane: Un uscita di tipo booleano viene rappresentata da un piccolo cerchio. Il numero di canale viene visualizzato con il pulsante di I/O. Il valore di uscita è "TRUE" quando il simbolo grafico è evidenziato.

 	Ingressi analogici: Un canale di ingresso analogico è un semplice campo numerico nel quale è possibile inserire il valore dell'ingresso corrispondente. Con un click sulla casella appare il cursore ed è possibile inserire un nuovo valore per il canale. Non è necessario usare il tasto INVIO dopo l'inserimento. Gli ingressi analogici possono essere inseriti sia in base decimale che esadecimale. Per aumentare o ridurre il valore corrente si possono usare le frecce su/giù.

 	Uscite analogiche: Un uscita analogica viene rappresentata da un campo numerico di uscita. Il valore di uscita può essere visualizzato sia in formato decimale che esadecimale. Non è possibile agire in alcun modo su un campo di uscita.

 	Ingressi di tipo messaggio: Un canale di ingresso di tipo messaggio è rappresentato da un semplice campo testo, in cui è possibile inserire il valore dell'ingresso corrispondente. Un click sulla casella fa apparire il cursore ed è possibile inserire un nuovo valore per il canale. Non è necessario usare il tasto INVIO dopo l'inserimento.

 	Uscite di tipo messaggio: Un canale di uscita di tipo messaggio è rappresentato da un campo di testo. Non è possibile agire in alcun modo su un campo di uscita.


Componenti della libreria

Il simulatore ISaGRAF supporta in modo completo le conversioni, funzioni e blocchi funzione standard fornite dalla CJ International. Di seguito è riportata la lista degli oggetti.

 Funzioni di conversione:

bcd, scale

 Funzioni:

abs, acos, ArCreate, ArRead, ArWrite, ascii, asin, atan, char, cos, delete, expt, find, insert, left, limit, log, max, mid, min, mlen, mod, mux4, mux8, odd, rand, replace, right, rol, ror, sel, shl, shr, sin, sqrt, tan, trunc

 Blocchi funzione:

average, blink, cmp, ctd, ctu, ctud, derivate, f_trig, hyster, integral, lim_alrm, r_trig, rs, sema, sr, stackint, tof, ton, tp

Le conversioni, le funzioni ed i blocchi funzione "C" definiti dall'utente non sono normalmente integrati nel simulatore ISaGRAF. Normalmente questo tipo di oggetti viene progettato per usare le risorse software ed hardware del sistema destinazione. Risorse che non sono, normalmente, disponibili in ambiente Windows. Il simulatore ISaGRAF, nel caso di conversioni, funzioni o blocchi funzione definiti dall'utente, adotta il seguente comportamento standard:

-	Una nuova conversione elaborata dal simulatore, viene sostituita dalla conversione "nulla". Questo significa che il valore fisico delle variabili analogiche è sempre uguale al valore elettrico (come inserito o visualizzato nel pannello del Simulatore).

-	Una nuova funzione o blocco funzione "C" elaborata dal simulatore non esegue alcuna operazione. Il valore risultante non viene assegnato.


Opzioni

I comandi del menu "Opzioni" nel pannello del simulatore permettono di controllare la visualizzazione degli I/O. E' possibile impostare o rimuovere queste opzioni in qualsiasi momento della fase di debug.

 L'opzione "Display a colori" visualizza i canali I/O con bitmap a colori. Su schermi LCD che non permettono di distinguere i colori, è bene disabilitare questa opzione per visualizzare i simboli grafici di input ed output dei canali I/O in bianco e nero.

 L'opzione "Nomi di variabili" visualizza una barretta accanto ad ogni canale I/O con il nome della variabile I/O connessa. Disabilitando questa opzione si riduce la dimensione del pannello del simulatore.

 L'opzione "Valori esadecimali" permette di vedere od inserire i canali analogici di input o output in formato esadecimale.

 Con l'opzione "Sempre in primo piano" la finestra del simulatore è sempre visibile, anche se il focus è su una diversa finestra.


Profiler dei tempi di ciclo

Il profiler dei tempi di ciclo ISaGRAF è un potente strumento di diagnostica che mostra come sono distribuiti i tempi di ciclo tra i vari programmi, funzioni e blocchi funzione di un applicazione. Questo strumento è molto utile per avere una veloce diagnosi delle prestazioni di un'applicazione, e permette al programmatore di individuare le parti di codice che possono aver bisogno di un ottimizzazione.

Il profiler dei tempi di ciclo viene eseguita con il comando "Strumenti / Profiler tempi di ciclo" della finestra del simulatore ISaGRAF. Per ogni programma, funzione o blocco funzione, viene mostrata la percentuale di tempo di ciclo spesa per eseguirlo:

Quando viene impostata l'opzione "Visualizza / Media", le informazioni visualizzate rappresentano una media delle percentuali calcolate dopo che l'applicazione è stata avviata, oppure dall'ultima volta che è stato dato il comando "Visualizza / Reset".

Se l'opzione "Visualizza / Media" non è impostata, le informazioni visualizzate rappresentano misurazioni eseguite durante l'esecuzione dell'ultimo ciclo. Si può utilizzare questa opzione anche quando l'applicazione viene simulata in modo "Ciclo per ciclo" per avere un insieme di misurazioni che dipendono dal contesto dell'applicazione.

Il comando "Visualizza / Copia" copia i nomi del programma e le percentuali negli appunti di Windows in formato ASCII. I dati possono quindi essere incollati in documenti testo o fogli di lavoro.

Note importanti:

Queste misurazioni non sono precise. Il calcolo della percentuale è basato sul conteggio dei TIC delle istruzioni, tenendo in considerazione i tempi di esecuzione delle varie istruzioni. Il calcolo non include il tempo speso dalle funzioni "C" e dai blocchi funzione.

Il valore mostrato per una funzione o un blocco funzione è la somma di tutti i "tempi di chiamata" prodotti dai programmi dell'applicazione nello stesso ciclo.

Il calcolo dei tempi è basato sul codice TIC e non fornisce informazioni affidabili se l'attuale codice dell'applicazione è generato nel linguaggio "C" e compilato usando un compilatore "C".


Simulazione di script
Script di simulazione

Il simulatore ISaGRAF include uno strumento per costruire ed eseguire degli script di simulazione. Uno script è descritto con un semplice linguaggio simile al linguaggio ST, ed è utilizzato per automatizzare i test con il simulatore ISaGRAF.

Modifica degli script

Esecuzione degli script

Linguaggio per la descrizione degli script

L'editor degli script di simulazione viene eseguito con il comando "Strumenti / Script di simulazione" dalla finestra del simulatore. Di seguito è riportata la finestra dell'editor di script:

La finestra superiore è un editor testuale dove vengono immesse le istruzioni dello script . Viene utilizzata come le altre finestre di editor testuali in ISaGRAF ed include caratteristiche di alto livello, come ad esempio la selezione del simbolo di una variabile con il mouse. Si possono utilizzare i comandi del menù "Opzioni" per impostare l'intervallo di tabulazione e selezionare il font di caratteri.

La finestra in basso mostra tutti i messaggi di uscita mentre lo script stà funzionando. La linea di separazione tra le finestre può essere liberamente spostata per ridimensionare le finestre. La finestra di uscita può essere nascosta durante l'editazione dello script, ma viene automaticamente aperta ogni volta che uno script viene eseguito.


Modifica degli script

Usare i comandi del menù "File" per gestire i file script:

Nuovo	crea un nuovo script senza titolo

Apri	carica uno script esistente da file

Salva	salva il testo dello script e il contenuto della finestra di uscita sul disco,

nella cartella del progetto

Salva con nome	salva lo script con un altro nome

Per ogni script vengono creati due file nella cartella del progetto ISaGRAF:

<nomescript>.SCC	testo dello script (istruzioni)

<nomescript>.SCO	contenuti della finestra di uscita

dove <nomescript> è il nome dello script. Entrambi i file sono file di testo standard e possono essere aperti utilizzando un qualsiasi editor di testi.

 Mentre si edita uno script, si può utilizzare il comando "Modifica / Inserisci simbolo" per selezionare il nome di una variabile dichiarata da inserire nella posizione corrente.


Esecuzione degli script

Gli script devono essere controllati e compilati prima di essere eseguiti. Se necessario, un controllo sintattico viene eseguito automaticamente con un comando "Esegui script". Usa i seguenti comandi del menù "Script":

Verifica	verifiva la sintassi e compila lo script

Esegui script	inizia l'esecuzione dello script corrente

Nel caso di un nuovo script senza titolo, questo deve essere salvato (deve essere immesso un nome) prima di verificarne la sintassi. Nel caso lo script abbia già un nome, viene automaticamente salvato su disco prima di verificarne la sintassi.

Quando uno script viene eseguito, il suo contenuto non può essere cambiato. Quando è raggiunta la fine dello script, viene mostrato un messaggio. E' anche possibile abbandonare l'esecuzione di uno script usando il seguente comando del menù "Script":

Termina Script	termina l'esecuzione dello script

L'esecuzione dello script avviene durante i cicli target. Nel caso di un loop infinito programmato nel ciclo, il simulatore ISaGRAF assicura che questo loop sia sempre interrotto in modo che i cicli ISaGRAF sono sempre eseguiti e le altre applicazioni ISaGRAF non sono bloccate. L'interprete ISaGRAF degli script decide di interrompere l'esecuzione di uno script, se la stessa "etichetta" viene incontrata più di una volta nello stesso ciclo del target. L'esecuzione dello script può essere normalmente interrotta dalle istruzioni "Cycle" o "Wait".


Linguaggio per la descrizione degli script

Il linguaggio di descrizione degli script è un linguaggio testuale molto semplice simile al linguaggio ST, ma nel quale ogni istruzione viene immessa su una linea di testo separata, e non necessita di essere terminata da un punto-e-virgola. Usare il seguente pulsante della barra strumenti della finestra Simulazione di script per visualizzare la lista delle istruzioni disponibili e per inserire una delle parole chiave nella posizione corrente:

inserisce istruzione (Parola chiave e commento di aiuto)

Ci sono vari tipi di istruzioni. La prima è l'assegnazione (forzatura) di una variabile:

:=	simbolo di assegnazione

Altre istruzioni permettono di inviare messaggi alla finestra di uscita (quella in basso):

Print	Istruzione di stampa

PrintTime	Istruzione di stampa del tempo corrente

Altre istruzioni sono utilizzate per sincronizzare lo script con il ciclo ISaGRAF:

Cycle	Istruzione di sospensione per un ciclo

Wait	Istruzione di attesa

Altre istruzioni sono utilizzate per controllare il flusso di esecuzione dello script:

Etichette

Goto	Istruzione di salto incondizionato

If goto	Istruzione di salto condizionato

End	Istruzione di fine script

Il linguaggio script non fa distinzione tra lettere maiuscole e minuscole (non è case sensitive). Commenti possono essere posti alla fine di ogni linea di testo. I commenti possono essere scritti in accordo con le convenzioni ST (tra i caratteri "(*" e "*)"), o preceduti da un carattere ";".


Simbolo di assegnazione ":="

Significato:	Forza il valore di una variabile ISaGRAF, che può essere una variabile interna, un canale di ingresso o un canale di uscita.

Sintassi:	<nomevar> := <espressione_costante>

<nomevar > = < espressione_costante>

Argomenti:	<nomevar > è un simbolo valido di una variabile dichiarata nell'applicazione, o una variabile I/O direttamente rappresentata utilizzando le convenzioni di scrittura "%".

< espressione_costante> è un'espressione costante valida, che corrisponde al tipo di variabile specificato. Per il tipo booleano, si possono usare "0" e "1" invece di "FALSE" (falso) e "TRUE" (vero). Per i timer, il prefisso "T#" o "TIME#" può essere omesso.

Note:	Una variabile di ingresso forzata con uno script non necessita di essere bloccata. Quando una variabile di ingresso è forzata da uno script, viene aggiornata la rappresentazione (disegno) dell'input corrispondente.

Attenzione: non forzare le variabili analogiche di ingresso o di uscita collegate ad una conversione, poiché l'esecuzione di script non supporta le funzioni o le tabelle di conversione.

Esempio:	MyBooVar := 1         (* lo stesso di VERO *)

MyIntVar := 1234

MyRealVar := 1.2345

MyMsgVar := 'Ciao'

MyTmrVar := t#12s


Istruzione di stampa

Significato:	Scrive una stringa o il valore di una variabile nella finestra di uscita. Il testo è riportato su una nuova riga alla fine del testo precedentemente scritto nella finestra di uscita.

Sintassi:	Print '<testo>'

Print <nomevar>

Argomenti:	<testo> è una qualsiasi stringa di testo racchiusa tra singoli apici

<nomevar > è un simbolo valido di una variabile dichiarata nell'applicazione, o una variabile I/O direttamente rappresentata utilizzando le convenzioni di scrittura "%".

Note:	I valori delle variabili riportati in uscita sono formattati in accordo con le convenzioni IEC.

Esempio:	Print 'Ciao'

Print MyBooVar

Uscita:	Ciao

MyBoovar = TRUE


Istruzione di stampa del tempo corrente

Significato:	Scrive il tempo corrente nella finestra di uscita. Il testo è riportato su una nuova riga alla fine del testo precedentemente scritto nella finestra di uscita.

Sintassi:	PrintTime

Note:	La stampa del tempo è formattata in accordo con la corrente impostazione del sistema Windows

Esempio:	Print 'Sono le ore:'

PrintTime

Uscita:	Sono le ore:

15:45:22


Istruzione di sospensione per un ciclo

Significato:	Sospende l'esecuzione dello script fino a quando il prossimo ciclo ISaGRAF viene eseguito.

Sintassi:	Cycle

Note:	Le istruzioni script sono eseguite all'inizio di un ciclo ISaGRAF. Se il simulatore è in modalità "Ciclo per ciclo", l'istruzione "cycle" viene immediatamente seguita da un ciclo. Le istruzioni successive dello script verranno eseguite al prossimo comando "Esegui un ciclo" dalla finestra Debugger.

Esempio:	(* il programma ISaGRAF copia A in B *)

A := 0

Cycle

Print B

A := 1

Print B (* non viene eseguito il ciclo / B non è impostato a 1 *)

Cycle

Print B

Uscita:	B = 0

B = 0

B = 1


Istruzione di attesa

Significato:	Sospende l'esecuzione di uno script fino e quando non è trascorso un certo ritardo

Sintassi:	Wait <ritardo>

Argomenti:	< ritardo> è un ritardo in accordo con le convenzioni IEC per le espressioni costanti temporali. Il prefisso "T#" o "TIME#" può essere omesso. Il valore del ritardo deve essere compreso tra 10 millisecondi e 1 ora.

Note:	L'accuratezza dell'istruzione "Wait" non è precisa e dipende dal sistema Windows. Inoltre, tale ritardo deve essere considerato con un'accuratezza di più o meno un ciclo ISaGRAF.

Quando viene raggiunta un'istruzione "Wait", prima di proseguire nell'esecuzione dello script, vengono eseguiti dei cicli ISaGRAF fino a quando è trascorso il tempo di ritardo.

Esempio:	PrintTime

Wait 2s

PrintTime

Uscita:	15:45:27

15:45:29


Etichette

Significato:	Le etichette possono essere posizionate in qualunque parte dello script. Sono utilizzate come una destinazione per le istruzioni "Goto" e permettono il controllo del flusso di esecuzione dello script.

Sintassi:	<nomeetichetta>:

Argomenti:	< nomeetichetta > nome unico in accordo con le convenzioni ISaGRAF per la denominazione delle variabili: limitazione a 16 caratteri, inizio con una lettera, seguita da lettere, cifre numeriche o caratteri di underscore. Quando viene definito, il nome di etichetta deve essere seguito dal carattere ":".

Note:	Nessuna istruzione deve essere posta sulla linea dove è definita una etichetta.

Il nome di un etichetta non deve essere lo stesso di un simbolo di variabile ISaGRAF già dichiarata.

Esempio:	(* esempio di uno script con un loop infinito*)

loop:

PrintTime

Wait 1s

Goto loop


Istruzione di salto incondizionato

Significato:	Salto incondizionato ad un'etichetta

Sintassi:	Goto <nomeetichetta>

Argomenti:	<nomeetichetta> è il nome di un'etichetta definita nello script.

Note:	Sono permessi salti all'indietro. Nel caso di un loop infinito, l'esecuzione dello script viene automaticamente interrotta ad ogni loop per preservare l'esecuzione dei cicli ISaGRAF.

Esempio:	Print 'Prima del salto'

Goto MyLabel

Print 'Con il salto' (* istruzione mai eseguita *)

MyLabel:

Print 'Dopo il salto'

Uscita:	Prima del salto

Dopo il salto


Istruzione di salto condizionato

Significato:	Salto condizionato ad un'etichetta. La condizione è il risultato della comparazione tra due variabili ISaGRAF, oppure tra una variabile e un'espressione costante.

Sintassi:	If <var1> test <var2> Goto < nomeetichetta>

If <var1> test <espressione_costante> Goto <nomeetichetta>

I test di comparazione disponibili sono::

=	vero se entrambi i membri hanno lo stesso valore

<>	vero se i membri hanno valori differenti

<	vero se il primo membro è minore del secondo

<=	vero se il primo membro è minore o uguale del secondo

>	vero se il primo membro è maggiore del secondo

>=	vero se il primo membro è maggiore o uguale del secondo

Argomenti:	<var1> <var2> sono simboli validi di variabili dichiarate nell'applicazione, variabili I/O direttamente rappresentate utilizzando le convenzioni di scrittura "%".

< espressione_costante> è un'espressione costante valida, che corrisponde al tipo di variabile specificato. Per il tipo booleano, si possono usare "0" e "1" invece di "FALSE" (falso) e "TRUE" (vero). Per i timer, il prefisso "T#" o "TIME#" può essere omesso.

<nomeetichetta> è il nome di un'etichetta definita nello script.

Note:	Sono permessi salti all'indietro. Nel caso di un loop infinito, l'esecuzione dello script viene automaticamente interrotta ad ogni loop per preservare l'esecuzione dei cicli ISaGRAF.

Esempio:	(* Questo script itera finché MyVar vale TRUE *)

Loop:

If MyVar = TRUE Goto TheEnd

Print MyVar

Goto Loop

TheEnd:


Istruzione di fine script

Significato:	Termina lo script

Sintassi:	End

Note:	Non è obbligatorio porre un istruzione "End" nell'ultima riga dello script

Esempio:	(*Questo script itera finché MyVar vale TRUE *)

Loop:

If MyVar = FALSE Goto Continue

End

Continue:

Print MyVar

Goto Loop


Salvataggio e ripristino degli stati di ingresso

Utilizzando il simulatore ISaGRAF, i canali di ingresso sono forzati attraverso operazioni manuali, agendo sui pulsanti di commutazione e sui controlli del pannello di simulazione. In ogni momento si possono usare i seguenti comandi del menù "Strumenti" per salvare e ripristinare lo stato di tutti i canali di ingresso:

Carica stato ingressi	Imposta i valori dei canali di ingresso con i valori memorizzati in un file che è stato creato su disco usando il comando "Carica stato ingressi".

Salva stato ingressi	Salva lo stato dei canali di ingresso in un file di modo che sia possibile ripristinarli successivamente utilizzando il comando "Carica stato ingressi". Il file è memorizzato nella cartella del progetto e viene salvato assieme agli altri file dall'utilità di archiviazione di ISaGRAF.

Nota: Solo i canali di ingresso con un nome (quelli che hanno una variabile connessa) sono salvati sul disco.