Le variabili sono entità il cui valore non è noto durante la scrittura di un programma e normalmente varia durante l'esecuzione dello stesso.
I tipi di dato utilizzati dal linguaggio R3 sono:
Tipo |
Descrizione |
---|---|
Variabile intera a 8 bit con segno |
|
Variabile intera a 16 bit con segno |
|
Variabile intera a 32 bit con segno |
|
Variabile intera a 8 bit senza segno |
|
Variabile intera a 16 bit senza segno |
|
Variabile intera a 32 bit senza segno |
|
Variabile intera a 32 bit (è come I32) |
|
Variabile floating point 4 Byte |
|
Variabile floating point 8 Byte (double) |
|
Variabile booleana |
|
Variabile di tipo char (è come I8) |
|
Variabile di tipo struttura |
|
Variabile di tipo struttura packed (i dati sono contigui, occupa meno spazio) |
|
Variabile di tipo stringa (127 char + terminatore) |
|
Tabelle di costanti stringa |
|
Variabile di tipo counter |
|
Variabile di tipo timer |
|
Variabile per la gestione della potenza |
|
Struttura di appoggio per funzioni bcc_send(), bcc_receive(), .. |
|
Struttura di appoggio per funzioni bcc_get_tcp_clients_info() e getTcpClientsInfo() |
|
Struttura di appoggio per funzioni planar_comp_ip() e planar_comp_cp() |
|
Struttura di appoggio per funzioni axio_robj() e axio_wobj() |
|
Struttura di appoggio per funzione co_rerr() |
|
Struttura di appoggio per funzione statistics() |
|
Struttura di appoggio per funzione di gestione f_dir() |
|
Struttura di appoggio per funzione di movimento mva_to_n() |
|
Struttura di appoggio per funzione di movimento mv_cam() |
|
Struttura di appoggio per funzioni di comunicazione modbus/tcp |
|
Struttura di appoggio per funzione di movimento mv_table() |
|
Struttura di appoggio per funzione di movimento mv_to() |
|
Struttura di appoggio per funzione di movimento mv_to_cj() |
|
Struttura di appoggio per funzione di movimento mv_to_cjv() |
|
Struttura di appoggio per funzione di ausilio alla mv_to_cjv_info() |
|
Struttura di appoggio per funzione di movimento mv_to_cjv() |
|
Struttura di appoggio per funzione di movimento mva_zc() |
|
Struttura di appoggio per funzione di movimento mva_to_n_v() |
|
Struttura di appoggio per funzione di movimento mva_to_n_cj() |
|
Struttura di appoggio per funzione ah_get_d() |
|
Struttura di appoggio per funzione ah_get_d() con parametri USV |
|
Struttura di appoggio per funzione ah_info() |
|
Struttura di appoggio per funzione as_get_d() |
|
Struttura di appoggio per funzione as_get_d() con parametri USV |
|
Struttura di appoggio per funzioni di gestione flash-card f_open(), f_close(), .. |
|
Struttura di appoggio per istruzioni di gestione interrupt int_after(), int_inp() e int_timer() |
|
Struttura di appoggio per funzione di movimento mv_crimper() |
|
Struttura di appoggio per funzione ecat_probe() |
|
Struttura di appoggio per funzione di movimento mv_follow() |
|
Struttura di appoggio per funzione di movimento mv_follow2() |
|
Struttura di appoggio per funzione di movimento mva_follow2() |
|
Struttura di appoggio per funzione di movimento mva_follow2_m() |
|
Struttura di appoggio per funzione di movimento mv_follow2() |
|
Struttura di appoggio per istruzione get_hw_info() |
|
Struttura di appoggio per funzione di movimento mv_phase_adj() |
|
Struttura di appoggio per funzione di movimento mv_phase_adj2() |
|
Struttura di appoggio per funzione axio_pm_r() |
|
Struttura di appoggio per funzione di movimento mv_reach_target() |
|
Struttura di appoggio per funzione safe_prj_info() |
|
Struttura di appoggio per funzioni soe_ridn() e soe_widn() |
|
Struttura di appoggio per funzione di movimento mv_synchro() |
|
Struttura di appoggio per funzione tracking() |
|
Struttura di appoggio per funzione master_filter() |
NOTA: è consentita la nidificazione delle strutture (strutture di strutture).
Le variabili possono avere i seguenti livelli di visibilità:
Visibilità |
Descrizione |
|
---|---|---|
Globale |
Sono le variabili predefinite dal linguaggio R3 o le locali dichiarate come pubbliche (vedi sotto). Sono accessibili da tutti i task e utilizzabili su tutti gli strumenti di debug |
|
Locale |
Variabili accessibili (R/W) dal solo task in cui sono dichiarate. Devono essere definite all'inizio del file sorgente prima delle istruzioni.
|
|
Pubblica |
Variabili accessibili (R/W) dal task a cui sono dichiarate e normalmente leggibili dagli altri task. (vedi esterne) Devono essere definite all'inizio del file sorgente prima delle istruzioni con il prefisso "PUBLIC".
|
|
Esterna |
Variabili provenienti da un task differente. Sono normalmente di sola lettura a meno che il task che le include non abbia il metacomando "$WRITE_ON_EXTERN" al proprio inizio. Devono essere definite all'inizio del file sorgente con il prefisso "EXTERN" a cui deve necessariamente corrispondere in un altro task l'equivalente PUBLIC. (vedi public)
|
|
Ritentiva |
Struttura utente della quale si vuole la ritentività allo spegnimento. (memoria ritentiva) Ha le seguenti particolarità: •Dimensione massima della struttura è minore di quella dell'area utente di memoria ritentiva (vedere report) •Non può essere un array di struttura (ma nulla vieta di farlo al suo interno) •Dimensione massima del nome della struttura di 31 caratteri •Dimensione massima del nome della variabile di 31 caratteri •Per poter scrivere questa struttura deve essere presente il metacomando $ WRITE_ON_EXTERN •L'associazione della struttura utente a quella ritentiva avviene solo in fase di caricamento se e solo se NON esistono associazioni precedenti •Se esiste già una struttura ritentiva allora, in fase di messa in esecuzione dei task, si controlla che il nome della struttura, il nome dell'istanza e la sua dimensione corrispondano con quelli precedentemente registrati •Questa struttura viene salvata, così come i registri, allo spegnimento del controllo Esempio
NOTA: per eliminare l'associazione della struttura utente a quella ritentiva utilizzare il comando dipositivo (direttiva ascii) REMOVE NV_USERSTRUCT. NOTA: per inizializzare la struttura in caso di perdita di memoria utilizzare il comando dispositivo (direttiva ascii) RESTORE NV_USERSTRUCT. NOTA: per allargare automaticamente la dimensione della struttura, a patto che il nome della struttura e dell'istanza siano uguali, utilizzare il bit 10 della variabile predefinita SYS_CFG. |
|
Locale alle funzioni |
Variabili che sono definite all'interno della function() e che sono utilizzabili solo all'interno della stessa. Queste variabili perdono il loro contenuto ad ogni uscita dalla funzione. Nota: è possibile ridefinire il nome di variabili locali, vale a dire che le variabili interne possono avere lo stesso nome delle variabili locali. Tuttavia si consiglia di utilizzare nomi diversi per evitare di fare confusione. Attenzione: sono locazioni diverse, vale a dire che le variabili interne e quelle locali con lo stesso nome occupano locazioni di memoria fisica differente. La modifica di una variabile interna non ha alcun effetto su una variabile locale che ha lo stesso nome. È possibile dichiarare in funzioni diverse variabili con lo stesso nome. NON sono utilizzabili dagli strumenti di debug. Possono essere inserite anche nei campi motion all'interno delle rule. Si comportano in modo analogo a quelle dichiarate nelle function. |
È possibile dichiarare variabili locali nelle rules, purché all'interno dei blocchi REF / MOTION / AUX. Le variabili del blocco REF sono visibili esclusivamente nel blocco stesso, quelle di MOTION e AUX sono invece in comune tra loro.
È possibile dichiarare variabili locali entro il codice main dei task (la visibilità è limitata tra il punto della dichiarazione e la fine del main).
Esempi
Vari esempi di dichiarazione dati:
; "varname" è una stringa di caratteri che deve necessariamente iniziare con un lettera. ; La definizione di variabile ha la seguente struttura: ; definizione singola variabile di tipo 'tipoDato' tipoDato varname ; definizione di n variabili di tipo 'tipoDato' tipoDato varname1, varname2, ..., varnameN ; definizione di un array monodimensionale di n elementi di tipo 'tipoDato' ; gli indici degli elementi vanno da 0 a n-1, quindi: ; il primo elemento è varname[0] e l'ultimo è varname[n-1] tipoDato varname [n] ; definizione di un array bidimensionale di n*m elementi di tipo 'tipoDato' ; gli indici degli elementi vanno da 0 a n-1 e da 0 a m-1, quindi: ; il primo elemento è varname[0][0] e l'ultimo è varname[n-1][m-1] tipoDato varname [n][m] ; definizione di un array tridimensionale di n*m*o elementi di tipo 'tipoDato' ; gli indici degli elementi vanno da 0 a n-1, da 0 a m-1 e da 0 a o-1, quindi: ; il primo elemento è varname[0][0][0] e l'ultimo è varname[n-1][m-1][o-1] tipoDato varname [n][m][o] ; definizione singola variabile inizializzata di tipo 'tipoDato' ; vale a dire che alla variabile viene assegnato il valore k tipoDato varname = k ; definizione di un array inizializzato di tipo 'tipoDato' ; ai singoli elementi sono assegnati i valori k1, k2,..., kn nella seguente maniera: ; varname[0]=k1, varname[1]=k2, .. , varname[n-1]=kn, tipoDato varname[n] = {k1, k2,..,kn} ; definizione di una variabile visibile in lettura anche dagli altri task ; che la dichiarano come extern (usare il metacomando $WRITE_ON_EXTERN per poterla anche scrivere) public tipoDato varname ; definizione di una variabile a sola lettura dichiarata in un altro task extern tipoDato varname |