Abilitare JavaScript per vedere questo sito.

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

I8

Variabile intera a 8 bit con segno

I16

Variabile intera a 16 bit con segno

I32

Variabile intera a 32 bit con segno

U8

Variabile intera a 8 bit senza segno

U16

Variabile intera a 16 bit senza segno

U32

Variabile intera a 32 bit senza segno

INT

Variabile intera a 32 bit (è come I32)

FLOAT

Variabile floating point 4 Byte

REAL

Variabile floating point 8 Byte (double)

BOOL

Variabile booleana

CHAR

Variabile di tipo char (è come I8)

STRUCT

Variabile di tipo struttura

STRUCT_P

Variabile di tipo struttura packed (i dati sono contigui, occupa meno spazio)

STRING

Variabile di tipo stringa (127 char + terminatore)

TABSTR

Tabelle di costanti stringa

COUNTER

Variabile di tipo counter

TIMER

Variabile di tipo timer

POWER_SET

Variabile per la gestione della potenza

BCC_MSGUSER

Struttura di appoggio per funzioni bcc_send(), bcc_receive(), ..

STRU_BCC_TCP_CLIENT

Struttura di appoggio per funzioni bcc_get_tcp_clients_info() e getTcpClientsInfo()

STRU_AAX

Struttura di appoggio per funzioni planar_comp_ip() e planar_comp_cp()

STRU_AXIO_PDI

Struttura di appoggio per funzioni axio_robj() e axio_wobj()

STRU_CO_OBJ

Struttura di appoggio per funzioni co_robj() e co_wobj()

STRU_COE_OBJ

Struttura di appoggio per funzioni co_robj() e co_wobj()

STRU_COERRMSG

Struttura di appoggio per funzione co_rerr()

STRU_STAT

Struttura di appoggio per funzione statistics()

STRU_GROR

Struttura di appoggio per funzione group order()

STRU_FILEINFO

Struttura di appoggio per funzione di gestione f_dir()

STRU_MVITP

Struttura di appoggio per funzione di movimento mva_to_n()

STRU_MATCAM

Struttura di appoggio per funzione di movimento mv_cam()

STRU_MODBUS

Struttura di appoggio per funzioni di comunicazione modbus/tcp

STRU_CAM

Struttura di appoggio per funzione di movimento mv_table()

STRU_MVTO

Struttura di appoggio per funzione di movimento mv_to()

STRU_MVTOCJ

Struttura di appoggio per funzione di movimento mv_to_cj()

STRU_MVTOCJV

Struttura di appoggio per funzione di movimento mv_to_cjv()

STRU_MVTOCJV_INFO

Struttura di appoggio per funzione di ausilio alla mv_to_cjv_info()

STRU_MVTOCJVE

Struttura di appoggio per funzione di movimento mv_to_cjv()

STRU_MVZC

Struttura di appoggio per funzione di movimento mva_zc()

STRU_MVGENITP

Struttura di appoggio per funzione di movimento mva_to_n_v()

STRU_MVITPCJ

Struttura di appoggio per funzione di movimento mva_to_n_cj()

STRU_AH_D

Struttura di appoggio per funzione ah_get_d()

STRU_AH_D_EXT

Struttura di appoggio per funzione ah_get_d() con parametri USV

STRU_AH_INFO

Struttura di appoggio per funzione ah_info()

STRU_AS_D

Struttura di appoggio per funzione as_get_d()

STRU_AS_D_EXT

Struttura di appoggio per funzione as_get_d() con parametri USV

STRU_FILEHND

Struttura di appoggio per funzioni di gestione flash-card f_open(), f_close(), ..

STRU_INT

Struttura di appoggio per istruzioni di gestione interrupt int_after(), int_inp() e int_timer()

STRU_LARGE_INT

Struttura di appoggio per istruzioni get_i64() e set_i64()

STRU_LARGE_UINT

Struttura di appoggio per istruzioni get_u64() e set_u64()

STRU_CRIMPER

Struttura di appoggio per funzione di movimento mv_crimper()

STRU_ECAT_PROBE

Struttura di appoggio per funzione ecat_probe()

STRU_FOLLOW

Struttura di appoggio per funzione di movimento mv_follow()

STRU_FOLLOW2

Struttura di appoggio per funzione di movimento mv_follow2()

STRU_FOLLOW2_S

Struttura di appoggio per funzione di movimento mva_follow2()

STRU_FOLLOW2_SM

Struttura di appoggio per funzione di movimento mva_follow2_m()

STRU_FOLLOW2_INFO

Struttura di appoggio per funzione di movimento mv_follow2()

STRU_HW_INFO

Struttura di appoggio per istruzione get_hw_info()

STRU_PHADJ

Struttura di appoggio per funzione di movimento mv_phase_adj()

STRU_PHADJ2

Struttura di appoggio per funzione di movimento mv_phase_adj2()

STRU_PM_PD

Struttura di appoggio per funzione axio_pm_r()

STRU_REACHTARGET

Struttura di appoggio per funzione di movimento mv_reach_target()

STRU_SAFETY_PRJINFO

Struttura di appoggio per funzione safe_prj_info()

STRU_SOE_IDN

Struttura di appoggio per funzioni soe_ridn() e soe_widn()

STRU_SYNCHRO

Struttura di appoggio per funzione di movimento mv_synchro()

STRU_TRACK

Struttura di appoggio per funzione tracking()

STRU_MASTERF

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.

INT pluto

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".

PUBLIC INT pluto

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)

EXTERN INT pluto

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

$WRITE_ON_EXTERN

STRUCT ret_struct    

   INT integerData[20];    

   REAL realData[10];    

   STRING setName[64];

END_STRUCT

RETENTIVE ret_struct retentiveData

retentiveData.integerData[0] = SECOND

retentiveData.integerData[1] = MINUTE

retentiveData.integerData[2] = HOUR

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

 

  

Keyboard Navigation

F7 for caret browsing
Hold ALT and press letter

This Info: ALT+q
Page Header: ALT+h
Topic Header: ALT+t
Topic Body: ALT+b
Contents: ALT+c
Search: ALT+s
Exit Menu/Up: ESC