Pāriet pie satura

NMEA2000 magistralės dekodavimas su PicoScope osciloskopu

Šiame straipsnyje pristatomas NMEA2000 (NMEA2K arba N2K) nuoseklusis dekoderis, skirtas PicoScope Automotive osciloskopui – specializuotas įrankis, užpildantis atotrūkį tarp neapdorotos įtampos analizės ir aukšto lygio CAN registravimo jūrinėje pramonėje. Nors fiziškai NMEA2000 remiasi J1939/CAN standartu, jis turi unikalių architektūrinių skirtumų – visų pirma tai, kaip įrenginiai identifikuoja patys save ir kaip perduoda didelius duomenų kiekius – todėl tiksliai diagnostikai reikia atskiro dekodavimo sprendimo.

Kas yra NMEA2000 dekoderis?

CAN (Controller Area Network) šiais laikais yra visur. Jei sukuriama kas nors, kas juda – ar tai būtų specialiai įrengtame kelyje, lauke, giliai po žeme kasykloje, vėjo jėgainės viršuje ar plaukiant per vandenynus – labai tikėtina, kad ten bus kokia nors CAN magistralė, per kurią keičiamasi duomenimis tarp daugybės šiuolaikinėje technikoje sumontuotų ECU.

Diagnozuojant su CAN susijusius gedimus, osciloskopas, pavyzdžiui, PicoScope, jau seniai yra pagrindinis įrankis. Jis ne tik užfiksuoja neapdorotus įtampos lygius magistralės vientisumui įvertinti ir parodo paketo struktūrą, bet ir nuoseklieji dekoderiai paverčia tą neapdorotą įtampą skaitinėmis reikšmėmis. Dekodavimas leidžia matyti paketą taip, kaip jį matytų ECU: pateikia informaciją apie CAN ID, paketo ilgį, duomenų laukus, paketo validumą ir tinklo patvirtinimą. Nors PicoScope Automotive osciloskopai nepakeičia CAN registratoriaus (CAN logger), daugelis PicoScope funkcijų užpildo atotrūkį tarp neapdorotos įtampos ir CAN registratoriaus, suteikdamos platesnį tinklo būklės vaizdą.

Per daugelį metų matėme daug su CAN susijusių nuosekliųjų dekoderių: klasikinį CAN, CANFD, CANXL, J1939, o dabar galime pristatyti NMEA2000.

NMEA2000 ekrano vaizdas su PicoScope 7 Automotive programine įranga tamsiuoju režimu

NMEA2000 (arba NMEA2K, arba N2K) standartas remiasi CAN protokolu, o fiziniame lygmenyje – ypač J1939 standartu. Jį prižiūri National Marine Electronics Association, o sukurtas jis tam, kad standartizuotų jūrinėje pramonėje naudojamų jutiklių ir ECU jungtis. Tai gali būti GPS, variklio duomenys, autopiloto funkcijos ar vėjo duomenys, kuriais reikia dalytis tarp kelių sistemų. 

Bazinėje plotmėje NMEA2K veikia tokia pat struktūra kaip ir klasikinis CAN, ir prireikus galėtumėte naudoti standartinį CAN nuoseklųjį dekoderį. Taip pat yra daug panašumų su J1939, įskaitant PGN (Parameter Group Numbers), kurie apibrėžia perduodamų duomenų tipą (pvz., variklio apsukas, GPS koordinates, gylį). Teoriškai galėtumėte naudoti ir J1939 dekoderį ir gautumėte panašius dekodavimo rezultatus; tačiau yra keletas esminių skirtumų, dėl kurių nematytumėte viso vaizdo. 

Turbūt svarbiausias diagnostikos požiūriu yra šaltinio adresas. Apie J1939 šaltinio adresą esame rašę gana išsamiai: skirtingai nei klasikiniame CAN, jis turi standartizuotą šaltinio adresų sąrašą, leidžiantį nustatyti, kuris ECU išsiuntė pranešimą. Tai taip pat leidžia sukurti nuorodų failą (link file), kuris šešioliktainę šaltinio adreso reikšmę paverčia kažkuo prasmingu, pavyzdžiui, variklio ECU, ABS ECU ar transmisijos ECU. NMEA2K daro šiek tiek kitaip.

Kodėl NMEA2000 svarbus technikams ir inžinieriams

Naudodami būtent NMEA2000 dekoderį, o ne bendrinį CAN ar J1939 dekoderį, technikai gauna galimybę matyti siunčiančiojo ECU NAME (vardą) ir daugiakadrių sekų vientisumą. Toks detalumo lygis yra kritiškai svarbus lokalizuojant konfigūracijos klaidas ir su pertrūkiais pasireiškiančius ryšio gedimus sudėtingose jūrinės elektronikos aplinkose.

Kokios yra NMEA2000 dekoderio savybės

  • Dinaminis adresavimas: skirtingai nei standartiniuose pramoniniuose tinkluose su fiksuotais ID, N2K įrenginiai adresą pasiskelbia įsijungę. Šis „dinaminis adresavimas“ reiškia, kad įrenginio šaltinio adresas gali pasikeisti tarp maitinimo ciklų, todėl komponento unikaliam NAME ir serijos numeriui patikrinti reikia naudoti PGN 60928 (ISO Address Claim).
  • Duomenų puslapio bitas (Data Page Bit): kad būtų išvengta susidūrimo su J1939 protokolais, N2K nustato „Data Page Bit“ į 1. Tai paslenka parametrų grupės numerius (PGN), o neteisinga konfigūracija čia gali lemti, kad ECU jūriniame tinkle perduos netinkamus duomenis.
  • Fast Packets (daugiakadris pranešimų perdavimas): duomenims, viršijantiems 8 baitus, N2K naudoja „Fast Packet“ protokolą. Jis leidžia vienoje sekoje išsiųsti iki 223 baitų. PicoScope N2K dekoderis automatiškai nustato sekos ID (Sequence ID) ir kadrų skaitiklį (Frame Counter), todėl inžinieriai gali be vargo sekti nutrauktus ar iš kelių dalių sudarytus pranešimus.

Dinaminis adresavimas

Skirtingai nei J1939 tinkluose, kur ECU turi fiksuotus adresus (pvz., variklis visada 0x00), NMEA2K adresai yra dinaminiai.

Įrenginiai savo adresą pasiskelbia kaskart įjungus tinklo maitinimą. Jei pasikeičia ECU įsijungimo seka, įrenginiai gali apsikeisti šaltinio adresų ID.

  • Pavyzdys: GPS mazgas pirmadienį gali turėti šaltinio adresą 10, o antradienį – 11, nes naujas radaro mazgas pirmasis pasiskelbė adresą 10.

Dėl šios priežasties niekada neturėtume pasikliauti vien šaltinio adresu komponentui identifikuoti skirtinguose įrašuose ar užvedimo cikluose. 

Kad nustatytume pasiskelbtus šaltinio adresų ID, galime naudoti PGN 60928, ISO Address Claim pranešimą. Jame yra unikalus įrenginio serijos numeris ir, svarbiausia, NAME. Šį PGN kiekvienas ECU išsiunčia įsijungiant tinklui, todėl jį galima susieti su šaltinio adresu, taigi ir su konkrečiu ECU. Nors pasinaudoti integruotomis PicoScope nuosekliojo dekoderio nuorodų failo galimybėmis nebūtų įmanoma, šaltinio adresui ir NAME nustatyti technikams teks remtis NMEA2000 dekoderiu – o tai bus itin svarbu identifikuojant ECU diagnostikos metu.

Tinklui atsibudus šis procesas turėtų įvykti iškart. Naudodami trigerius ir filtrus galite pagauti pranešimus tinklo atsibudimo metu ir svarbųjį PGN 60928, kad nustatytumėte, kokie šaltinio adresų ID pasiskelbiami.

Duomenų puslapio bitas (Data Page Bit)

Kitas esminis skirtumas – Data Page Bit naudojimas. Šis „bitas“ praneša tinklui, kad reikia tikėtis su NMEA2K susijusių duomenų, ir yra nustatytas į 1. Esantis pranešimo antraštėje, jis pakeičia PGN numerius, kad nekiltų painiavos su J1939. Pavyzdžiui, J1939 atveju standartinio variklio parametro PGN būtų 0x0F004, 61444. Jei pereitume į NMEA2K tinklą, Data Page Bit nustatomas į vienetą, tad dabar turime 0x1F004, 126980. 

Kodėl tai svarbu?

Nagi, jei dirbtumėte su ECU, kurį galima naudoti tiek J1939, tiek NMEA2K tinkle, jį reikia teisingai sukonfigūruoti. J1939 tinklui sukonfigūruotas ECU netinkamai perduos NMEA2K būdingus PGN su Data Page Bit, nustatytu į 0. Dėl to NMEA2K tinkle gaunamas neteisingas PGN numeris, nes Data Page Bit turėtų būti nustatytas į 1.

Fast Packets

Kaip ir daugelyje tinklų, dažnai pasitaiko, kad ECU reikia išsiųsti daugiau duomenų, nei leidžia 8 baitai. Todėl NMEA palaiko daugiakadrius pranešimus per Fast Packet. Skirtingai nei J1939 ar kitų tinklų daugiakadriuose paketuose, NMEA2K išlaiko tą patį CAN pranešimo ID, todėl lengviau identifikuoti pranešimo turinį.

Kad tinklui būtų pranešta, jog prasideda daugiakadris pranešimas, kiekvienas Fast Packet sekos kadras pirmame duomenų baite turi valdymo baitą su sekos skaitikliu ir kadrų skaitikliu. 

Jei kadrų skaitiklis prasideda nuo 0, tai praneša tinklui, kad tuoj bus siunčiamas daugiakadris pranešimas. Sekos skaitiklis viso pranešimo metu išlieka toks pat, o kadrų skaitiklis su kiekvienu pranešimu didėja. Pirmajame išsiųstame pranešime taip pat nurodomas duomenų baitų, kurie seks, kiekis. Pavyzdžiui, žemiau esančiame paveikslėlyje (1 pav.) parodytas daugiakadris pranešimas su PGN 0x1F904 ir šaltinio adresu 0x08. Pirmasis baitas yra 0xC0; jį galima išskaidyti, kad rastume seką. Norėdami tai padaryti, pirmiausia konvertuojate 0xC0 į dvejetainę sistemą = 1100 0000. Pirmieji 3 bitai žymi sekos ID, taigi 110 = 0x06, o kadrų skaitiklis yra likę 5 bitai 00000 = 0x0. Tai suteikia mums daugiausia 31 galimą siunčiamą kadrą.

Po pirmojo baito kitas baitas nurodo laukiamų duomenų baitų kiekį, kuris šiame pavyzdyje yra 0x22 = 34 DEC. Tai reiškia, kad toliau seks 34 baitai duomenų.

NMEA2000 ekrano vaizdas su PicoScope 7 Automotive programine įranga šviesiuoju režimu

Fast Packet gali būti gana ilgas – vienoje sekoje siunčiama daugiausia 223 baitai. Sekai pasibaigus, tas pats ECU gali pradėti kitą, tačiau sekos skaitiklis bus kitoks. Tai paprastas būdas atskirti skirtingus pranešimus.

Aiškus NMEA2K nuosekliojo dekoderio skiriamasis bruožas yra tas, kad dekodavimo lentelėje pateikiami sekos ir kadro ID. Naudojant NMEA2K nuoseklųjį dekoderį tai daroma automatiškai. Tai leidžia greitai identifikuoti tarpusavyje susijusius pranešimus.

Jei ECU prireiktų išsiųsti aukštesnio prioriteto pranešimą, jis gali šią seką pertraukti. Kai pranešimas ar pranešimai baigiami siųsti, sekos ir kadrų skaitikliai gali tęsti nuo tos vietos, kurioje buvo sustoję, ir išsiųsti likusią pranešimo dalį.

Santrauka

Atsisiųskite PicoScope 7 Automotive programinę įrangą nemokamai ir naudokitės pažangiu NMEA2000 nuosekliuoju dekodavimu. Ženkite toliau nei bendrinė CAN analizė: tiksliai lokalizuokite jūriniams tinklams būdingus gedimus, sekite daugiakadrius duomenis ir tiksliai patikrinkite ISO Address Claim pranešimus. Išbandykite visavertį laivo tinklo būklės vaizdą jau šiandien.

Straipsnis išverstas iš Pico Technology bibliotekos su gamintojo leidimu. Originalas: picoauto.com. PicoScope įrangą rasite mūsų kataloge.

Manitou: DEF lygio daviklio diagnostika dekoduojant J1939 CAN