Digitale I/O-Module einrichten – so geht’s

Von ·Kategorien: Allgemein·Published On: Oktober 20th, 2015·9,2 min read·

Als Reaktion auf Gespräche mit Fachleuten aus der industriellen Automatisierung hat OnLogic begonnen, eine Auswahl an RS485-gebundenen, Modbus-kompatiblen Modulen zur Datenerfassung sowie digitale I/O-Module zur Überwachung und Automatisierung anzubieten. Datenerfassungsmodule können in zahlreichen Anwendungen eingesetzt werden. Dieser Leitfaden ist als kurze Einführung in die Installation und Einrichtung gedacht.

Alle hier erwähnten Beispielbefehle und Dokumentationen beziehen sich auf das EX9044D 4-Eingangs-/8-Ausgangsmodul. Eine vollständige Auswahl unserer DAQ-Produkte finden Sie auf unserer Komponenten-Seite.

Was ist ein DAQ-Modul?

Das EX9044D ist ein digitales I/O-Modul mit acht isolierten digitalen Ausgängen. Die Eingangssignale sind zum Schutz des Moduls elektrisch isoliert von der Kernschaltung des Moduls. So verhindert diese Isolierung im Falle einer Überspannung oder eines Kurzschlusses eine Beschädigung des Geräts. Die Open-Collector-Ausgänge stellen den Benutzer:innen jeweils ein Ende (den Kollektor) eines Transistors zur Verfügung, der als geschaltete Stromquelle verwendet werden kann.

Um Ihnen den Einstieg zu erleichtern, haben wir dieses einfache Beispiel erstellt, um einige Funktionen des I/O-Moduls zu demonstrieren. Außerdem erklären wir, wie Sie die Software für die Kommunikation mit dem Modul konfigurieren.

Verdrahtung eines DAQ-Moduls

Die einfachste Verwendung der digitalen Eingänge ist zur Überwachung einfacher Schalter – in diesem Beispiel werden wir ein paar Tasten verwenden. In realen Anwendungen können Sie die Eingänge verwenden, um alles „Digitale“ zu überwachen – alles, das nur zwei Zustände hat. Sie könnten einen digitalen Eingang verwenden, um festzustellen, ob eine Tür offen oder ein Licht eingeschaltet ist oder ob ein System mit Strom versorgt wird. Wir verwenden einen ähnlichen Aufbau als Teil des OnLogic-Gebäudeautomatisierungssystems. Es überwacht Türen, Wassersensoren und mechanische Systeme, um eine zusätzliche Sicherheitsebene für sensible Bereiche zu schaffen.

Bei einem schalterähnlichen Anschluss an einen Eingang (wie die Taste in diesem Beispiel) ist die Verdrahtung einfach:

Verdrahtung digitaler I/O-Schalter

Wenn Sie später den Eingangsstatus ablesen, wird “ hoch“ angezeigt, wenn der Schalter offen ist (wie abgebildet), und “ niedrig“, wenn der Schalter geschlossen ist.

Sie müssen zwei Anschlüsse herstellen, um die Ausgänge zu betreiben: einen von einer externen Stromversorgung (10-40 V) und den anderen von dem Gerät, das Sie mit Strom versorgen wollen. Die Ausgabeschaltung fungiert als Schalter. Je nach Ihren speziellen Anforderungen können Sie eine separate Stromversorgung für das Modul selbst verwenden oder auch nicht. In diesem Fall teilen wir uns die Stromversorgung über die beiden Stromeingänge. Wenn das Modul den Ausgabebefehl „hoch“ erhält, wird die Ladung mit Strom versorgt. Wenn er auf „niedrig“ gesetzt wird, wird die Ladung abgeschaltet.

DAQ Verdrahtungsfunktionen

Schließlich müssen Sie eine Stromversorgung für das Modul selbst (+Vs und GND) und eine 2-Draht-RS485-Verbindung für die Kommunikation anschließen. Notieren Sie sich, welche der seriellen Schnittstellen Ihres Systems Sie verwenden; das müssen Sie später wissen.

vollständiges DAQ-Verkabelungsdiagramm

vollständiges Beispieldiagramm

Software-Setup für DAQ-Module

Jedes Modbus-kompatible Modul arbeitet in zwei Modi, dem „normalen“ (oder ASCII-) Modus und dem „Modbus“-Modus. Standardmäßig werden Modbus-kompatible Module so konfiguriert, dass sie im Modbus-Modus starten. Allerdings kann es mit dem „Normal“-Modus einfacher sein, schnell loszulegen, also beginnen wir dort.

Um das Modul im Normalmodus zu betreiben, stellen Sie den Schalter auf der Rückseite des Moduls auf ON, während das Gerät von der Stromversorgung getrennt ist. Wenn Ihr Modul keinen Schalter auf der Rückseite hat, müssen Sie den INIT-Pin finden und ihn mit der Erdung verbinden, während die Stromversorgung unterbrochen ist. Wenn Sie das Modul an die Stromversorgung anschließen, bootet es im INIT-Modus, in dem Sie die Konfiguration des Moduls ändern können, darunter auch seinen Betriebsmodus. Während des INIT-Modus reagieren die Module auf Befehle im Normalmodus (ASCII). Anstatt das Gerät neu zu konfigurieren, können wir es einfach im INIT-Modus laufen lassen und so ein wenig Zeit sparen.

Die Normal- (ASCII-)Befehlsstruktur

Jeder ASCII-Befehl hat die gleiche Grundstruktur:

Delimiter, Address, Command, [Data], Carriage Return

Wenn nicht anders angegeben, werden die Adresse und die Daten in ASCII-Hex gesendet (d. h. Adresse 0 ist „00“, Adresse 8 ist „08“ und Adresse 90 ist „5A“). Wenn wir zum Beispiel den Namen des Moduls abfragen wollen, senden wir:

$00M\r
(Delimiter: $, Address: 00, Command: M, Carriage Return: \r)

Das Modul antwortet mit einem Paket, das seinen Namen enthält. In unserem Fall sieht es so aus: !009055M. Die meisten Antworten beginnen mit einem Erfolgs-/Fehlerzeichen (normalerweise ! oder ?), dann folgt die Adresse und dann die angeforderten Daten. Im INIT-Modus ist die Moduladresse immer 00.

Da alle Befehle in ASCII gesendet und mit einem Carriage Return abgeschlossen werden, können Sie eine serielle Konsole (z. B. PuTTY) verwenden, um mit einem „Normalmodus“-Modul zu kommunizieren – dies ist nichts, was Sie in einer Produktionsumgebung tun sollten. Jedoch kann es bei der Fehlerbehebung nützlich sein. 

Um mit dem Modul in der realen Welt zu kommunizieren, werden Sie natürlich etwas Effizienteres als von Hand getippte Befehle verwenden wollen. Wir werden hier ein paar Befehle durchgehen. Der oben verlinkte Beispielcode enthält einen kurzen Block für jedes Modul, das wir verteilen.

Um die ASCII-Befehle in Python zu verwenden (entweder in der Interpreter-Konsole oder in einem eigenständigen Programm), müssen Sie zunächst die serielle Schnittstelle öffnen, an die Sie das Modul angeschlossen haben. Unter Windows lautet der Name der Schnittstelle in etwa „COM4“, unter Linux heißt sie normalerweise „/dev/ttyS2“.

from serial import Serial
P
ort = Serial(“COM4”, baudrate=9600, timeout=0.1)

Die Standard-Baudrate für die Module ist 9600. Wir wollen also sicherstellen, dass sie richtig eingestellt ist. Wir stellen die Zeitüberschreitung so ein, dass die Lesebefehle schnell abgeschlossen werden, auch wenn wir nicht die erwartete Datenmenge erhalten (dies geschieht im Allgemeinen, wenn ein Fehler auftritt).

