IEEE754 Float in Real Micro 820

Mario0815

Level-2
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich habe leider noch nicht so die Erfahrung mit Allen Bradley.

ich möchte gerne einen Stromzähler Esatron SDM 630 über Modbus RTU mit einer Micro 820 auslesen.

Die Kommunikation funktioniert, das Problem ist die Konvertierung der eingehenden Werte.

Wie kann ich am besten die beiden Werte aus LocalAddres 1 (17256) und 2 (11226) in eine Real (232,1) umwandeln?
Die Werte in den Klammern, sind die Momentanwerte, welche als Beispiel dienen sollen.

Vielen Dank schonmal für die Hilfe. :)
 
Schau mal hier:

Das Thema hatten wir schon öfter, Du kannst im Forum danach suchen:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Gerhard,

das habe ich schon gefunden, nur leider weis ich nicht so richtig, wie ich das in CCW umsetzen kann.

Das Problem fängt ja schon damit an, wie ich die beiden Zahlen zusammenfüge und daraus eine Binäre Zahl mache. Nach dem Umwandeln muss die Zahl ja in drei Teile aufgeteilt werden.
 
Mit Rockwell / AB kenne ich mich nicht aus, aber grundsätzlich müsstest du einfach nur die beiden Register / Words hintereinander im Speicher liegen haben und als REAL herauskopieren in eine REAL-Variable (schlimmstenfalls die Words H/L tauschen)
Evtl. geht das über Pointer oder über eine UNION? Beachte: dabei darf nichts konvertiert werden, sonders das 32-Bit Bitmuster muss so wie es ist in eine REAL/FLOAT-Variable gespeichert werden.
 
Die Kommunikation funktioniert, das Problem ist die Konvertierung der eingehenden Werte.
Wie geht das Modbus-Lesen in Rockwell/AB? Wird das für jede Variable einzeln nur projektiert oder muss man da in einen Pufferspeicher einlesen?
Kann man bei der Projektierung direkt den Datentyp REAL angeben?
Oder kann der Pufferspeicher auch eine Struktur sein, direkt mit REAL-Variablen?
 
Irgend wie funktioniert das nicht oder ich verstehe das falsch.

Unbenannt.png

Der Ausgang LocalAddr[1] und [2] kommen beide als Word.

Wenn ich jetzt beide Zahlen zusammenfüge komme ich auf 1725611226. egal mit welchen Umrechner/Konverter oder auch mit umwandeln in Real,
komme ich an keiner Stelle auf 232,1 Volt, welche der Stromzähler in meinem ersten Beispiel angezeigt hat.

Ich glaube, dass hier grundlegend etwas nicht stimmt.
 
Lege mal ein Array (16 Bit) an. LocalAddr[1] per MOV dann auf Array[1], LocalAddr[2] per MOV dann auf Array[0], dann das Array[0] anstatt dem LocalAddr[1] auf den "COP". SrcOffset und DestOffset auf 0, Length auf 1 und Swap auf False. 17252dez wären 4364hex, 53032dez wären CF28hex. Zusammengesetzt in einen Online-Converter eingegeben ( https://www.h-schmidt.net/FloatConverter/IEEE754de.html ) ergibt das dann 228.8092

Das dürfte doch hinkommen?

Status 4 heißt übrigens Copy Length Invalid
 
Ok, wo genau habe ich jetzt einen Fehler gemacht, dass die Quellortdatengröße zu klein ist?

Wie geht die Berechnung ohne Online-Converter weiter?

1.png2.png
 
Der COP mag (im Gegensatz zu der Version der "ausgewachsenen" Steuerungen) die Arrayposition nicht haben (dafür braucht er dann aber den extra Parameter SrcOffset. Wie im Screenshot oben das [0] bei Src am Ende weglassen-
 
Zurück
Oben