Title: Il CANOpen
1Il CANOpen
2Il modello di riferimento di CANopen
CIA DS2xx, DS3xx, DS4xx Cenelec, EN50325-4,
"Industrial Communications Subsystem based on ISO
11898 (CAN) for Controller-device Interfaces.
Part 4 CANOpen", 2001.
ISO, IS-11898, "Road Vehicle - Interchange of
Digital Information - Controller Area Network
(CAN) for High Speed Communication", 1993.
3Il modello di riferimento di CANopen
- Application Layer e il Communication Profile
definiscono i servizi per ricevere e trasmettere
gli oggetti sul bus - "Frameworks" rappresenta un livello aggiuntivo
specifico ad esempio per dispositivi
programmabili - nei dispositivi PLC gli oggetti standard previsti
non sono sufficienti per gestire i processi di
configurazione e salvataggio delle impostazioni - Tutti i "Profile" descrivono le caratteristiche e
le funzionalità opzionali del dispositivo.
Esistono Profile già definiti per - moduli di I/O (DS-401)
- misurazione e controllo temperatura e pressione
(DS-404) - gestione encoder (DS-406)
- controllo trasmissione idrostatica (DS-408)
- controllo posizione (DSP-402)
- controllo porte automatiche (DSP-416)
- controllo ascensori (DSP-417) ecc.
4Obiettivi del CanOpen
- Lo sviluppo del CanOpen prese avvio con questi
obiettivi - Creare una specifica chiara e concisa per
facilitare l'implementazione e la manutenzione. - Utilizzare per quanto più è possibile standard
internazionali esistenti. - Impiegare il minimo numero possibile di Oggetti
di comunicazione - communication objects
(identificatori CAN) - Riuscire a coprire l'ampia gamma di dispositivi
utilizzati nell'automazione delle macchine. - Assicurare un comportamento affidabile e preciso
della rete - Con questi obiettivi, CANopen fu sviluppato
usando solo un esiguo numero di funzioni di
comunicazione per l'automazione delle macchine,
con il conseguente ridotto fabbisogno di
processori e di memorie
5Le interazioni tra gli strati del protocollo
- Nell Application Layer i dispositivi si
scambiano Communication and Application Objects
(COB) - I COB permettono laccesso ad oggetti tramite un
indice a 16 bit ed un sub-indice ad 8 bit. - I COB sono inseriti in una o più sequenze CAN con
identificatori predefiniti od appositamente
configurati.
6Il modello del dispositivo CANOpen
- Un CANOpen device è composto da
- L'interfaccia di comunicazione definisce oggetti
di comunicazione e fornisce i servizi per
trasmettere e ricevere nel bus gli oggetti di
comunicazione. - Il Dizionario degli oggetti descrive tutti i Tipi
di dato e gli Oggetti (COB) accessibili dalla
rete. - Il programma dell'applicazione fornisce le
funzioni di governo dei meccanismi interni e di
connessione alle interfacce hardware del
processo.
7Oggetti di comunicazione
- Il CANopen definisce quattro tipi di messaggi
(Oggetti di comunicazione) - Messaggi di Gestione di rete (Network Management
- NMT) - Oggetti di servizio (Service Data Objects - SDO)
- Oggetti di processo (Process Data Objects - PDO)
- Messaggi predefiniti, come
- gli Oggetti Sync (Sync Objects)
- gli Oggetti Marcatempo (Time Stamp Objects)
- gli Oggetti Emergenza (Emergency Object).
8Servizi di Comunicazione
- Il protocollo CANopen definisce diversi metodi
per trasmettere e ricevere COB - I trasferimenti sincroni di dati permettono alla
rete di acquisire ed elaborare grandi quantità di
dati coordinati. - Messaggi asincroni o su evento possono esser
inviati in qualsiasi momento e permettono ad un
dispositivo di informare immediatamente un altro
senza attendere che abbia luogo una trasmissione
sincrona. - Trasferimenti senza time constraints
- Generalmente la trasmissione sincrona/asincrona/ad
eventi è limitata a 8 bytes - Si possono trasferire informazioni più lunghe di
8 bytes, ma senza avere meccanismi di gestione
delle esigenze temporali.
9LObject Dictionary
- L object dictionary è una raccolta di oggetti
accessibili dalla rete - Ogni oggetto è indirizzato usando un 16-bit index
e un 8-bit sub-index. - Laccesso allobject dictionary avviene tramite
gli oggetti di comunicazione e i relativi servizi
10LObject Dictionary
- L object dictionary definisce gli Static Data
Types - Sono i principali data types utilizzati
11LObject Dictionary
- L object dictionary definisce anche alcuni tipi
di dati complessi predefiniti (Complex Data Type) - Vengono utilizzati per alcuni parametri di SDO e
PDO - Viene riservato spazio per standard e complex
data types specifici del device (Manifacturer
Specific Complex Data Types)
12LObject Dictionary
- Esempio di utilizzo di Indici e sub-Indici per
accedere a ciascun oggetto contenuto nell object
dictionary
13Meccanismi di trasferimento dei dati
- CANopen definisce due meccanismi di trasferimento
di dati - Basata sulluso di Service Data Object SDO
- Basata sulluso di Process Data Object PDO
14Meccanismi di trasferimento dei dati SDO
- La trasmissione non è caratterizzata da
particolari vincoli temporali - E usata generalmente per configurare dispositivi
in rete CAN, con messaggi a bassa priorità. - E possibile accedere direttamente allObject
Dictionary grazie allindice a 16 bit ed un
sub-indice di 8 bit. - Con questa modalità, è possibile realizzare
trasferimenti di dati per più di 8 byte, che si
fanno utilizzando telegrammi CAN multipli. - Viene utilizzato un modello Client/Server
15Meccanismi di trasferimento dei dati SDO
- Solo per questo modello, è possibile trasmettere
più di 8 byte, tramite segmentazione
16Meccanismi di trasferimento dei dati SDO
17Meccanismi di trasferimento dei datiSDO
- Accesso diretto agli oggetti del dizionario
18Meccanismi di trasferimento dei dati PDO
- La trasmissione degli Oggetti di processo è
normalmente usata per trasferire dati ad alta
velocità e con alta priorità. - In un telegramma PDO i dati sono limitati ad 8
byte. - Gli oggetti PDO vengono mappati
(preconfigurazione o manuale) sullObject
Dictionary
19PDO Mapping
- E possibile definire fino a 512 PDO per la
trasmissione (TPDO) e 512 PDO per la ricezione
(RPDO)
20Meccanismi di trasferimento dei dati PDO
- Push I dati di processo vengono inviati da un
"produttore" ad uno o più consumatori
(multicast/broadcast) - Pull I dati possono essere richiesti dal/dai
consumatori (CAN Remote Frame) - I PDO sono trasmessi nella forma "senza
conferma".
21Meccanismi di trasferimento dei dati PDO
- Il Master è lunica entità autorizzata
allattivazione della comunicazione
22Meccanismi di trasferimento dei dati PDO
- Il CANOpen prevede diversi modi per trasferire
dati in tempo reale. - Un modo è di inviare semplicemente un messaggio
PDO al manifestarsi d'un evento. - Ad esempio, una porta I/O digitale trasmette lo
stato delle sue linee in entrata quando esse
cambiano di stato - Questa forma di trasferimento permette di ridurre
al minimo il carico sul bus e di ottenere alte
prestazioni nella comunicazione con cadenze di
bit (bit rate) relativamente basse. - Ciò permette inoltre di avere un tempo di
reazione alle variazioni dei dati, fattore
critico in molte applicazioni, molto breve.
Trasmissione su EVENTI
23Meccanismi di trasferimento dei dati PDO
- La forma di trasmissione sincronizzata permette
ai dispositivi in rete di essere rigidamente
sincronizzati su di un orologio pilota (SYNC) - La sincronizzazione si riferisce alla
trasmissione o alla produzione - Questa condizione è essenziale in alcune
applicazioni per controllo di posizione od in
applicazioni dove si debbano leggere o scrivere
simultaneamente dati in entrate ed uscite
remote. - Il protocollo permette di cambiare il periodo del
ciclo - Messaggi sincroni e messaggi su evento possono
essere liberamente mescolati nella rete.
Trasmissione SINCRONA
24Meccanismi di trasferimento dei dati PDO
- Il trasferimento dati può anche essere
sollecitato da una richiesta remota. - Un PDO può essere inviato quando viene ricevuta
una richiesta remota (RTR)
Trasmissione su RICHIESTA REMOTA
25Meccanismi di trasferimento dei dati PDO
26Meccanismi di trasferimento dei dati PDO
27Meccanismi di trasferimento dei dati PDO
- Trasmissione Ciclica la PDO viene trasmessa ento
la finestra del Sync periodicamente (ogni n Sync
Object) - Tasmissione Aciclica la PDO viene trasmessa
entro la finestra Sync, ma non periodicamente. Ci
deve essere un evento specifico legato
allapplicazione che provoca linvio della PDO
28Meccanismi di trasferimento dei dati PDO
- Combinando tutte le precedenti modalità
trasmissive, sono possibili diversi modelli di
comunicazione impostabili per ogni PDO - Syncronous Cyclic
- Synchronous Acyclic
- Synchronous Remote (Sync RTR)
- Asynchronous Remote (Async RTR)
- Asynchronous Manufacturer Profile
- Asynchronous Device Profile
29Meccanismi di trasferimento dei dati PDO
- Synchronous Cyclic
- Il valore del PDO è inviato alla ricezione
delloggetto Sync. - E possibile settare il periodo (numero di
oggetti Sync ricevuti) - Questa modalità ottimizza il flusso di dati,
garantendo le esigenze real-time. - Synchronous Acyclic
- Questa modalità permetta la sincronizzazione con
loggetto Sync, come nel modo cyclic, ma non
viene trasmesso in modo periodico - Comunque, il valore del PDO è inviato solo in
dipendenza di eventi interni allapplicazione (ad
esempio se è cambiato rispetto lultima
trasmissione) - E la modalità più economica in termini di uso
di larghezza di banda, ma è sensibile ad errori
di trasmissione (se un valore non viene
trasmesso, esso non verrà più ritrasmesso)
30Meccanismi di trasferimento dei dati PDO
- Synchronous Remote (Sync RTR)
- E usata per realizzare trasmissioni sincrone
basate su Remote Frame. - Il device invia il valore del PDO dopo aver
ricevuto la "RTR" frame. - I dati sono aggiornati solo alla ricezione di un
SYNC object. - SYNC object può essere inviato manualmente o
ciclicamente (automatico). - Asynchronous Remote (Async RTR)
- Il device aggiorna ed invia il valore di PDO dopo
aver ricevuto una "RTR" frame.
31Meccanismi di trasferimento dei dati PDO
- Asynchronous, device profile
- Una frame è inviata alloccorrenza di un
Application Event, che e Device-Specific (ad
esempio ad ogni cambio di valore del PDO) - Questa modalità permette ottime prestazioni
real-time - Lo svantaggio è la saturazione della rete, se le
variazioni dei valori PDO occorrono
frequentemente (nellesempio citato prima) - Asynchronous, manufacturer profile
- La trasmissione è legata a quanto definito dal
produttore del device (manufacturer)
32Meccanismi di trasferimento dei dati PDO
Serve per evitare il blocco di PDO a bassa
priorità
33Meccanismi di trasferimento dei dati PDO
- Sincronizzazione dei Clocks
34Meccanismi di trasferimento dei dati PDO
35CANOpen in Applicom
36I/O Mapping and PDO Messages
37Configurazione PDO
- Sono possibili diversi modelli di comunicazione
impostabili pr ogni PDO - Synchronous Acyclic
- Syncronous Cyclic
- Synchronous Remote (Sync RTR)
- Asynchronous Remote (Async RTR)
- Asynchronous Manufacturer Profile
- Asynchronous Device Profile
38Programmazione
- La libreria Applicom CANOpen
- Appio.dll, Appio.lib, Appio.h
- Alcune funzioni di libreria
- IO_Init( wCard , status )
- IO_Exit( wCard , status )
- Funzioni di lettura prelevano gli inputs dei
devices presenti nella rete - La lettura di tutti gli ingressi è realizzata
tramite la chiamata ad una singola funzione
(IO_RefreshInput), che memorizza i dati in buffer
locali. - Tramite altre funzioni di lettura, è possibile
accedere ai dati nei buffer locali. - Funzioni di scrittura settano le uscite dei
devices presenti nella rete - La scrittura è realizzata tramite la chiamata ad
una singola funzione (IO_RefreshOutput), che
attinge i dati da buffer locali. - Tramite altre funzioni di scrittura, è possibile
scrivere (in precedenza) in tali buffer locali -
39Programmazione
- IO_RefreshInput( wCard , status )
- legge dallinterfaccia Applicom tutti i dati di
ingresso e gli stati dei devices presenti nella
rete (immagine dei device). - Questi valori non sono ritornati direttamente
allapplicazione, ma sono memorizzati nei buffers
locali. - Tutte le funzioni di lettura del tipo IO_ReadXXX
e le funzioni di accesso agli stati dei devices
accedono a questi buffers locali. - Lapplicazione non viene boccata
-
40Pogrammazione
- IO_ReadIxxx
- (ad esempio IO_ReadIByte)
- IO_ReadIByte(wCard, wEquip, Offset, Nb, TabByte,
Status ) -
41Programmazione Esempio
include ltwindows.hgt include ltstdio.hgt include
"appio.h" short wCard 1 / Board number
/ short neq 1 / Device number / short nb
/ Number of variables / short status / Status
/ long adr 0 / Address of first variable
/ unsigned char tablbyte2 / Table containing
the values / short i / For loop
counter / void main() IO_Init( wCard
,status)
- Modulo WAGO 16I/16Q
- Device 1
42Programmazione Esempio
short wCard 1 short neq 1 short nb
short status long adr 0 unsigned char
tablbyte2
case 4 printf("\n LETTURA di un solo
byte") IO_RefreshInput( wCard , status)
if (status) printf("\n problemi
relativi alla scheda") else nb1
printf("\n Inserisci il valore
dell'address byte (0-1) ") scanf(" ld" ,
adr) IO_ReadIByte(wCard, neq, adr,nb,
tablbyte, status ) if (!status)
printf("\n Valore del byte
numero ld ",adr) printf("
hd\n", tablbyte0) break
43Programmazione
- IO_RefreshOutput( wCard , status )
- Questa funzione viene usata per scrivere tutte le
uscite settate in precedenza nel buffer locale
(usando le funzioni IO_WriteXXX) nei devices
presenti nella rete - La funzione ritorna status 0 se qualche device è
non accessibile. - Se il device diviene nuovamente accessibile,
lultimo valore scritto nel buffer locale della
scheda sarà mandato al device
44Programmazione
- IO_WriteQxxx (ad esempio IO_WriteQByte)
- IO_WriteQByte(wCard,wEquip,Offset,Nb, TabByte,
Status ) -
45Programmazione Esempio
include ltwindows.hgt include ltstdio.hgt include
"appio.h" short wCard 1 / Board number
/ short neq 1 / Device number / short nb
/ Number of variables / short status / Status
/ long adr 0 / Address of first variable
/ unsigned char tablbyte2 / Table containing
the values / short i / For loop
counter / void main() IO_Init( wCard
,status)
- Modulo WAGO 16I/16Q
- Device 1
46Programmazione Esempio
short wCard 1 short neq 1 short nb
short status long adr 0 unsigned char
tablbyte2
case 1 printf("\n SCRITTURA di un solo
byte") printf("\n Valore del byte
da scrivere (-128 127) ")
scanf(" hd", tablbyte0) printf("\n
Valore dell'address byte (0-1) ")
scanf("ld", adr) nb1
IO_WriteQByte(wCard, neq, adr,nb, tablbyte,
status ) if (!status)
IO_RefreshOutput( wCard , status) break
47Programmazione SYNC, RTR
- E possibile che il Master trasmetta
- SYNC e RTR
- Viene utilizzato il meccanismo di
lettura/scrittura considerando un Virtual Device
0 - Si possono gestire max 64 Slaves
- Il Device 0 viene visto come composto da
- 65 byte per loutput (comandi) e 65 byte per
linput (conferma) - Entrambe le aree sono formate da
- Byte 0 Master commands
- Byte 1-64 1 byte per uno Slave
- Le uscite sono aggiornate tramite
IO_RefreshOutput() - Gli ingressi sono aggiornati tramite
IO_RefreshInput() - Larea degli ingressi è usata per la conferma
remota di ciascun comando inviato.
48Programmazione SYNC, RTR
- Byte 0 Area Output Master Commands Area
- Bit 0 Comando di trasmissione di un SYNC e di
una Remote Frame (il SYNC period deve essere
zero). - Bit 1 Comando di trasmisione di SOLO un SYNC (il
SYNC period deve essere zero). - Bit 2 Stop/resume nodeguarding.
- Bit 3 Toggle bit.
- Ogni comando ha effetto quando il Toggle bit
cambia - Tra ogni coppia di trasmissioni di comandi, il
Master deve attendere la conferma nellarea di
Input, leggendo il primo byte relativo al Master
STATUS area, organizzato come il Master Commands. - Il contenuto del byte dellarea STATUS deve
essere identico a quello dellarea di Commands.
49Programmazione SYNC, RTR
- Byte 1-64, Area Output Master Commands Area
- Larea di 64 bytes è dedicata alle operazioni dei
RTR TPDOs. - Un byte rappresenta un device (max 64) e può
essere sato per gestire fino a 7 PDOs del device - 1 bit per inviare una RTR per ogni PDO
configurato nel device - 1 "toggle bit, che deve cambiare di stato per
abilitare la trasmissione di una RTR. - Anche in questo caso, larea di input è
utilizzata come conferma, per ogni invio di un
comando - Per ogni comando inviato, larea di input
corrispondente deve assumere valori identici
50Programmazione SYNC, RTR
- Esempio di trasmissione di un RTR al Device 1,
TPDO2 - 1. Nel Byte 1 dellArea Output write 0x82.
- 2. Wait until the Byte 1 nellArea Input changes
to 0x82 (report). - 3. write 0x02 nel Byte 1 dellArea Output.
- 4. wait for 0x02 nel Byte 1 dellArea Input.
- 5. write 0x82 nel Byte 1 dellArea Output.
- 6. wait for 0x82 nel Byte 1 dellArea Input.
- 7. write 0x02 nel Byte 1 dellArea Output.
- 8. wait for 0x02 nel Byte 1 dellArea Input.
- 9. .
- Nota 0xesadecimale, 0x8210000010,
0x0200000010
51Esempio di ProgrammazioneSync RTR
- Synchronous Remote (Sync RTR)
- Il device invia il valore del PDO dopo aver
ricevuto la "RTR" frame. - I dati sono aggiornati solo alla ricezione di un
SYNC object. - SYNC object viene inviato manualmente
-
52Esempio di ProgrammazioneSync RTR
- Esempio di programma in C
- Il Master invia manualmente comandi di Sync (per
aggiornare PDO) e Remote Frame (RTR) per imporre
allo Slave laggiornamento e linvio di ingressi - Configurazione
- Device 1 con TPDO1
- Il Master legge il primo byte di ingresso del
device - Device 3 con TPDO2
- Il Master legge il secondo byte di ingresso del
device - Trasmissione periodica del SYNC object
Disabilitata.
53Esempio di ProgrammazioneSync RTR
unsigned char byBufferOut65 / AREA OUTPUT dei
comandi inviati dal Master/ unsigned char
byStatusRtr65 / AREA INPUT per la conferma
/ unsigned char byBufferIn65 / conterrà gli
ingressi che voglio leggere/ unsigned char
byToggleBit0x80 / 0x8010000000/ memset(
byBufferOut, 0, 65) byToggleBit 0x80 /OR
esclusivo, diventano tutti 0/ //Transmission of
a SYNC byBufferOut0 0x02 / 0x0200000010,
comando di un SOLO Sync/ // Write RTR commands
for device 1 TPDO1 byBufferOut1 byToggleBit
0x01 / OR 0x0100000001, device 1 - TPDO1/ //
Write RTR commands for device 3
TPDO2 byBufferOut3 byToggleBit 0x02 / OR
0x0200000010, device 3 TPDO2/
54Esempio di ProgrammazioneSync RTR
// Refresh data on the applicomIO board device
0 Equip 0 Offset 0 nb 4 //solo i primi 4
bytes ! IO_WriteQByte (wCard, Equip,Offset, nb,
byBufferOut, Status ) IO_RefreshOutput (wCard,
Status ) // Read RTR STATUSES do // Read
data on the applicomIO board device
0 IO_RefreshInput (wCard, Status ) Equip 0
Offset 0 nb 4 //solo i primi 4 bytes
! IO_ReadIByte (wCard, Equip, Offset, nb,
byStatusRtr, Status ) Ret memcmp(byStatusRtr,
byBufferOut,4) while (Ret ! 0) /while the
arrays are different/
55Esempio di ProgrammazioneSync RTR
// Read Input DATA from device 1 Equip 1
Offset 0 nb 1 /primo byte di
ingresso/ IO_ReadIByte (wCard, Equip, Offset,
nb, byBufferIn0, Status ) // Read Input
DATA from device 3 Equip 3 Offset 1 nb 1
/secondo byte di ingresso/ IO_ReadIByte (wCard,
Equip, Offset, nb, byBufferIn1, Status )