software:devices:canopen

Action disabled: source

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
CANOPENparola chiave che identifica il device posizionatore analogico
TCamptempo di campionamento device (1÷255 ms)
Speedindica 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
Portindica il dispositivo CAN al quale il device deve riferirsi. Se l'hardware è previsto di una sola porta CAN utilizzare il valore 0
:important: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:

indexNomeValore di defaultAccessoRange di valoriBreve descrizione
1 aiperiod100RW0÷32767Tempo di aggiornamento ingressi analogici e conteggi espresso in ms
2 setdrivemode-RW0÷255Imposta 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 divfactor2RW0÷4Imposta 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 RW0÷1Imposta 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

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

NomeDimensioneValore di defaultTipo di accessoUnità di misuraRange validoCondizioni di scritturaDescrizione
speedWord-RKbps1000, 500, 250, 125 o 0-Velocità di trasmissione
Riporta il dato impostato nella dichiarazione del device per la velocità di trasmissione.
maxrxerrWord0RW---Numero massimo di errori in ricezione
Riporta il numero massimo raggiunto di errori in ricezione.
maxtxerrWord0RW---Numero massimo di errori in trasmissione
Riporta il numero massimo raggiunto di errori in trasmissione.
busloadWord0RPercentuale0÷100-Carico del bus
Indica il carico di traffico della rete in percentuale, tale valore è aggiornato ogni 500 ms.
maxtrafficWord0RWPercentuale0÷100-Carico massimo rilevato nel bus
Riporta la percentuale massima di traffico rilevato nel bus a partire dall'ultimo azzeramento di questo parametro.
errflagsWord0RW-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
unitByte0RW---Numero di identificazione dell'unità CANOpen
Identifica il numero dell'unità CANOpen che utilizzerà il comando READSDO e WRITESDO.
indexLong0RW-0÷65535-Indice del dizionario oggetti
Identifica l'indice del dizionario oggetti.
subindexWord0RW-0÷255-Sub-indice del dizionario oggetti
Identifica il sub-indice del dizionario oggetti nel caso in cui l'oggetto sia di tipo complesso.
lengthWord0RWbytes--Dimensione SDO
Indica la dimensione in bytes del SDO letto o da scrivere.
dataLong0RW---Valore SDO o QDO
Indica il valore del QDO o SDO da leggere o da scrivere.
string1÷16Byte0RW---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.
sdoerrByte0R---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
qdoerrByte0R---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
sdoabortWord0R---Codice SDO abort
Messaggi di errore propri del protocollo CAN. (Non ancora implementato)
emcyunitByte0R---Unità in emergenza
Indica il numero dell'unità che si trova in emergenza.
emcycodeWord0R---Codice del messaggio d'emergenza
Indica il codice del messaggio di emergenza.
emcyregByte0R---Registro di errore emergenze
Registro di errore del messaggio di emergenza.
emcyman1÷5Byte0R---Errore costruttore
Questi parametri consentono di leggere il valore del campo “manufacturer specific error register” del messaggio di emergenza.
errcodeByte0R-0÷100st_error=1Codice 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.
errvalueByte0R-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.
wrncodeByte0R-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.
wrnvalueByte0R-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

NomeBreve descrizioneDescrizione
st_send1Comando 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_emcy0Stato di emergenza
Il device ha ricevuto un messaggio di emergenza quando lo stato vale 1.
st_error0Presenza 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_warning0Presenza 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

NomeCondizioneDescrizione
READSDOst_send=1Lettura 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.
WRITESDOst_send=1Scrittura 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.
READQDOst_send=1Lettura 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.
WRITEQDOst_send=1Scrittura 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.
READEMCYst_emcy=1Lettura 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.
RSERRst_error=1Reset dello stato di errore
Azzera lo stato st_error.
RSWRNst_warning=1Reset dello stato di warning
Azzera lo stato st_warning.
  • Ultima modifica: 2019/12/18 11:15