Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Antworten
Scorp
Beiträge: 31
Registriert: Samstag 4. Dezember 2010, 11:04

Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von Scorp » Montag 14. Februar 2011, 23:00

Hallo Leute,

ich fände es sehr hilfreich, wenn man die Modbusregister (z.B. bei Modbus/TCP) auch mit 32 bit lesen und schreiben könnte,
das würde das umständliche und bei größerer Anzahl auch zeitaufwändige Zusammenfügen und Zerlegen ersparen.
Beispiel: Modbus/TCP Funktion 3 (Read Holding Registers) , angegebene Adresse = untere 16bit, darauffolgende Adresse = obere 16bit eines 32bit-Wertes
Mir ist nämlich aufgefallen, dass viele Bereiche mit 32bit-Werten arbeiten und eine übersichtliche Darstellung in ProfiLab durch Einsatz von Makros
zu enorm langen Ladezeiten führt, wenn man 50-100 Werte verarbeiten möchte.

M.f.G. Scorp

abacom
Site Admin
Beiträge: 3458
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von abacom » Dienstag 15. Februar 2011, 08:48

Ja, das steht schon auf meiner Liste für V5.0. Das gilt sinngemäss auch für Register die FLOAT enthalten,
Konvertierung signed <-> unsigned, usw.
ABACOM support

Scorp
Beiträge: 31
Registriert: Samstag 4. Dezember 2010, 11:04

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von Scorp » Dienstag 15. Februar 2011, 17:09

Hallo abacom,

auf die Version freue ich mich schon inkl. der zu erwartenen sonstigen Änderungen oder Ergänzungen.
Mich hat selten ein Programm so beeindruckt wie ProfiLabExpert, das es dem Programmieranfänger so
einfach macht, auf andere Hardware zuzugreifen.

M.f.G. Scorp

JoS0
Beiträge: 26
Registriert: Dienstag 12. Januar 2010, 20:37

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von JoS0 » Dienstag 22. März 2011, 18:15

Hallo Forum

ich habe gerade dieses Problem mit den 32 bit-Werten.
Ich habe folgende Angaben:
Reg 1 ist das höherwertige Register
Reg 2 das niederwertige Register
Beispiel in der Anleitung lautet: Reg 1 High = 13; Reg 2 Low= 60383
13x 65536 + 60383= 9123.51 kWh ( kWh multiplier 0,01)

Das Projekt ist im Anhang, zum auslesen von Mod Bus Energiezählern.
Im Moment wird nur der Low Wert Angezeit. Wenn der High Wert aber Null ist und ich die Multiplikation anwende ist das Resultat Null.

Hat jemand eine Idee?
Danke und Grüße
JoS0
Dateianhänge
mod.prj
(34.78 KiB) 398-mal heruntergeladen

Scorp
Beiträge: 31
Registriert: Samstag 4. Dezember 2010, 11:04

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von Scorp » Dienstag 22. März 2011, 22:40

Hallo JoS0,

ich kann in deinem Projekt nirgendwo sehen, wo du zwei benachbarte Registerwerte addierst.
Nimm einen Analogverstärker mit Gain 65536 auf dem höherwertigen Register und legen das niederwertige Register auf den Offset,
dann erhälst du am Ende deine 32-bit-Zahl.
Zusätzlich kann ich noch empfehlen, die MOD-Funktionen nicht parallel auszuführen, das wird normalerweise nicht funktionieren.
Generator nur auf CLK-Eingang der ersten Funktion legen, den Busy-Ausgang dieser Funktion auf den CLK-Eingang der nächsten Funktion usw.
Zeit für Generator genügend groß wählen, dass auch alle Zeichen durchlaufen werden können, einfach ausprobieren.

M.f.G. Scorp

abacom
Site Admin
Beiträge: 3458
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von abacom » Mittwoch 23. März 2011, 08:47

So... oder ähnlich...
Modbus_Regs32.prj
(4.16 KiB) 448-mal heruntergeladen
ABACOM support

JoS0
Beiträge: 26
Registriert: Dienstag 12. Januar 2010, 20:37

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von JoS0 » Donnerstag 24. März 2011, 18:19

Hallo und vielen Dank!

Nach viel experimentieren habe ich wieder klein angefangen und es funktioniert wie abacom vorgeschlagen hat.Vielen Dank an dieser Stelle.
Im Moment nur mit diesem einen Register und nur ein Zähler am Bus.
Es ist hilfreich wenn das CLK Signal nur alle paar Sekunden kommt. Dann läuft der Bus stabiler. Kann aber auch an dem billigen RS 485 /Rs232 Wandler liegen.

Der Hersteller sagt das die Werte nur alle 10 Sekunden aktualisiert werden.
Das Schreiben mit Write Multiple Register(16) habe ich noch nicht hinbekommen.

Es heißt:
Datenübertragung
Nur «Read Holding Registers [03]/ Write Multiple Registers [16]» Anweisungen werden erkannt.
Es können bis zu 20 Register auf einmal gelesen werden.
Das Gerät unterstützt broadcast-Nachrichten.
Gemäss Modbus-Protokoll wird ein Register R bei der Übertragung als R - 1 nummeriert.

Weiter die Fehlermeldungen:
ILLEGAL FUNCTION [01]: Der Funktionscode wird nicht implementiert.
ILLEGAL DATA ADDRESS [02]: Die Adresse einiger Register liegt ausserhalb des Bereichs
oder es wurden mehr als 20 Register angefordert.
ILLEGAL DATA VALUE [03]: Der Wert im Datenfeld für das jeweilige Register ist ungültig.

Weiter die Register:

Bei Doppel-Registern (4–5, 16–17, 28–29, 30–31, 32–33, 34–35) werden die hohen Register zuerst gesendet (big_Endian).
Partielle Zähler (30–31, 34–35) können durch gleichzeitiges Schreiben von 0 in beide Register zurückgesetzt werden.

Register 30–31 Zähler T1 partial
10 –2 kWh (Multiplikator 0,01)
Energiezähler partial Tarif 1

Bsp.: Zähler T1 partial Hoch = 13
Zähler T1 partial Niedrig = 60.383
13 × 65.536 + 60.383 = 912.351 = 9123,51 kWh


Mit dem angehängten Projekt kann ich zwar den partiellen Zählerstand mit 2 Nullen gleichzeitig auf Null setzten aber keinen Wert schreiben.
Die Fehlermeldung lautet:
ILLEGAL DATA VALUE [03]: Der Wert im Datenfeld für das jeweilige Register ist ungültig.

Ich habe viele verschiedene Werte probiert.

Die Frage die ich mir stelle: Wie kann man den "big_Endian" realisieren oder spielt das keine Rolle?
Ich werde auch den Hersteller fragen.

Wer Interesse hat findet hier das Datenblatt:
http://datenblatt.energiezaehlershop.de ... Modbus.pdf


Viele Grüße
JoS0
Dateianhänge
modbustest.prj
(7.29 KiB) 340-mal heruntergeladen

Scorp
Beiträge: 31
Registriert: Samstag 4. Dezember 2010, 11:04

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von Scorp » Samstag 26. März 2011, 02:40

Hallo JoS0,

scheint ein interessanter Energiezähler zu sein, ist bestimmt nicht für Kleingeld zu kriegen.
Ich habe dir mal ein Testprogramm angefertigt, um alles auszulesen.
Leider kann ich das nicht testen, nach der Beschreibung sollte es aber funktionieren.
Ansonsten einfach mal melden, was warum wie nicht geht :-)

Viel Spaß beim Probieren, Scorp

abacom
Site Admin
Beiträge: 3458
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von abacom » Mittwoch 30. März 2011, 08:59

"Wie kann man den "big_Endian" realisieren oder spielt das keine Rolle?"

http://de.wikipedia.org/wiki/Byte-Reihenfolge
ABACOM support

JoS0
Beiträge: 26
Registriert: Dienstag 12. Januar 2010, 20:37

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von JoS0 » Mittwoch 30. März 2011, 09:10

Unterstützt PL 40 in der aktuellen Form diese Methode des Schreiben in Register ?

Vielen Dank und Grüße

abacom
Site Admin
Beiträge: 3458
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von abacom » Mittwoch 30. März 2011, 09:57

Ja, natürlich können Modbus-(16-Bit-)Register geschrieben werden.
In Fällen in denen zwei Register zu 32-Bit zusammengefasst sind, muss man das
High- und das Low-Word ausrechnen und beide Register schreiben.
ABACOM support

JoS0
Beiträge: 26
Registriert: Dienstag 12. Januar 2010, 20:37

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von JoS0 » Mittwoch 30. März 2011, 13:47

Hallo Abacom, Hallo Forum

Ich bin ja kein Spezialist.
Aber wenn ich das richtig aus dem Link von Wikipedia verstehe, geht es hier um die Richtung in der die Daten geschrieben werden.(Byte Reihenfolge)

Weiter heißt es: Heutige PC-Systeme (x86-kompatible) verwenden Little-Endian.

Der Zähler wiederum benötigt das Big-Endian-Format.

In welcher Reihenfolge sendet PL?

Wenn ich wie angegeben einen Wert in ein Register(sei es auch 16 Bit) eingebe, habe ich kein Einfluss wie die Daten in das Register geschrieben werden. Sei es Big- oder Little- Endian.
Oder sehe ich da wieder den Wald nicht.


PS.
Nachdem mir klar ist das es hier nicht der richtige Ort ist werde ich in Profilab Hardware ein neues Thema anfangen.

Vielen Dank an Scorp. Leider funktioniert die Schaltung nicht. Dazu später noch. Das letzte modbustest.prj von mir funktioniert stabil, direkt an der seriellen Schnittstelle, bringt aber immer wieder Fehler mit 3 verschiedenen RS232/USB Adapter.

Preise für modbus Zähler finden Interessierte hier: http://www.energie-zaehler.com/epages/6 ... giezaehler
Für Tester kann ich einen Sonderrabatt einrichten. Bitte PN dazu.

Wir haben jetzt auch den Haushaltzähler mit IEC 61107 an PL. Dazu später noch.

Vielen Dank und Grüße
JoS0

Scorp
Beiträge: 31
Registriert: Samstag 4. Dezember 2010, 11:04

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von Scorp » Mittwoch 30. März 2011, 15:13

Hallo JoS0,

hast du denn in meinem Beispielprogramm auch gültige COM-Werte für die Hardware eingetragen? (Adresse, Parität usw.)
Die kann ich von hier aus ja nicht unbedingt vorhersehen.
Ich hätte mich schon noch dafür interessiert, ob z.B. ein oder mehrere Fehlercodes aufgetreten sind.
Aber ist auch egal, ich hab schon einen andereren Energiezähler mit Modbus ausgemacht, der für ca. EUR 200,- zu haben ist.

Im Übrigen müsste Little Endian und Big Endian völlig egal sein, die Daten werden einfach fortlaufend in die Register geschrieben oder ausgelesen.
Dazu ist es lediglich erforderlich, bei der Zerlegung oder Erzeugung der 32bit-Zahl die richtigen Wertigkeiten zuzuordnen.

M.f.G. Scorp

abacom
Site Admin
Beiträge: 3458
Registriert: Dienstag 23. September 2008, 10:54
Kontaktdaten:

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von abacom » Donnerstag 31. März 2011, 08:51

"Wenn ich wie angegeben einen Wert in ein Register(sei es auch 16 Bit) eingebe, habe ich kein Einfluss wie die Daten in das Register geschrieben werden."

Das ist richtig, aber auch irrelevant. Die Reihenfolge der 16-Bit-Register (HighBYTE/ LowBYTE) ist im Modbus-Protokollstandard FESTGELEGT.

Für den Anwender ist nur die Registerreihenfolge bei 32-Bit-Registern (=2x16-Bit Paar) wichtig (HiWORD/LoWORD),
und diese ist in ProfiLab durch die "Verdrahtung" frei wählbar, so wie es gerade nötig ist.
ABACOM support

JoS0
Beiträge: 26
Registriert: Dienstag 12. Januar 2010, 20:37

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von JoS0 » Freitag 1. April 2011, 17:24

Hallo Abacom

vielen Dank, werde ich probieren.

Hallo Scorp

> Aber ist auch egal, ich hab schon einen andereren Energiezähler mit Modbus ausgemacht, der für ca. EUR 200,- zu haben ist.
wo gibt es diesen Zähler und wie heißt er. Ich habe verschiedene Geräte hier die auch "Modbus" können sollen. Sind aber nicht mit PL zu lesen.
Vielleicht sende ich Leihweise so ein Gerät an Abacom zum testen.

Da gibt es auch ein China Gerät das auch so etwas ähnliches hat das sich"Modbus" nennt.
Aktive Mitglieder die in diesem Forum viele Beiträge geschrieben haben bekommen jederzeit einen Sonderpreis. Dazu bitte PN.

Viele Grüße
JoS0

Scorp
Beiträge: 31
Registriert: Samstag 4. Dezember 2010, 11:04

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von Scorp » Samstag 2. April 2011, 07:56

Ähm JoSO, man könnte fast den Eindruck gewinnen, du willst unbedingt diese Energiezähler verkaufen.
Meine "chinesischen Zähler mit Fast-Modbus" kommen übrigens aus einer zertifizierten Firma in München.
Also danke für dein Angebot, das ich damit ablehne.
Viel mehr hätte mich interessiert, ob du dir noch die "Arbeit" gemacht hast, durch Einstellung verschiedener
Schnittstellenparameter mein Beispielprogramm zum Laufen zu bringen.

Scorp

JoS0
Beiträge: 26
Registriert: Dienstag 12. Januar 2010, 20:37

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von JoS0 » Samstag 2. April 2011, 09:04

Guten Morgen,

ich will bestimmt hier nichts verkaufen. Ich würde nur gern mehr Leute die diesen Zähler testen. Nur kann ich nicht immer Zähler verschenken. Auch wenn Sie "nur" 200 € kosten.
Ich wollte nur wissen wo es gleichwertige oder bessere gibt um sie eventuell auch zu testen.

