Dekódování dat zprávy na této sběrnici CAN

Pracuji se sběrnicí CAN a potřebuji pomoc s dekódováním dat zprávy.

Tady je ukázka dat, která vidím na sběrnici CAN.

root@petalinux:/var/volatile/tmp# /tmp/candump -n 10 can0 can0 4E5 [4] F0 16 00 00 can0 665 [8] 40 78 60 00 00 00 00 00 can0 5E5 [8] 4B 78 60 00 DB 00 00 00 can0 665 [8] 40 64 60 00 00 00 00 00 can0 5E5 [8] 43 64 60 00 E4 7D 5E 00 can0 665 [8] 40 41 60 00 00 00 00 00 can0 5E5 [8] 4B 41 60 00 27 02 00 00 can0 665 [8] 40 41 60 00 00 00 00 00 can0 5E5 [8] 4B 41 60 00 27 02 00 00 can0 665 [8] 40 6C 60 00 00 00 00 00 root@petalinux:/var/volatile/tmp# 

Nemohu přijít na to, jak vysledovat data zpět na konkrétní CAN zpráva sběrnice.

Moje zařízení má ID uzlu 101 (základ 10) a je to krokový motor StepIM. Zde je odkaz na příručku – http://servotronix.com/wp-content/uploads/dlm_uploads/2015/05/stepIM_CANopen_fw0.0.2.85_Rev.1.3.pdf . Zkusme tedy dekódovat poslední zprávu shora. To by bylo „ can0 665 8 40 6C 60 00 00 00 00 00

Nedaří se mi přijít na to, jak přeložit hexadecimální řetězec“ * 40 6C 60 .. „do příkazu, o kterém dokument pro krokový motor ví …

Komentáře

  • stepIM jsou s protokolem CANopen, což je vyšší protokol založený na sběrnici CAN. Vyměňte značku CAN za CANopen.

Odpověď

Až na první zprávu je to typické provoz SDO ( CANopen ) s páry požadavek / odpověď:

0x665 SDO request (range 0x600 - 0x67F, depending on the node ID) 0x5E5 SDO response (range 0x580 - 0x5FF, depending on the node ID) 

U prvního páru je mrtvý prozradí 0x4B v prvním bajtu odpovědi. To znamená, že vrácená data mají velikost dva bajty (pro jeden bajt a čtyři bajty je to 0x4F a 0x43). Hodnota 0x40 v prvním bajtu požadavku označuje, že se jedná o čtení požadavek (standard používá jiný výraz, " Nahrát ", s opačným významem jako na internetu (ke stažení) – je to z pohledu adresovaného zařízení).

ID CAN požadavku je 0x600 + ID uzlu. ID CAN odezvy je 0x580 + ID uzlu. Tedy:

665 A read request to the device with node ID 0x65 5E5 A read response from the device with node ID 0x65 

U SDO je index CANopen a subindex ve druhém, třetím a čtvrtém bajtu (nejméně významný bajt první pro index CANopen). Takže u prvního páru, 40 78 60 00, žadatel říká: " Zařízení v uzlu ID 0x65 (101), dejte mi uloženou hodnotu na 6078sub0 " .

