Kapitola 5
Stručný popis protokolu CANopen

CANopen definuje objekty, které jsou přístupné nadřízené vrstvě (obvykle cílové aplikaci). Objekty se adresují čísly 0 až 65535(0xFFFF). Jednotlivé objekty mohou být logická hodnota, celé i desetiné číslo, text nebo obecné pole bajtů (tzv. DOMAIN). Dále objekt může být pole nebo struktura výše uvedených typů. K jednotlivým prvkům se potom přistupuje pomocí subindexu, přičemž subindex 0 udává počet prvků. Tato struktura se nazývá Object Dictionary a platí následující pravidla:

0x0000 ... 0x0FFF

Reservováno pro definici typů; při komunikaci se nepoužívá

0x1000 ... 0x1FFF

Mají přesně daný význam a definují zejména, jak se data (hodnoty objektů v Object Dictionary) předávají po sběrnici CAN mezi jednotlivými stanicemi.

0x2000 ... 0x5FFF

mohou se libovolně použít aplikací

0x6000 ... 0xFFFF

jsou definovány aplikačním profilem; pokud například zařízení podporuje profil DS402(servozesilovače, řízení motorů) pak je 0x6040 řídící slovo(s přesně daným významem jednotlivých bitů), 0x6063 aktuální poloha, atd.

Povinná část obsahuje následující objekty(jde je o základní sadu; pozdější rozšíření specifikace doplňuje například objekty pro multiplexed-PDO nebo konzoli operačního systému):

Index (hex) Object type Name Data type Acc M/O
1000 VAR device type UNSIGNED32 ro M
1001 VAR error register UNSIGNED8 ro M
1002 VAR manufacturer status register UNSIGNED32 ro O
1003 ARRAY pre-defined error field UNSIGNED32 ro O
1004 - reserved for compatibility reasons - - -
1005 VAR MESSAGE-ID SYNC UNSIGNED32 rw O
1006 VAR communication cycle period UNSIGNED32 rw O
1007 VAR synchronous window length UNSIGNED32 rw O
1008 VAR manufacturer device name Vis-String const O
1009 VAR manufacturer hardware version Vis-String const O
100A VAR manufacturer software version Vis-String const O
100B - reserved for compatibility reasons - - -
100C VAR guard time UNSIGNED16 rw O
100D VAR life time factor UNSIGNED8 rw O
100E - reserved for compatibility reasons - - -
100F - reserved for compatibility reasons - - -
1010 ARRAY store parameters UNSIGNED32 rw O
1011 ARRAY restore default parameters UNSIGNED32 rw O
1012 VAR MESSAGE-ID TIME UNSIGNED32 rw O
1013 VAR high resolution time stamp UNSIGNED32 rw O
1014 VAR MESSAGE-ID EMCY UNSIGNED32 rw O
1015 VAR Inhibit Time EMCY UNSIGNED16 rw O
1016 ARRAY Consumer heartbeat time UNSIGNED32 rw O
1017 VAR Producer heartbeat time UNSIGNED16 rw O
1018 RECORD Identity Object Identity(23h) ro M
1019 .. 11FF - reserved for future extension - - -
1200 .. 127F RECORD 1st to 128th Server SDO parameter SDO Parameter(22h) ro O
1280 .. 12FF RECORD 1st to 128th Client SDO parameter SDO Parameter(22h) ro O
1300 .. 13FF - reserved for future extension - - -
1400 .. 15FF RECORD 1st to 512th receive PDO Parameter PDO CommPar(20h) rw M/O
1600 .. 17FF RECORD 1st to 512th receive PDO mapping PDO Mapping(21h) rw M/O
1800 .. 19FF RECORD 1st to 512th transmit PDO Parameter PDO CommPar(20h) rw M/O
1A00 .. 1BFF RECORD 1st to 512th transmit PDO mapping PDO Mapping(21h) rw M/O
přičemž použité struktury mají následující prvky:

