TOP
SSV Software Systems Register  Register
Log in to check your private messages  Log in to check your private messages
Startseite FAQ Search Mitglieder Profile  Log in 
SSV Support-Forum
Modbus-Gateway …

 
Post new topic   Reply to topic    SSV-Forum Forum Index >>> IGW/936(-L)
<<< Previous topic - Next topic >>>  
Display posts from previous:   
Author Message
kdw



Joined: 05 May 2006
Posts: 1460

PostPosted: 16.01.2016, 19:39    Post subject: Modbus-Gateway … Reply with quote

Hallo Forum.

Das IGW/936 ist wohl derzeit eines der leistungsfähigsten Modbus-Gateways, die man am Markt findet. Ob Sie nun von Modbus-RTU auf Modbus/TCP konvertieren, VPN-gesicherte Modbus/TCP-Verbindungen per Internet, eine Modbus-to-Cloud- bzw. Modbus-to-Smartphone-App-Anwendung realisieren oder Modbus-Daten in einer SQL-Datenbank aufzeichnen wollen, mit dem IGW/936 geht das alles sehr einfach.

Konfiguriert werden solche Anwendungen über die webbasierte Node-Red-Oberfläche. Man zieht vorgefertigte Funktionsblöcke auf eine Arbeitsoberfläche, verdrahtet das Ganze per Mausklick, konfiguriert die Funktionsblöcke und bringt das Ergebnis durch einen einzigen Mausklick auf eine Deploy-Schaltfläche zur Ausführung.

Als kleines Demonstrationsbeispiel folgt eine Anleitung, die sich innerhalb von ca. 5 bis 10 Minuten umsetzen lässt. Es werden Modbus-Daten per MQTT an einen Cloud-Service im Internet geschickt, von dort wieder empfangen und an einen PC weitergegeben.

Für das Beispiel benötigen wir ein IGW/936 und einen PC – beide mit einem Zugang zum Internet. In der folgenden Anleitung befindet sich PC und IGW/936 im gleichen LAN. Es gilt folgende IP-Adresszuordnung:

Code:
PC: 192.168.178.23
IGW/936: 192.168.178.39


Als MQTT-Broker wird ein kostenloser Account bei https://www.cloudmqtt.com/ verwendet (die Server dieses Anbieters werden von Amazon betrieben). Verschaffen Sie sich einen CloudMQTT-Account und notieren Sie sich den MQTT-Benutzernamen und das Passwort. Beides ist für die Konfiguration der IGW/936-Node-Red-Funktionsblöcke erforderlich.

Erzeugen Sie dann in der Node-Red-Weboberfläche einen Flow mit sechs Funktionsblöcken (Nodes). Positionieren und „verdrahten“ Sie die Nodes wie in der folgenden Abbildung:



Links oben: SSV Modbus Master Node. Dieser Funktionsblock soll Modbus-Daten vom PC als Modbus-Slave lesen. Konfigurieren Sie den Node, wie in den beiden folgenden Abbildungen. Verändern Sie die IP-Adresse des PCs gemäß Ihren Anforderungen:




Oben Mitte: RBE (Report-By-Exception) Node. Dieser Funktionsblock stellt sicher, dass nur ein geänderter Modbus-Registerwert per MQTT in den Cloud weitergeleitet wird. Wählen Sie im Konfigurationsdialog für diesen Node Mode = block unless value changes und Name = On change aus.

Rechts oben: MQTT Output Node. Über diesen Node werden die Modbus-Daten jeweils an die Cloud weitergegeben. Konfigurieren Sie den Node, wie in den beiden folgenden Abbildungen dargestellt. Geben Sie für die MQTT-Zugriffsrechte die für Ihren CloudMQTT-Account erhaltenen Parametern als Username und Password ein:




Der oberen drei Nodes bilden einen vollständig funktionsfähigen MQTT-Publisher. Mit diesem Node-Red-Flow pollt das IGW/936 einen externen Modbus-Slave einmal pro Sekunde. Liefert das Modbus-Holding-Register 2 einen neuen Wert, wird der per MQTT-Publish an den CloudMQTT-Broker übermittelt.

