DEVICE CANOPEN
1. Introduzione
Il device CANOPEN è un oggetto utilizzabile per la configurazione, il monitoring e la gestione di una rete CANOpen. CANOpen è un protocollo di comunicazione basato su CAN bus. Per ogni riferimento a documenti sul protocollo fare riferimento al sito della CiA: l'organizzazione internazionale che sviluppa e promuove i protocolli su base CAN bus (http://www.can-cia.org/cia).
2. Dichiarazione del device
Nella unit di configurazione, la sezione INTDEVICE deve essere dichiarata in modo tale che siano presenti le risorse hardware necessarie all'utilizzo del device CANOPEN. Nella sezione INTDEVICE della unit di configurazione deve essere aggiunta la seguente definizione:
;--------------------------------- ; Dichiarazione device ;--------------------------------- INTDEVICE ... <nome_device> CANOPEN TCamp Speed Port
Dove:
<nome_device> | nome assegnato al device |
CANOPEN | parola chiave che identifica il device posizionatore analogico |
TCamp | tempo di campionamento device (1÷255 ms) |
Speed | indica il valore in Kbps della velocità CANbus. I valori ammessi sono 1000, 500, 250 e 125. Su alcuni hardware è possibile impostare anche il valore 0. In questo caso la velocità del CANbus sarà impostata con appositi dip-switch. Il valore della velocità selezionata sarà visibile nel parametro speed |
Port | indica il dispositivo CAN al quale il device deve riferirsi. Se l'hardware è previsto di una sola porta CAN utilizzare il valore 0 |
Attenzione: È necessario che tutte le voci di definizione siano presenti sulla stessa linea. |
---|
3. Funzionamento
Le principali caratteristiche del device CANOPEN sono:
-
monitorizzazione della rete CANbus: alcuni parametri permettono di controllare gli errori della rete CAN, di calcolare una stima del traffico bus, di verificare alcuni stati tipici della periferica CANbus
-
ricezione e decodifica dei messaggi di emergenza tipici del protocollo CANOpen
-
gestione dei QDO (Qem Data Object) che sono dei oggetti che non hanno una relazione diretta con il protocollo, ma che permettono di assicurare la possibilità di configurazione della libreria di comunicazione CANOpen. Per esempio i QDO vengono utilizzati per definire la frequenza di aggiornamento degli ingressi analogici, per definire il fattore di divisione della posizione letta da un drive, etc.
È qui riportato l'elenco dei QDO attualmente disponibili:
index | Nome | Valore di default | Accesso | Range di valori | Breve descrizione |
---|---|---|---|---|---|
1 | aiperiod | 100 | RW | 0÷32767 | Tempo di aggiornamento ingressi analogici e conteggi espresso in ms |
2 | setdrivemode | - | RW | 0÷255 | Imposta il drive per lavorare con il modo indicato e relativo alla specifica DS402 |
3 | targetpos | - | W | - | Imposta la posizione di origine per il drive. La scrittura deve essere eseguita con il drive non operativo. Questo parametro è impostato automaticamente con il QDO setdrivemode. |
4 | divfactor | 2 | RW | 0÷4 | Imposta il divisore per le posizioni. Il valore è il divisore espresso come esponente di 2. (es: 2 significa 22 = 4) |
5 | Slave Link Status | - | R | Indica lo stato di linkup degli slave. Lo stato del bit 0 corrisponde allo stato di link dello slave con indirizzo 1 | |
6 | Slave Link Up | - | W | Aggiunge alla rete CANOpen uno slave in link down. Il bit 0 corrisponde allo slave con indirizzo 1 | |
7 | Sync Mode | RW | 0÷1 | Imposta la modalità del messaggio SYNC (0 per DS401, 1 per DS402 in interpolation mode) | |
8 | Guard Time | RW | - | Imposta il Guard Time del protocollo NodeGuarding | |
9 | SDO timeout | RW | - | Imposta il valore di timeout dei messaggi SDO |
3.1 Esempio di utilizzo dello "Slave Link Status"
Esempio di una unit realizzata per QView 6 con dichiarazioni locali e device CANOPEN dichiarato come REFERENCE.
CONST READ_LINK_STATUS__TIME 1000 GLOBAL ErrorCode B OUT SlavesLinkDown L OUT ; link down state (bit0=slaveID1, bit1=slaveID2, ecc) TIMER tmLinkStatus INTDEVICE CanOpen CANOPEN REFERENCE BEGIN MAIN: IF tmLinkStatus tmLinkStatus = READ_LINK_STATUS__TIME CanOpen.index = 5 CanOpen.READQDO WAIT CanOpen.st_send IF NOT CanOpen.qdoerr SlavesLinkDown = CanOpen.data ErrorCode = 0 ELSE ErrorCode = 1 ENDIF ENDIF WAIT 1 JUMP MAIN END
4. Tabella parametri
Nome | Dimensione | Valore di default | Tipo di accesso | Unità di misura | Range valido | Condizioni di scrittura | Descrizione |
---|---|---|---|---|---|---|---|
speed | Word | - | R | Kbps | 1000, 500, 250, 125 o 0 | - | Velocità di trasmissione Riporta il dato impostato nella dichiarazione del device per la velocità di trasmissione. |
maxrxerr | Word | 0 | RW | - | - | - | Numero massimo di errori in ricezione Riporta il numero massimo raggiunto di errori in ricezione. |
maxtxerr | Word | 0 | RW | - | - | - | Numero massimo di errori in trasmissione Riporta il numero massimo raggiunto di errori in trasmissione. |
busload | Word | 0 | R | Percentuale | 0÷100 | - | Carico del bus Indica il carico di traffico della rete in percentuale, tale valore è aggiornato ogni 500 ms. |
maxtraffic | Word | 0 | RW | Percentuale | 0÷100 | - | Carico massimo rilevato nel bus Riporta la percentuale massima di traffico rilevato nel bus a partire dall'ultimo azzeramento di questo parametro. |
errflags | Word | 0 | RW | - | 0÷32768 | - | Flag di indicazione di errore Il valore è il risultato della conversione in decimale dei valori di alcuni bit flag, ad ogni errore ogni flag viene posto ad 1, per azzerarli è possibile porre il parametro a 0. Tutti questi messaggi di errore sono inviati dal chip che gestisce la comunicazione CAN. bit0 overrun error bit1 rx buffer full error bit2 idle character detect bit3 bus-off state bit4 transmitter error passive bit5 receiver error passive bit6 transmitter warning bit7 receiver warning bit8 acknowledge error bit9 CRC error bit10 form error bit11 stuff bit error bit12 bit 0 error bit13 bit 1 error bit14 received message queue full bit15 transmit message queue full bit16 receiver busy |
unit | Byte | 0 | RW | - | - | - | Numero di identificazione dell'unità CANOpen Identifica il numero dell'unità CANOpen che utilizzerà il comando READSDO e WRITESDO. |
index | Long | 0 | RW | - | 0÷65535 | - | Indice del dizionario oggetti Identifica l'indice del dizionario oggetti. |
subindex | Word | 0 | RW | - | 0÷255 | - | Sub-indice del dizionario oggetti Identifica il sub-indice del dizionario oggetti nel caso in cui l'oggetto sia di tipo complesso. |
length | Word | 0 | RW | bytes | - | - | Dimensione SDO Indica la dimensione in bytes del SDO letto o da scrivere. |
data | Long | 0 | RW | - | - | - | Valore SDO o QDO Indica il valore del QDO o SDO da leggere o da scrivere. |
string1÷16 | Byte | 0 | RW | - | - | - | Valore SDO Indica il valore del SDO letto o da scrivere nel caso in cui il dato sia di tipo VISIBLE_STRING o OCTET_STRING. |
sdoerr | Byte | 0 | R | - | - | - | Errore durante elaborazione SDO Indica un errore incorso durante la lettura o la scrittura del SDO. Il valore deve essere letto dopo che st_send viene posto ad 1. I codici di errore sono: 6 unità non valida 10 numero del gruppo non valido 11 SDO non valido 12 errore di comunicazione 13 lunghezza SDO non valida 17 unità errata 28 lunghezza messaggio non valida 29 errore di nell trasmissione 34 lunghezza oggetto non valida |
qdoerr | Byte | 0 | R | - | - | - | Errore durante elaborazione QDO Indica un errore incorso durante la lettura o la scrittura del QDO. Il valore deve essere letto dopo che st_send viene posto ad 1. I codici di errore sono: 1 oggetto non disponibile 2 errore nella esecuzione del QDO 3 valore del QDO utilizzato oltre i limiti |
sdoabort | Word | 0 | R | - | - | - | Codice SDO abort Messaggi di errore propri del protocollo CAN. (Non ancora implementato) |
emcyunit | Byte | 0 | R | - | - | - | Unità in emergenza Indica il numero dell'unità che si trova in emergenza. |
emcycode | Word | 0 | R | - | - | - | Codice del messaggio d'emergenza Indica il codice del messaggio di emergenza. |
emcyreg | Byte | 0 | R | - | - | - | Registro di errore emergenze Registro di errore del messaggio di emergenza. |
emcyman1÷5 | Byte | 0 | R | - | - | - | Errore costruttore Questi parametri consentono di leggere il valore del campo “manufacturer specific error register” del messaggio di emergenza. |
errcode | Byte | 0 | R | - | 0÷100 | st_error=1 | Codice di identificazione errore Indica il tipo di errore intervenuto nel sistema. Quando st_error = 1 si trova presente sulla variabile errcode il tipo di errore intervenuto e nella variabile errvalue una indicazione sulla causa dell'errore. |
errvalue | Byte | 0 | R | - | 0÷100 | - | Codice di identificazione della causa dell'errore Indica la causa dell'errore intervenuto nel sistema. Il codice è valido solo se st_error = 1. |
wrncode | Byte | 0 | R | - | 0÷100 | - | Codice di identificazione warning Indica il tipo di warning intervenuto nel sistema. Lo stato st_warning indica un evento non grave che garantisce comunque il funzionamento del device. Quando st_warning è uguale a 1, troviamo presente sulla variabile wrncode il tipo di warning intervenuto (vedi tabella) e nella variabile wrnvalue una indicazione sulla causa che ha provocato il warning. |
wrnvalue | Byte | 0 | R | - | 0÷100 | - | Codice di identificazione della causa del warning Indica la causa del warning intervenuto nel sistema. 1: tentativo di accesso in scrittura su un parametro dove le condizioni per la scrittura non erano soddisfatte, 2: tentativo di esecuzione di un comando quando le condizioni non erano soddisfatte. |
5. Tabella stati
Nome | Breve descrizione | Descrizione |
---|---|---|
st_send | 1 | Comando SDO o QDO eseguito Quando lo stato assume valore 1 indica che il comando SDO (READSDO o WRITESDO) o QDO (READQDO o WRITEQDO) è stato eseguito. |
st_emcy | 0 | Stato di emergenza Il device ha ricevuto un messaggio di emergenza quando lo stato vale 1. |
st_error | 0 | Presenza di un errore Indica lo stato di errore del device, per riconoscere il tipo di errore si deve far riferimento alle variabili errcode ed errvalue: 0: errore non presente, 1: errore presente |
st_warning | 0 | Presenza di un warning Indica lo stato di warning del device, per riconoscere il tipo di warning si deve far riferimento alle variabili wrncode e wrnalue: 0: warning non presente, 1: warning presente |
6. Tabella comandi
Nome | Condizione | Descrizione |
---|---|---|
READSDO | st_send=1 | Lettura di un SDO Comando di lettura di un SDO. È necessario che siano impostati i seguenti parametri: unit, index, subindex. All'attivazione dello stato st_send è possibile verificare i parametri relativi per verificare la presenza di un errore. Se l'operazione è andata a buon fine allora nei parametri data o string1÷16 si trovano il valore dell'oggetto e nel parametro length si trova la dimensione del dato. |
WRITESDO | st_send=1 | Scrittura di un SDO Comando di scrittura di un SDO. È necessario che siano impostati i seguenti parametri: unit, index, subindex, length e data. All'attivazione dello stato st_send è possibile verificare i parametri relativi per verificare la presenza di un errore. |
READQDO | st_send=1 | Lettura di un SDO Comando di lettura di un QDO. È necessario che siano impostati i seguenti parametri: unit, index, subindex. All'attivazione dello stato st_send è possibile verificare il parametro qdoerr per verificare la presenza di un errore. |
WRITEQDO | st_send=1 | Scrittura di un SDO Comando di scrittura di un QDO. È necessario che siano impostati i seguenti parametri: unit, index, subindex, length e data. All'attivazione dello stato st_send è possibile verificare il parametro qdoerr per verificare la presenza di un errore. |
READEMCY | st_emcy=1 | Lettura di un messaggio di emergenza Comanda la lettura di un messaggio di emergenza. Quando lo stato st_emcy diventa attivo significa che il device ha ricevuto un messaggio di errore e sarà possibile leggerlo con questo comando. I parametri emcyunit, emcycode, emcyreg ed emcyman1÷5 rappresentano i dati del messaggio. |
RSERR | st_error=1 | Reset dello stato di errore Azzera lo stato st_error. |
RSWRN | st_warning=1 | Reset dello stato di warning Azzera lo stato st_warning. |