V tomto případě informace proudí z adresovaného zařízení každému, kdo zadal požadavek (žadatele nelze vidět z protokolu sběrnice CAN, ale obvykle se jedná o centrální ovladač v systému nebo servisní nástroj běžící na PC (obvykle adaptér USB-CAN).

Proto se pro zobrazený provoz vytvářejí požadavky na čtení ( odpověď na poslední není zahrnuta v zaslaném protokolu sběrnice CAN):

6078sub0 (2 bytes, 0xDB00 = 219) 6064sub0 (4 bytes, 0x005E7DE4 - 6,192,612) 6041sub0 (2 bytes, 0x0227 - 551) 6041sub0 (2 bytes, 0x0227 - 551) 606Csub0 (?? bytes) 

Kupodivu se požadavek na 6041sub0 opakuje.

Navíc, i když SDO obvykle slouží pouze pro konfigurační informace, rozsah indexu CANopen 0x6000 až 0x6FFF se obvykle používá pro nekonfigurační informace, jako jsou naměřené veličiny nebo stav.

Ponoření do manuálu

Indexy / subindexy SDO lze vyhledat v příručce (viz ave zahrnuty skutečné hodnoty z ukázkového protokolu sběrnice CAN):

6078sub0 Motor current, 219 mA 6064sub0 "Position Actual Internal Value" is 6,192,612 6041sub0 Statusword, 0x0227 = 0000 0010 0010 0111, meaning: "ready to switch on", "switched on", "operation enabled", "quick stop" "remote" 606Csub0 "Velocity Actual Value". The value is not included, but it is a 32-bit signed integer. 

První zpráva

Za předpokladu, že první zpráva je také CANopen, 4E5 F0 16 00 00: Pro všechny zprávy CANopen CAN je ID čtyřbitový funkční kód (0-15) následovaný ID sedmibitového uzlu. V tomto případě 0x4E5 = 1001 1100101b. Kód funkce je tedy 1001b = 9, což znamená " PDO4, vysílat ". Směr toku informací pro CHOP (navzdory v tomto případě " vysílat ") je věcí definice (závisí na aplikaci ). ID uzlu je 1100101b = 0x65.

ID uzlu pro PDO je stejné jako pro SDO.

Informace v tomto PDO, " Vysílejte PDO 4 ", je obsažen v SDO 0x1A03, " Vysílejte parametr mapování PDO 4 ". Pokud nebyl změněn z výchozího nastavení, jsou data v PDO stejná jako SDO 0x60FAsub0, podepsané 32bitové celé číslo:

ovládací prvek úsilí jako výstup smyčky řízení polohy. Ve funkci řízení polohy je notace síly řízení závislá na režimu, a proto není specifikována.

Závěr

Motorové zařízení s ID uzlu 0x65 odesílá kontrolní úsilí (pravděpodobně v pravidelných časových intervalech) pomocí PDO .

Řídicí jednotka nebo okno monitoru v reálném čase v servisním nástroji čte a zobrazuje další měřené veličiny / stav ze stejného motorového zařízení pomocí SDO .

Komentáře

  • Pracuji s tímto druhem CAN data sběrnice na denní bázi, takže je to snadno rozpoznatelné. Přesná interpretace / význam však závisí na informacích o konkrétním systému. Myslel jsem, že tato otázka si zaslouží komplexní odpověď.

Odpověď

Nevysvětlili jste, co přesně váš zápis ukazuje, ale možná být ID zprávy, následovaný počtem datových bajtů v závorkách, následovaných skutečnými datovými bajty. Zdá se, že nic výslovně neuvádí, zda jsou ID 11 nebo 29 bitů. Snad jen pomocí 3 HEX číslic pro ID toto výpis označuje 11 bitová ID. Pokud ano, zobrazil by 8 HEX číslic pro 29 bitová ID.

Co vám tedy každý řádek (jak se zdá) ukazuje, je jedna zpráva CAN. K dekódování už není nic víc rozumíte zprávě CAN. Zobrazí se vám to výslovně.

Například poslední řádek říká, že byla viděna zpráva s ID 665h (1637 desetinně), že tato zpráva měla 8 datových bytů a že datové bajty byly (v HEXU) 40, 6C, 60, 0, 0, 0, 0 a 0. První tři by byly 64, 108 a 96 v desítkové soustavě.

Co se týče toho, co význam této zprávy je pro jakékoli zařízení, z něhož pochází, nebo má na něm působit, to je něco musíte vyhledat v dokumentaci konkrétních zařízení. Ta vrstva je nad CAN.

Moje zařízení má ID uzlu 101

Neexistuje žádný uzel ID v CAN, pouze ID zpráv. Pokud vaše zařízení používají koncept ID uzlu, pak je to něco zvláštního pro vrstvu protokolu nad CAN. Standard CAN vám s tím nemůže pomoci. Musíte nahlédnout do dokumentace konkrétního zařízení, která může odkazovat na protokol vyšší úrovně, který používá nad CAN, případně v samostatném dokumentu.

Komentáře

  • ' není to základní CAN, je to CANopen, jak je vidět v manuálu.
  • Podrobně jsem to rozpracoval v moje odpověď .

Odpověď

Zařízení používá protokol CANopen . CANopen je komunikační systém založený na CAN. Zahrnuje protokoly vyšší vrstvy a specifikace profilů.

Používá se v automatizaci. Existuje několik analyzátorů protokolů, které mají zjistit celou komunikaci. Automatizační systém využívající CANopen je architektura typu master / slave. Na wikipedii najdete nějaké informace o CANopen, ale není to tak triviální jako samotné CAN orientované na zprávy.

Komentáře

  • Ano, to je správně. Je to CANopen.

Odpověď

Chcete-li dekódovat komunikaci, musíte znát motorový CANopen Object Dictionary. Vypadá to, že TPDO a jejich obsah závisí na komunikaci a mapování objektů.

Abyste porozuměli protokolu, měli byste si prostudovat následující termíny z CANopen. – Object Dictionary – Process Data Objects (PDO) – komunikační parametry – mapovací parametry

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *