Díl 1 - Čtení dlouhého SDO, vyžadování jednotlivých segmentů
Díl 2 - Mapování objektů do PDO
Díl 7 - Nodeguarding a Heartbeat
Ve druhém díle tohoto seriálu o protokolu CANopen se podíváme na mapování dat do PDO. První co si ukážeme je přečtení aktuálního nastaveni mapování do Transmit PDO neboli TPDO. V případě, že budete takto experimentovat s vaším zařízením, počítejte s tím že výsledek může být odlišný. Stejně tak se může stát, že vaše zařízení nebude podporovat změnu mapování a má nastavené údaje v PDO takzvaně "natvrdo".
Nejprve si zjistíme aktuální stav nastavení mapování. K tomu opět použije v programu PP2CAN nástroj CANopen, na záložce SDO read si vygenerujeme dotaz na index 1A00h, subindex 0, což je počet namapovaných objektů v Transmit PDO 1. V odpovědi (zpráva s indexem 0 v logu přijatých zpráv) vidíme hodnotu 1. Je tak namapována do tohoto PDO jeden objekt slovníku. Následně odešleme dotaz se stejným indexem, avšak se subindexem 1. To je dotaz právě na tuto jednu položku.
V odpovědi je vidět že je namapován objekt s indexem 6000h, subindexem 1 a data mají délku 8 bitů. Význam objektu s indexem 6000h lze dohledat buď v dokumentaci k zařízení nebo v CiA dokumentaci. Tento index nalezneme konkrétně v CiA 401 - CANopen profile for modular I/O devices, jedná se položku Read Input 8-Bit.
V dalším kroku si zkusíme do TPDO1 (Transmit PDO 1) namapovat další položku. Namapovat lze pouze položky kde je mapování povoleno. To je uvedeno u každého objektu slovníku tady indexu + subindexu.
My si zkusíme přidat položku Polarity Input 8-Bit, index 6002h, subindex 1.
Při mapování se zadávají 3 parametry, index objektu, subindex a délka dat v bitech. Na záložce SDO Write si tedy vytvoříme tento požadavek:
Tedy do objektu 1A00h (TPDO1 mapping parameter), subindex 2 (za předchozí namapovaná data - tedy subindex 1) se pokoušíme mapovat index 6002 (B2 a B3), subindex 1 (B1), data jsou dlouhá 8 bitů (B0). Jelikož se jedná o 32 bitové slovo, nastavujeme počet datových bajtů které neobsahují data na 0 - červeně orámováno na předchozím obrázku..
Bohužel v logu vidíme odezvu Error/Abort - kód 80h. Z předchozího dílu víme jak si můžeme dekódovat chybový kód. Ten je Access Error - Object access unsupported.
Pokusíme li se přepsat subindex 0 indexu 1A00 na hodnotu 0, tedy nastavit, že do TPDO1 není namapován žádný objekt dostaneme tento výsledek:
Tedy zápis do indexu 1A00 není možný. Čím to je způsobeno? Je to tím že TPDO1 je nastavený jako validní a tak jej není možné modifikovat. Ke změně je nutno použít objekt TPDO communication parameter s hodnotou indexu 1800h. TPDO1 se pak nastavuje pomocí subindexu 1, v případě TPDO2 se používá index 1801h atd až po 19FF. Tyto objekty obsahují 32 bitovou hodnotu, která má tento význam:
Zkusíme si data tedy nejprve přečíst. 32 bitové slovo které získáme čtením je 40000181h. Bit 31 má hodnotu 0, z předchozí tabulky je tedy jasné že se jedná o nastavení: PDO is valid. Bit 30 má hodnotu 1, tedy no RTR allowed on this PDO, dále pak CAN ID pro TPDO 1 je 181h a jedná se o CAN zprávu ve standardním 11 bitovém formátu. Modifikujeme tedy tato data tak, aby bylo nastaveno: PDO is not valid. Bit 31 tedy nastavíme na 1, dostaneme tak hodnotu C0000181h. Tuto hodnotu zapíšeme zpět a zkusíme přečíst zpět, vše vidíme na logu který následuje.
Vše proběhlo v pořádku, můžeme se pokusit znovu nastavit mapování TPDO1.
Dolní log jsou odeslané data pomocí nástroje CANopen, horní pak přijatá odpověď.
Řádek 0: Index 1A00, subindex 0, nastavujeme počet mapovaných objektů na 0.
Řádek 1, index 1A00, subindex 1, mapujeme objekt 6000, subindex 1 - Din Read 8-bit, ten je dlouhý 8 bitů.
Řádek 2, index 1A00, subindex 2, mapujeme objekt 6002, subindex 1 - Din Polarity, ten je dlouhý 8 bitů
Řádek 3: Index 1A00, subindex 0, nastavujeme počet mapovaných objektů na 2.
Řádek 4: Index 1A00, subindex 0, čteme zpět pro kontrolu počet mapovaných objektů.
Řádek 5 a 6: Index 1A00, subindex 1 a 2, čteme zpět jak je nastaveno mapování.
Řádek 7: Index 1800, subindex 1, opět nastavujeme že TPDO1 je validní, ponecháváme stejný 11 bitový identifikátor 181h.
Řádek 8: Index 1800, subindex 1, čteme zpět a kontrolujeme nastavení z předchozího řádku.
Data v TPDO1 tak máme namapována, zbývá tedy si zvolit za jakých podmínek se bude zpráva odesílat na CAN. V tomto případě si zvolíme, že data se budou generovat jako odpověď na každou zprávu SYNC. To také nastavíme pomocí indexu 1800h a subindexu 2.
Dále se v nástroji CANopen přepneme na záložku SYNC a spustíme generování této zprávy na CAN sběrnici. Na obrázku je vidět že je nastaveno generování zprávy po 900ms.
Následně na záložce NMT aktivujeme NODE - zařízení.
V logu pak v mém případě jsou tato data:
Řádek 0: Index 1800, subindex 2, nastavení generování TPDO1 na každou přijatou zprávu SYNC.
Od řádku 1 v logu odeslaných dat pak vidíme že se spustilo generování zprávy SYNC v nástroji CANopen.
Na řádku 10 pak vidíme odeslání zprávy NMT - Start Remote node.(čas 22:40:37).
Od tohoto času pak vidíme v logu přijatých zpráv zprávu TPDO1 (identifikátor 180h) kterou nám odesílá zařízení jako odpověď na každý SYNC. Tato zpráva obsahuje 2 datové bajty dat která jsme si do tohoto PDO namapovali.
V dalším díle se podíváme na další způsoby jak se TPDO mohou generovat. Protože začneme tam kde jsme skončili, je vhodné mít rychlý způsob jak dosavadní nastavení zopakovat. Na tomto odkazu je ke stažení ZIP soubor, ve kterém je MSG soubor jež si můžete nahrát do seznamu předdefinovaných zpráv a celou sekvenci mapování PDO si zopakovat bez nutnosti vyplňovat data ručně. Alternativou je přehrání logu, který je v ZIPu uložen také. Přehrání je možné pomocí nástroje File sender.