MODBUS-Master-Konfigurator, Generischer Slave, Generische Variablen nicht änderbar

tomrey

Level-1
Beiträge
362
Reaktionspunkte
32
Zuviel Werbung?
-> Hier kostenlos registrieren
750-889 per MODBUS mit node-red verbinden

Hi all,
komme mit dem MODBUS-Master-Konfigurator nicht klar:
Möchte eine Modbus-Verbindung vom Master 750-889 zu node-red einrichten.
Habe bei Netzwerk-Konfiguration unter dem Master ethernet eingefügt und darunter einen generischen Slave.
Dem füge ich nun eine generische Variable zu und will diese konfigurieren.
Den Typ kann ich ändern.
Für Modbus-Adresse kommt das Unterfenster aber geänderte Werte weren nicht übernommen.
Im Feld Zugriff funktioniert zwar die Auswahlliste, diese speichert aber keine Änderungen.
Was kann da sein?

Mal angenommen, ich bekomme das mit eurer Hilfe gelöst, wie müsste ich dann den generischen Variablen die aus meinem Programm zuordnen ?
Evtl. in den .prg diese generischen Variablen zusätzlich/parallel zu meinen xDI und xDO lesen/beschreiben?
Oder meine xDI/xDO mit einem "slave-FB" verbinden?
Grüße
 
Zuletzt bearbeitet:
Hallo,

über einen Rechtsklick/Adresse bearbeiten kannst Du den Funktionscode und die Modbusadresse konfigurieren.
Im Dialog Modbus Adresse kannst Du dann einen lesenden oder schreibenden Zugriff konfigurieren. Dazu wählst Du erst einen Funktionscode aus und trägst dann dezimal oder hexadezimal die Modbusadresse ein.
Bestätigst Du dann mit der Schaltfläche OK wird die Adresse übernommen, über Abbrechen wird natürlich Deine Eingabe verworfen.

Nach erfolgreicher Eingabe des Funktionscodes und der Modbus Adresse kannst Du den Zugriff auf lesend oder schreibend konfigurieren. Der gewählte Zugriff muss natürlich auch zum ausgewählten Funktionscode passen.
Bei einem schreibenden Funktionscode kannst Du zum Beispiel nur den Zugriff schreibend auswählen.

Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Tobsucht,
vielen Dank, jetzt hab ichs begriffen - blöd wenn kein ok-Feld im Fenster ist.
Was ich noch nicht verstanden habe ist die Festlegung der M-Adressen.
Ich habe meine 889 als Master und will mit node-red auf einem Linux-Server verbinden.
Diesen habe ich als Slave konfiguriert und das Ganze muß über M-TCP laufen, da node-red wohl kein M-UDP kann.
Dem Slave habe ich 2 Variablen zugeordnet, jeweils 1 word-array mit 20 Elementen als In und eines als Out.
Im Konfigurator kann ich beliebige Adressen eingeben aber wie habe ich trotz Studium der Anwendungshinweise nicht kapiert.
Bei denen geht es nur am Rande um "Fremdgeräte" zu den generischen habe ich nix praktisch verwertbares gefunden.
Im Netz gibt es zwar Anleitungen für andere Steuerungen mit node-red aber die arbeiten alle mit Codesys 3. und müssen wohl gar keine Adressen vergeben.
Auf meiner 889 läuft mein Programm, also muß ich wohl den Bereich der PFC-Adressen benutzen..?
Ich wäre Dir sehr dankbar, wenn Du mir bei diesem hoffentlich letzten missing link für mich mit Modbus helfen würdest.
Grüße
 
Hallo,

Du kannst keine beliebigen Adressen im Modbus Master Konfigurator eingeben. Diese Adressen müssen schon im Slave vorhanden sein.
Bring nicht die lokalen Adressen mit den Modbus Adressen durcheinander. Der Controller soll ja auf Node Red und nicht auf sich selbst zugreifen.

Grüße

Edit:
Der generierte Code hat auch einen Fehlerausgang, den kannst Du dir auch mal anschauen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi, danke
doch das habe ich wohl durcheinandergebracht.
In node-red bin ich ja völlig frei irgendwelche Adresssen zu vergeben, da steckt ja keine HW dahinter.
Kann ich dann einfach durchnummerieren oder muß ich dafür die Längen der Variablen/Arrays berechnen?
Heißt das auch, daß ich meine bestehende Variablennamen aus meinen PRGs als Modbus-Variablen weiter nutzen kann oder muß ich neue Namen vergeben und z.B. in Modbus-Arrays "umfüllen"?

