Beckhoff und KSB Modbus-RTU-Modul PumpDrive 2

JarJarBinks

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

ich muss mit einer Beckhoff Steuerung KSB Pumpen auslesen und ansteuern.
Das Auslesen funktioniert und bei den KSB Calio sind die Werte auch plausiebel.
Beim Pumpdrive 2 werden allerdings 2 Register (DWORD) ausgelesen
und die Werte sind alles andere als plausibel.

Auch mit einem Modbus Scanner der nicht von KSB ist kommen nur
Werte die unplausibel sind.
Beim KSB Modbus Tool trage ich Float ein und dort sind die Werte plausibel.

Wer kann helfen.

Danke im vorraus
 
Hallo,
Beim Pumpdrive 2 werden allerdings 2 Register (DWORD) ausgelesen
und die Werte sind alles andere als plausibel.

vertausch mal die beiden Register/Wörter.

Da der 32 Bit Wert in zwei 16 Bit Werte aufgeteilt wird muß man schauen in welchem Regiser die oberen und in welchem die unteren 16 Bit gelandet sind.

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab ich alles ausprobiert, wird DWORD gelesen, Register getauscht und
dann in verschiedene Werte umgewandelt (Real, USINT, UDINT .... )
Ohne Erfolg.
Bei einem Modbus Scanner zeigt er ja auch die einzelnen Register.
 
Könntest Du mal Beispielwerte posten? Am besten die Register als int oder hex Wert und welcher float32 Wert das sein soll, falls Du da konstante Werte auslesen kannst.
 
Ich hab neulich Pumpdrive 2 via Profinet angebunden. Da gab es keine 32-Bit Werte. Bei den Eingangswerten kommen erst 16 Statusbits, dann eine Prozesswertrückmeldung als int (16 Bit), und dann zwei Status-Bytes. Bei den Ausgangswerten kommen zuerst 8 Steuerbits, dann zwei Steuerbytes, und dann der Sollwert wieder als int. Vielleicht mußt du deine DWORD entsprechend auseinanderziehen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Fireman Frank
So etwas hab ich befürchtet, den ihr eigenes Modbus Tool wandelt es warscheinlich intern um.
Mit Modbus Poll bekomm ich dann halt für mich nicht sinnvolle Werte.
Woher hast du die Info der Zusammensetzung der Eingangs und Ausgangswerte?
Danke
 
Hast du eine Bedienungsanleitung bzw. Eine Datenpunktliste mit Registeradressen, Datentypen und Einheiten. Über Modbus Poll bekommst du nur unsinnige Werte?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Problem gelöst.

Punkt 1

Das DWORD ( Float ) muss gemäß IEEE754 in Real umgewandelt werden,
mit DWORD_TO_REAL funktioniert das nicht.

Beckhoff macht das So:

(* von DWORD ==> REAL *)
pt := ADR(dwDwordValue);
rMeinRealValue:=pt^;


(* von REAL==> DWORD *)
pt01:= ADR(rRealValue);
dwMeinDWORD:= pt01^;

Punkt 2

High und Low Byte muss getauscht werden

Mach ich mit ROL(16, XXX)


Was ein Kack, ehrlich.
Vielen Dank für die Hilfe
 
Das DWORD ( Float ) muss gemäß IEEE754 in Real umgewandelt werden,
mit DWORD_TO_REAL funktioniert das nicht.

Beckhoff macht das So:

(* von DWORD ==> REAL *)
pt := ADR(dwDwordValue);
rMeinRealValue:=pt^;


(* von REAL==> DWORD *)
pt01:= ADR(rRealValue);
dwMeinDWORD:= pt01^;
Daß in Codesys-Dialekten bei DWORD_TO_REAL und REAL_TO_DWORD nicht das Bitmuster 1:1 übernommen wird sondern unerwünscht konvertiert wird, hatte ich Dir schon vor 2 Jahren geschrieben. Bei Codesys 3 und Twincat 3 braucht man für das korrekte Kopieren des Bitmusters zwischen DWORD <---> REAL keine Pointer mehr, sondern kann UNION verwenden.


High und Low Byte muss getauscht werden

Mach ich mit ROL(16, XXX)
Damit tauschst Du nicht Bytes sondern H- und L-Word - ich denke das meintest Du auch.

Harald
 
@Harald
Danke, hatte ich damals nicht so wargenommen.
Und du hast auch recht, Meine High und Low Word.

Und noch ein kleiner Fehler von mir, tausche erst High und Low Word und wandle dann in Real um.

:D Danke
 
Zurück
Oben