CANopen a a SERVOSTAR 400/600

Komunikujeme s měniči SERVOSTAR 400/600

Tento materiál je vypracován jako kombinace volného překladu různých materiálů dostupných na internetu a vlastních praktických zkušeností.

 

Díl první: Úvod

    Servostar 600/400 jsou univerzální servozesilovače pro řízení servopohonů od firmy Kollmorgen Seidel GmbH & Co. Jejich distributorem je například firma TGdrives. Pro komunikaci s tímto zařízením lze využít sběrnice CAN nebo PROFIBUS. My se samozřejmě budeme zabývat rozhraním CAN. Zařízení pracuje podle standardu CANopen CiA301 (Communication profile for Industrial Systems ). V prvních částech tohoto seriálu se tedy budeme seznamovat s implementací tohoto komunikačního standardu.

    Specifikace sběrnice CAN prvních dvou vrstev modelu ISO OSI, tj. vrstvy fyzické a linkové. Aby byla usnadněna vzájemná interoperabilita zařízení různých výrobců, vznikly různé high-level protokoly, které přesně definují způsob komunikace zařízení dané kategorie a definují tak aplikační vrstvu dle ISO OSI. CANopen rozšiřuje definici CAL o další služby a definuje komunikační profily pro často užívaná zařízení v průmyslové automatizaci. Pro zájemce o hlubší prostudování doporučuji tyto dokumenty:

        - CiA DS-102: CAN Physical Layer for Industrial Applications

        - CiA DS-301: CAL-based communication profile for industrial systems

        - CiA DSP-302: Framework for programmable CANopen devices

        - CiA DR-303-2:  Representation of SI units and prefixes

        - CiA DR-303-3: Indicator Specification

        - CiA DR-303-4: LSS - Layer Setting Services and Protocol

        - CiA DSP-305: CANopen LSS Services and Protocol

        - CiA DSP-306: Electronic Data Sheet (EDS) Specification for CANopen

        - CiA DS-307: Framework Maritime Electronics¨

        - CiA DSP-420-1:  CANopen Profiles for Extruder Downstream Devices

        - CiA DS-401: Device profile for I/O modules

        - CiA DS-402: Device profile for drives and motion control

        - CiA DS-403: Device profile for human machine interfaces

        - CiA DS-404: Device profile for measuring devices and closed-loop controllers

        - CiA DS-405: Interface and Device Profile for IEC 61131-3 Programmable Devices

        - CiA DS-406: Device profile for encoders

        - CiA DS-407: Public transportation - Passenger Information Systems

        - CiA DS-408: Device profile fluid power technology proportional valves and hydrostatic transmissions

        - CiA DS-409: Vehicle door control

        - CiA DS-410: Device profile for inclinometer

        - CiA DS-412: Medical Devices

        - CiA DS-413: Truck Gateways

        - CiA DS-414: Weaving Machines

        - CiA DS-415: Device profile for road construction machinery

        - CiA DS-416: Building Door Control

        - CiA DS-417: Lift Control Systems

        - CiA DS-418: Device profile for battery modules

        - CiA DS-419: Device profile for battery chargers

        - CiA DS-420: Profiles for extruder downstream devices

        - CiA AN-801: Automatic bit-rate detection

        - atd.

    Popis funkcí a parametru zařízení se nachází v adresáři objektu (object dictionary), který obsahuje část s obecnou specifikací zařízení, jako jeho název, výrobce, komunikační parametry atd., a potom část, která obsahuje určitou funkčnost zařízení, parametry a data. Každá položka v adresáři se nazývá objekt a je určena 16-bitovým indexem a 8-bitovým subindexem.

    Rozlišují se dva základní mechanismy přenášení zpráv na CANopen. Procesní data určená pro časově kritickou výměnu, nazývaná Process Data Objects (PDO) a služební zprávy, jejichž doručení není časově kritické, nazývané Service Data Objects SDO. SDO se používají především pro přenášení a nastavení parametru při konfiguraci zařízení nebo pro přenášení delších zpráv. Zpráva na CANu muže obsahovat maximálne 8 bytu dat. V případě že není možné přenést data v jedné zprávě, musí být zpráva rozsegmentována do několika zpráv. Maximální délka dat není omezena.

    Procesní data se přenášejí bud cyklicky, při změně nebo na vyžádání jako broadcastové zprávy  Rozmístění aplikačních objektu (položek z adresáre objektu) do přenášeného objektu PDO je určeno pomocí tzv. mapování PDO – tato informace je uložena v adresáři objektu a muže být změněna podle požadavku aplikace.

    CANopen využívá standardních 11-bitových identifikátorů. Identifikátory jsou rozděleny do několika skupin dle následující tabulky:

 CAN Identifikátor  Hex  Kód  Účel
 0 000  0000b  NMT Services
 1-127 001-07F  -  free
 128 080  0001b  Sync Message
 129-255 081-0FF  0001b  Emergency Messages
 256 100  0010b  Time-Stamp Message
 257-384 101-180  -  free
 385-511 181-1FF  0011b  Transmit Process Data Objects 1(TPDO1)
 512 200  -  free
 513-639 201-27F  0100b  Receive Process data Objects 1 (RPDO1)
 640 280  -  free
 641-767 281-2FF  0101b  Transmit Process Data Objects 2 (TPDO2)
 768 300  -  free
 769 - 895 301-37F  0110b  Receive Process data Objects 2 (RPDO2)
 896 380  -  free
 897-1023 381-3FF  0111b  Transmit Process Data Objects 3 (TPDO3)
1024 400  -  free
1025-1151 401-47F  1000b  Receive Process data Objects 3 (RPDO3)
1152 480  -  free
1153-1279 481-4FF  1001b  Transmit Process Data Objects 4 (TPDO4)
1280 500  -  free
1281-1407 501-57F  1010b  Receive Process data Objects 4 (RPDO4)
1408 580  -  free
 1409-1535 581-5FF  1011b  Service Data Objects
 1536 600  -  free
 1537-1663 601-67F  1100b  Service Data Objects
 1664-1792 680-700  -  free
 1793-1919 701-77F  1110b  Node Guarding (Boot-Up) Messages
 1920-2015 780-7DF  -  free
 2016-2031 7E0-7EF  -  Reserved for NMT, LMT and DBT Services

    Vlastní identifikátor (COB-ID, Communication Object ID) má tedy následující strukturu:

10 9 8 7 6 5 4 3 2 1 0
Kód ID modulu (node ID)

 

    Priorita zprávy je dána hodnotou identifikátoru. Platí že zprávy s nižším COB-ID mají vyšší prioritu. Priorita se uplatňuje při kolizi přenášených dat na sběrnici, kdy dojde k přerušení odesílání zprávy s nižší prioritou. Zprávy NMT, SYNC a Time-Stamp jsou typu broadcast.

NMT

(Network Management)

    Zpráva se skládá z identifikátoru a dvou datových bytů. Identifikátor má hodnotu 0. První byte je označován jako CS (Command Specifier), druhý byte obsahuje identifikátor node ID. Node ID bývá definován HW přepínačem. Může obsahovat hodnoty 1-127. Pak je zpráva určena právě jednomu nodu. Je-li node ID rovno 0, je zpráva určen všem jednotkám. 

    Command Specifier může nabývat těchto významů a hodnot:

 Funkce  CS
 Start Remote Node  1
 Stop Remote Node  2
 Enter Pre-Operational State 128
 Reset Node 129
 Reset Communication 130

    Příště budeme pokračovat popisem NMT a probereme i další skupiny zpráv.

Díl druhý: Popis CANOpen

    CAN open slave zařízení se může nacházet v jednom ze tří stavů:

            - Pre-Operational State (jen SDO*, konfigurace PDO*)

            - Operational_State (SDO* i  PDO*)

            - Prepared_State (jednotka disablována, není možná komunikace SDO/PDO/emergency*)

    (* vysvětleno později)

    Po připojení zařízení (CANopen slave) k napájení přejde zařízení do stavu Pre-Operational.

    Je-li jednotka ve stavu Pre-Operational je možno ji přepnout do stavu:

            - Operational příkazem Start Remote Node

            - Prepared State příkazem Stop Remote Node

            - Resetovat příkazem Reset Node nebo Reset Communication

    Ve stavu Operational je možno přepnou do stavu:

            - Prepared State příkazem Stop Remote Node

            - Pre-Operational State příkazem Enter Pre-Operational State

            - Resetovat příkazem Reset Node nebo Reset Communication

    Ve stavu Prepared je možno ji přepnout do stavu:

            - Pre-Operational State příkazem Enter Pre-Operational State

            - Operational příkazem Start Remote Node

            - Resetovat příkazem Reset Node nebo Reset Communication

 