Ich sehe Licht am Ende des...
 
Kann ich dann einfach durchnummerieren oder muß ich dafür die Längen der Variablen/Arrays berechnen?
Du musst schon die Länge mit einberechnen sonnst überschreibst du die Adresse im Slave.
in Deinem Beispiel schreibst du ModBusOutputs ab Adresse 2 20 Worte. d.H die nächste freie Adresse wäre 22.
Heißt das auch, daß ich meine bestehende Variablennamen aus meinen PRGs als Modbus-Variablen weiter nutzen kann oder muß ich neue Namen vergeben und z.B. in Modbus-Arrays "umfüllen"?
Wenn du deine bestehenden Variablen weiter benutzt, kannst du nur mit FC 6 arbeiten. Dabei werden alle Variablen separat übertragen, was Zeit benötigt.
Ein Array hätte den Vorteil das alle Variablen mit FC16 in "einem Rutsch" übertragen werden. (maximal 125)

Holger
 
Hallo,

Du kannst auch deine Variablennamen behalten und den Funktionscode 16 angeben. Wenn Du auf dem Datenpunkt Rechtsklick/Kommunikation/optimiert auswählst, dann optimiert der Konfigurator den Zugriff und fasst die nebeneinander liegenden Variablen in einem Zugriff zusammen.

Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, danke,
nachdem die Kommunikation nicht klappt, (MBCFG_TCP_RTU_ERROR_0x96) habe ich wohl ein grundlegendes Problem mit meiner Architektur.
Ich dachte, der Modbus Master Konfigurator würde mir alle benötigten FB für mein Netzwerk erzeugen, stelle aber gerade fest, daß ich überhaupt keinen Master FB im Projekt habe sondern nur die generierten slaves. Müssen diese überhaupt auf meinem Master laufen oder gehören die in die slaves? Irgendwo im Netz müsste doch ein master-fb vorhanden sein??
Bei meiner Konfiguration (750-889 und node-red) sollte die 889 der master und node-red der slave sein - oder ?
Grüße
 
Hallo Tomrey,

es gibt einen Master Baustein.
Der generierte Code ist sozusagen das virtuelle Abbild des Slaves. Im Code gibt es aber die Deklaration
zz_MBCFG_MASTER_ETH : MBCFG_MASTER_TCP;
Dies ist der Modbus Master der mit dem Slave die konfigurierten Datenpunkte austauscht.

Dein Fehler MBCFG_TCP_RTU_ERROR_0x96 gibt an, dass keine TCP/IP Verbindung zum Slave aufgebaut werden kann.
Hier kannst Du nochmal die IP Adresse und den Port des Slaves überprüfen und ob der Slave auch läuft.

Um den Slave zu testen bieten sich auch diverse Modbus Master Programme für den PC an.

Grüße
 
Ah, ok dann ist der Master im Slave versteckt.
Zur TCP-Verbindung: kann es sein, daß Modbus nicht via VPN funktioniert?
Oder wäre dazu etwas anderes zu beachten?
(die 889 steht in Österreich, node-red hab ich auf meinem Laptop dabei)
Die Verbindung steht, Codesys funktioniert ja auch.
Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke, habe alles so wie empfohlen umgesetzt.
Bin trotzdem mit meinem Latein am Ende - es funktioniert nicht.
Ich habe jetzt 2 clients konfiguriert, 1x TCP für meinen Linux-server und 1x UDP für meinen Win7 laptop.
Ich versuche ein array mit 20 words per FC16 mit Startadresse 0 oder alternativ mit 12288 schreibend und ein Bool-array mit 20 Elementen per FC5 ab Adresse 40 lesend zu übertragen.
In node-red habe ich Gleiches spiegelbildlich mit FC4 und FC16 konfiguriert.
In beiden clients signalisiert mir node-red eine aktive Verbindung und es werden Daten übertragen, leider sind es nicht die erwarteten.
In Codesys wird weiterhin beim TCP client MBCFG_TCP_RTU_ERROR_0x96 angezeigt und es kommen keine Daten an.
Beim UDP-client wechselt die Fehleranzeige zwischen time out und no error aber auch da kommen keine Daten an.
Das gleiche Verhalten kann ich mit pyModSlave im localhost des win7 laptops nachstellen.
Mit dem qModMaster bekomme ich eine Verbindung zur Wago aber weder zum Linux-server noch zum win7 laptop.
Weder im linux-server noch im win7 laptop sind firewalls aktiv, der linux-server hängt im gleichen lan wie die Wago, der win7 laptop ist per vpn angebunden.
Weil ich gelesen habe, daß in linux die ports unterhalb 1024 zumindest früher nur mit root rechten funktionieren, lasse ich node-red als root-service laufen, bringt aber auch keine Änderung.
Vom Gefühl her besteht eine IP-Verbindung ohne daß die Übertragung auf TCP oder UDP funktioniert.
Wie gesagt, bin mit meinem Latein am Ende.

 
Nachtrag:
Es erscheint mir absurd aber die node-red Verbindung zur Wago wird auch als aktiv dargestellt, wenn die Wago auf stop steht.
Sobald ich aber eine falsche IP-Adresse eingebe, verschwindet aktiv...
 
