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 scrittura di oggetti fieldbus CoE (vengono scritte le informazioni presenti in source).
Può scrivere più tipi di dati rispetto alla funzione analoga co_wobj().
La scrittura 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 scrittura.
La funzione rende un esito sullo stato dell'esecuzione.
Sintassi |
i32 coe_wobj (stru_coe_obj stru, source) |
---|---|
stru |
Nome della struttura di tipo stru_coe_obj. |
source |
I dati contenuti in source verranno assunti in base al tipo di dato specificato (se si scrive una VISIBLE STRING, source sarà di tipo string, se si scrive un OCTET_STRING, source 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 scrittura. •Il comando di scrittura del valore source 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 source. 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, source non specificato (NULL) (allarme 9900 arg 16) o-22, source cambiato (esecuzione a fasi) (allarme 9900 arg 32) o2, comando di cui si è già ricevuto risposta positiva, valore disponibile in source o>2, codice di errore SDO, vedi tabella sotto |
•Imporre stru.phase = -1 per eseguire la scrittura. •Il comando di scrittura del valore source 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 source. 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 source non specificato (NULL) (allarme 9900 arg 16) o-22 source cambiato (esecuzione a fasi) (allarme 9900 arg 32) o2 comando di cui si è già ricevuto risposta positiva, valore disponibile in source o>2 codice di errore SDO, vedi tabella sotto |
Esempio di utilizzo:
|