SYNC

    PDO zprávy které mohou obsahovat různé měřené veličiny - stavy mohou být konfigurovány tak aby se odesílaly synchronně při obdržení zprávy SYNC. Tato zpráva má hodnotu identifikátoru 128 a neobsahuje žádná data (počet datových bytů je nulový).

EMERGENCY

    Tyto zprávy jsou generovány zařízením, dojde-li k závažné chybě. Zpráva je při vzniku chyby generována pouze jednou při vyniku této události. Chyba je uložena v Error registru, objekt 1001h. Identifikátor zprávy má rozsah 129-255d (kód 0001b+module ID). Datová část zprávy má následující strukturu:

EEC ER MEF
2 bajty 1 bajt 5 bajtů

    EEC    - Emergency Error Code

    ER - Error Register

    MEF - Manufacturer-specific Error Field

 

    Bity error registru mají tento význam

Bit

Význam

0

Generic Error 

1

Current 

2

Voltage 

3

Temperature 

4

Communication 

5

Device profile specific 

6

Reserved 

7

Manufacturer specific 

 

Hodnoty v poli Emergency Error Code mají tyto významy:

 

Hodnota (hex)

Význam
00xx Error Reset or No Error
10xx Generic Error
20xx Current
21xx Current, device input side
22xx Current inside the device
23xx Current, device output side
30xx Voltage
31xx Mains Voltage
32xx Voltage inside the device
33xx Output voltage
40xx Temperature
41xx Ambient Temperature
42xx Device Temperature
50xx Device Hardware
60xx Device Software
61xx Internal Software
62xx User Software
63xx Data Set
70xx Additional Modules
80xx Monitoring
81xx Communication
90xx External Error
F0xx Additional Functions
FFxx Device specific

  Time-Stamp

    Time Stamp message (ID 256) má délku 6 bajtů a obsahuje počet milisekund od půlnoci a počet dnů od 1. ledna 1984. Toto 48 bitové pole v datové části zprávy má následující strukturu:

        - unsigned28 ms od půlnoci

        - 4 bity nevyužit

        - unsigned16 dny od 1. ledna 1984

    Tato zpráva není servozesilovačem SERVOSTAR 600 podporována.

Díl třetí: SDO - Service Data Objects

    SDO zprávy jsou určeny pro přístup k adresáři aplikačních objektů. Zpráva má vždy délku 8 bajtů. Vlastní data mají délku 4 bajtů. Jsou-li data delší než 4 bajty je zpráva rozdělena do několika 7 bajtových segmentů. Pro n segmentů je třeba (n+1)*2 zpráv. Na každou zprávu master command odpovídá jednotka slave zprávou reponse. Data jsou uložena ve formátu little endian (intelovský formát).

    Adresář objektů (Object Dictionary) obsahuje objekty, které jsou nezbytné pro zobrazení všech vlastností a parametru zařízení, pokud tyto vlastnosti a parametry mají být přístupné prostřednictvím sběrnice CAN. Jestliže objekt s určitým indexem obsahuje několik dalších položek označených příslušnými sub-indexy, pak je hodnota nejvyššího využitého sub-indexu uložena v položce se sub-indexem 0. Indexy se používají pro takzvané profily zařízení. Standardní profily jsou definovány v rozmezí indexu 0x6000 – 0x9FFF. Pro funkce specifikované určitým výrobcem je vymezeno rozmezí indexu 0x2000 – 0x5fff. Hrubou mapu objektů zobrazuje následující obrázek.

CANopen Object Dictionary

    Čtení objektu z adresáře: master požaduje data z adresáře objektů, délka dat je do 4 bajtů

 Identifikátor DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

 110 0iii iiii

(1536 + node ID)

Command Object Index Sub-index  Reserved (0-0-0-0)

     Bajt Command má tvar 010000000b.

Command: aaabbbbb  CAL Multiplexed Domain Transfer Protocol 
aaa  010 (scs = 2: initiate upload response)
bbbbb  00000 (not used) 

    Slave vrací požadovaná data:

 Identifikátor DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

 101 1iii iiii

(1408 + node ID)

Reply Object Index Sub-index  Data

    Bajt Reply má tuto strukturu:

