ASCII PLC-adatokhoz: decimális, hexadecimális és vezérlőkódok
Ismerje meg, hogyan jelennek meg az ASCII-karakterek, a decimális értékek, a hexadecimális bájtok és a vezérlőkódok a PLC-karakterláncokban és a soros üzenetekben, valamint egy gyakorlatias módszer...
Az ASCII továbbra is elterjedt a PLC-projektekben, mivel számos ipari eszköz bájtonként cserél szöveget. A vonalkódolvasók, címkenyomtatók, mérlegek, hajtások, soros átjárók és kezelőterminálok gyakran karakterkódokként jelenítik meg a parancsokat és a mérési értékeket. Azok a mérnökök, akik képesek a karakterek, a decimális értékek és a hexadecimális bájtok között váltani, gyorsabban hárítják el az ilyen kapcsolatok hibáit.
Mit határoz meg az ASCII?
Az eredeti American Standard Code for Information Interchange egy hétbites karakterkészlet. 128 értéket határoz meg, 0-tól 127-ig számozva. A 0 és 31 közötti értékek, valamint a 127 vezérlőkarakterek. A 32 és 126 közötti értékek nyomtatható karakterek, köztük betűk, számjegyek, írásjelek és a szóköz.
Az IETF által tárolt RFC 20 specifikáció dokumentálja a kódpozíciókat és azok szándékolt jelentését. A modern rendszerek általában nyolcbites bájtban tárolnak egy ASCII-karaktert. A legmagasabb bit szabványos ASCII esetén nulla marad.
A decimális, hexadecimális és bináris érték ugyanaz a bájt
Egy PLC-címke ugyanazt az értéket többféle számformátumban is megjelenítheti. A nagy A betű decimálisan 65, hexadecimálisan 41, binárisan pedig 01000001. A 0 számjegy decimálisan 48, hexadecimálisan pedig 30. Ezek nem különböző karakterek. Ugyanannak a numerikus mintának a különböző megjelenítései.
A hexadecimális forma üzembe helyezéskor hasznos, mert egy bájt elfér két hexadecimális számjegyben. A csomagrögzítések, a soros monitorok és az eszközök kézikönyvei szintén gyakran hexadecimális formában jelenítik meg a bájtértékeket. A decimális forma sokszor egyszerűbb, amikor a PLC-utasítások egészszám-konstansokat várnak.
A vezérlőkódok fontosak az ipari üzenetekben
Számos soros protokoll vezérlőkaraktereket használ elválasztóként. A kocsivissza decimálisan 13, hexadecimálisan pedig 0D. A soremelés decimálisan 10, hexadecimálisan pedig 0A. A szöveg eleje hexadecimálisan 02, míg a szöveg vége hexadecimálisan 03. Előfordulhat, hogy egy eszköz figyelmen kívül hagy egy érvényes parancsot, ha hiányzik a szükséges lezáró karakter.
Ne feltételezd, hogy minden eszköz CR/LF-et használ. Egyesek csak CR-t igényelnek. Mások nyomtatható elválasztót, rögzített üzenethosszt vagy ellenőrző bájtot használnak. Ellenőrizd a pontos keretet a gyártó protokollkézikönyvében.
Hogyan válnak a PLC-karakterláncok bájttömbökké?
A PLC-platformok eltérően tárolják a karakterláncokat. Egyesek az aktuális hosszt a karakteradatok előtt helyezik el. Mások rögzített tömböt foglalnak le, és nullbájttal zárják le a szöveget. Amikor az adatok átlépik a protokollhatárt, a fogadó eszköz bájtokat lát a vezérlő belső karakterlánctípusa helyett.
Vizsgáld meg a deklarált karakterlánchosszt és a mögöttes puffert is. Az aktuális hosszon túli elavult bájt megjelenhet az elküldött adatokban, ha egy rutin a teljes puffert küldi. Töröld a célpuffert, vagy csak az aktív karakterszámot küldd el.
Gyakorlati diagnosztikai módszer
- Rögzítsd a ténylegesen elküldött bájtokat soros monitorral, protokollelemzővel vagy az átjáró diagnosztikai oldalán.
- Írd le az egyes bájtokat hexadecimális formában, és képezd vissza a nyomtatható értékeket karakterekké.
- Jelöld meg a keretező bájtokat, a lezáró karaktereket, az elválasztókat, a hosszamezőket és az ellenőrző összegeket.
- Hasonlítsd össze a rögzítést az eszköz kézikönyvével, beleértve a szóközöket és a kis- és nagybetűket is.
- Ismételd meg a rögzítést egy ismerten megfelelő üzenettel, és hasonlítsd össze a bájtpozíciókat.
Ez a bájtszintű megközelítés elkülöníti a formázási hibákat a kábelezési, átviteli sebességgel kapcsolatos és paritáshibáktól. Ha a rögzítés olvasható, de hiányos szöveget mutat, összpontosíts a karakterlánc összeállítására. Ha minden bájt hibás, először ellenőrizd a fizikai és soros beállításokat.
Gyakori implementációs hibák
Egy számjegy összetévesztése a numerikus értékével
Az „5” karakter ASCII szerinti decimális értéke 53, nem pedig az 5-ös egész számérték. Egy mért szám szöveggé alakításához formázási rutin szükséges. A nyers egész szám karakterpufferbe másolása ehelyett vezérlőbájtot eredményez.
A hexadecimális szöveg és a bináris bájtok keverése
A „41” szöveg két karaktert tartalmaz: a 34-es és a 31-es hexadecimális értéket. Egy hexadecimális 41 értékű bájt az A betűt jelenti. Döntsd el, hogy a protokoll ember által olvasható hexadecimális szöveget vagy nyers bináris adatot vár.
Az ASCII-n túli kódolás figyelmen kívül hagyása
Az ASCII az angol betűket és a szimbólumok korlátozott készletét fedi le. Az UTF-8 ugyanazokat a bájtértékeket használja az első 128 karakterhez, a nem ASCII-karakterek azonban több bájtot használnak. Egy régebbi eszköz elutasíthatja ezeket a bájtokat, vagy helytelenül számolhatja őket.
Tervezési útmutató karbantartható PLC-kódhoz
Tartsd a protokollformázást egyetlen rutinban. Nevezz el konstansokat a vezérlőkódokhoz ahelyett, hogy numerikus literálokat szórnál szét a létradiagramban vagy a strukturált szövegben. Üzembe helyezéskor naplózd a végleges küldési puffert hexadecimális formában. A projekt dokumentációjába is vegyél fel példákat.
Ha egy protokoll túllép az egyszerű szöveges keretezésen, használj meghatározott állapotgépet. Kövesd külön a vételi pozíciót, az időtúllépést, a keret állapotát és az érvényesítés eredményét. Ez megkönnyíti az újrapróbálkozások és a hibás üzenetek diagnosztizálását.
Az általánosabb adatkezelési mintákért lásd: tömbök bejárása PLC-rendszerekben. Hálózatba kapcsolt eszközökhöz a Modbus TCP-eszköz üzembe helyezéséről szóló útmutató további keretezési és üzembe helyezési háttérrel szolgál.
Üzembe helyezési ellenőrzőlista
- Ellenőrizd a karakterkészletet és a bájtsorrendet.
- Ellenőrizd az elválasztókat és a lezáró karaktereket hexadecimális formában.
- Ellenőrizd, hogy az üzenet rögzített hosszúságú vagy hosszelőtaggal ellátott-e.
- Különítsd el a nyomtatható hexadecimális szöveget a nyers bináris adatoktól.
- Ellenőrizd az időtúllépés, az újrapróbálkozás és a puffertörlés működését.
- Archiválj egy ismerten megfelelő bájtrögzítést a projektfájlokkal együtt.
Az ASCII egyszerű, az ipari hibák azonban gyakran egyetlen hiányzó vagy félreolvasott bájtban rejtőznek. Először numerikus értékek sorozataként kezeld az üzenetet. Csak a keret megértése után alakítsd vissza szöveggé.