Jetzt können Sie nach Bedarf Befehle senden und die Antwort mit den seriellen Funktionen read und write lesen:

port.write(“$00M\r”)
print port.read(20)

Sie sollten die gleiche Antwort wie im obigen Beispiel erhalten (!009055M).

Um den Status des IO zu lesen, führen wir Folgendes aus:

port.write(“$006\r”)
print port.read(8)

Die Antwort enthält den Status aller Ausgänge und Eingänge – wenn kein Eingang mit der Erdung verbunden ist, sollte die Statusantwort !00FF00 lauten. Dabei steht ! für Erfolg, 00 für den Ausgangsstatus, FF für den Eingangsstatus und eine nachfolgende 00. Eingangs- und Ausgangsstatus werden beide als Ein-Byte-Hex-Wert dargestellt, der den Zustand beschreibt. Betrachtet man den Eingangsstatus (FF), so entspricht jeder der Eingänge (DI0 bis DI7) einem einzelnen Bit im Statusbyte, wobei DI0 auf Bit 0, DI1 auf Bit 1 usw. steht. Wenn Sie eine der Tasten gedrückt halten und den Lesebefehl erneut ausführen, sehen Sie, dass sich der zurückgesendete Status ändert, je nachdem, welche Taste Sie gedrückt haben. Dasselbe gilt für die Ausgänge (außer in umgekehrter Reihenfolge, 1 ist an, 0 ist aus).

Wenn wir dem Modul einen Ausgabebefehl senden:

port.write(“#000001\r”)
(Delimiter: #, address: 00, channel: 00, state: 01)

DO0 sollte sich einschalten. Wenn wir den Statuswert auf „10“ („#000010\r“) ändern, sollte DO0 ausgeschaltet und DO4 eingeschaltet werden usw.

Mit ein wenig zusätzlicher Logik können Sie eine kurze Schleife einrichten, um die Eingänge zu überwachen und Maßnahmen zu ergreifen, wenn einer von ihnen aktiviert wird. Sie bräuchten allerdings eine sehr schnelle (und sehr ineffiziente!) Schleife, um die Eingänge gut zu überwachen. Daher können Sie statt der Überprüfung des Eingangsstatus den Read Latch Status-Befehl „$00L0\r“ verwenden. Wenn ein Eingang auf „niedrig “ gesetzt wird, wird das Ereignis separat aufgezeichnet („gelatcht“). So können Sie, wenn Sie das Ereignis selbst verpassen, immer noch feststellen, dass es aufgetreten ist, und eine Reaktion auslösen. Anschließend löschen Sie den zwischengespeicherten Eingang, um für das nächste Ereignis bereit zu sein. Dazu verwenden Sie den Befehl Clear Latched Input: „$00C\r“.

In diesem kurzen Programm sehen Sie den Read/Clear-Latch-Status in Aktion. Dabei werden die für dieses Beispiel verdrahteten Tasten überwacht. In dieser komplexeren Version fügen wir ein paar Komfortfunktionen hinzu und arbeiten ein wenig mehr mit den Ausgängen.

Modbus-Befehlsstruktur

Modbus ist ein Kommunikationsprotokoll, das in den 1970er Jahren von Modicon für die Verwendung mit ihren Geräten entwickelt wurde. Aufgrund seiner Einfachheit und Stabilität wurde es immer breiter eingesetzt. So ist es heute eines der wenigen wichtigen Kommunikationsprotokolle, die in der Industrie verwendet werden.

Jedes Modbus-fähige Modul verwendet eine Reihe standardisierter Modbus-Befehle, die auf der Modbus-Website dokumentiert sind. Darüber hinaus sind weitere gerätespezifische Informationen in der Dokumentation des jeweiligen DAQ-Moduls zu finden. Die bei OnLogic erhältlichen Modbus I/O-Module werden alle standardmäßig im Modbus-Modus ausgeliefert. Wenn Sie beim Lesen dieses Dokuments gerade im ASCII-Modus waren, müssen Sie zurück in den Modbus-Modus wechseln. Dazu müssen Sie das INIT-Kabel ausstecken oder den INIT-Schalter umlegen. Anschließend müssen Sie das Gerät neu starten.

Die Befehle werden als rohe Byte-Werte gesendet. Somit können Sie kein standardmäßiges serielles Terminal verwenden.

Jeder Modbus-Befehl besteht aus einem einzelnen Befehlscode-Byte und zugehörigen Daten, gefolgt von einer Zwei-Byte-Prüfsumme.

Die Berechnung der Prüfsumme ist ein mehrstufiger Prozess:
  1. Nehmen Sie 0xFFFF, XOR mit dem ersten Byte des Pakets
  2. Wenn das LSB des Ergebnisses 1 ist, müssen Sie nach Schritt 3 einen zweiten Wert XOR-verknüpfen.
  3. Ergebnis um 1 Stelle nach rechts verschieben
  4. Wenn das LSB in Schritt 2 1 war, wird das Ergebnis mit 0xA001 XOR-verknüpft.
  5. Wiederholen Sie die Schritte 2-4 weitere 7 Mal.
  6. Wiederholen Sie die Schritte 2-5 für alle Bytes des Pakets.
  7. Der resultierende CRC beträgt 2 Bytes. Beim Senden des Pakets wird das am wenigsten signifikante BYTE zuerst gesendet, gefolgt von dem am meisten signifikanten BYTE.

Um zum Beispiel den Status aller Eingänge zu lesen, senden Sie die Byte-Werte für:

Adresse, Befehlscode, Startkanal (oberes Byte), Startkanal (unteres Byte), Anzahl der zu lesenden Kanäle (oberes Byte), Anzahl der zu lesenden Kanäle (unteres Byte), CRC (unten), CRC (oben)

In der Praxis sieht diese Reihenfolge wie folgt aus:

0x01 0x02 0x00 0x00 0x00 0x08 0x79 0xCC

0x010x020x00 0x000x00 0x080x79 0xCC
AdresseBefehlscodeStartkanalAnzahl der gelesenen KanälePrüfsumme

Wenn es als Teil eines Python-Programms gesendet wird, können Sie es als Liste formatieren:

port.write([0x01, 0x02, 0x00, 0x00, 0x00, 0x08, 0x79, 0xCC])
print port.read(5)

Die Rückmeldung erfolgt in einem ähnlichen Format [Adresse, Befehlscode, Byteanzahl, Eingabewert, CRC (unten), CRC (oben)]:

0x01 0x02 0x01 0xFF 0xFF 0xC8

Sie können dann den Eingangswert (0xFF) wiederherstellen und wie gewünscht weiterverarbeiten. Weitere Informationen finden Sie im Modbus-Block im Beispielcode des Produkts.

Auch wenn dies ein komplexer Prozess zu sein scheint, bieten DAQ-Module in der Praxis eine Menge wertvoller Vorteile und Flexibilität. Mit ein wenig Erfahrung werden Sie Daten effizient und effektiv analysieren und darauf reagieren können.

Sie brauchen Hilfe bei der Ermittlung der richtigen Hardwarekonfiguration für Ihre spezielle Anwendung? Wenden Sie sich an unsere Lösungsspezialist:innen.

Tech-Updates & neue Einblicke

Abonnieren Sie unseren Newsletter und die neuesten Mitteilungen von OnLogic kommen direkt in Ihren Posteingang. News und Einblicke von unserem Team aus Fachleuten sind nur einen Klick entfernt. Über den Button gelangen Sie zu unserer Abo-Seite.

Teilen

About the Author: Dave Block