Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 8 von 8

Thema: S7 REAL Datenformat

  1. #1
    Registriert seit
    06.08.2007
    Beiträge
    15
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich schreibe gerade ein Programm das Daten von einer beliebigen S7 300/400 per TCP/IP
    auslesen kann. Das ganze funktioniert auch ganz gut, inclusive Motorola auf Intel usw.

    Ich kann auch REAL (32bit, fließkommazahlen) von der SPS lesen, jedoch kann ich sie nicht darstellen. Die Daten sind in ordnung wenn ich sie in Hex oder Bin
    anzeige sind die Werte die ich mit dem SimaticManager lese und die die mein Programm ließt gleich.
    Allerdings weiß ich nicht wie ich die Bits darstellen muss.

    Auch die Norm nach der Siemens angeblich arbeitet hilft mir nicht weiter
    (IEEE 754). diese definiert nur wo Vorzeichen(1bit), Exponent( und Mantise(23) stehen aber nicht wie diese codiert sind.
    Die Unterschiede zwischen zwei Zahlen bei denen sich nur der Exponent
    ändern sollte sind Wahnsinn!

    Bsp.:
    5.0 entspricht Hex 42480000(bei Simens)
    50.0 entspricht Hex 40A00000(bei Simens)

    5 entspricht normalerweise 0101 in Bin, aber das kommt im bitmuster gar nie vor!

    An alle ehemaligen oder aktuellen Mittarbeiter von Siemens.
    Wie codiert Siemens die REALs????
    Geändert von cidex (08.08.2007 um 15:03 Uhr)
    Zitieren Zitieren S7 REAL Datenformat  

  2. #2
    Registriert seit
    02.04.2006
    Ort
    nähe Muc
    Beiträge
    2.787
    Danke
    115
    Erhielt 126 Danke für 107 Beiträge

    Standard

    ___________________________________________





    Sende eine SMS mit dem Stichwort "Feuer" an die 112 und innerhalb von 10 Minuten steht ein roter Partybus mit derbem Sound vor deiner Tür.


    AGB: Wer Rechtschreibfehler findet darf diese behalten. Bitte meine in eile gefertigten, selten anfallenden Vertipsler zu entschuldigen.

  3. #3
    Registriert seit
    27.04.2006
    Ort
    Sauerland
    Beiträge
    626
    Danke
    183
    Erhielt 88 Danke für 81 Beiträge

    Standard

    soll heissen : du must byteweise tauschen

    byte1 -> byte 4
    byte2 -> byte 3
    byte3 -> byte 2
    byte4 -> byte 1
    Die Kunst in der Personalführung ist es
    die Mitarbeiter so über den Tisch zu ziehen,
    dass sie die Reibungshitze als Nestwärme empfinden.
    Zitieren Zitieren littel endian/ big endian  

  4. #4
    Registriert seit
    30.06.2007
    Ort
    In der Pfalz
    Beiträge
    503
    Danke
    72
    Erhielt 77 Danke für 65 Beiträge

    Standard

    Zitat Zitat von repök Beitrag anzeigen
    soll heissen : du must byteweise tauschen

    byte1 -> byte 4
    byte2 -> byte 3
    byte3 -> byte 2
    byte4 -> byte 1
    Dazu passt auch dieses Thema:
    http://www.sps-forum.de/showthread.php?t=14251

    @cidex:
    Schreib doch mal deine Ergebnisse in bin hier rein die du bekommst.

  5. #5
    cidex ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.08.2007
    Beiträge
    15
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Reden

    Danke ein Freund von mir hats in 20 min geknackt.
    das mit den Bytes tauschen ist convertierung von Motorola in Intel

    Bsp:

    zahl 5.0 in Siemens REAL als bin:
    0100 0000 1010 0000 0000 0000 0000 0000

    *1. bit vorzeichen 0 -> +, 1->-
    *nächste 8 bit exponent -> 100 0000 1bin -> 129dec
    127dec ist max darstellbar
    129-127 = 2 dec
    2^2 ist exponene 4 dec

    *
    restliche 23 bits ergeben 2097152 dec
    div durch 2^23
    ist 0,25 +1 = 1,25

    +(1,25 * 4) = 5.0


    hier als C++ funktion falls es jem. braucht:

    float decryptReal(long s7REAL)
    {
    //algorithm by Georg alias "the brain" and "Rossi" coded by "criss"

    bool sign = ((s7REAL & 0x80000000) >> 31);
    float fsign = 1;

    if(sign)
    fsign = -1;
    else
    fsign = 1;

    short exp = ((s7REAL & 0x7F800000) >> 23);
    exp = (exp - 127);
    exp = pow(2,exp);

    long mant = ((s7REAL & 0x007FFFFF));
    float mantf = (mant / pow(2,23));
    mantf += 1;

    float fresult = fsign * mantf * exp;

    return fresult;
    }



  6. Folgender Benutzer sagt Danke zu cidex für den nützlichen Beitrag:

    Steve81 (08.08.2007)

  7. #6
    cidex ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.08.2007
    Beiträge
    15
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hab grad den Link zur powerpoint verfolgt. Da wäre es gestanden.

    Aber was solls. So hab ich eien Nerd ein Paar minuten beschäftigt.

  8. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Irgendwie eigenartig, ich hatte das auch mal so kompliziert gelöst, von Zottel bekam ich dann folgenden Code gepostet, allerdings hab ich ihn nur für Delphi, da nutze ich ihn genau so und das funktioniert prima:

    Code:
    function S7_Float(Daten: Integer): Real;
    var
      fiu: single;
    begin
      move(Daten,fiu,4); { bloß keine impliziten Rechenoperationen durch casts! }
      S7_Float := fiu;
    end;
    Das ist nichts weiter als ein "Typecast", da man die Daten sonst immer als Integer serviert bekommt und diese in eine Real kopiert, bringt tatsächlich nur Schrott raus. Sollte genauso auch in C gehen, hab leider den Ursprungscode von Zottel nicht gefunden.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  9. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    cidex (13.07.2008)

  10. #8
    cidex ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.08.2007
    Beiträge
    15
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke für die rasche Hilfe. Hab ja jetzt ein bischen Auswahl.
    Zitieren Zitieren Danke  

Ähnliche Themen

  1. Blockmove mit Datenformat Int und String
    Von sailor im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 20.05.2010, 10:49
  2. Antworten: 3
    Letzter Beitrag: 14.01.2010, 09:58
  3. Datenformat
    Von römi im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 07.07.2009, 07:04
  4. Datenformat Char
    Von CanYouHelpMe im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 15.09.2008, 09:23
  5. Datenformat eeprom
    Von mariob im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 24.03.2006, 22:31

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •