ASCII für SPS-Daten: Dezimal-, Hexadezimal- und Steuerzeichen
Erfahren Sie, wie ASCII-Zeichen, Dezimalwerte, Hexadezimal-Bytes und Steuerzeichen in SPS-Strings und seriellen Nachrichten dargestellt werden, mit einer praktischen Methode zur Diagnose von Rahmen...
ASCII ist in SPS-Projekten nach wie vor weit verbreitet, da viele Industriegeräte Text Byte für Byte austauschen. Barcode-Lesegeräte, Etikettendrucker, Waagen, Antriebe, serielle Gateways und Bediengeräte stellen Befehle und Messwerte häufig als Zeichencodes dar. Ingenieure, die zwischen Zeichen, Dezimalwerten und hexadezimalen Bytes wechseln können, finden Fehler in diesen Verbindungen schneller.
Was ASCII definiert
Der ursprüngliche American Standard Code for Information Interchange ist ein Sieben-Bit-Zeichensatz. Er definiert 128 Werte, nummeriert von 0 bis 127. Die Werte 0 bis 31 und 127 sind Steuerzeichen. Die Werte 32 bis 126 sind druckbare Zeichen, darunter Buchstaben, Ziffern, Satzzeichen und das Leerzeichen.
Die vom IETF bereitgestellte RFC-20-Spezifikation dokumentiert die Codepositionen und ihre vorgesehenen Bedeutungen. Moderne Systeme speichern ein ASCII-Zeichen normalerweise in einem Acht-Bit-Byte. Das höchstwertige Bit bleibt bei Standard-ASCII null.
Dezimal, hexadezimal und binär sind dasselbe Byte
Ein SPS-Tag kann denselben Wert in mehreren Zahlenformaten anzeigen. Der Großbuchstabe A entspricht dezimal 65, hexadezimal 41 und binär 01000001. Die Ziffer 0 entspricht dezimal 48 oder hexadezimal 30. Dies sind keine unterschiedlichen Zeichen. Es sind unterschiedliche Darstellungen desselben numerischen Musters.
Hexadezimal ist bei der Inbetriebnahme nützlich, da ein Byte in zwei Hexadeziffern passt. Mitschnitte, serielle Monitore und Gerätehandbücher zeigen Bytewerte ebenfalls häufig hexadezimal an. Dezimal ist oft praktischer, wenn SPS-Anweisungen ganzzahlige Konstanten erwarten.
Steuercodes sind in industriellen Nachrichten wichtig
Viele serielle Protokolle verwenden Steuerzeichen als Trennzeichen. Wagenrücklauf entspricht dezimal 13 oder hexadezimal 0D. Zeilenvorschub entspricht dezimal 10 oder hexadezimal 0A. Start of Text entspricht hexadezimal 02, während End of Text hexadezimal 03 entspricht. Ein Gerät kann einen gültigen Befehl ignorieren, wenn der erforderliche Abschluss fehlt.
Gehen Sie nicht davon aus, dass jedes Gerät CR/LF verwendet. Einige benötigen nur CR. Andere verwenden ein druckbares Trennzeichen, eine feste Nachrichtenlänge oder ein Prüfsummenbyte. Bestätigen Sie den genauen Rahmen im Protokollhandbuch des Herstellers.
Wie SPS-Strings zu Byte-Arrays werden
SPS-Plattformen speichern Strings unterschiedlich. Einige speichern die aktuelle Länge vor den Zeichendaten. Andere reservieren ein Array fester Größe und beenden den Text mit einem Nullbyte. Wenn Daten eine Protokollgrenze überschreiten, sieht das empfangende Gerät Bytes statt des internen String-Typs der Steuerung.
Prüfen Sie sowohl die deklarierte String-Länge als auch den zugrunde liegenden Puffer. Ein veraltetes Byte hinter der aktuellen Länge kann in den übertragenen Daten erscheinen, wenn eine Routine den gesamten Puffer sendet. Löschen Sie das Ziel oder übertragen Sie nur die Anzahl der aktiven Zeichen.
Eine praktische Diagnosemethode
- Erfassen Sie die exakt übertragenen Bytes mit einem seriellen Monitor, Protokollanalysator oder der Diagnoseseite des Gateways.
- Schreiben Sie jedes Byte hexadezimal auf und ordnen Sie druckbare Werte wieder Zeichen zu.
- Markieren Sie Rahmenbytes, Abschlusszeichen, Trennzeichen, Längenfelder und Prüfsummen.
- Vergleichen Sie den Mitschnitt mit dem Gerätehandbuch, einschließlich Leerzeichen und Groß-/Kleinschreibung.
- Wiederholen Sie die Erfassung für eine bekanntermaßen funktionierende Nachricht und vergleichen Sie die Bytepositionen.
Dieser Ansatz auf Byte-Ebene trennt Formatierungsfehler von Problemen mit Verdrahtung, Baudrate und Parität. Wenn der Mitschnitt lesbaren, aber unvollständigen Text zeigt, konzentrieren Sie sich auf den String-Aufbau. Wenn jedes Byte falsch ist, prüfen Sie zuerst die physischen und seriellen Einstellungen.
Häufige Implementierungsfehler
Eine Ziffer mit ihrem numerischen Wert verwechseln
Das Zeichen „5“ ist ASCII-dezimal 53 und nicht der ganzzahlige Wert 5. Um eine gemessene Zahl in Text umzuwandeln, ist eine Formatierungsroutine erforderlich. Wird die rohe Ganzzahl direkt in einen Zeichenpuffer kopiert, entsteht stattdessen ein Steuerbyte.
Hexadezimalen Text mit Binärbytes vermischen
Der Text „41“ enthält zwei Zeichen: hexadezimal 34 und hexadezimal 31. Ein einzelnes Byte mit dem Wert hexadezimal 41 stellt den Buchstaben A dar. Legen Sie fest, ob das Protokoll lesbaren Hex-Text oder rohe Binärdaten erwartet.
Eine über ASCII hinausgehende Zeichenkodierung ignorieren
ASCII umfasst englische Buchstaben und einen begrenzten Zeichensatz. UTF-8 verwendet für die ersten 128 Zeichen dieselben Bytewerte, aber Nicht-ASCII-Zeichen verwenden mehrere Bytes. Ein älteres Gerät kann diese Bytes ablehnen oder sie falsch zählen.
Richtlinien für wartbaren SPS-Code
Halten Sie die Protokollformatierung in einer Routine zusammen. Vergeben Sie Namen für Konstanten der Steuercodes, anstatt numerische Literale über Kontaktplan oder strukturierten Text zu verteilen. Protokollieren Sie den endgültigen Sendepuffer während der Inbetriebnahme hexadezimal. Nehmen Sie Beispiele in die Projektdokumentation auf.
Wenn ein Protokoll über eine einfache Textrahmung hinauswächst, verwenden Sie eine definierte Zustandsmaschine. Verfolgen Sie Empfangsposition, Timeout, Rahmenstatus und Validierungsergebnis getrennt. Dadurch lassen sich Wiederholungen und fehlerhafte Nachrichten leichter diagnostizieren.
Weitere Muster für die Datenverarbeitung finden Sie unter Schleifen durch Arrays in SPS-Systemen. Für vernetzte Geräte bietet der Leitfaden zur Bereitstellung eines Modbus-TCP-Geräts zusätzlichen Kontext zu Rahmenbildung und Inbetriebnahme.
Checkliste für die Inbetriebnahme
- Bestätigen Sie den Zeichensatz und die Byte-Reihenfolge.
- Prüfen Sie Trennzeichen und Abschlusszeichen hexadezimal.
- Stellen Sie fest, ob die Nachricht eine feste Länge hat oder ein Längenfeld vorangestellt ist.
- Unterscheiden Sie druckbaren Hex-Text von rohen Binärdaten.
- Validieren Sie das Verhalten bei Timeout, Wiederholungen und dem Löschen des Puffers.
- Archivieren Sie einen bekanntermaßen funktionierenden Byte-Mitschnitt zusammen mit den Projektdateien.
ASCII ist einfach, doch industrielle Fehler verbergen sich oft in einem fehlenden oder falsch interpretierten Byte. Betrachten Sie die Nachricht zunächst als Folge numerischer Werte. Wandeln Sie sie erst wieder in Text um, wenn der Rahmen verstanden ist.