Autor Thema: Daten im IEEE754 Format mit der Easy E4 interpretieren  (Gelesen 3730 mal)

Offline Fokus6292

  • Jr. Member
  • **
  • Beiträge: 32
Daten im IEEE754 Format mit der Easy E4 interpretieren
« am: Dezember 15, 2022, 09:09:45 Vormittag »
Hallo zusammen,

keine Ahnung ob das Thema schon mal hier war .
Suche nach einer Lösung die Messwerte eines EnergieZählers mit der Easy weiterzuverarbeiten.
Allerdings sendet der Zähler die Daten nach IEEE754 raus.
Also 32 Bit Wert (Vorzeichen,Exponent und Mantisse)

Für Hinweise und Hilfe wäre ich dankbar.

Gruß

Offline joelas

  • Newbie
  • *
  • Beiträge: 17
Antw:Daten im IEEE754 Format mit der Easy E4 interpretieren
« Antwort #1 am: Dezember 15, 2022, 10:33:37 Vormittag »
Hallo,
es wird Dir nicht helfen, aber ich habe gerade genau die gleiche Herausforderung. Ich habe mit anderen Systemen von und nach IEEE754 konvertiert, aber noch nicht in EasySoft. Wenn niemand anderes schon so etwas gemacht hat (und sein Wissen teilen will) koennen auf jeden fall wir etwas gemeinsam herausfinden....
Viele Gruesse aus Norwegen
Joel

Offline Fokus6292

  • Jr. Member
  • **
  • Beiträge: 32
Antw:Daten im IEEE754 Format mit der Easy E4 interpretieren
« Antwort #2 am: Dezember 15, 2022, 13:48:40 Nachmittag »
habe einen SDM630 Energiezähler. Der kommuniziert über Modbus RTU.
Diese gibt seine Werte im IEEE754 Format aus.
Möchte die Kombination EasyE4 mit dem Zähler gerne als PV Überschuss Steuerung verwenden.

Offline weiss_nix

  • Sr. Member
  • ****
  • Beiträge: 608
  • it has to be easy, it's a easy!
Antw:Daten im IEEE754 Format mit der Easy E4 interpretieren
« Antwort #3 am: Dezember 15, 2022, 18:49:25 Nachmittag »
Hallo,
ich sehe das Problem momentan noch nicht?
Wenn der 32bit Wert via Modbus zur Verfügung steht, dann kann doch dieser an eine Anwenderfunktion übergeben werden. Diesen Wert in der  UF entsprechend umzurechnen sollte doch möglich sein?!
Gruß
Sollte ich (gefährliches) Halbwissen verbreiten, beuge ich demütig mein Haupt mit der Gewissheit versagt zu haben!
WICHTIG: Sämtliche Programme dienen lediglich der Veranschaulichung von Funktionen und sind nicht für den Produktiveinsatz geeignet!

Offline joelas

  • Newbie
  • *
  • Beiträge: 17
Antw:Daten im IEEE754 Format mit der Easy E4 interpretieren
« Antwort #4 am: Dezember 16, 2022, 06:09:55 Vormittag »
Das Problem ist, dass - laut Handbuch, Seite 213 - Zitat: "Das easyE4-Gerät rechnet mit einem vorzeichenbehafteten 31-Bit-Wert." Die EASY rechnet bloss mit ganzen Zahlen, und kann ohne weiteres keine "Kommazahlen". Die EASY kennt also keine IEEE754 Datentypen, es ist ja auch kein IEC61131-Datentype "REAL" definiert (der faktisch in IEEE754 codiert ist). Eine CoDeSys-faehige Steuerung wuerde also die Messwerte des Zählers von [Fokus6292] sofort lesen koennen, die EASY nicht.
Um nun z.B. Vergleiche oder andere Berechnungen in der EASY durchfuehren zu koennen, muss man die IEEE754-codierten 32-Bit-"Messwerte" in eine Ganzzahl umwandeln. Dabei muss man entscheiden, wie viele Nachkommastellen auszugeben sind.
Gesucht ist also eine UF die den IEEE754 Wert und eine gewueschte Anzahl Nachkommastellen als Eingangsparameter entgegennimmt und einen vorzeichenbehafteten 31-Bit-Wert hinten ausspuckt.

Offline joelas

  • Newbie
  • *
  • Beiträge: 17
Antw:Daten im IEEE754 Format mit der Easy E4 interpretieren
« Antwort #5 am: Dezember 16, 2022, 08:57:52 Vormittag »
Die Umsetzung der Beschreibung von dieser Seite: https://onestepcode.com/float-to-int-c/
fuehrt zu folgendem Testprogramm:

//MD9 ist der IEEE754 Eingangsparameter
MD9 := MD9;
M1 := (MD9 < 0); //Vorzeichen-Check: M1 wird TRUE fuer negative Werte
IF M1
THEN
   //Vorzeichen loeschen
   BV02 (
      EN := ,
      I1 := MD9,
      I2 := 16#7FFF_FFFF,
      ZE => ,
      QV => MD10
   );
   
ELSE
   MD10 := MD9;
END_IF;
MD12 := MD10; //MD12 skal inneholde eksponenten \ MD12 enthaelt Exponenten
FOR MD11 := 0 TO 22 DO
   MD12 := MD12 / 2; //entspricht shift-right um 23 bits