Hallo,

so ganz komme ich mit Deiner BBeschreibung noch nicht klar.
Ich versuche ein array mit 20 words per FC16 mit Startadresse 0 oder alternativ mit 12288 schreibend und ein Bool-array mit 20 Elementen per FC5 ab Adresse 40 lesend zu übertragen.
In node-red habe ich Gleiches spiegelbildlich mit FC4 und FC16 konfiguriert.

Hast Du Node Red als Slave/Server konfiguriert?
Hast Du mal versucht mit z.B. qmodmaster vom PC aus versucht auf den Node Red Rechner zuzugreifen?

Kannst DU sonst noch einma die aktuelle Konfiguration zeigen, eventuell auch von Node Red?

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
Wenn ich dich richtig verstehe hast du einen Modbus Server (Node Red) auf Linux aufgesetzt und einen Client auf deiner Wago.
Fange doch erstmal klein an. 1 Register schreiben mit FC 6 und ein Register lesen mit FC 3.
Wenn das funktioniert ein Array schreiben mit FC16 und ein Array lesen mit FC 3.
Wenns läuft die Coils dazu mit FC 5 schreiben und FC 1 lesen.
Alles von der Wago aus gesehen.

Ich denke FC4 ist die falsche Wahl da du ja keine Input Register hast oder ich habe dich völlig falsch verstanden.
Holger

Adressen
Bei der Wahl der Adresse bist du völlig frei. Die 12288 wäre nur die Wahl wenn die Wago der Modbus Server ist.
 
Zuletzt bearbeitet:
Danke Thruser und holgermaik, daß Ihr noch nicht mit mir aufgegeben habt.
Ich habe nachfolgend versucht den derzeitigen Stand möglichst komplett zu dokumentieren.
Ich fange mal mit einem Übersichtsbild an warum das Ganze und was ich will:
Screen Shot 05-28-19 at 10.29 PM.JPG
Wago und terra stehen am gleichen Standort, lb-tr ist ein laptop der per VPN an das lan angebunden ist.

Ich habe mir einen testaufbau überlegt um zwischen Master und Clients jeweils 1 array und 1 bool zu übertragen.
Nach enstprechenden Hinweisen aus dem Forum habe ich diese Übersicht erstellt:
Screen Shot 05-28-19 at 10.49 PM.JPG
und mittels Modbus-Master-Konfigurator wie folgt umgesetzt:
Screen Shot 05-28-19 at 09.12 PM.JPG
Das Testprogramm bindet die beiden generierten slave.prgs ein und deklariert die Variablen für modbus:
Screen Shot 05-28-19 at 09.13 PM.JPG Screen Shot 05-28-19 at 09.14 PM.JPG
.....
 
jetzt bilder vom node-red debug zur Laufzeit:
Screen Shot 05-28-19 at 09.18 PM.JPG
das habe ich nicht bestellt, s. Deklaration awMo nur in [1] der laufzeitzähler, alles andere leer
und hier die Sendung an wago:
Screen Shot 05-28-19 at 09.19 PM.JPG
leider sieht das auf der Wago-Seite online so aus:
Screen Shot 05-28-19 at 09.36 PM.JPG
jetzt noch wiresharks von terra und laptop:
Screen Shot 05-28-19 at 09.25 PM.JPG Screen Shot 05-28-19 at 09.34 PM.jpg
demnach müsste doch alles richtig sein???
 
zum Schluß noch die tasks online:
Screen Shot 05-28-19 at 09.37 PM.JPG
und jetzt Ihr!
Vielen Dank im Voraus denn dies sind meine ersten Gehversuche in Modbus und dabei will ich doch die ganze web-visu...
 
Zurück
Oben