Serielle Brücke für IoT-Landschafen – COM2TCP mit Node-RED

In der Welt des Internet of Things (IoT) und der Automatisierung spielen Daten eine entscheidende Rolle. Viele handelsübliche Industriegeräte generieren wertvolle Daten, die für Analysen und Steuerungsprozesse genutzt werden können. Doch wie können handelsübliche USB-Geräte, wie Scanner und Messgeräte, in diese Landschaft eingebunden werden? Der Einsatz von USB-Scannern in der Industrie kann vielseitig sein:
- Inventar- und Lagerverwaltung:
- Erfassen von Warenbeständen.
- Verfolgung von Beständen in
- Bestandsaktualisierung
- Logistik und Versand:
- Verfolgen von Paketen und Lieferungen
- Dateneingabe in Versand- und Logistiksysteme
- Verwaltung von Lieferketten
- Produktionssteuerung und Fertigung:
- Verfolgung von Teilen und Komponenten während des Fertigungsprozesses
- Fehlervermeidung durch Verifizierung von Produktionsstufen
- Optimierung von Arbeitsabläufen und Bestandsverwaltung
- Qualitätskontrolle:
- Identifikation von Produkten für Inspektionen und Tests
- Verknüpfung von Scandaten mit Qualitätsmanagement-Systemen
- Rückverfolgbarkeit von Produktchargen für Qualitätsnachweise
Dieser Artikel beschreibt eine Lösung, um einen USB-Handscanner nahtlos in IoT-Projekte zu integrieren. Dies ermöglicht es, Datenflüsse zwischen verschiedenen Geräten und Diensten zu erstellen, ohne umfangreiche Programmierkenntnisse zu erfordern. Sie erfahren, wie Sie diese Geräte identifizieren und mit Node-RED kommunizieren können, um Daten zu erfassen und zu verarbeiten.
Wenn ein USB-Gerät wie ein Scanner oder ein Messgerät an einen Windows-Computer angeschlossen wird, kann es als COM-Port (Communications Port) erkannt werden. Ein COM-Port ist ein serieller Anschluss, der es einem Computer ermöglicht, mit seriellen Geräten zu kommunizieren. Diese Geräte senden und empfangen Daten über eine serielle Schnittstelle. Die Zuweisung eines COM-Ports erfolgt automatisch durch das Betriebssystem, wenn das USB-Gerät angeschlossen wird. Jeder COM-Port erhält eine eindeutige Nummer (z. B. COM1, COM2 usw.)
Verwendung von Single-port TCP/IP – Serial Bridge (RFC 2217) mit pySerial
Um USB-Geräte, die als COM-Port erkannt werden, über ein Netzwerk zugänglich zu machen, verwenden wir das Single-port TCP/IP – Serial Bridge-Protokoll (RFC 2217) in Verbindung mit der Python-Bibliothek pySerial. Diese Kombination ermöglicht es uns, eine Netzwerkverbindung zu einem seriellen Port herzustellen und die seriellen Daten über TCP/IP zu übertragen.
Was ist das Single-port TCP/IP – Serial Bridge (RFC 2217)?
Das Single-port TCP/IP – Serial Bridge-Protokoll, das im RFC 2217 spezifiziert ist, definiert einen Standard für die Steuerung von seriellen Ports über ein Netzwerk. Dies ermöglicht es, dass ein Remote-Computer einen seriellen Port über das TCP/IP-Protokoll verwendet, als ob er lokal vorhanden wäre. Das Protokoll umfasst Funktionen wie das Öffnen, Schließen und Konfigurieren des seriellen Ports sowie das Senden und Empfangen von Daten. Dadurch wird der Zugriff durch Node-RED auf entfernte USB-Geräte ermöglicht. Die PySerial-Bibliothek kann mithilfe des Packagemanagers PIP installiert werden:
pip install pyserial
Um einen Server für die serielle Schnittstelle erstellen zu können, kann das Beispielskript rfc2217_server.py verwendet werden. Um die Daten nun über dieses Skript an Node-RED übertragen zu können, muss das Skript an dem Client, an dem das USB-Gerät angeschlossen ist, mit entsprechenden Parametern aufgerufen werden. Im folgenden Beispiel ist ein USB-Scanner an COM10 angebunden. Die ausgelesen Daten sollen über den Port 5000 zugänglich gemacht werden. Der vergebene COM-Port kann bei Windows-Betriebssystemen im Geräte-Manager eingesehen werden

Gemäß Examples — pySerial 3.4 documentation kann das Skript über die Kommandozeile nun wie folgt aufgerufen werden:
>rfc2217_server.py -p 5000 -v COM8
INFO:root:RFC 2217 TCP/IP to Serial redirector - type Ctrl-C / BREAK to quit
INFO:root:Serving serial port: COM8
INFO:root:TCP/IP port: 5000
Umsetzung in Node-RED
Mithilfe eines TCP-In Nodes verbindet sich Node-RED nun zu dem entfernen COM-Port und liest die Daten über das Netzwerk aus:

Nun kann es vorkommen, dass das Senden der Daten dazu führen kann, dass Teile fragmentiert oder geteilt in Node-RED ankommt. Die hängt unter anderem mit der Puffer-Größe auf der Senderseite, aber auch mit der Geschwindigkeit der Datenübertragung und -Verarbeitung zusammen. Um einzelne Scans eindeutig identifizieren zu können, wird der Scanner so parametriert, sodass eindeutige Steuerzeichen den Start und das Ende eines Scans umrahmen. Im vorhandenen Beispiel ist der Scanner so parametriert, dass er ein Steuerzeichen 0x02-Zeichen zum Start und ein 0x03-Zeichen zum Ende eines Scanvorgangs sendet. Node-RED wird um eine Funktion erweitert, die ankommende Nachrichten solange buffert, bis ein zusammenhängender Scanwert eingetroffen ist.

Die Funktion Buffer Data ist wie folgt definiert:
var buffer = context.get('buffer') || '';
var inMessage = msg.payload.toString();
buffer += inMessage;
if (!buffer.startsWith(String.fromCharCode(0x02))){
buffer = '';
context.set('buffer', buffer);
return null
} else if (buffer.startsWith(String.fromCharCode(0x02)) && buffer.endsWith(String.fromCharCode(0x03))) {
msg.payload = buffer;
buffer = '';
context.set('buffer', buffer);
return msg;
} else {
context.set('buffer', buffer);
return null;
}
Die Buffer Data-Funktion initialisiert einen Buffer für ankommende Nachrichten. Wenn der Buffer nicht mit dem Startzeichen (0x02) beginnt, wird der Buffer geleert. Wenn eine Nachricht mit dem Start- und Endzeichen (0x02 und 0x03) vollständig ist, wird sie weitergeleitet. Andernfalls wird die Nachricht im Buffer gespeichert und auf weitere Daten gewartet.
Die nahtlose Integration von USB-Scannern eröffnet zahlreiche Anwendungsmöglichkeiten in den Bereichen Inventar- und Lagerverwaltung, Logistik, Produktionssteuerung, Fertigungsoptimierung und Qualitätskontrolle, was die Effizienz und Leistungsfähigkeit von IoT-Lösungen deutlich verbessern kann.