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

Ergebnis 1 bis 7 von 7

Thema: String mit Hex-Ziffern in Zahl umwandeln?

  1. #1
    Registriert seit
    28.11.2010
    Beiträge
    18
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe hier bei einem Step7-Projekt folgendes (Teil-)Problem:

    In einem Ethernet-Empfangsstring mit fixer Länge erhalte ich Werte, welche als Hex-Zahlen codiert sind. Diese Daten möchte ich dann in einen INT-Wert (2 Bytes vorzeichenbehaftet) umwandeln.
    Sprich: Gibt es einen FC, der einen String als Eingang übernimmt, und die zugehörige Zahl als INT ausgibt?

    Sprich: Im String steht z.B. "FD16" -> Ergebnis sollte -746 (dez) sein.

    Ich habe schon Google und die Forumssuche intensiv bemüht, aber da gings meiner Meinung nach immer um etwas anderes.

    Vielen Dank im Voraus,
    Wolfgang
    Zitieren Zitieren String mit Hex-Ziffern in Zahl umwandeln?  

  2. #2
    Registriert seit
    17.06.2010
    Ort
    nähe Memmingen
    Beiträge
    610
    Danke
    93
    Erhielt 116 Danke für 100 Beiträge

    Standard

    der string steht vermutlich ein einem DB (empfangspuffer?).
    von dort die zeichen einzeln lesen (als byte) und dann wandeln:

    wert -48 damit werden die zahlen richtig interpretiert (0 = 48dez in der ascii-tabelle)

    wenn der wert >10 ist dann ist es ein buchstabe
    deshalb dann nochmals -7 rechnen damit aus "A" der wert 10 wird
    ("A" = 65dez)

    das ergebnis der stelle passend auf einen gesamtwert addieren
    (multipliziert mit der stelle: x1 x16 x256 x4096 ...)

    als awl geschrieben: (angenommen der String steht in db100 ab byte 0 - 3)

    Code:
         L DB100.DBB3     // 1. Zeichen
         L 48
         -I
         L 10
         >I
         TAK
         SPBN W1
         L 7
         -I
    W1:  T MW100        // Wert
     
         L DB100.DBB2     // 2. Zeichen
         L 48
         -I
         L 10
         >I
         TAK
         SPBN W2
         L 7
         -I
    W2: L 16
         *I  
         L MW100        
         +I
         T MW100        // Wert erhöhen um 2. Stelle
     
         L DB100.DBB1     // 3. Zeichen
         L 48
         -I
         L 10
         >I
         TAK
         SPBN W3
         L 7
         -I
    W3: L 256
         *I  
         L MW100        
         +I
         T MW100        // Wert erhöhen um 3. Stelle
     
         L DB100.DBB0     // 4. Zeichen
         L 48
         -I
         L 10
         >I
         TAK
         SPBN W4
         L 7
         -I
    W4: L 4096
         *I  
         L MW100        
         +I
         T MW100        // Wert erhöhen um 4. Stelle
    achtung: je nach wert muss evtl. auf doppelwort gewechselt werden (als MD100 statt MW100 und aus +I wird +D)
    Geändert von tnt369 (26.12.2010 um 20:30 Uhr)

  3. #3
    jtm ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.11.2010
    Beiträge
    18
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi,

    vielen Dank für die schnelle Antwort!
    Den Trick mit dem Umrechnen von den ASCII-Codes hatte ich auch schon im Visier, allerdings wollte ich mich zuerst vergewissern, dass für diese Aufgabe nicht schon ein SFC existiert, der das erledigt!

    Mfg,
    Wolfgang

  4. #4
    Registriert seit
    25.11.2008
    Ort
    Westpfalz
    Beiträge
    1.550
    Danke
    187
    Erhielt 212 Danke für 186 Beiträge

    Standard

    In der Standard-Library/IEC FunctionBlocks findest du auch einen FC37 STRING_DI, der dürfte deiner Aufgabenstellung genügen.

    MfG
    and we all support the team (S.King - Die Arena)

  5. #5
    Registriert seit
    02.10.2010
    Beiträge
    453
    Danke
    62
    Erhielt 87 Danke für 69 Beiträge

    Standard

    Beschreibung aus der S7 Hilfe:

    Beschreibung
    Die Funktion FC 37 wandelt eine Zeichenkette in eine Variable im Format DINT. Das erste Zeichen in der Zeichenkette darf ein Vorzeichen oder eine Ziffer sein, die dann folgenden Zeichen müssen aus Ziffern bestehen. Ist die Länge der Zeichenkette Null oder größer als 11 oder befinden sich unerlaubte Zeichen in der Zeichenkette, findet keine Wandlung statt und das BIE­Bit wird auf "0" gesetzt. Liegt das Ergebnis der Wandlung außerhalb des DINT-Zahlenbereichs, wird das Ergebnis auf den entsprechenden Wert begrenzt und das Binärergebnis BIE auf "0" gesetzt.

  6. #6
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.862
    Danke
    78
    Erhielt 805 Danke für 548 Beiträge

    Standard

    das geht aber hier auch einfacher
    Angehängte Grafiken Angehängte Grafiken
    Geändert von volker (27.12.2010 um 09:06 Uhr)
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  7. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ist ja eine Hex-Zahl als String gegeben, der Standard-FC dürfte da nicht ohne "Vorbehandlung" funtionieren, tnt's Variante macht das doch hervorragend. Ok, Die reine Wandlung Hex in Integer macht Volker ein wenig eleganter, aber nun gut.
    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

Ähnliche Themen

  1. Antworten: 13
    Letzter Beitrag: 24.09.2009, 12:54
  2. Real zahl in INT umwandeln
    Von bacardischmal im Forum Feldbusse
    Antworten: 5
    Letzter Beitrag: 20.03.2009, 18:17
  3. erste ziffern als Zahl darstellen
    Von Snoopy123123 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 22.02.2007, 18:06
  4. INT-Zahl in eine S5T#-Zahl umwandeln ?
    Von Stefan B. im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 02.03.2006, 22:40
  5. 5-stellige ascii zahl in normale zahl umwandeln
    Von Anonymous im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 04.01.2006, 16:12

Lesezeichen

Berechtigungen

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