Reply: aaabcces  CAL Multiplexed Domain Transfer Protocol 
aaa  010 (scs = 2: initiate upload response)
b  0 (not used) 
cc  (number of data bytes ([9-n to 8]) that do NOT contain data) 
e  1 (e=1: expedited transfer) 
s  1 (s = 1: data set size is indicated) 

    V případě že objekt obsahuje více než 4 bajty, musí být rozsegmentována do více zpráv. Po inicializační požadavku, který se skládá ze dvou zpráv jsou čteny 7 bajtové segmenty data. Na každý segment připadají 2 zprávy.

    Master požaduje objekt z jednotky slave takto:

 Identifikátor DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

 110 0iii iiii

(1536 + node ID)

Command Object Index Sub-index  Reserved (0-0-0-0)

    Slave vrací:

 Identifikátor DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

 101 1iii iiii

(1408 + node ID)

Reply Object Index Sub-index  Length

  

Reply: aaabcces  CAL Multiplexed Domain Transfer Protocol 
aaa  010 (scs = 2: initiate upload response) 
b  0 (not used) 
cc  00 (not valid) 
e  0 (e = 0: normal transfer) 
s  1 (s = 1: data set size is indicated) 

     Celkový počet bajtů v následujícím přenosu je uložen v poli Length v odpovědí kterou zasílá slave jednotka. DB4 obsahuje LSB, DB7 pak MSB. Následně  jsou segmenty zasílány z jednotky slave po požadavku mastera:

 Identifikátor DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

 110 0iii iiii

(1536 + node ID)

Command Object Index Sub-index  Reserved (0-0-0-0)

DB0 - command má následující tvar:

Command: aaabcccc  CAL Multiplexed Domain Transfer Protocol 
aaa  011 (scs = 3: upload segment request) 
b  1/0 (toggle bit), bit se mění v každém segmentu dat, první požadavek má tento bit nastaven na 0, odpověď generovaná slave jednotkou zkopíruje do odpovědi hodnotu bitu z požadavku  
cccc  0000 (not used) 

Slave pak zasílá příslušný segment data:

 Identifikátor DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

 101 1iii iiii

(1408 + node ID)

Reply Data

    

Reply: aaabcccs  CAL Multiplexed Domain Transfer Protocol 
aaa  000 (scs = 0: upload segment respond)
b  1/0 (toggle bit) 
ccc  (number of data bytes ([9-n to 8]) that do NOT contain data) 
e  = 1 pokud se jedná o poslední segment  


Stejné mechanismy jako pro čtení dat z adresáře objektů existují i pro zápis data. Následuje tedy popis struktury zpráv při zápisu.

V případě že data která budeme do objektu zapisovat obsahují 4 a méně bajtů, jsou potřeba 2 zprávy. První je zpráva od mastera se zapisovanými daty, druhou pak potvrzení od slave jednotky. Master tedy zasílá zprávu tohoto tvaru:

 Identifikátor DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

 110 0iii iiii

(1536 + node ID)

Command Object Index Sub-index  Data

Kde Command má tuto strukturu:

Command: aaabcces  CAL Multiplexed Domain Transfer Protocol 
aaa  001 (scs = 1: initiate download request)
b  0 (not used) 
cc  (number of data bytes ([9-n to 8]) that do NOT contain data) 
e  1 (e=1: expedited transfer) 
s  1 (s = 1: data set size is indicated) 

Slave pak odpovídá takto:

 Identifikátor DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

 101 1iii iiii

(1408 + node ID)

Reply Object Index Sub-index  Reserved (0-0-0-0)

 

Reply: aaabbbbb  CAL Multiplexed Domain Transfer Protocol 
aaa  011 (scs = 3: initiate download response)
bbbbb  00000 (not used) 


Pokud data objektu obsahují více než 4 bajty, je použit opět přenos po segmentech. Master nejprve inicializuje zápis takto:

 Identifikátor DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

 110 0iii iiii

(1536 + node ID)

Command Object Index Sub-index  Length

 

Command: aaabcces  CAL Multiplexed Domain Transfer Protocol 
aaa  001 (scs = 1: initiate upload response)
b  0 (not used) 
cc  (not valid)
e  1 (e=0: normal transfer) 
s  1 (s = 1: data set size is indicated) 

Následně slave potvrdí požadavek takto:

 Identifikátor DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

 101 1iii iiii

(1408 + node ID)

Reply Object Index Sub-index  Reserved (0-0-0-0)

 

Reply: aaabbbbb  CAL Multiplexed Domain Transfer Protocol 
aaa  011 (scs = 3: initiate download response)
bbbbb  00000 (not used) 

Dále pak master generuje jednotlivé segmenty dat:

 Identifikátor DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

 110 0iii iiii

(1536 + node ID)

Command Data

 

Command: aaabcccs  CAL Multiplexed Domain Transfer Protocol 
aaa  000 (scs = 0: download segment request)
b  1/0 (toggle bit) 
ccc  (number of data bytes ([9-n to 8]) that do NOT contain data) 
e  = 1 pokud se jedná o poslední segment  

Každý segment je potvrzen slave jednotkou:

 Identifikátor DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

 101 1iii iiii

(1408 + node ID)

Reply Reserved (0-0-0-0-0-0-0)

 

Reply: aaabcccc  CAL Multiplexed Domain Transfer Protocol 
aaa  001 (scs = 1: download segment response)
b  1/0 (toggle bit) 
cccc  0000 (not used) 

    V dalším díle budeme pokračovat v popisu SDO, popíšeme si chyby, které mohou vzniknout při čtení/zápisu do adresáře objektů. Nudnou teorii pak doplníme předvedením praktické komunikace se servozesilovačem Servostar 600.

Díl čtvrtý: SDO - Service Data Objects: od teorie k praxi

    Dojde li během čtení nebo zápisu k výskytu chyby, odešle slave místo normální odpovědi chybovou zprávu. Obdobně master muže také přerušit komunikaci zasláním chybové zprávy (Abort Transfer). Tato zpráva má následující tvar:

 Identifikátor DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

110 0iii iiii 

(1536 + node ID)

master to slave

Command Object Index Sub-index Additional Code Error  Code Error  Class

101 1iii iiii 

(1408 + node ID)

slave to master

 

Command: aaabbbbb  CAL Multiplexed Domain Transfer Protocol 
aaa  100 (scs/ccs = 4: abort domain transfer)
bbbbb  00000 (not used) 

  

     Chyba je dána hodnotou Error Code (DB6) a Error Class (DB7), některé chyby jsou pak rozvinuty hodnotou v poli Additional Code.

Description Error Class Error Code Additional Code
Toggle bit not alternated (not in LMB) 5 Service Error  3 Parameter Inconsistent  0
Command specifier not valid  5 Service Error  4 Illegal Parameter  0
Object does not exist  6 Access Error  2 Object non-existent  0
Attempt to read a write only Object  6 Access Error  1 Object access unsupported  0
Attempt to write a read only Object  6 Access Error  1 Object access unsupported  0
Index value is reserved for further use (00A0h-0FFFh and A000h-FFFFh)  6 Access Error  4 Invalid address  0
Access failed due to hardware  6 Access Error  6 Hardware fault  0
Sub-index does not exist  6 Access Error  9 Object attribute inconsistent  11h
Object length too high  6 Access Error  7 Type conflict  12h
Object length too low  6 Access Error  7 Type conflict  13h
Data cannot be transferred / Invalid signature  8 Other Error  0 20h
Parameter value out of range  6 Access Error  9 Object attribute inconsistent  30h
Sub-parameter value out of range  6 Access Error  9 Object attribute inconsistent  33h
Maximum value < Minimum value  6 Access Error  9 Object attribute inconsistent  36h
Object cannot be mapped to PDO  6 Access Error  4 Invalid address  41h
PDO length exceeded  6 Access Error  4 Invalid address  42h
General internal incomptibility  6 Access Error  4 Invalid address  44h

    Dokumentace k servozesilovači Servostar nerozlišuje skupiny Additional Code-Error Code-Error Class, uvádí chyby jako 32 bitové slovo takto:

Servostar 600 - CANopen Abort Codes

     Nyní tedy něco praktického, budeme požadovat zjistit informace o tom, co máme vlastně připojeno za zařízení na sběrnici. K tomu můžeme použít objekt 1018h. Každý výrobce a jeho produkt má přiděleno identifikační číslo kterým jej můžeme identifikovat, takzvané Vendor ID a Product Code. Jednotlivé položky tohoto objektu vidíme na následujícím obrázku. Tento popis také představuje standardní formu, jak jsou v dokumentaci jednotlivé aplikační objekty popisovány.