Ja, ich habe die Parameter verstellt. Die Werte ändern sich dauernd ohne Sinn. Ich teste auch noch X andere Zähler mit anderen Schnittstellen. Und jeder Tag hat nur 24 Stunden.
Schaltungsfehler2.jpg
Schaltungsfehler2.jpg (111.69 KiB) 10892 mal betrachtet
Viele Grüße
JoS0

Scorp
Beiträge: 31
Registriert: Samstag 4. Dezember 2010, 11:04

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von Scorp » Samstag 2. April 2011, 11:37

Hallo JoSO, um mal einiges zu korrigieren:
1. Ich will so einen Energiezähler nicht geschenkt haben, was soll die Aussage?
2. Hast du um Hilfe gebeten bei der Ansteuerung deines Modbus-Zählers und verwirfst die erste Variante,
mit der sich womöglich jemand Arbeit gemacht hat, obwohl nur noch kleine Korrekturen vorgenommen werden müssten.
Ich weiß nicht, welche Funktion du ausübst, wenn du X Zähler mit verschiedenen Schnittstellen testen musst,
das sieht für mich primär nach Gewerbe aus.
Ich sehe das Forum hier als Hilfe zur Unterstützung an und nicht als Lieferant für fertige Lösungen.
Bei dem dargestellten "Fehlerbild" wäre es sicher nicht schwer gewesen, bei den ungültigen Werten (>>>)
die Formatierung derart zu ändern, dass man wenigstens einen Zahlenwert sieht, um sich ein Urteil erlauben zu können,
was womöglich falsch sein könnte.
Aufgrund der Fehleranzeigen scheint kein Modbusfehler vorhanden zu sein, obwohl der angezeigte Phasenfehler für
alle 3 Phasen (also zumindest auch für L1) keine gültige Kommunikation zulassen sollte.
Wenn natürlich dein Hardwareanschluss und die Parametrierung über jeden Zweifel eines Fehlers erhaben ist,
dann kann ja nur mein Programm falsch sein.

Übrigens, wusstest du eigentlich, dass die Firma Saia Burgess im Jahre 2005 von einer Firma in Hongkong gekauft wurde? :D

JoS0
Beiträge: 26
Registriert: Dienstag 12. Januar 2010, 20:37

Re: Modbus-Register direkt mit 32bit-Werten lesen und schreiben

Beitrag von JoS0 » Sonntag 3. April 2011, 10:29

Hallo Scorp

ich weiß nicht warum die meisten Diskussionen so oder ähnlich enden. Ich habe zu keinem Zeitpunkt nach einer fertigen Lösung verlangt. Ich habe nur darauf hingewiesen das es mit den 16bit und 32bit Werten nicht so einfach ist. Und ich kann nach wie vor die Werte nicht schreiben. Wenn ich das Beispiel mit den Werten aus der Anleitung benutze auch nicht. Nur auf Null stellen mit 2 X Null schreiben geht.

Mit den Hinweis auf "big_Endian" habe ich auch nur versucht durch die Details in der Bedienungsanleitung die Ursachen einzugrenzen.

Das war mein Problem und dazu habe ich meine Schaltung gepostet. Dazu bin ich der Meinung das der Zähler interessant ist. Es gab vom ersten Moment an keine Probleme mit PL 40 im Vergleich mit anderen Geräten.

Das Saia Burgess Investoren aus Hongkong hat weiß ich, aber das haben auch viele etablierte deutsche Unternehmen nach der Krise. Die Entwicklung und die Produktion ist immer noch in Murten in der Schweiz. Darüber hinaus lassen die meisten deutschen Anbieter von Energiezähler bei Saia fertigen. Warum sehen die meisten gleich oder ähnlich aus? Also müssen sie gut sein. Wobei das hier nichts zu Sache tut.

Meine Funktion ist nicht zu übersehen, wenn man dem Link folgt. Das ich gewerblich Zähler teste habe ich auch nicht verheimlicht. Ich bemühe mich nach wie vor PL in Verbindung mit Energieeffizienz Jugendlichen oder anderen Interessierten die nicht programmieren können, schmackhaft zu machen. Und das seit 4 Jahren.

Ich glaube auch nicht das dein Programm falsch ist. Ich hatte auch das Problem am Anfang mit zu vielen Funktionen. Was diese Zähler nicht mögen ist es die Register nacheinander abzufragen. Sobald ich das CLK Signal mit dem BSY Signal ansteuere bringt er große sich dauernd ändernde Werte. Warum auch immer.
Ich wollte auch nur damit sagen das ich mich mit der Schaltung näher beschäftigen werde wenn ich ein Moment Zeit habe.

Viele Grüße
Johann Stark

Antworten

Zurück zu „Thema Modbus“