Links unten: MQTT Input Node. Dieser Funktionsblock bildet den MQTT-Subscriber. Er muss sich für den Topic test/test1 beim CloudMQTT-Broker anmelden und dann alle MQTT-Nachrichten, die der Broker zu diesem Topic per Internet verschickt, entgegennehmen. Konfigurieren Sie diesen Node mit den gleichen Werten, wie den MQTT Output Node oben rechts (gleicher Broker, gleicher Username, gleiches Passwort, gleicher Topic).

Unten Mitte: SSV Math Node. Mit Hilfe dieses Nodes wird der ganzzahlige (Integer-) Wert aus dem Modbus-Register des Modbus-Slaves in eine Temperatur mit zwei Nachkommastellen umgerechnet. Wählen Sie im Konfigurationsdialog für diesen Node Input Identifier = Topic und Type = Factorization aus. Geben Sie als Factor 0.01 ein.

Rechts unten: TCP Socket Output Node. Diese Funktionseinheit dient dazu, die vom MQTT-Subscriber erhaltenen Daten (siehe MQTT Input Node) an andere Anwendungen weiterzugeben, die kein MQTT-Protokoll beherrschen und auch keine Internet-Verbindung besitzen müssen. Es reicht, wenn sich die Anwendung im gleichen LAN wie das IGW/936 befindet. Eine sehr einfache Lösung ist, auf dem IGW/936 einen TCP-Server-Socket zur Verfügung zu stellen und die Daten als Stream an einen TCP-Socket-Client zu senden, der sich mit dem Server-Socket verbindet. Die hier folgende Abbildung zeigt die Konfiguration des TCP Socket Output Nodes:



