RevPi Messwertwandler: TCPModbus Slave & Master
RevPi Messwertwandler: TCPModbus Slave & Master
Hallo Zusammen,
ich war schon lange auf der Suche nach einem für mich und mein Projekt passenden Raspberry Pi. Durch einen glücklichen Zufall bin ich dann auf euer Produkt aufmerksam geworden. Da ihr bereits einige Funktionen in eurem Produkt integriert habt, die ich benötigte, habe ich nun den RevPi Core 3 bereits bei euch gekauft.
Was war mir wichtig:
1. Vernünftige Montagemöglichkeit auf Hutschiene
2. Einfacher Anschluss an eine Stromversorgung. Im vorh. Schaltschrank gibt es bereits ein 24VDC Stromversorgung.
3. Support, der ja offensichtlich über das deutschsprachige Forum bestens gegeben ist
4. Die wirklich hilfreichen Video Tutorials
Aber dennoch habe ich so einige Fragen, wo ich leider keine Antwort zu gefunden habe. nun an. Ich habe viel gelesen und habe mir auch viele Videos angesehen, aber leider bleiben da noch so einige Fragen offen, die ich hier gerne stellen würde.
1. Wofür ist der MicroUSB an der Frontseite
2. Warum gibt es nicht eine kleine Bedienungsanleitung, die die Hardware von dem RevPiCore 3 ein wenig beschreibt? Anschluss-Schema, wofür sind die Schnittstellen da, etc.
3. Was kann ich mit der kostenlosen logiCaD 3 so machen. Handelt es sich hierbei um eine Demoversion mit irgendwelchen Einschränkungen?
4. Was würde mir der zus. Kauf von logi.RTS multi task bringen und macht der Kauf in Verbindung mit der kostenlosen logiCad 3 überhaupt Sinn?
Mit welchen Vorkenntnissen beginne ich mein Projekt:
Bezüglich dem Raspberry Pi: Absolut gar keine
Bezüglich der Reglerprogrammierung: ca. 3 jährige Erfahrung als Hobbyprogrammierer, die Programmierung erfolgt über Funktionsbausteine (Fupla).
Sonstige Programmierkenntnisse: Basicprogrammierung, Makroprogrammierung
Jetzt möchte ich mein Projekt vorstellen:
Der RevPi soll über die USB Schnittstelle von einem Feinstaubsensor zwei Datenwerte auslesen. Dies habe ich bereits soweit hin bekommen. Den Feinstaubsensor kann ich über die Konsolenebene ansprechen und die Messwerte werden auch als Hexadezimalwerte zurückgegeben. Aber genau hier frage ich mich nun, wie kann ich die Werte mit einem noch zu erstellenden Programm (z.B. durch Programmierung in Python, oder auch logiCad) die Werte einlesen und weiter verarbeiten? Die beiden Messwerte sollen dann in einem TCP Modbus-Protokoll an einen übergeordneten Regler weitergegeben werden.
Des Weiteren soll der RevPi über das IP Netzwerk Daten von einem Gateway (M-Bus/Modbus Protokollwandler) der Fa. Wachendorff Daten auslesen und diese dann dem übergeordneten Regler über TCP zur Verfügung stellen. Um die ganze Angelegenheit etwas anschaulicher zu machen, habe ich dies mal als Übersichtgrafik zu Papier gebracht.
Und jetzt gebe ich mich der Hoffnung hin, dass mir hier geholfen werden kann.
Dieter
ich war schon lange auf der Suche nach einem für mich und mein Projekt passenden Raspberry Pi. Durch einen glücklichen Zufall bin ich dann auf euer Produkt aufmerksam geworden. Da ihr bereits einige Funktionen in eurem Produkt integriert habt, die ich benötigte, habe ich nun den RevPi Core 3 bereits bei euch gekauft.
Was war mir wichtig:
1. Vernünftige Montagemöglichkeit auf Hutschiene
2. Einfacher Anschluss an eine Stromversorgung. Im vorh. Schaltschrank gibt es bereits ein 24VDC Stromversorgung.
3. Support, der ja offensichtlich über das deutschsprachige Forum bestens gegeben ist
4. Die wirklich hilfreichen Video Tutorials
Aber dennoch habe ich so einige Fragen, wo ich leider keine Antwort zu gefunden habe. nun an. Ich habe viel gelesen und habe mir auch viele Videos angesehen, aber leider bleiben da noch so einige Fragen offen, die ich hier gerne stellen würde.
1. Wofür ist der MicroUSB an der Frontseite
2. Warum gibt es nicht eine kleine Bedienungsanleitung, die die Hardware von dem RevPiCore 3 ein wenig beschreibt? Anschluss-Schema, wofür sind die Schnittstellen da, etc.
3. Was kann ich mit der kostenlosen logiCaD 3 so machen. Handelt es sich hierbei um eine Demoversion mit irgendwelchen Einschränkungen?
4. Was würde mir der zus. Kauf von logi.RTS multi task bringen und macht der Kauf in Verbindung mit der kostenlosen logiCad 3 überhaupt Sinn?
Mit welchen Vorkenntnissen beginne ich mein Projekt:
Bezüglich dem Raspberry Pi: Absolut gar keine
Bezüglich der Reglerprogrammierung: ca. 3 jährige Erfahrung als Hobbyprogrammierer, die Programmierung erfolgt über Funktionsbausteine (Fupla).
Sonstige Programmierkenntnisse: Basicprogrammierung, Makroprogrammierung
Jetzt möchte ich mein Projekt vorstellen:
Der RevPi soll über die USB Schnittstelle von einem Feinstaubsensor zwei Datenwerte auslesen. Dies habe ich bereits soweit hin bekommen. Den Feinstaubsensor kann ich über die Konsolenebene ansprechen und die Messwerte werden auch als Hexadezimalwerte zurückgegeben. Aber genau hier frage ich mich nun, wie kann ich die Werte mit einem noch zu erstellenden Programm (z.B. durch Programmierung in Python, oder auch logiCad) die Werte einlesen und weiter verarbeiten? Die beiden Messwerte sollen dann in einem TCP Modbus-Protokoll an einen übergeordneten Regler weitergegeben werden.
Des Weiteren soll der RevPi über das IP Netzwerk Daten von einem Gateway (M-Bus/Modbus Protokollwandler) der Fa. Wachendorff Daten auslesen und diese dann dem übergeordneten Regler über TCP zur Verfügung stellen. Um die ganze Angelegenheit etwas anschaulicher zu machen, habe ich dies mal als Übersichtgrafik zu Papier gebracht.
Und jetzt gebe ich mich der Hoffnung hin, dass mir hier geholfen werden kann.
Dieter
Re: RevPi Messwertwandler: TCPModbus Slave & Master
Hallo Dieter,
vielen Dank für Dein Vertrauen. Ja, Dir kann hier bestimmt geholfen werden. ich versuche mal den Anfang zu machen:
Generell empfehle ich Dir auch den Blog komplett vom Anfang her zu lesen. Dort hatten wir letztes Jahr systematisch alle Komponenten des Systems beschrieben, noch bevor es erhältlich war.
Auf der Seite Deines RevPi Core findest Du das gesuchte Anschlussschema. Dort ist auch die Micor-USB zu finden mit der Beschriftung: "only for eMMC programming". Die Buchse ist die einzige Möglichkeit, dass Du Dein Speicherimage irgendwie auf einem PC sichern und wieder zurückspielen kannst. Dirk beschreibt das gleich im Tutorial 01 "Erstellen eines Image". Im "Quick Start Guide" Video ab Minute 4 zeigt Dirk auch die Verwendung der micro-USB Buchse.
Bei den schriftlichen Tutorials findest Du gleich im Überblick zum Core hierdie Tabelle mit allen Buchsen und der jeweiligen Beschreibung dazu...
Die schriftlichen Tutorials sind wie ein Handbuch zu lesen und die Kapitelübersicht links erleichtert dabei die Suche nach dem passenden Thema. Außerdem gibt es eine Suchfunktion auf der Webseite (Lupe im roten Balken oben). Wenn Du dort micro USB eingibst und bei den Ergebnissen die Werbeeinträge überspringst (wir nutzen google für die Suche, weil das viel bessere Ergebnisse bringt, als die Wordpress interne Suchmaschine), dann bekommst Du u.a. die oben erwähnte Tutorialseite als 3. Ergebnis und als 7. Ergebnis den Blogeintrag vom 25. Juli 2016, in dem die Buchse ebenfalls beschrieben wird.
Logi.CAD3:
Das ist der Editor, um in Structured Text (ST, eine der Srachen in der SPSen programmiert werden) oder in Fupla/FB ("function block") Steuerungsprogramme zu schreiben, die auf dem Core dann ausgeführt werden. Die kostenlose version des Editors hat keinerlei Einschränkungen bei ST. Aber um in FB zu programmieren musst Du die kostenpflichtige logi.CAD3 FBD-Light kaufen. Damit die in diesen Editoren geschriebenen Programme dann auch auf dem Core laufen, muss dort ein Dienst aktiviert werden, dies ist das logi.RTS ("RunTimeSystem"). das RTS liest Dein Steuerungsprogramm und führt es aus. Der Editor ist ein Windows (oder Linux) Programm, welches auf einem PC ausgeführt wird und das fertige Steuerungsprogramm dann über Netzwerkkabel auf den Core überträgt. (siehe dazu auch Video Tutorial 17). Der RTS-Dienst läuft ohne gültigen Lizenzschlüssel nur 1 Stunde, dann muss das System rebootet werden. Aber damit kannst im Prinzip ohne Geld in die Hand zu nehmen erst einmal alles ausprobieren. Die RTS-Lizenz ist für jedes gerät zu bezahlen, den Editor logi.CAD3 FBD-Light würdest Du natürlich nur einmal benötigen.
Nun zu Deinem Projekt:
Das lässt sich eigentlich alles problemlos machen. Allerdings wirst Du dafür nicht mit logi.CAD alleine klar kommen. Ob Du eine Steuerungssoftware überhaupt benötigst, ist für mich fraglich, denn dazu hast Du nichts gesagt. Wenn Du eigentlich gar keine DIO / AIO Module etc. verwendest, sondern das gerät mehr als Gateway betreiben willst, dann ist eine Steuerungssprache wie FB oder ST eigentlich nicht die beste Wahl. Z.B. kannst Du ohne zusätzlichen Programmieraufwand dort nicht einfach Dein USB-Messgerät einbinden. Und wenn Du eh programmieren musst, dann kannst Du den Rest der beschriebenen Aufgaben auch gleich direkt mit programmieren.
Der Modbusdatenaustausch ist bei uns von Hause aus gleich im Gerät eingebaut. Du musst ihn nur über PiCtory konfigurieren, indem Du dort einen Modbus Master und einen Modbus Slave anlegst. Beide "virtuellen Module" wollen ihre Modbus-Daten mit dem sogenannten Prozessabbild (PA) austauschen und daher wird für die Module dort im PA Speicher jeweils 32 Doppelbyte (Word) für Modbusrgeisterdaten und 32 Bit für ModbusCoildaten reserviert (jeweils für Ein- und Ausgangswerte). Die Modbusmodule kümmern sich dann völlig eigenständig darum, dass zyklisch die Modbusdaten mit diesen Werten im PA ausgetauscht werden.
Dein Anwendungsprogramm muss nun einfach Werte in das PA schreiben oder dort lesen und entsprechend weiterverarbeiten. Der Zugriff geht recht einfach. Das einfachste wäre, Du versuchst Python zu lernen. Da gibt es sehr viele Tutorials und Bücher zu und das ist nicht wirklich viel schwerer als Basic zu lernen. Der Zugriff mit Python aufs PA wird in mehreren Tutorials von uns mit Beispiel beschrieben. Wenn Du das einfach haben willst, schau mal Sven Sagers Blogseiteim Web vorbei.
Das Auslesen des Sensors über die USB wird mit Python auch super easy gehen, da das Teil offenbar eine serielle Verbindung aufbaut. Dafür kannst Du in Python das device "tty0" öffnen und wie eine Datei beschreiben und lesen.
Eine Alternative wäre natürlich für das Weiterreichen von Daten von einem Sender zu einem Empfänger die Software "Node red". Vielleicht gibt es sogar schon einen Node für Deinen Sensor unter Linux, dann könntest Du dort sofort loslegen, denn das ist eine grafische Programmiersprache, bei der du nur Kästchen verbindest. Hier im Forum gibt es einige Leute, die sich mit Node Red befassen und vielleicht dort auch weiterhelfen können, damit Du die Modbus-Daten aus dem PA über Node red weiterverarbeiten kannst.
jedenfalls wünsche ich Dir viel Erfolg bei Deinem spannenden Projekt. Halte uns auf dem Laufenden, damit wir Dich ggf. unterstützen können.
vielen Dank für Dein Vertrauen. Ja, Dir kann hier bestimmt geholfen werden. ich versuche mal den Anfang zu machen:
Generell empfehle ich Dir auch den Blog komplett vom Anfang her zu lesen. Dort hatten wir letztes Jahr systematisch alle Komponenten des Systems beschrieben, noch bevor es erhältlich war.
Auf der Seite Deines RevPi Core findest Du das gesuchte Anschlussschema. Dort ist auch die Micor-USB zu finden mit der Beschriftung: "only for eMMC programming". Die Buchse ist die einzige Möglichkeit, dass Du Dein Speicherimage irgendwie auf einem PC sichern und wieder zurückspielen kannst. Dirk beschreibt das gleich im Tutorial 01 "Erstellen eines Image". Im "Quick Start Guide" Video ab Minute 4 zeigt Dirk auch die Verwendung der micro-USB Buchse.
Bei den schriftlichen Tutorials findest Du gleich im Überblick zum Core hierdie Tabelle mit allen Buchsen und der jeweiligen Beschreibung dazu...
Die schriftlichen Tutorials sind wie ein Handbuch zu lesen und die Kapitelübersicht links erleichtert dabei die Suche nach dem passenden Thema. Außerdem gibt es eine Suchfunktion auf der Webseite (Lupe im roten Balken oben). Wenn Du dort micro USB eingibst und bei den Ergebnissen die Werbeeinträge überspringst (wir nutzen google für die Suche, weil das viel bessere Ergebnisse bringt, als die Wordpress interne Suchmaschine), dann bekommst Du u.a. die oben erwähnte Tutorialseite als 3. Ergebnis und als 7. Ergebnis den Blogeintrag vom 25. Juli 2016, in dem die Buchse ebenfalls beschrieben wird.
Logi.CAD3:
Das ist der Editor, um in Structured Text (ST, eine der Srachen in der SPSen programmiert werden) oder in Fupla/FB ("function block") Steuerungsprogramme zu schreiben, die auf dem Core dann ausgeführt werden. Die kostenlose version des Editors hat keinerlei Einschränkungen bei ST. Aber um in FB zu programmieren musst Du die kostenpflichtige logi.CAD3 FBD-Light kaufen. Damit die in diesen Editoren geschriebenen Programme dann auch auf dem Core laufen, muss dort ein Dienst aktiviert werden, dies ist das logi.RTS ("RunTimeSystem"). das RTS liest Dein Steuerungsprogramm und führt es aus. Der Editor ist ein Windows (oder Linux) Programm, welches auf einem PC ausgeführt wird und das fertige Steuerungsprogramm dann über Netzwerkkabel auf den Core überträgt. (siehe dazu auch Video Tutorial 17). Der RTS-Dienst läuft ohne gültigen Lizenzschlüssel nur 1 Stunde, dann muss das System rebootet werden. Aber damit kannst im Prinzip ohne Geld in die Hand zu nehmen erst einmal alles ausprobieren. Die RTS-Lizenz ist für jedes gerät zu bezahlen, den Editor logi.CAD3 FBD-Light würdest Du natürlich nur einmal benötigen.
Nun zu Deinem Projekt:
Das lässt sich eigentlich alles problemlos machen. Allerdings wirst Du dafür nicht mit logi.CAD alleine klar kommen. Ob Du eine Steuerungssoftware überhaupt benötigst, ist für mich fraglich, denn dazu hast Du nichts gesagt. Wenn Du eigentlich gar keine DIO / AIO Module etc. verwendest, sondern das gerät mehr als Gateway betreiben willst, dann ist eine Steuerungssprache wie FB oder ST eigentlich nicht die beste Wahl. Z.B. kannst Du ohne zusätzlichen Programmieraufwand dort nicht einfach Dein USB-Messgerät einbinden. Und wenn Du eh programmieren musst, dann kannst Du den Rest der beschriebenen Aufgaben auch gleich direkt mit programmieren.
Der Modbusdatenaustausch ist bei uns von Hause aus gleich im Gerät eingebaut. Du musst ihn nur über PiCtory konfigurieren, indem Du dort einen Modbus Master und einen Modbus Slave anlegst. Beide "virtuellen Module" wollen ihre Modbus-Daten mit dem sogenannten Prozessabbild (PA) austauschen und daher wird für die Module dort im PA Speicher jeweils 32 Doppelbyte (Word) für Modbusrgeisterdaten und 32 Bit für ModbusCoildaten reserviert (jeweils für Ein- und Ausgangswerte). Die Modbusmodule kümmern sich dann völlig eigenständig darum, dass zyklisch die Modbusdaten mit diesen Werten im PA ausgetauscht werden.
Dein Anwendungsprogramm muss nun einfach Werte in das PA schreiben oder dort lesen und entsprechend weiterverarbeiten. Der Zugriff geht recht einfach. Das einfachste wäre, Du versuchst Python zu lernen. Da gibt es sehr viele Tutorials und Bücher zu und das ist nicht wirklich viel schwerer als Basic zu lernen. Der Zugriff mit Python aufs PA wird in mehreren Tutorials von uns mit Beispiel beschrieben. Wenn Du das einfach haben willst, schau mal Sven Sagers Blogseiteim Web vorbei.
Das Auslesen des Sensors über die USB wird mit Python auch super easy gehen, da das Teil offenbar eine serielle Verbindung aufbaut. Dafür kannst Du in Python das device "tty0" öffnen und wie eine Datei beschreiben und lesen.
Eine Alternative wäre natürlich für das Weiterreichen von Daten von einem Sender zu einem Empfänger die Software "Node red". Vielleicht gibt es sogar schon einen Node für Deinen Sensor unter Linux, dann könntest Du dort sofort loslegen, denn das ist eine grafische Programmiersprache, bei der du nur Kästchen verbindest. Hier im Forum gibt es einige Leute, die sich mit Node Red befassen und vielleicht dort auch weiterhelfen können, damit Du die Modbus-Daten aus dem PA über Node red weiterverarbeiten kannst.
jedenfalls wünsche ich Dir viel Erfolg bei Deinem spannenden Projekt. Halte uns auf dem Laufenden, damit wir Dich ggf. unterstützen können.
Unser RevPi Motto: Don't just claim it - make it!
Re: RevPi Messwertwandler: TCPModbus Slave & Master
Hallo Volker,
vielen Dank für die schnelle und ausführliche Rückmeldung. Da habe ich wohl noch so einiges übersehen bzw. noch nicht gelesen. Aber ich habe den RevPi auch erst seit einer Woche.
Den Blog und seine Einträge habe ich heute erst entdeckt. Da hatte ich deine Antwort allerdings noch nicht gelesen. Es ist gar nicht so einfach die ganzen Informationsquellen zu finden, zu lesen und zu verstehen.
Wie ich die Beschreibung für das Anschlußschema übersehen konnte ist mir ein Rätsel.
Heute habe ich mich mal mit logiCAD 3 beschäftigt. Am Ende habe ich mich schon gefragt, ob die Software für mein Projekt überhaupt geeignet ist. Du hast da ja auch so deine Zweifel angemeldet.
Komisch für mich war nur wieder, dass ich das in der Bedienungsanleitung von logiCad 3 auf Seite 131 - 132 beschriebene Beispielprogramm nicht in den RevPi laden konnte.
Bis zu dem Punkt "Anwendung auf Revolution Pi laden und testen" hat alles prima funktioniert. Bei dem Versuch das Programm in den RevPi zu laden kam folgende Fehlermeldung:
Die IP-Adresse kann aber nicht falsch eingetragen sein und ist wohl auch übernommen worden, da der Projektexplorer auf den RevPi problemslos zugreifen kann.
Die LogiCad Software ruft bei dem Versuch die IO-Konfiguration zu bearbeiten über meinen Browser 'PiCtory - 1.2.3' auf.
Vielleicht stimmt die Portadresse nicht, oder es liegt an dem fehlenden Steuerungsprogramm?
Auch wenn ich wahrscheinlich nicht mit logiCAD weiter machen werde, interssieren würde es mich ja schon wo ich hier was falsch gemacht habe.
Ich schaue mir mal in den nächsten Tagen die Software Node red an. Scheint ja genau das richtige für mein Projekt zu sein. Ansonsten muss ich wohl mit Python weiter machen.
Ach ja, in meinem Projekt hatte sich ein kleiner Gedankenfehler eingeschlichen. Es macht wohl wenig Sinn die Daten vom M-Bus/Modbus Gateway erst mit dem RevPi einzulesen
und dann an den SAIA Regler weiterzugeben. Damit spare ich mir die Masterfunktion am RevPi. Die Daten des Feinstaubsensors als Modbus Slave zur Verfügung zu stellen wäre
dann im Moment die einizg verbleibende Aufgabe für den RevPi. Aber da kommt in Zukunft mit Sicherheit noch etwas dazu.
Ich habe gestern den RevPi schon mal als Modbus Slave eingerichtet. Wo und wie kann ich die Modbusadresse einstellen? Die Slave-Adresse steht im Moment auf '001'
Dieter
vielen Dank für die schnelle und ausführliche Rückmeldung. Da habe ich wohl noch so einiges übersehen bzw. noch nicht gelesen. Aber ich habe den RevPi auch erst seit einer Woche.
Den Blog und seine Einträge habe ich heute erst entdeckt. Da hatte ich deine Antwort allerdings noch nicht gelesen. Es ist gar nicht so einfach die ganzen Informationsquellen zu finden, zu lesen und zu verstehen.
Wie ich die Beschreibung für das Anschlußschema übersehen konnte ist mir ein Rätsel.
Heute habe ich mich mal mit logiCAD 3 beschäftigt. Am Ende habe ich mich schon gefragt, ob die Software für mein Projekt überhaupt geeignet ist. Du hast da ja auch so deine Zweifel angemeldet.
Komisch für mich war nur wieder, dass ich das in der Bedienungsanleitung von logiCad 3 auf Seite 131 - 132 beschriebene Beispielprogramm nicht in den RevPi laden konnte.
Bis zu dem Punkt "Anwendung auf Revolution Pi laden und testen" hat alles prima funktioniert. Bei dem Versuch das Programm in den RevPi zu laden kam folgende Fehlermeldung:
Die IP-Adresse kann aber nicht falsch eingetragen sein und ist wohl auch übernommen worden, da der Projektexplorer auf den RevPi problemslos zugreifen kann.
Die LogiCad Software ruft bei dem Versuch die IO-Konfiguration zu bearbeiten über meinen Browser 'PiCtory - 1.2.3' auf.
Vielleicht stimmt die Portadresse nicht, oder es liegt an dem fehlenden Steuerungsprogramm?
Auch wenn ich wahrscheinlich nicht mit logiCAD weiter machen werde, interssieren würde es mich ja schon wo ich hier was falsch gemacht habe.
Ich schaue mir mal in den nächsten Tagen die Software Node red an. Scheint ja genau das richtige für mein Projekt zu sein. Ansonsten muss ich wohl mit Python weiter machen.
Ach ja, in meinem Projekt hatte sich ein kleiner Gedankenfehler eingeschlichen. Es macht wohl wenig Sinn die Daten vom M-Bus/Modbus Gateway erst mit dem RevPi einzulesen
und dann an den SAIA Regler weiterzugeben. Damit spare ich mir die Masterfunktion am RevPi. Die Daten des Feinstaubsensors als Modbus Slave zur Verfügung zu stellen wäre
dann im Moment die einizg verbleibende Aufgabe für den RevPi. Aber da kommt in Zukunft mit Sicherheit noch etwas dazu.
Ich habe gestern den RevPi schon mal als Modbus Slave eingerichtet. Wo und wie kann ich die Modbusadresse einstellen? Die Slave-Adresse steht im Moment auf '001'
Dieter
Re: RevPi Messwertwandler: TCPModbus Slave & Master
Hi,
also bei logi.cad tippe ich einfach mal darauf, dass der RevPi schon länger als 1h lief und damit logi.RTS beendet wurde. Versuch mal den RevPi runter und wieder hoch zu fahren und dann das Projekt zu übertragen. Wenn das nicht funktioniert, dann beschreibe Dein Problem mal im logicad-Forum. Dort liest das Support-Team von logi.cals mit und wird sich sicher um Dein Problem kümmern...
Zum Modbus Slave: Eine Modbusadresse gibt es nur bei Modbus RTU. Unter Modbus TCP dient die IP-Adresse in Kombination mit dem Port (den kannst Du im Werteeditor bei PiCtory einstellen) als Geräteadressierung. Die "Device-ID" soll laut Modbus eigentlich ausschließlich für Gateways von TCP auf RTU genutzt werden. In einem solchen Gateway slave wird diese ID in eine Modbusadresse für RTU umgesetzt. "normale TCP-Slaves" sollten die Geräte ID eigentlich nicht auswerten. Ich befürchte, dass unser virtuelles Modul hier aber eine 1 erwartet. Mehrere Slaves in einem TCP-Netz sollten sich entweder über ihre IP unterscheiden oder aber über den Port. Reserviert ist allerdings der Port 502 (unsere Defaulteinstellung) für Modbusverbindungen.
also bei logi.cad tippe ich einfach mal darauf, dass der RevPi schon länger als 1h lief und damit logi.RTS beendet wurde. Versuch mal den RevPi runter und wieder hoch zu fahren und dann das Projekt zu übertragen. Wenn das nicht funktioniert, dann beschreibe Dein Problem mal im logicad-Forum. Dort liest das Support-Team von logi.cals mit und wird sich sicher um Dein Problem kümmern...
Zum Modbus Slave: Eine Modbusadresse gibt es nur bei Modbus RTU. Unter Modbus TCP dient die IP-Adresse in Kombination mit dem Port (den kannst Du im Werteeditor bei PiCtory einstellen) als Geräteadressierung. Die "Device-ID" soll laut Modbus eigentlich ausschließlich für Gateways von TCP auf RTU genutzt werden. In einem solchen Gateway slave wird diese ID in eine Modbusadresse für RTU umgesetzt. "normale TCP-Slaves" sollten die Geräte ID eigentlich nicht auswerten. Ich befürchte, dass unser virtuelles Modul hier aber eine 1 erwartet. Mehrere Slaves in einem TCP-Netz sollten sich entweder über ihre IP unterscheiden oder aber über den Port. Reserviert ist allerdings der Port 502 (unsere Defaulteinstellung) für Modbusverbindungen.
Unser RevPi Motto: Don't just claim it - make it!
Re: RevPi Messwertwandler: TCPModbus Slave & Master
Hallo Volker,
ich bin wieder ein Stück weiter gekommen.
Es ist mir nun gelungen, das Problem mit dem durch das Pollen des Modbus Registers und dem damit verbundenen ständig neu schreibenden Ausgangswert für das Node zur Steuerung des Feinstaubsensors in den Griff zu bekommen. Am Ende war es ganz einfach zu lösen, auch ohne ein eigenes Skript schreiben zu müssen. Es gibt ein fertiges Node dafür, das "rbe (report by exception) ". Das Node schreibt erst bei einer Veränderung des Eingangswertes einen neuen Ausgangswert. Gefunden habe ich den entscheidenen Hinweis in einer Vorbereitung zur Bachelor-Arbeit der Hochschule für Technik in Berlin. Die Arbeit beschäftigt sich mit Node-RED als Werkzeug für die visuelle Programmierung. In einem Kapitel wird dort auch auf die einzelnen Funktionen der Nodes kurz und prägnant eingegangen.
Und nun läuft fast alles wie gewünscht, auch ohne ein Hardware-DI.
Jetzt gibt es noch einige wenige Baustellen:
1. Wie kann ich Node-Red automatisch nach Netzwiederkehr starten lassen?
2. Wie kann ich den Modbustreiber automatisch zurück setzen lassen? Denn ohne funktioniert der Modbus Slave nach einem Neustart des RevPi nicht.
Im Moment mache ich dies noch alles händisch. Nach meinem Verständis sollte dies nach einem Netzausfall automatisch ablaufen.
Gruß Dieter
ich bin wieder ein Stück weiter gekommen.
Es ist mir nun gelungen, das Problem mit dem durch das Pollen des Modbus Registers und dem damit verbundenen ständig neu schreibenden Ausgangswert für das Node zur Steuerung des Feinstaubsensors in den Griff zu bekommen. Am Ende war es ganz einfach zu lösen, auch ohne ein eigenes Skript schreiben zu müssen. Es gibt ein fertiges Node dafür, das "rbe (report by exception) ". Das Node schreibt erst bei einer Veränderung des Eingangswertes einen neuen Ausgangswert. Gefunden habe ich den entscheidenen Hinweis in einer Vorbereitung zur Bachelor-Arbeit der Hochschule für Technik in Berlin. Die Arbeit beschäftigt sich mit Node-RED als Werkzeug für die visuelle Programmierung. In einem Kapitel wird dort auch auf die einzelnen Funktionen der Nodes kurz und prägnant eingegangen.
Und nun läuft fast alles wie gewünscht, auch ohne ein Hardware-DI.
Jetzt gibt es noch einige wenige Baustellen:
1. Wie kann ich Node-Red automatisch nach Netzwiederkehr starten lassen?
2. Wie kann ich den Modbustreiber automatisch zurück setzen lassen? Denn ohne funktioniert der Modbus Slave nach einem Neustart des RevPi nicht.
Im Moment mache ich dies noch alles händisch. Nach meinem Verständis sollte dies nach einem Netzausfall automatisch ablaufen.
Gruß Dieter
Re: RevPi Messwertwandler: TCPModbus Slave & Master
Hallo Dieter,
irgendwie scheinen wir immer noch von unterschiedlichen Dingen zu reden. Du beschreibst jetzt Modbus unter Node Red. Gut, wenn es da eine Möglichkeit gibt, dass einzelne Modbustelegramme gesendet werden können (also a-zyklisch). Das hat aber gar nichts mit unserem RevPi Modbus Master / Slave zu tun, sondern für Node-Red gibt es nach meiner Kenntnis eine eigene Modbusbibliothek, die dann wahrscheinlich so einen Modbus-Node bereitstellt. Bei dieser kannst Du wahrscheinlich solche einzelnen Telegramme auch senden. Aber dafür brauchst Du unseren Modbus-Stack nicht. Im Gegenteil, Du solltest unseren Stack im Web-Status dann deaktivieren und in PiCtory auch keinen Modbus konfigurieren, da sich die beiden Stacks sonst eventuell in die Quere kommen. Die Konfiguration eine Modbus-Nodes geschieht dann auch in Node-Red.
Das ist eine Schiene, die eigentlich aktuell noch ganz an unserer Software vorbei arbeitet. Daher kann ich Dir auch leider nicht sagen, wie Du mit Node-Red automatisch nach einem Netzwerkstart Nodes aktivieren kannst. Wir wollen in den nächsten Monaten uns intensiver mit einer guten Integration von Node-red in unsere Software befassen und dann auch mit der Verwirrung bei Modbus aufräumen. Aber aktuell sind das leider 2 völlig getrennte Systeme.
Wenn der Modbus-Dienst bei Dir tatsächlich überhaupt noch verwendet wird (was mich wundern würde, denn der überträgt völlig unabhängig von was auch immer Du in Node Red machst seine Daten grundsätzlich zyklisch) und dieser Dienst nach einem Systemstart nicht automatisch anläuft, dann hast Du keine aktuelle Version der Software, sondern eine alte, die diesen Bug hatte:
https://revolution.kunbus.de/forum/view ... f=16&t=324
Bitte mach ein Upddate der Software, wie bereits mehrfach in Foren beschrieben:
und dann
Danach sollte der Modbus Dienst automatisch anlaufen. Aber wie schon gesagt, wenn Du jetzt direkt über Node Red Modbus Nodes verwendest, dann brauchst Du diesen Dienst nicht, solltest ihn sogar deaktivieren.
Generell empfehle ich Dir, das Forum Neuigkeiten & Ankündigungen zu abonieren, damit Du solche Hinweise auf Bug-Releases auch zeitnah mitbekommst.
irgendwie scheinen wir immer noch von unterschiedlichen Dingen zu reden. Du beschreibst jetzt Modbus unter Node Red. Gut, wenn es da eine Möglichkeit gibt, dass einzelne Modbustelegramme gesendet werden können (also a-zyklisch). Das hat aber gar nichts mit unserem RevPi Modbus Master / Slave zu tun, sondern für Node-Red gibt es nach meiner Kenntnis eine eigene Modbusbibliothek, die dann wahrscheinlich so einen Modbus-Node bereitstellt. Bei dieser kannst Du wahrscheinlich solche einzelnen Telegramme auch senden. Aber dafür brauchst Du unseren Modbus-Stack nicht. Im Gegenteil, Du solltest unseren Stack im Web-Status dann deaktivieren und in PiCtory auch keinen Modbus konfigurieren, da sich die beiden Stacks sonst eventuell in die Quere kommen. Die Konfiguration eine Modbus-Nodes geschieht dann auch in Node-Red.
Das ist eine Schiene, die eigentlich aktuell noch ganz an unserer Software vorbei arbeitet. Daher kann ich Dir auch leider nicht sagen, wie Du mit Node-Red automatisch nach einem Netzwerkstart Nodes aktivieren kannst. Wir wollen in den nächsten Monaten uns intensiver mit einer guten Integration von Node-red in unsere Software befassen und dann auch mit der Verwirrung bei Modbus aufräumen. Aber aktuell sind das leider 2 völlig getrennte Systeme.
Wenn der Modbus-Dienst bei Dir tatsächlich überhaupt noch verwendet wird (was mich wundern würde, denn der überträgt völlig unabhängig von was auch immer Du in Node Red machst seine Daten grundsätzlich zyklisch) und dieser Dienst nach einem Systemstart nicht automatisch anläuft, dann hast Du keine aktuelle Version der Software, sondern eine alte, die diesen Bug hatte:
https://revolution.kunbus.de/forum/view ... f=16&t=324
Bitte mach ein Upddate der Software, wie bereits mehrfach in Foren beschrieben:
Code: Select all
sudo apt-get update
Code: Select all
sudo apt-get upgrade
Generell empfehle ich Dir, das Forum Neuigkeiten & Ankündigungen zu abonieren, damit Du solche Hinweise auf Bug-Releases auch zeitnah mitbekommst.
Unser RevPi Motto: Don't just claim it - make it!
Re: RevPi Messwertwandler: TCPModbus Slave & Master
Hallo Volker,
erst einmal vielen Dank dafür, dass du mir immer so ausführlich antwortest. Das mit den Updates werde ich umgehend machen.
Leider kann ich diese Aussage nicht bestätigen:
Ergebnis: Modbus läuft bei mir unter NodeRed nicht. Es wird von den Modbus Note Write und Read Modulen immer nur "Disconnect" angezeigt.
Da NodeRed für mich absolutes Neuland ist habe ich auch keine Idee mehr, was ich unter NodeRed noch zusätzlich machen muss, um den Modbus zu aktivieren.
Beim Raspberry Pi kann es nicht daran liegen, dass hier noch Updates/Upgrades nicht durchgeführt wurden, da ja alles auf dem aktuellen Stand ist.
Im Internet bin ich leider zum Thema Modbus unter NodeRed nicht weiter fündig geworden. Da wird immer nur gezeigt wie einfach es funktioniert und nachdem was man dort sieht würde ich deine oben zitierte Aussage auch zu 100% bestätigen.
Ich werde heute mal die ausstehenden Updates und Upgrades am RevPi durchführen. Node Red hatte ich schon vor Wochen auf den aktuellen Stand gebracht.
Ich werde hier weiter berichten und vielleicht hat ja auch noch jemand eine Idee wie Modbus unter NodeRed direkt lauffähig wird. Manchmal sind es ja nur Kleinigkeiten und meistens sitzt das Problem ja vor dem Computer.
Gruß Dieter
erst einmal vielen Dank dafür, dass du mir immer so ausführlich antwortest. Das mit den Updates werde ich umgehend machen.
Leider kann ich diese Aussage nicht bestätigen:
Ohne dass ich den Modbus Dienst unter PiCtory aktiviere geht mit Modbus unter NodeRed rein gar nichts. Es entsteht absolut keine Verbindung. Deshalb bin ich bisher immer davon ausgegangen, dass man im Hintergrund erst einmal ein Modbus Modul starten muss. In der Praxis funktioniert dies dann auch mit dem RevPi so. In der Zwischenzeit hatte ich mir noch einen Raspberry Pi 3 zugelegt, alles geupdatet und geupragded inkl. Node-Red.Danach sollte der Modbus Dienst automatisch anlaufen. Aber wie schon gesagt, wenn Du jetzt direkt über Node Red Modbus Nodes verwendest, dann brauchst Du diesen Dienst nicht, solltest ihn sogar deaktivieren.
Ergebnis: Modbus läuft bei mir unter NodeRed nicht. Es wird von den Modbus Note Write und Read Modulen immer nur "Disconnect" angezeigt.
Da NodeRed für mich absolutes Neuland ist habe ich auch keine Idee mehr, was ich unter NodeRed noch zusätzlich machen muss, um den Modbus zu aktivieren.
Beim Raspberry Pi kann es nicht daran liegen, dass hier noch Updates/Upgrades nicht durchgeführt wurden, da ja alles auf dem aktuellen Stand ist.
Im Internet bin ich leider zum Thema Modbus unter NodeRed nicht weiter fündig geworden. Da wird immer nur gezeigt wie einfach es funktioniert und nachdem was man dort sieht würde ich deine oben zitierte Aussage auch zu 100% bestätigen.
Ich werde heute mal die ausstehenden Updates und Upgrades am RevPi durchführen. Node Red hatte ich schon vor Wochen auf den aktuellen Stand gebracht.
Ich werde hier weiter berichten und vielleicht hat ja auch noch jemand eine Idee wie Modbus unter NodeRed direkt lauffähig wird. Manchmal sind es ja nur Kleinigkeiten und meistens sitzt das Problem ja vor dem Computer.
Gruß Dieter
Re: RevPi Messwertwandler: TCPModbus Slave & Master
Hallo Volker,
ich hatte bisher noch keinen Modbus Server eingerichtet, deshalb kam es zu folgenden Fehlermeldungen. Diese blieben aus, wenn ich das Server Modbus Modul unter Pictory gestartet habe.
Es hat sich noch ein weiteres Problem aufgetan. Ich habe, wie von dir empfohlen, alle Updates und Upgrades durchgeführt. Wenn ich unter APPS PiCtory aufrufe (grünen Start Button), dann steht in der Statuszeile https//127.0.0.1/pictory/index.html?hn=HUB87NFYFG und der Bildschirm bleibt vollständig grau. Den Modbus Server habe ich, nachdem der Bildschirm beim Aufruf von PiCtory immer grau bleibt, nun unter Service abgeschaltet.
Gruß Dieter
ich hatte bisher noch keinen Modbus Server eingerichtet, deshalb kam es zu folgenden Fehlermeldungen. Diese blieben aus, wenn ich das Server Modbus Modul unter Pictory gestartet habe.
Nachdem ich nun einen Server auf meiner zentralen Steuereineinheit eingerichtet habe, geht die Fehlermeldung im Modbus Read (Disconected) nun weg. Ich glaube, ich muss hier noch einmal ran, so ganz verstehen tue ich dass alles noch nicht.Start Node-RED
Once Node-RED has started, point a browser at http://192.168.xxx.xx:1880
On Pi Node-RED works better with the Firefox or Chrome browser
Use node-red-stop to stop Node-RED
Use node-red-start to start Node-RED again
Use node-red-log to view the recent log output
Use sudo systemctl enable nodered.service to autostart Node-RED at every boot
Use sudo systemctl disable nodered.service to disable autostart on boot
To find more nodes and example flows - go to http://flows.nodered.org
Starting as a systemd service.
Started Node-RED graphical event wiring tool..
12 Oct 10:25:44 - [info]
Welcome to Node-RED
===================
12 Oct 10:25:44 - [info] Node-RED version: v0.17.5
12 Oct 10:25:44 - [info] Node.js version: v6.11.4
12 Oct 10:25:44 - [info] Linux 4.4.50-rt66-v7+ arm LE
12 Oct 10:25:46 - [info] Loading palette nodes
12 Oct 10:25:53 - [warn] [modbustcp-no-pooling-server] Deprecated call to RED.runtime.nodes.registerType - node-set name must be provided as first argument
12 Oct 10:25:53 - [warn] [modbustcp-no-pooling-write] Deprecated call to RED.runtime.nodes.registerType - node-set name must be provided as first argument
12 Oct 10:25:53 - [warn] [modbustcp-no-pooling-read] Deprecated call to RED.runtime.nodes.registerType - node-set name must be provided as first argument
12 Oct 10:25:55 - [info] Dashboard version 2.4.3 started at /ui
12 Oct 10:25:56 - [warn] ------------------------------------------------------
12 Oct 10:25:56 - [warn] [pythonshell] Error: Cannot find module './PythonshellNode' (line:19)
12 Oct 10:25:56 - [warn] ------------------------------------------------------
12 Oct 10:25:56 - [info] Settings file : /home/pi/.node-red/settings.js
12 Oct 10:25:56 - [info] User directory : /home/pi/.node-red
12 Oct 10:25:56 - [info] Flows file : /home/pi/.node-red/flows_RevPi2787.json
12 Oct 10:25:56 - [info] Server now running at http://127.0.0.1:1880/
12 Oct 10:25:57 - [info] Starting flows
12 Oct 10:25:57 - [info] Started flows
12 Oct 10:25:57 - [info] [rpi-sds011:SDS011] Serial port is open
12 Oct 10:25:59 - [warn] [modbus-write:Write1] FSM Reset On State INIT
12 Oct 10:25:59 - [warn] [modbus-write:Write2] FSM Reset On State INIT
12 Oct 10:25:59 - [warn] [modbus-write:Write3] FSM Reset On State INIT
12 Oct 10:25:59 - [warn] [modbus-write:Write4] FSM Reset On State INIT
........
Es hat sich noch ein weiteres Problem aufgetan. Ich habe, wie von dir empfohlen, alle Updates und Upgrades durchgeführt. Wenn ich unter APPS PiCtory aufrufe (grünen Start Button), dann steht in der Statuszeile https//127.0.0.1/pictory/index.html?hn=HUB87NFYFG und der Bildschirm bleibt vollständig grau. Den Modbus Server habe ich, nachdem der Bildschirm beim Aufruf von PiCtory immer grau bleibt, nun unter Service abgeschaltet.
Gruß Dieter
Re: RevPi Messwertwandler: TCPModbus Slave & Master
Hallo Dieter,
ich denke wir kommen am besten weiter, wenn du nun erst einmal deine Lösung mit Node-Red genauer beschreibst und mit Screenshots vor allem mal zeigst, wie Du unter Node-Red auf Modbus zugreifst. Woher hast du die Infos dazu und woher die Nodes? ich wüsste nicht, dass jemand Nodes geschrieben hat, die mit unserem Modbus deinst von RevPi kommunizieren? Wenn cih da besser verstehe, was du eigentlich machst, dann kann ich vielleicht besser weiterhelfen. Du hast jetzt eine ganze reihe Probleme und Fehler beschrieben und wir müssen systematisch vorgehen, um alles zu sortieren und dann zu lösen. Also erts inemal muss ich daher deine Anwendung besser verstehen und genau wissen, was du da in Node-red eigentlich verwendest.
Danach müssen wir verstehen, waurm Dein Slave bei dieser Art der Modbus-nutzung im Sleep bleibt, obwohl mit unserem Modbus Master definitiv zyklisch weiter Kommandos gesendet werden. Dafür wäre es gut, wenn Du mir einen Link auf das Manual des Slavegerätes zusendest. dann kann ich da mal reinschauen und prüfen, wie sich das mit dem Sleep und Modbuszugriffen verhält.
Wenn ich das dann soweit geprüft und verstanden habe, dann kümmern wir uns um die konkreten Probleme mit PiCtory nach dem Update.
ich denke wir kommen am besten weiter, wenn du nun erst einmal deine Lösung mit Node-Red genauer beschreibst und mit Screenshots vor allem mal zeigst, wie Du unter Node-Red auf Modbus zugreifst. Woher hast du die Infos dazu und woher die Nodes? ich wüsste nicht, dass jemand Nodes geschrieben hat, die mit unserem Modbus deinst von RevPi kommunizieren? Wenn cih da besser verstehe, was du eigentlich machst, dann kann ich vielleicht besser weiterhelfen. Du hast jetzt eine ganze reihe Probleme und Fehler beschrieben und wir müssen systematisch vorgehen, um alles zu sortieren und dann zu lösen. Also erts inemal muss ich daher deine Anwendung besser verstehen und genau wissen, was du da in Node-red eigentlich verwendest.
Danach müssen wir verstehen, waurm Dein Slave bei dieser Art der Modbus-nutzung im Sleep bleibt, obwohl mit unserem Modbus Master definitiv zyklisch weiter Kommandos gesendet werden. Dafür wäre es gut, wenn Du mir einen Link auf das Manual des Slavegerätes zusendest. dann kann ich da mal reinschauen und prüfen, wie sich das mit dem Sleep und Modbuszugriffen verhält.
Wenn ich das dann soweit geprüft und verstanden habe, dann kümmern wir uns um die konkreten Probleme mit PiCtory nach dem Update.
Unser RevPi Motto: Don't just claim it - make it!
Re: RevPi Messwertwandler: TCPModbus Slave & Master
Hallo Volker,
ich bin gerade schon dabei, noch einmal ganz neu zu starten. Vergiss bitte die sleep und work Befehle, diese werden seriell an den Feinstaunsensor geschickt. Das Problem habe ich ja bereits gelöst.
Fangen wir mit NodeRed und Modbus an.
Ich möchte mehrere Daten am RevPi auslesen, nehmen wir einmal die CPU Temperatur. Der Temperaturwert soll in ein Register geschrieben werden und dann über Modbus an den SAIA-Regler übergeben werden. Dies alles funktioniert ja auch soweit, wenn ich das Slave Modbus Modul unter Pictory eingerichtet habe.
Ich habe gerade diese Anleitung nachgestellt: https://www.youtube.com/watch?v=tO5XB2NGRPc
Man sieht dort, das NodeRed unter der IP Adresse 192.168.0.21:1880 läuft. Bei der Einrichtung der Modbus Node Module für den Server für Read und Write wird die IP-Adresse 192.168.0.15 eingegeben. Dass heißt für mich, im Netzwerk muss ein Modbus-Server vorhanden sein. Node Red stellt keinen Server oder Master zur Verfügung.
Hier das Ergebnis des nachgestellten Beispiels am RevPi:
Im oberen Modbus LeseNode habe ich die IP Adresse meines Reglers eingegeben, auf dem ein Modbus-Server läuft. Dieser wird gepollt.
Im unteren Modbus LeseNode habe ich die IP Adresse des RevPi mit deaktiviertem Modbus Slave eingegeben.
Nach meinem Verständnis stellt NodeRed keinen Master oder Slave zur Verfügung.
Liege ich damit richtig?
Gruß Dieter
ich bin gerade schon dabei, noch einmal ganz neu zu starten. Vergiss bitte die sleep und work Befehle, diese werden seriell an den Feinstaunsensor geschickt. Das Problem habe ich ja bereits gelöst.
Fangen wir mit NodeRed und Modbus an.
Ich möchte mehrere Daten am RevPi auslesen, nehmen wir einmal die CPU Temperatur. Der Temperaturwert soll in ein Register geschrieben werden und dann über Modbus an den SAIA-Regler übergeben werden. Dies alles funktioniert ja auch soweit, wenn ich das Slave Modbus Modul unter Pictory eingerichtet habe.
Ich habe gerade diese Anleitung nachgestellt: https://www.youtube.com/watch?v=tO5XB2NGRPc
Man sieht dort, das NodeRed unter der IP Adresse 192.168.0.21:1880 läuft. Bei der Einrichtung der Modbus Node Module für den Server für Read und Write wird die IP-Adresse 192.168.0.15 eingegeben. Dass heißt für mich, im Netzwerk muss ein Modbus-Server vorhanden sein. Node Red stellt keinen Server oder Master zur Verfügung.
Hier das Ergebnis des nachgestellten Beispiels am RevPi:
Im oberen Modbus LeseNode habe ich die IP Adresse meines Reglers eingegeben, auf dem ein Modbus-Server läuft. Dieser wird gepollt.
Im unteren Modbus LeseNode habe ich die IP Adresse des RevPi mit deaktiviertem Modbus Slave eingegeben.
Nach meinem Verständnis stellt NodeRed keinen Master oder Slave zur Verfügung.
Liege ich damit richtig?
Gruß Dieter