END_FOR;
MD12 := MD12;
IF (MD12 = 16#FF) //Sonderfall: alle Exponenten-bits sind gesestzt
THEN
   MD16 := 16#8000_0000;   //Ausgabe des kleinst moeglichen integerwertes
ELSE
   IF (MD12 = 0) //Ein Exponent gleich 0 bedeutet ein Wert nahe Null
   THEN
      MD16 := 0;   //da geben wir 0 aus
   ELSE //Hier haben wir auf jeden fall einen "gueltigen" Exponent
      MD12 := MD12 -127; //BIAS von 127 abziehen, resultat ergibt den wirkliche Exponentwert
      IF MD12 < 0 //Bei negativen Exponenten ist das Ergebnis immer nahe Null
      OR MD12 > 30 //Exponent groesser 30 kann in einer 32-bit Integer nicht dargestellt werden
      THEN
         MD16 := 0;
      ELSE //Positiver Exponent
         MD13 := 1;  //MD13 = 1 << MD12
         FOR MD11 := 1 TO  MD12 DO
            MD13 := MD13 *2;
         END_FOR;
         MD12 := MD12;
         MD13 := MD13;
         BV01 (
            EN := ,
            I1 := MD9,         //Ausgangsdaten
            I2 := 16#7FFFFF,   //Maske ueber bits 0..22
            ZE => ,
            QV =>
         );
         MD14 := BV01QV; //MD14 enthaelt die Mantisse, also Bit 0..22
         IF MD12 < 23
         THEN
            FOR MD11 := 1 TO (23 - MD12) DO
                MD14 := MD14 / 2;
            END_FOR;
         ELSE
            FOR MD11 := 1 TO (MD12 - 23) DO
               MD14 := MD14 * 2;
            END_FOR;
         END_IF;
         MD13 := MD13;
         MD14 := MD14;
         MD16 := MD13 + MD14;
      END_IF;
      IF M1 //wir hatten ein negatives Vorzeichen
      THEN //Da berichtigen wir den Ausgangswert entsprechend
         MD16 := MD16 * (-1);
      END_IF;
   END_IF;
END_IF;
MD16 := MD16; //Resultat


Hier werden einfach alle Nachkommastellen abgeschnitten, um also einige Nachkommastellen zu "retten" muss man noch ein bisschen weiter ueberlegen..



Offline Fokus6292

  • Jr. Member
  • **
  • Beiträge: 32
Antw:Daten im IEEE754 Format mit der Easy E4 interpretieren
« Antwort #6 am: Dezember 16, 2022, 19:46:22 Nachmittag »
Genau wie joelas beschreibt ist das Thema.
Da ich noch ein kleines Panel nutze auf dem auch die CoDeSys läuft, mache ich hier die Umwandlung.
Finde das aber nicht elegant, da ich auch Apllikationem hätte,wo nur eine Easy mit Ihren 4 Ausgängen zusätzliche Verbraucher bei PV Überschuss zugeschaltet werden sollen.

Nur der Zähler und ne Easy wären eine smarte preiswerte Lösung.

Werde dein Testprogramm mal ausprobieren. Danke dafür.

Offline weiss_nix

  • Sr. Member
  • ****
  • Beiträge: 608
  • it has to be easy, it's a easy!
Antw:Daten im IEEE754 Format mit der Easy E4 interpretieren
« Antwort #7 am: Dezember 17, 2022, 12:03:53 Nachmittag »
Hallo,
Um eine bessere Abbildung der Umrechnung zu erhalten wäre es sinnvoll zu wissen welcher Bereich von Gleitkommazahlen erwartet wird (z.B. -100.00 bis +100.000 oder ähnlich) und wieviele Kommastellen im Ergebnis enthalten sein müssen?!

Gruß
Sollte ich (gefährliches) Halbwissen verbreiten, beuge ich demütig mein Haupt mit der Gewissheit versagt zu haben!
WICHTIG: Sämtliche Programme dienen lediglich der Veranschaulichung von Funktionen und sind nicht für den Produktiveinsatz geeignet!

Offline joelas

  • Newbie
  • *
  • Beiträge: 17
Antw:Daten im IEEE754 Format mit der Easy E4 interpretieren
« Antwort #8 am: Dezember 21, 2022, 07:26:45 Vormittag »
Hier waere es zu begruessen, wenn aus der Entwicklung von Moeller/Eaton eine entsprechender UF kaeme.
Man hat offenbar unterschaetzt, welche Folgen die (ueberaus tolle) Einfuehrung der EASY-COM-RTU-M1 nach sich ziehen wuerde. Ich beisse mir die Zaehne aus, einene solche UF mit dem begrenzten Befehlssatz in EasySoft zu schaffen. Ein Blick ins innere der EASY erzaehlt aber von einem STM32-Prozessor, der mehr als kapabel waere, einen solche Funktionalitaet bereitzustellen. In C sind es nur ein paar Zeilen Code die notwendig sind, um eine entsprechende Wandlung von int32 nach float und umgekehrt (innerhalb vernuenftiger Wertegrenzen und Genauigkeit) durhzufuehren. Also, liebe EASY-E4-Schaffer, helft uns armen Anwendern, bitte!

Offline weiss_nix

  • Sr. Member
  • ****
  • Beiträge: 608
  • it has to be easy, it's a easy!
Antw:Daten im IEEE754 Format mit der Easy E4 interpretieren
« Antwort #9 am: Dezember 22, 2022, 11:35:23 Vormittag »
Hallo easy Gemeinde,

ich hab da möglicherweise mal was passendes programmiert click me

Weihnachtliche Grüße
« Letzte Änderung: Dezember 22, 2022, 11:58:35 Vormittag von weiss_nix »
Sollte ich (gefährliches) Halbwissen verbreiten, beuge ich demütig mein Haupt mit der Gewissheit versagt zu haben!
WICHTIG: Sämtliche Programme dienen lediglich der Veranschaulichung von Funktionen und sind nicht für den Produktiveinsatz geeignet!