CANopen SDO 1018   

    První položka objektu Identity Object s indexem 1018h, subindex 0 se jmenuje "Number of entries" udává počet podobjektů (subindexů) objektu. Rozsah hodnot subindexu pro podobjekty je 1..4. Na subindexu 1 je uloženo Vendor ID, dále pak subindex 2 obsahuje Product Code, subindex 3 obsahuje Revision Number a obsahem posledního subindexu 4 je Serial Number. 

    V případě že budeme testovat zařízení s Node ID 1 a budeme používat program PP2CAN, bude zpráva kterou vyplníme vypadat takto:

    Zpráva bude mít identifikátor ve standardním formátu, jelikož se jedná o zprávu SDO zasílanou masterem jednotce slave s node ID 1, bude identifikátor mít hodnotu 1537d  (601h). Délka SDO zpráv je vždy 8. DB0 - command bude mít hodnotu 64d tj. 40h. V DB1 a DB2 zadáváme index objektu 1018h, v DB1 je dolní bajt, zapsán dekadicky tj. 24d (18h), v DB2 pak horní bajt 16d (10h). Protože zjišťujeme Vendor ID, bude mít subindex hodnotu 01. Data budou nulová.

Odpověď kterou nám jednotka zašle si popíšeme v dalším pokračování. Dále si rozebereme zaslání dalších dotazů a povelů.

Díl pátý: Komunikujeme

    Minulou kapitolu jsme ukončili odesláním SDO zprávy, která nám měla vrátit Vendor ID. V dokumentaci od Servostaru 600 se dočteme, že hodnota Vendor ID je typu UNSIGNED32 a jeho hodnota je v hexadecimálním formátu 00 00 00 6Ah, tzn. Kollmorgen - Seidel GmbH & Co. KG. Nejnižší bajt s hodnotou 6Ah je dekadicky 106, ostatní bajty jsou nulové. To koresponduje s odpovědí, kterou obdržíme zpět a kterou vidíme na následujícím obrázku.

    Při našich dalších pokusech s tímto zařízením budeme předpokládat, že měnič má přednastavené motion tasky, které budeme chtít prostřednictvím CAN sběrnice spouštět. Vlastní nastavení motion tasku prostřednictvím protokolu CANopen bude obsahem některé z dalších kapitol. Nastavení těchto tasků můžeme prozatím provést prostřednictvím RS232 a dodávaného konfiguračního SW, který je pro tyto účely daleko přehlednější. Naším cílem tedy bude namapovat několik PDO objektů pro příjem dat, provést inicializaci najetím na referenční bod (homing) a spouštět naše přednastavené motion tasky. Pro zjednodušení práce jsem připravil databázi předdefinovaných zpráv pro diagnostický SW PP2CAN. Tu můžete stáhnout zde. Pro seznámení s tímto programem a různé off-line analýzy si můžete stáhnout i demo verzi tohoto SW, která je omezena na použití pouze virtuálního CAN portu. Stáhnout můžete zde.

    Nejprve provedeme reset nodu příkazem Reset node. Jedná se o zprávu NMT, tato zpráva má tvar:

Description Id Length DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
Reset node 0 2 129 1 - - - - - -
  00h 02h 81h 01h - - - - - -
 

    Dokumentace k Servostaru 600 i specifikace CANOpen využívá hojně zápis hodnot identifikátorů a datových bajtů v hexadecimálním tvaru. SW PP2CAN je orientován především na dekadický zápis, proto budou u zpráv uváděny oba tvary.

    Jen pro zopakování, zprávy NMT mají vždy identifikátor 0 a délku 2. DB2 je nazýván Command Specifier a hodnota 129 znamená příkaz Reset Node. V DB1 je pak uvedeno Node ID. Tento identifikátor může obsahovat hodnoty adres jednotek 1-127. Hodnota 0 pak znamená že příkaz je určen všem jednotkám.

    Servostar 600 po obdržení tohoto příkazu provede svůj reset. Průběh resetu můžeme sledovat i na displeji měniče. Zde se v průběhu resetu zobrazuje číslo verze firmware. Vlastní reset trvá u tohoto měniče přibližně 13 sekund. Po ukončení resetu obdržím z měniče tuto zprávu:

Description Id Length DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
Reset node - Answer 129 8 0 0 0 0 0 0 0 0
  81h 08h 00h 00h 00h 00h 00h 00h 00h 00h

    Identifikátor 129 této zprávy nám napovídá, že se jedná o zprávu  Emergency. Nulová data pak říkají, že nedošlo k žádné chybě. V dalším kroku budeme provádět namapování několika objektů. Nejprve odešleme zprávu s tímto tvarem:

Description Id Length DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
1st  transmit-PDO select 1537 8 47 0 42 0 1 0 0 0
  601h 08h 2Fh 00h 2Ah 00h 01h 00h 00h 00h

    Jedná se o zprávu SDO. Hodnota 16-bitového indexu v hexadecimálním vyjádření je 2A00h, subindex má hodnotu 0. Pokud vyhledáme význam indexu 2A00h v dokumentaci (tu si můžete stáhnout zabalenou ve formátu pdf zde), zjistíme pro tento index název objektu: "1st  transmit-PDO select". V tomto okamžiku se dostáváme k procesu který se nazývá mapování PDO. Objekt s indexem 2A00h slouží k výběru předdefinovaného TPDO objektu. V našem případě se jedná o TPDO s indexem 1. V případě servozesilovače Servostar pro který platí profil DSP-402 (Device profile for drives and motion control) jde o stavové slovo. (index 6041h). V čem spočívá mapování znázorňuje následující obrázek. Ten pochází z jakéhosi českého materiálu, který jsem stáhnul na internetu, link si bohužel už nepamatuji. Chtěl bych poděkovat autorovi, škoda že se pod něj nikdo nepodepsal.

    Aplikační objekty, které jsou určeny indexem a subindexem jsou mapovány do zprávy PDO. Můžeme do této zprávy namapovat statusy zařízení, různé parametry a stavy jako například stavy I/O, polohy, rychlosti u pohonů atd.

    Na zaslání zprávy "1st  transmit-PDO select" reaguje servozesilovač touto zprávou:

Description Id Length DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
1st  transmit-PDO select 1409 8 96 0 42 0 0 0 0 0
Answer 581h 08h 60h 00h 2Ah 00h 00h 00h 00h 00h

     V případě že by došlo k chybě (například neexistující objekt), obdrželi bychom odpověď jak je popsáno ve  čtvrtém dílu. V našem případě však k žádné chybě nedošlo.

Díl šestý: Komunikujeme II

    Následující tabulka je převzata z dokumentace k měniči Servostar a představuje definované Tx PDO objekty. Přednastavené mapování nelze měnit. Pro uživatelské mapování jsou k dispozici objekty 37-40. Pokud chcete používat tyto uživatelsky konfigurovatelné objekty, je třeba provést jejich konfiguraci prostřednictvím SDO 1A00h - 1A03h.

    Naším úkolem tedy je spouštět prostřednictvím CANu motion tasky. Provedeme tedy konfiguraci měniče tak, aby jako reakci na zprávy SYNC odesílal zpět do PC status, manufacturer status, rychlost a polohu. K tomu bude třeba nakonfigurovat TPDO. PDO 22 objekt obsahuje status registr, polohu a rychlost, PDO objekt 23 pak obsahuje manufacturer status, což je status registr výrobce zařízení. Motion tasky budeme chtít spouštět prostřednictvím RPDO. V tabulce, která následuje, je uveden přehled předdefinovaných Rx PDO. Z tabulky je vidět, že pro spouštění motion tasku je možno použít předdefinovaný PDO 35.

    Nejprve je však třeba provést najetí pohonu, který je prostřednictvím měniče Servostar řízen na referenční bod. Tento proces se nazývá homing a slouží k inicializaci odměřování pohonu. Parametry homingu je taktéž možno konfiguravat prostřednictvím CANu, nicméně budeme předpokládat že jsou již nastaveny prostřednictvím RS232 a dodávaného konfiguračního SW od firmy TGdrives.  K detekci ukončení procesu homing využijeme bitu 17 v manufacturer status registru. Pokud je tento bit nastaven na 1, je referenční bod nastaven. Vlastní konfigurace tedy proběhne prostřednictvím sekvence těchto zpráv:


Description Id Length DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
1st  transmit-PDO select 1537 8 47 0 42 0 23 0 0 0
  601h 08h 2Fh 00h 2Ah 00h 17h 00h 00h 00h

    Vybereme PDO23 jako první TPDO. PDO obsahuje status a manufacturer-specific status. SDO 2A00 slouží k výběru předdefinovaného Tx PDO.


Description Id Length DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
1st TPDO reaction to every SYNC 1537 8 34 0 24 2 1 0 0 0
  601h 08h 22h 00h 18h 02h 01h 00h 00h 00h

    Nastavujeme, že chceme aby Servostar odesílal TPDO 1 po obdržení zprávy SYNC. SDO 1800 slouží k nastavení TPDO komunikačních parametrů. Subindex 02 nastavuje parametr transmission type, hodnota 1 pak znamená, že má být zpráva odeslána při každém obdržení zprávy SYNC.


    Pomocí SDO 2A01 a 1801 nastavíme TPDO2 tak , aby po každé obdržené SYNC zprávě zaslal PDO 22.

 

Description Id Length DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
2nd  transmit-PDO select 1537 8 47 1 42 0 22 0 0 0
  601h 08h 2Fh 01h 2Ah 00h 16h 00h 00h 00h

 

Description Id Length DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
2nd TPDO reaction to every SYNC 1537 8 34 1 24 2 1 0 0 0
  601h 08h 22h 01h 18h 02h 01h 00h 00h 00h

Description Id Length DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
1st RPDO - Motion task 1537 8 43 0 38 0 35 0 0 0
  601h 08h 2Bh 00h 26h 00h 23h 00h 00h 00h

     Prostřednictvím SDO 2600 vybereme PDO 35. Prostřednictvím RPDO 1 pak bude Servostar přijímat příkazy pro spuštění jednotlivých motion tasku. 


Description Id Length DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
Enable 1537 8 43 64 96 0 15 0 0 0
  601h 08h 2Bh 40h 60h 00h 0Fh 00h 00h 00h

    Tímto příkazem provedeme prostřednictvím SDO 6040 Enable pohonu. SDO 6040 je řídící slovo (Control word). Má 16 bitů a význam jednotlivých bitů zobrazuje následující tabulka:

 

 

    Další tabulka zobrazuje nastavení bitů pro jednotlivé příkazy zadávané prostřednictvím tohoto slova. Obě tabulky jsou převzaty z dokumentace k tomuto měniči. Definice je však součástí předpisu CiA DS-402: Device profile for drives and motion control. V našem případě zadáváme hodnotu řídícího slova 000Fh, což odpovídá příkazu Enable Operation.

 


    Pokud v tomto okamžiku zašleme příkaz NMT Start Remote Node a začneme taktéž generovat zprávy SYNC, budeme do PC dostávat data z TPDO1 A TPDO2. To je výhodné, neboť z manufacturer status registru a již zmíněného bitu 17 se dozvíme, o nalezení referenčního bodu a tedy o ukončení homingu, jehož spuštění bude následovat.


Description Id Length DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
Homing mode 1537 8 47 96 96 0 249 0 0 0
  601h 08h 2Fh 60h 60h 00h F9h 00h 00h 00h

Aktivaci módu Homing provádíme rostřednictvím SDO 6060 - Modes of operation. Následně nastavíme řídící slovo prostřednictvím SDO 6040 na Start homing. V modu Homing má bit 4 tohoto řídícího slova význam Start homing.

Description Id Length DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
Start homing 1537 8 43 64 96 0 31 0 0 0
  601h 08h 2Bh 40h 60h 00h 1Fh 00h 00h 00h

V okamžiku kdy je homing dokončen, můžeme začít spouštět jednotlivé motion tasky prostřednictvím RPDO1. Pokud máme nakonfigurován motion task 1 například na najetí na nějakou středovou hodnotu rozsahu posuvu pohonu jako v mém případě, je možno tento motion task spustit zasláním následujícího příkazu.

Description

Id

Length

DB0

DB1

DB2

DB3

DB4

DB5

DB6

DB7

Motion task 1

513

1

1

-

-

-

-

-

-

-

 

201h

01h

01h

-

-

-

-

-

-

-


  Tuto uvedenou sekvenci zpráv je možno načíst do diagnostického SW PP2CAN prostřednictvím databáze předdefinovaných zpráv, která je k dispozici ke stažení zde. Tato databáze je určena pro zařízení s adresou 1 tak jako i zprávy uvedené v textu. Obsahuje také zprávy, které odesílá Servostar zpět jako odpovědi na jednotlivé příkazy SDO.


Seriál CANopen a PP2CAN

Díl 1 - Čtení segmentovaného SDO

Díl 2 - Mapování objektů do PDO

Díl 3 - Odesílání TPDO

Díl 4 - Nástroj PDO mapping

Díl 5 - CANopen FD USDO

Díl 6 - CANopen Safety: SRDO

Díl 7 - Nodeguarding a Heartbeat

Díl 8 - Objekt 1010h - save