Data mezi jednotlivými stanicemi se vyměňují buď mechanismem SDO(Service Data Object) nebo mechanismem PDO(Process Data Object). Mechanismus SDO funguje tak, že jedna strana (tzv. client) pošle dotaz, ve kterém je index a subindex objektu a pokud je to zápis, tak i zapisovaná hodnota. Druhá strana (tzv. server) přijme požadavek a odpoví požadovanou hodnotu (resp. zapíše hodnotu a pošle potvrzení) nebo chybový kód. Pokud se data nevejdou do jednoho packetu/zprávy (tj. pokud jsou delší než 4byte), rozdělí se na více zpráv. Message ID pro SDO zprávy definují objekty 0x1200 až 0x127F (každý objekt pro jednu stanici, tj. tímto způsobem lze komunikovat s až 128 stanicemi) pro server a 0x1280 až 0x12FF pro klienta.

Mechanismus PDO funguje tak, že data (opravdu jen vlastní data bez dalších údajů) z několika objektů jsou poskládána do jedné zprávy a odeslána. Přijímací strana pozná podle Message ID co je to za data a nastaví je do příslušných objektů (obecně i obvykle jsou to jiné objekty než na vysílací straně). Takovýchto PDO přenosů (vysílacích i přijímaných) může být definováno na každé stanici více (až 512 - viz popis object dictionary, ale některá zařízení podporují méně nebo je mají nastaveny napevno). Pro nastavení Message ID ,periody a dalších parametrů vysílaných PDO slouží objekty/parametry 0x1800 až 0x19FF, přičemž pořadí hodnot ve zprávě (tj. hodnoty kterých objektů z object dictionary se posílají) určují objekty/parametry 0x1A00 až 0x1BFF, tj. 1.PDO má parametry v objektu 0x1800 a přiřazení hodnot v objektu 0x1A00, 2.PDO má parametry v objektu 0x1801 a přiřazení hodnot v objektu 0x1A01, atd. Pro přijímaná PDO se totéž definuje v objektech 0x1400 až 0x15FF a 0x1600 až 0x17FF.

V předchozím textu bylo ukázáno, jak se v CANopen definují různé zprávy. V zásadě lze pro každý typ zprávy definovat Message ID libovolně, jen je potřeba dodržet pravidlo, že dvě stanice nesmí vysílat stejné Message ID. Aby se toto usnadnilo, jsou některé hodnoty pro daný účel dopručené/implicitní a některé zakázané. Situaci shrnuje následující tabulka:

Typ zprávy MessageID poznámka
NMT 0 nelze změnit
- 1 rezervováno pro pozdější použití
SYNC 128(0x80) lze změnit v objektu 0x1005
EMERGENCY 128(0x80)+<NodeID> lze změnit v objektech 0x1014, 0x1015
TIMESTAMP 256(0x100) lze změnit v objektech 0x1012, 0x1013
- 256(0x100)+<NodeID> rezervováno pro pozdější použití
PDO1(tx) 384(0x180)+<NodeID> nastavení viz text
PDO1(rx) 512(0x200)+<NodeID> nastavení viz text
PDO2(tx) 640(0x280)+<NodeID> nastavení viz text
PDO2(rx) 768(0x300)+<NodeID> nastavení viz text
PDO3(tx) 896(0x380)+<NodeID> nastavení viz text
PDO3(rx) 1024(0x400)+<NodeID> nastavení viz text
PDO4(tx) 1152(0x480)+<NodeID> nastavení viz text
PDO4(rx) 1280(0x500)+<NodeID> nastavení viz text
SDO(tx) 1408(0x580)+<NodeID> rezervováno; nesmí se používat k jiným účelům
SDO(rx) 1537(0x600)+<NodeID> rezervováno; nesmí se používat k jiným účelům
- 1760(0x6E0) rezervováno pro pozdější použití
NMT Error 1793(0x700)+<NodeID> rezervováno; nesmí se používat k jiným účelům;
Control lze změnit v objektech 0x1016, 0x1017
- 2020(0x780) reservováno pro pozdější použití
- 2020(0x780)+<NodeID> reservováno pro pozdější použití

Detailní popis všech objektů, formát SDO packetů a pod. je ve specifikaci CANopen (v souboru 301_v04000201.pdf).