Jak definovat data

Začínáte pracovat s CAN sběrnicí a chcete sledovat data? Zde jsou dva příklady jak na to v programu PP2CAN.

Příklad  1: Sledování dat definovaných v normě FMS standard nebo SAE J1939

Většinu dat u protokolu FMS nebo SAEJ1939 se dá sledovat podle takzvaného PGN. Podívejme se na následující obrázek který popisuje strukturu identifikátoru u protokolu J1939:

Část PGN je tvořena 18 bity. Bit R-reserved, někdy také nazýván Extended data page, u J1939 je 0. Bit DP je Data page. Definuje stánku dat PDU.Dále pak následují dva bajty. První z nich se jmenuje PF-PDU format. Je li hodnota tohoto bajtu v rozsahu 0 až 239, jedná se o formát PDU 1. Druhý bajt pak má význam cílové adresy kam jsou data zasílána.  Pokud je však první bajt v rozsahu  240 až 255, má druhý bajt význam Group extension a jedná se o formát PDU2-ypráva je broadcast.

Podíváme li se do FMS normy například na zprávu, která nese informaci o otáčkách motoru, zjistíme, že PGN je definováno jako hodnota 0x00F004. Druhý bajt PF má hodnotu F0, tedy 240 dekadicky, jedná se tak o formát PDU2. Pokud se jedná o běžný systém s jedním motorem (jedny otáčky), lze v programu PP2CAN toto využít k definování identifikátoru a masky pro monitorování otáček. V tento okamžik tak nepotřebujeme znát hodnotu zdrojové adresy (SA) ani priority, využijeme možnosti maskování identifikátoru. 

Při práci s protokolem J1939 je vhodné v Options nastavit zobrazování identifikátoru zprávy v hexadecimálním formátu a také v 29 bitovém formátu. U nástroje Signál receiver se toto nastavení volí samostatně při editaci signálu.

Nastavíme tedy identifikátor na hodnotu: 0xF00400

Masku nastavíme na hodnotu: 0xFFFF00

Příjde li po CANu zpráva například 0x0CF00401 provede se logický součin identifikátoru zprávy s touto maskou, tedy:

0x0CF00401 - identifikátor
AND
0x00FFFF00 - maska
-------------------------
0x00F00400 - výsledek
 
Jelikož výsledek odpovídá nastavenému identifikátoru, jedná se o požadovanou zprávu.
Poznámka: v praxi bude spíše hodnota identifikátoru mít hodnotu 0x0CF00400 - tedy zdrojová adresa bude 0x00.

- aktivovat volbu zadávání 29 bitového formátu u rozšířeného identifikátoru a povolit rozšířený (extended) identifikátor

- do pole Extended ID zapsat hodnotu 0xF00400 (ta se konvertuje na dekadickou hodnotu)

- do pole Ext. ID mask zapsat hodnotu 0xFFFF00

- nastavit pozici prvního bitu dat na 24 bit (DB3) a délku dat na 16 bitů

- nastavit měřítko na 0.125 (1/8 otáčky na bit)

- zapsat název signálu (RPM)

- přidat signál do seznamu

Tímto jsme definovali v nástroji Signal receiver sledování otáček - RPM podle SAE J1939, nebo případně FMS normy.

 

Příklad  2: Sledování dat u protokolu CANopen a zpráv SDO

V tomto příkladu si popíšeme sledování pozice servopohonu řízeného protokolem CANopen. Prvni co potřebujeme zjistit je Node ID. Pokud se jedná o fungující systém, lze zjistit jaké Node ID se na CANu vyskytují pomocí nástroje Node scan.

V našem příkladu budeme předpokládat že se jedná o Node ID 2. Požadavek na data bude mít identifikátor CAN zprávy 600h + Node ID, tedy 602h = 1538 dekadicky. Pokud pozice na CANu samo o sobě nechodí, pro vyžadování můžeme použít tento identifikátor.

Identifikátor zprávy s odpovědí bude mít hodnotu 580h + Node ID, tedy 582h = 1410 dekadicky.

U protokolu CANopen však data identifikuje index a subindex. Tento údaj leží v datové části. Jak konkrétní hodnotu zjistit? Nejlépe z dokumentace od výrobce. Ta obvykle uvádí skutečně podporované indexy a subindexy. Na obrázku je příklad dokumentace v manuálu.

Pokud dokumentace neuvádí podrobnosti, lze je zjistit z příslušného profilu, v našem případ Cia402. Některé profily lze zdarma získat na stránkách www.can-cia.org.  Druhou metodou je soubor EDS který zařízení popisuje a poskytuje jej obvykle výrobce.

V našem případě má aktuální pozice index 6064h, subindex 0 a jedná se o 32 bitovou hodnotu typu INT. Pro vytvoření zprávy se přepneme na stránku SDO read a naeditujeme si zprávu s tímto indexem objektu.

- jedná se o odpověď na čtení objektu - volba Read Dictionary Object - response, command má tak hodnotu 67.

- Node ID je nastaveno na 2, identifikátor zprávy tak má hodnotu 1410 dekadicky

- do pole Object index zadáme hodnotu indexu, tady zapíšeme x6064, hodnota se sama konvertuje na dekadickou hodnotu

- Subindex má hodnotu 0

Pokud klikneme pravým tlačítkem do volného místa dialogu, zobrazí se kontextové menu ve kterém vybereme Copy. Tím se zpráva vloží do clipboardu. Následně otevřeme Signál receiver a jeho nastavení. Opět klikneme do volného místa v dialogu nastavení (Settings) a z menu vybereme Paste. Tím se naeditovaná zpráva z nástroje CANopen-SDO read - response vloží do nastavení Signal receiveru.

U datových bajtů potřebujeme zakliknout volbu, že hodnota DB0 až DB3 se má kontrolovat - akceptuje se pouze pokud hodnota těchto bajtů je v příchozí zprávě stejná.

Data ve zprávě SDO leží od DB4 - tedy od 32 bajtu. Víme že data jsou typu INT32, tedy typu SIGNED a mají délku 32 bitů.

Následne již jen zadáme název a pomocí Add přidáme do seznamu.

V případě že požadovaná data na CANu sama nechodí a chceme je sledovat, je možné například použít pro periodické dotazy nástroj Sync a tvar požadavku naeditovat opět v nástroji SDO read, tentokrát se bude jednat o Read Dictionary Object - request.