Der unteren drei Nodes aus der ersten Abbildung bilden einen vollständig funktionsfähigen MQTT-Subscriber für den Topic test/test1 des Brokers m20.cloudmqtt.com. Die Daten, die das IGW/936 als MQTT-Subscriber aus der Cloud zurückbekommt, werden wie zuvor beschrieben über einem TCP-Socket beliebigen anderen Anwendungen zur Verfügung gestellt. Für den finalen Test wurde ein Processing-Java-Code auf einem PC erstellt (dieser Beispiel-Code stammt im Übrigen aus meinem 2-tägigen IoT-Workshop, den ich hin und wieder an unterschiedlichen Standorten abhalte – den Code erhalten Sie per https://ssv-comm.de/forum/bilder/ProcessingCode_160116.txt):



Bringt man den Processing-Code zur Ausführung, entsteht ein kleines Fenster, indem die Daten des MQTT-Subscribers als Temperatur angezeigt werden:



Um die Temperaturanzeige im kleinen Fenster der Processing-Anwendung mit einem neuen Wert zu versehen, muss auf dem PC mit der IP-Adresse 192.168.178.23 ein Modbus/TCP-Slave laufen. In diesem Beispiel wurde Ananas (http://www.tuomio.fi/ananas/) als Slave verwendet. Per Ananas-Dialogfenster können laufend neue Werte in das Modbus-Register 2 geschrieben werden, die dann mit einer kleinen Zeitverzögerung als neue Temperatur angezeigt werden.



Beachten Sie bitte die Zusammenhänge: Wenn Sie im Ananas-Dialogfenster des PCs einen neuen Wert eingeben und die Set-Schaltfläche betätigen, erreicht Ihre Eingabe beim nächsten Modbus-Poll den Modbus-Master des IGW/936. Von dort aus geht es per MQTT-Publish über das Internet als Topic test/test1 zum MQTT-Broker der CloudMQTT-Plattform auf einem Amazon-Server. Der Broker liefert den neuen Wert über das Internet sofort wieder an das IGW/936 zurück, da das IGW/936 auch als Subscriber des Topics test/test1 registriert ist. Von dort aus erreicht der Wert nach einer Multiplikation mit 0,01 wieder den PC und wird im kleinen Processing-Fenster als Temperatur angezeigt.

Die wahrnehmbare Zeitverzögerung kommt in erster Linie dadurch zustande, dass das IGW/936 als Modbus-Master den Ananas-Slave auf dem PC nur einmal pro Sekunde abfragt. Die Übertragung zur CloudMQTT-Plattform und zurück ist eigentlich nicht wahrnehmbar.

Viel Erfolg beim Ausprobieren.

Gruß KDW
Back to top
View user's profile Send private message
kdw



Joined: 05 May 2006
Posts: 1460

PostPosted: 24.01.2016, 09:03    Post subject: Modbus-to-Arduino … Reply with quote

Hallo Forum.

Zunächst einmal sollten wir das oben beschriebene Beispiel in der Node-Red-Weboberfläche leicht verändern. Zum einen kann der RPE (Report-By-Exception) Node entfallen, wenn im SSV Modbus Master Node die Option Block unless value changes eingeschaltet wird. Zum anderen sollte die Multiplikation der ganzzahligen Modebus-(Integer-) Werte mit 0.01 im SSV Math Node vor der Weitergabe an die Cloud erfolgen.



Um einen Arduino als TCP-Client mit dem Socket 1234 zu verbinden und die über den TCP-Socket erhaltenen Daten auszugeben, ist es hilfreich, an die Zeichenfolgen jeweils ein Zeilenende als Separator anzufügen. Dafür wird ein Function Node zwischen MQTT Input Node und TCP Socket Node eingefügt. Der Code des Function Node besteht aus zwei Zeilen:

Code:
var nl = { payload:"\n" };
return [[msg, nl]];


Wird nun ein TCP-Socket-Client für einen Arduino erstellt (den Code für dieses Beispiel finden in der Datei https://ssv-comm.de/forum/bilder/ArduinoCode_240116.txt), werden die jeweiligen Werte des Modbus-Registers, die der MQTT Subscriber aus der Cloud erhält, im dem Fenster des seriellen Monitors einer Arduino-IDE ausgegeben:



Gruß KDW

P.S.: Information zum Node-Red Function Node finden Sie unter http://nodered.org/docs/writing-functions.html
Back to top
View user's profile Send private message
kdw



Joined: 05 May 2006
Posts: 1460

PostPosted: 31.01.2016, 08:02    Post subject: Von Node-Red nach Python … Reply with quote

Hallo Forum.

Mit Hilfe des TCP Socket Output Node im weiter oben beschriebenen Beispiel lässt sich auch eine „Brücke“ aus der Node-Red-Umgebung zur Python-Laufzeitumgebung eines IGW/936 schaffen.



Wir müssen lediglich einen einfachen TCP- Socket-Client in Python schreiben, der sich über 127.0.0.1:1234 (localhost) mit dem TCP Socket Output Node verbindet:

Code:
import socket
import sys

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1", 1234))
data = s.recv(1024)
while len(data):
  sys.stdout.write(data)
  data = s.recv(1024)
s.close()


Dieser TCP-Socket-Client muss per Kommandozeile zur Ausführung gebracht werden. Dafür können wir per Webbrowser den Shell-in-a-Box-Service öffnen:



Bitte beachten: Der Shell-in-a-Box-Service muss auf einem IGW/936 über die WebConfig-Oberfläche eingeschaltet werden. Siehe Services => General. Im Auslieferzustand ist dieser Service deaktiviert.

Gruß KDW
Back to top
View user's profile Send private message
kdw



Joined: 05 May 2006
Posts: 1460

PostPosted: 10.02.2016, 23:31    Post subject: Modbus, MQTT, JSON … Reply with quote

Hallo Forum.

Im Dokument https://ssv-embedded.de/doks/manuals/MQTT4Sensors_Intro.pdf ist eine Beschreibung zu finden, wie man unter Node-RED einen Modbus/TCP-Master nutzt, um das Register eines Modbus-Slaves periodisch auszulesen, die Daten bei einer Änderung in ein JSON-Objekt umzuwandeln und per MQTT an einen Broker in der Cloud zu übertragen.

Das Dokument wurde zwar für ein IGW/935 mit Node-RED verfasst, gilt aber auch uneingeschränkt für ein IGW/936.

Gruß KDW
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    SSV-Forum Forum Index >>> IGW/936(-L) All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

SSV Software Systems GmbH

Dünenweg 5
30419 Hannover

Fon: +49(0)511  ·  40 000-0
Fax: +49(0)511  ·  40 000-40

sales@ssv-embedded.de


Impressum    ·    Datenschutz    ·    AGB

© 2023 SSV SOFTWARE SYSTEMS GmbH. Alle Rechte vorbehalten.

ISO 9001:2015