LOGO LOGO8 Modbus Client - mehrere Input Register lesen

ChrisDob

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich zweifle an mir selbst, immerhin finde ich genug Beispiele im Forum bei denen meine geplante Anwendung funktioniert.

Ich lese mit der LOGO8 zwei Shelly Pro3EM ein um ein dynamisches Lastmanagement zu realisieren.
Die Modbus Verbindung funktioniert auch.
- Shelly(server): 192.168.2.32
- LOGO(client): 192.168.2.3

Ich schreibe aktuell im kleinstmöglichen Versuchsaufbau eine Spannung und die drei Ströme ins VM
- Spannung VM108
- Ströme VM138, VM148, VM158

Da der Shelly little endian sendet, schiebe ich noch das VMxx8 jeweils vier Adressen weiter und lese dann mit einem F/I Block die vier Werte, jeweils ab dem zweiten WORD ein (also für die Spannung VM110).

Soweit so gut, oder eben nicht. Ich bekomme immer nur das Modbus Register gelesen, welches in der Liste der Register an unterster Stelle steht, im aktuellen Fall also den Strom für Phase A. Wenn ich zum Beispiel die Spannung in die unterste Zeile schreibe, bekomme ich nur die Spannung eingelesen.

Hat jemand schonmal ein ähnliches Thema gehabt, oder eine Idee woran es liegen könnte?
Es wirkt, als würden vier Register angefragt und nur für die letzte Anfrage geantwortet, oder die anderen Antworten ignoriert

Ich bin für Ideen super dankbar.

Gruß
Christian

Screenshot 2024-01-10 141838.png
Screenshot 2024-01-10 141149.pngScreenshot 2024-01-10 142119.png
 

Anhänge

  • Screenshot 2024-01-10 141046.png
    Screenshot 2024-01-10 141046.png
    55,9 KB · Aufrufe: 19
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für deine schnelle Antwort.

Ich bin fest davon ausgegangen, dass bei einer Datentabelle dieser Größe mehr als eine Zeile beschrieben werden darf. Wenn ich aber je einen Server mit gleicher IP Adresse anlege und in jeden Server nur eine Variable eintrage funktioniert es.

DANKE
 
Danke für deine schnelle Antwort.

Ich bin fest davon ausgegangen, dass bei einer Datentabelle dieser Größe mehr als eine Zeile beschrieben werden darf. Wenn ich aber je einen Server mit gleicher IP Adresse anlege und in jeden Server nur eine Variable eintrage funktioniert es.

DANKE
Es darf auch mehr als nur eine Zeile Eingetragen werden.
Es dürfen auch in einen Eintrag mehr als ein Register angegeben werden.
Z. B. HR0/8 Word --> VW0/8Word.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke @GUNSAMS , aber das ist ja genau meine Problemstellung. Ich sehe nicht was ich anders mache als das Beispiel (Bild im Anfangspost). Ich lese vier Variablen a 2 WORD aus, bekomme am Ende aber nur die letzte Zeile ausgegeben. Im SIEMENS Beispiel würde in meiner Gerätekombination also nur VW56f und VW60f beschrieben, der Rest bliebe NULL. Wenn überhaupt, vll auch nur VW60f, ich habe keine zwei IDs in meinem Beispiel. Der einzige Unterschied ist, dass ich IR und nicht HR lese. IR Beispiele habe ich keine gefunden, frage mich aber warum sie anders sein sollten als HR, die Lesefunktion ist ja gleich, ich kann halt nicht drauf schreiben.

Wenn SIEMENS diese Beispiele hier bringt und ihr das auch so kennt, gehe ich davon aus, dass es irgendwo im Zusammenspiel mit den Shellys klemmt.
Ich habe dazu nichts gefunden, es gibt keinen Bus Monitor, oder zumindest einen RX/TX Zähler o.ä. in der LOGO!, oder? Dann würde ich ja sehen ob die LOGO! evtl. 4 Requests verschickt als Pakete vom Sensor zurück kommen.

Für mich passt für den Moment der Workaround mit einzelnen Servern, solange mir die LOGO! nicht irgendwann zu viele Busteilnehmer vorwirft.
 
Hallo allerseits,
jetzt hänge ich mich an diesen alten post, weil ich etwas ähnliches vorhabe, aber schon viel früher scheitere.
Ich möchte aus so einem kleinen China-Temperatur Modul viewr Temperaturen per Modbus auslesen. Das sind Input register, 16bit integer.
Ich lese bereits aus einem Fronius Inverter den Ladestand aus, das ist ein Holding register Adresse 40352. Das geht wunderbar, ich habe einen Modbus-Client angelegt, richtige IP-Adresse vergeben auf die interne Adresse VW 133 gelegt und lese diese Adresse jetzt im Programm mit einem Analogen Netzwerkeingang ein.
Jetzt gehe ich davon aus, dass das grundsätzlich doch auch mit einem oder mehreren Input registern gehen sollte. Die Register sind 400 - 403. Also tatsächlich 0x0190 ... (Ich hätte bei Input-Registern 3x... erwartet, aber ich finde mit einem Modbusscanner die Werte wirklich in diesen Registern). Also sollte mein Modbus-Client doch so aussehen:
Startadresse (lokal): 61 Länge: 1word Richtung: <- Startadresse extern: 400 Länge: 1 word
Das ganze 4mal für 400,401,402,403
(Jetzt gibt es bei Modbus noch das Ding mit den zero-based und one-based Zählvarianten. Mindesten 3 Werte sollten aber stimmen, einer zumindest Müll anzeigen. )
Dieses Konstrukt versuche ich jetzt mit einem Analogen Netzwerkeingang auszulesen.
Wert von: VM
VW-Adresse 61 (bzw 62, 63,64)
Jetzt habe ich in meiner Naivität erwartet, dass ich hinter den NAI irgendwas sehe.
Ich glaube ja tatsächlich, dass ich hier irgendwo eine Kleinigkeit übersehen habe, und bin für jeden Tip dankbar.
 
Mit dem Begriff "kleinen China-Temperatur Modul" kann ich nichts anfangen. Besser wäre es, wenn du schreibst, welcher Hersteller und Typenbezeichnung. Oder einem Link zur Anleitung zur Verfügung stellst.
Aber deine Adressierung im VM-Speicher LOGO! ist falsch. Deine Adressen überschneiden sich.
Die Adressierung ist byteorientiert.
Beispiel:
VW61 besteht aus den Bytes VB61 und VB62.
VW62 besteht aus den Bytes VB62 und VB63.
VW63 besteht aus den Bytes VB63 und VB64.
VW64 besteht aus den Bytes VB64 und VB65.
Du müsstest also z.B. VW61, VW63, VW65 und VW67 verwenden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Gunsams,
erst mal danke für deine Antwort.
Das Teil ist von ebyte, heißt ME31-XDXX0400. Ich habe die Anleitung direkt als PDF angehängt, weil man sich auf der Herstellerseite anmelden muss und alle möglichen Fragen beantworten. Ich glaube nicht, dass Du das willst.
Ab Seite 20 geht es da mit den Modbusregistern los. Man kann da, je nachdem, was man besser n utzen kann, sowohl als 16bit Integer, als auch als 32bit floating point auslesen.
Zu deinem Tip, das klingt logisch, habe ich auch so probiert. Ich nehme an, in deiner Tabelle ist ein Tipfehler, ich habe genommen: 57/58, 59/60,61/62,63/64.
Das sieht jetzt so aus: Verbindung2(Modbus-Client v.192.168.2.48).png

Im Programm habe ich dann folgendes:NAI1-AM2.png
Eigentlich sollte ich doch jetzt im Online_Modus in AM2 (und AM3,AM4,AM5) Werte haben. Und wenn ich die falschen Register auslese, oder in den Servereinstellungen falsche interne Startadressen eintrage, dann sollte eben Unfug dort stehen. Was ich auch nicht verstehe ist, was es mit der Einh.-ID auf sich hat. In Siemens Beispielen ist die meist entweder nicht sichtbar, oder leer. Bei mir steht die von LgoSoft vorgeschlagene 255 bei allen Adressen drin.
Und, bevor die Frage aufkommt:
IP-Adresse stimmt
Port ist beim Temperaturmodul definitiv 502
Ich komme mit den Einstellungen mit einem Modbusscanner drauf
2024-12-01 11_54_19-Radzio! Modbus Master Simulator .png
Die Temperaturen sind (mit Faktor 10 begaftet) realistisch.
 

Anhänge

Ich weiß nicht, wie du darauf kommst, das in meiner Beispieltabelle ein Fehler ist. Ich kann keinen darin entdecken.

Die Einheiten-ID in der Verbindungstabelle ist die Slave-Adresse des Modus-Geräts. Default-Adresse ist bei Ebyte die 1. Wenn du sie nicht geändert hast, solltest du in der Verbindungstabelle statt der 255 dann die 1 eintragen.

Ich habe auch ein Ebyte Modul, dass ME31-XAAX0440. Das Modul hat vier analoge Eingänge und vier digitale Ausgänge. Auch hier ist die Slave-Adresse 1.

Und da das Ebyte Modul in der Adressierung 0 basierend ist, musst du die Register 401, 402, 403 und 404 auslesen.
 
Zuletzt bearbeitet:
Vielleicht habe ich das nur nicht richtig verstanden, aber Du schreibst:
Die Adressierung ist byteorientiert.
Beispiel:
VW61 besteht aus den Bytes VB61 und VB62.
VW62 besteht aus den Bytes VB62 und VB63.
VW63 besteht aus den Bytes VB63 und VB64.
VW64 besteht aus den Bytes VB64 und VB65.


Müsste das dann nicht heißen:
VW61 besteht aus den Bytes VB61 und VB62.
VW63 besteht aus den Bytes VB63 und VB64.
...
Dann passt auch: Du müsstest also z.B. VW61, VW63, VW65 und VW67 verwenden.

VW62, bestehend aus 62 und 63 dürfte es somit nicht geben, weil sich sonst wieder Überschneidungen gibt.
Dann passt auch: Du müsstest also z.B. VW61, VW63, VW65 und VW67 verwenden.

Ich glaube durchaus, dass Du von der Materie mehr Ahnung hast, als ich, sonst hättest Du nicht so manchem Nutzer dieses Forums schon hilfreiche Tipps geben können. Vllt liege ich mit meiner Einschätzung da auch völlig falsch. Das sollte weder irgend ein Angriff, noch Besserwisserei sein. Wie gesagt, vllt kapiere ich es einfach nicht. Oder es ist ein Tippfehler, nicht Denkfehler

Aber das nur mal als grundsätzliche Feststellung.

Und wenn wir dann schon bei Tippfehlern und Denkfehlern sind, hier noch zumindest ein Grund, weshalb es nicht geklappt hat. Das war wirklich ein Fehler. In #9 habe ich einen Screenshot gezeigt, in dem man sieht, dass ich AM57-63 beschreibe. Ich rede immer stolz davon, dass ich doch mit VM 57-63 ganz sicher die richtigen Register beschreibe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber deine Adressierung im VM-Speicher LOGO! ist falsch.
Wert von: VM
VW-Adresse 61 (bzw 62, 63,64)
Jetzt habe ich in meiner Naivität erwartet, dass ich hinter den NAI irgendwas sehe.
Ich glaube ja tatsächlich, dass ich hier irgendwo eine Kleinigkeit übersehen habe, und bin für jeden Tip dankbar.

Die Adressierung ist byteorientiert.
Beispiel:
VW61 besteht aus den Bytes VB61 und VB62.
VW62 besteht aus den Bytes VB62 und VB63.
VW63 besteht aus den Bytes VB63 und VB64.
VW64 besteht aus den Bytes VB64 und VB65.
Du müsstest also z.B. VW61, VW63, VW65 und VW67 verwenden.
Du hast doch geschrieben, dass du VW61, 62, 63 und 64 verwenden willst.
Und ich habe eigentlich erwartet, dass du bei dieser Adressierung die Überschneidungen sieht.
VWx bedeutet, dass 2 direkt aufeinanderfolgende Bytes gemeint sind mit der Adresse x des ersten der beiden Bytes.
VW61 besteht also aus den Bytes VB61 und VB62.
VW62 besteht also aus den Bytes VB62 und VB63.

Erkennst du jetzt die Überschneidung? Bei aufeinanderfolgenden Words musst du einen Abstand von 2 in der Adresse haben, z.B.:
-VW0, dann VW2, dann VW4 usw.
 
VW62, bestehend aus 62 und 63 dürfte es somit nicht geben, weil sich sonst wieder Überschneidungen gibt.
Dann passt auch: Du müsstest also z.B. VW61, VW63, VW65 und VW67 verwenden.
Geben tut es das VW62 schon, doch du darfst es nicht verwenden, weil du dir dann selbst Überschneidungen mit VW61 und VW63 produzierst.

Tipp: wenn es keine zwingenden Gründe dagegen gibt, dann verwendet man für Word-Variablen üblicherweise immer gerade Adressen (VW0, VW2, ...), dann schützt man sich selbst vor versehentlichen Überschneidungen. Also besser VW60, VW62, VW64 und VW66 verwenden.
 
Zuletzt bearbeitet:
Ich hatte mich da offensichtlich irgendwie komplett verrannt.
Man sollte nicht word mit byte verwechseln, deshalb habe ich deinen Ratschlag nicht kapiert.
Und man sollte nicht analoge Merker mit MemoryVariablen verwechseln, dann wäre ich vllt irgendwann von selbst draufgekommen.

Ich habe das wohl erkannt mit den Words, nachdem aber das trotzdem nicht funktioniert hat (zum einen wohl wegen deer ID und zum anderen, weil ich den Mist gemacht habe mit der falschen Zuweisung) war ich komplett verunsichert. Jetzt, wo das klappt, kann ich das ganz entspannt anschauen und es ist alles logisch.

Und jetzt noch, falls irgendwer das selbe hausgemachte Problem hat:

Ich weise die vier Modbusregister vier virtuellen Merkern zu VM
Ich lasse zwischen zwei Zuweisungen immer eins frei, weil da das zweite byte vom verwendeten Word steht also z.B. VM 57,59,61...
Jetzt greife ich mit Netzwerk AIs auf die auf die vorher belegten VMs zu.
et voilà es funktioniert.
oder, wie PN/DP schreibt, Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

Jetzt bleibt mir nur noch, allen zu danken, die am Sonntag, und auch noch bei halbwegs schönem Wetter, ihre Zeit geopfert haben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich weise die vier Modbusregister vier virtuellen Merkern zu VM
Ich lasse zwischen zwei Zuweisungen immer eins frei, weil da das zweite byte vom verwendeten Word steht also z.B. VM 57,59,61...
Und wenn Du jetzt auch noch diesen letzten Tipp (den @GUNSAMS auch schon mehrfach erwähnt hat) berücksichtigst :
Tipp: wenn es keine zwingenden Gründe dagegen gibt, dann verwendet man für Word-Variablen üblicherweise immer gerade Adressen (VW0, VW2, ...), dann schützt man sich selbst vor versehentlichen Überschneidungen. Also besser VW60, VW62, VW64 und VW66 verwenden.
;)
 
Zurück
Oben