REAL aus DWORD konvertieren?

Mehr
8 Monate 2 Wochen her #421 von Christoph
Hallo zusammen,

wir würden gern aus dem DWORD "43BE4000", welches von einer S7 per ProfiBus übergeben wird, mit LogiCAD wieder eine REAL konvertieren, die in diesem Fall "380,5" sein müsste. Leider ergibt die Funktion TO_REAL hier den Wert "1136541696".

Dass DWORD und Dezimalzahl korrekt sind, kann ich z.B. hier überprüfen: www.h-schmidt.net/FloatConverter/IEEE754.html

Was machen wir falsch? Für einen Tipp wäre ich sehr dankbar!

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Walter Zögernitz
  • Besucher
  • Besucher
8 Monate 1 Woche her #422 von Walter Zögernitz
Walter Zögernitz antwortete auf REAL aus DWORD konvertieren?
Hallo,

nach interner Abklärung kann ich Dir folgende Rückmeldung geben:
Beim von Dir beobachteten Verhalten handelt es sich um einen Bug in der Konvertierung DWORD->REAL. Dieser wurde dokumentiert und wird in der Folge behoben. Aus jetziger Sicht kann ich für das Erscheinen des Fixes noch kein konkretes Datum nennen.

lg
Walter

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Walter Zögernitz
  • Besucher
  • Besucher
8 Monate 5 Tage her #426 von Walter Zögernitz
Walter Zögernitz antwortete auf REAL aus DWORD konvertieren?
Hallo nochmal,


ich kann dir für die Zeit bis zur Behebung einen Workaround anbieten. Er kann zumindest bis zur logi.CAD 3 Version V2.0 eingesetzt werden können. Dazu muss ein C-Baustein erstellt werden, welcher die gewünschte Typkonvertierung durchführen kann.

Hier ein geeigneter Code dafür:


code für einen IECIF Baustein
{extern_c}
FUNCTION dwordtoreal : REAL
VAR_INPUT
in : DWORD;
END_VAR
END_FUNCTION

Für die Implementierung:

#ifndef LC_PROT_LCFU__DWORDTOREAL_C
#define LC_PROT_LCFU__DWORDTOREAL_C

#include <lcfu___dwordtoreal.h>

/* Functions */
void lcfu___DWORDTOREAL(LC_TD_Function_DWORDTOREAL* LC_this, LC_TD_DWORD LC_VD_IN, struct _lcoplck_epdb_1_impl* pEPDB)
{
/* Vendor Code */
LC_this->LC_VD_DWORDTOREAL = *(LC_TD_REAL *)(&LC_VD_IN);
}

#endif



ST-Code:

VAR
dw : DWORD := 16#43BE4000;
real1, real2 : REAL;
END_VAR

real1 := TO_REAL(dw);
real2 := dwordtoreal(dw);

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

logi.cals Österreich

Adresse

Europaplatz 7/1,
3100 St. Pölten

logi.cals Deutschland

Adresse

Postfach 1306,
40738 Langenfeld

Benutzer

Registrieren
© 1987 - 2019 logi.cals GmbH