ATTENZIONE: Questa funzione non può essere usata in un task se nello stesso sono presenti anche le funzioni co_send_sdo()/co_asw_sdo().
Questa funzione serve per eseguire la lettura di oggetti fieldbus CoE (viene letto l'oggetto definito da 'stru.objCode + stru.subIndex' sul dispositivo identificato da stru.rid).
Può leggere più tipi di dati rispetto alla funzione analoga co_robj().
La lettura può avvenire in modo passante o in modo bloccante (utilizzabile solo nei task 1-:-8).
Per modo passante si intende che la funzione deve essere continuamente chiamata e contemporaneamente testato lo stato attuale dell'operazione.
Per modo bloccante si intende che la funzione viene invocata e ritorna solo quando ha completato l'operazione di lettura.
La funzione rende un esito sullo stato dell'esecuzione.
Sintassi |
i32 co_robj (stru_coe_obj stru, destination) |
---|---|
stru |
Nome della struttura di tipo stru_coe_obj. |
destination |
Contiene le informazioni ricevute. destination deve essere un oggetto compatibile con i dati che si stanno leggendo (se si legge una VISIBLE STRING, destination sarà di tipo string, se si legge un OCTET_STRING sarà un array di byte o una struttura). |
Risultato |
Variabile di tipo i32 contenente il risultato. Vedi gestione passante e/o gestione bloccante. |
Validità |
Rule, Task. |
Note |
•Imporre stru.phase = 1 per inizializzare la lettura. •Il comando di lettura viene inviato al dispositivo remoto e si attende risposta. La variabile stru.phase viene cambiata. •Attesa della risposta. •Ricezione risposta con esito positivo. Il valore letto viene scritto in destination. RTE cambia stru.phase = 4. •Ricezione risposta con esito negativo. RTE cambia stru.phase = 0. o-2, gestore comunicazione occupato o-3, crash gestore comunicazione (riavvio) o-5, comando a un dispositivo non presente (stru.rid) o-6, nessuna operazione in esecuzione. stru.phase non inizializzata o-12, valore illegale di objcode (allarme 9900 arg 12) o-13, valore illegale di subindex (allarme 9900 arg 13) o-14, valore illegale di datatype (allarme 9900 arg 4/arg 14) o-15, valore illegale di datalen (allarme 9900 arg 5/arg 15) o-16, valore illegale di phase (allarme 9900 arg 6) o-21, destinazione non specificata (allarme 9900 arg 16) o-22, destinazione cambiata (allarme 9900 arg 32) o2, comando di cui si è già ricevuto risposta positiva, valore disponibile in destination o>2, codice di errore SDO, vedi tabella sotto |
•Imporre stru.phase = -1 per eseguire la lettura. •Il comando di lettura viene inviato al dispositivo remoto e si attende risposta. La variabile stru.phase viene cambiata. •Attesa della risposta. Se la risposta non arriva entro un massimo di 3 secondi la funzione esce con un errore (timeout, rende -2). •Ricezione risposta con esito positivo. Il valore letto viene scritto in destination. RTE cambia stru.phase = 4. •Ricezione risposta con esito negativo. RTE cambia stru.phase = 0. o-2, gestore comunicazione occupato o-3, crash gestore comunicazione (riavvio) o-4, gestione bloccante non permessa nel task corrente (stru.phase = 1) (rule, ladder). Comando non accettato o-5, comando a un dispositivo non presente (stru.rid) o-6, nessuna operazione in esecuzione. stru.phase non inizializzata o-12, valore illegale di objcode (allarme 9900 arg 12) o-13, valore illegale di subindex (allarme 9900 arg 13) o-14, valore illegale di datatype (allarme 9900 arg 4/arg 14) o-15, valore illegale di datalen (allarme 9900 arg 5/arg 15) o-16, valore illegale di phase (allarme 9900 arg 6) o-21, destinazione non specificata (allarme 9900 arg 16) o-22, destinazione cambiata (allarme 9900 arg 32) o2, comando di cui si è già ricevuto risposta positiva, valore disponibile in destination o>2, codice di errore SDO, vedi tabella sotto |
Esempio di utilizzo:
|