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

Ergebnis 1 bis 9 von 9

Thema: ASCII in Real wandeln ? Thema Festkommazahl

  1. #1
    Registriert seit
    18.04.2005
    Ort
    Fast an der Schweiz
    Beiträge
    856
    Danke
    208
    Erhielt 108 Danke für 76 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo miteinander,

    Ich bekomm via Profibus über 6 Bytes eine ASCII Festkommazahl von -XX.XX bis XXX.XX
    die muss ich nun umlegen in Real oder DINT mein Gedanke war die einzelnen
    Chars erst zu prüfen ob sie gültig sind und anschliessend zu multiplizieren die Summe zusammen zu zählen.
    Code:
    Prüfen, wen i.O dann
    L #Byte1 //ASCII Code 0 = 48 DEZ  
    L 48 //Abziehen
    -I
    L     1
    *I    
    T     #EINZER
    
    L #Byte2
    L 48
    -I
    L     1
    *I    
    T     #ZEHNER
    
    L #Byte3
    L 48
    -I
    L     1
    *I    
    T     #HUNDERTER
    
    usw. dann alle ergebnisse addieren
    Komma lass ich ausser acht.
    So nun muss ich aber das umgekehrte machen von REAL oder DINT nach Festkommazahl von -XX.XX bis XXX.XX da hab ich nun meine sorgen.
    Vielleicht hat von euch einer schon ne gute Idee.

    Merci noch The Wälder
    Code:
     RTFM ! Read The F..ing Manual
    Arbeitet mit : Step7 V5.5 SPx / WinCC Flex 2008 SPx / Intouch / Winmod /TIA V14 (abgestürzt...Zitat der Hotline : "Sie dürfen nicht so viel rumdrücken....." TIA, so isses halt)

    ║▌║█║║▌║█║ Warnung! Falscher oder fehlender Kaffee - Benutzer angehalten --(◔̯◔)--
    1334566890111
    Zitieren Zitieren ASCII in Real wandeln ? Thema Festkommazahl  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo Waelder,
    was hälst du von den Umwandlungs-Bausteinen aus der System-Bibliothek ?
    Dort gibt es INT_TO_String (FC16) und umgekehrt (FC3, DINT_to_String (FC5) und umgekehrt (FC37) und natürlich auch REAL_To_String (FC30) und umgekehrt (FC39).
    Aus den Strings kannst du dir doch dann deine ASCII-Kette bauen bzw. umgekehrt.

    Gruß
    LL

  3. #3
    Avatar von Waelder
    Waelder ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.04.2005
    Ort
    Fast an der Schweiz
    Beiträge
    856
    Danke
    208
    Erhielt 108 Danke für 76 Beiträge

    Standard

    @LL
    Danke noch vorab hat sehr gehilft. Du hast mein Suchbereich angeregt.

    Also da hab ich auch noch aus TI-S7 den FC94 ATH gefunden der macht das einlesen in einer aufwäsche Der macht aus ner anzahl ASCIIs eine HEX Zahl
    Das Komma nehm ich einfach raus.
    Vielleicht geht der FC95 HTA für den rückwärtsgang das werde ich am Montag Testen.
    Geändert von Waelder (13.08.2008 um 17:44 Uhr)
    Code:
     RTFM ! Read The F..ing Manual
    Arbeitet mit : Step7 V5.5 SPx / WinCC Flex 2008 SPx / Intouch / Winmod /TIA V14 (abgestürzt...Zitat der Hotline : "Sie dürfen nicht so viel rumdrücken....." TIA, so isses halt)

    ║▌║█║║▌║█║ Warnung! Falscher oder fehlender Kaffee - Benutzer angehalten --(◔̯◔)--
    1334566890111

  4. #4
    Registriert seit
    13.08.2008
    Beiträge
    35
    Danke
    0
    Erhielt 9 Danke für 7 Beiträge

    Standard

    Der FC39 der IEC Function blocks wäre die Lösung. Er soll Strings in REAL wandeln.
    Nur wir da ein Format des Strings verlangt das nicht der Frage entspricht (eine Ziffer vor dem Komma, dann 7 Ziffern nach dem Komma, dann E und endich 2 Ziffen Exponent).
    Also wird es wohl manuell erledigt...

  5. #5
    Registriert seit
    06.02.2014
    Beiträge
    24
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,
    ich habe im Moment das gleiche Problem. Ich bekomme Acht Bytes in Hex angezeigt. Diese werden in einem Array abgespeichert. Ich möchte nun, dass diese Werte in einen Realen wert umgewandelt werden. Ist das möglich? Wie kann man da vorgehen?
    Danke!

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo,
    du machst einfach aus deinem Byte-Array einen String und verfährst dann wie schon beschrieben ...
    Was stehen denn für Hex-Codes in deinem Byte-Array ?

    Gruß
    Larry

  7. #7
    Registriert seit
    06.02.2014
    Beiträge
    24
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Dank Larry Laffer!
    Im Array stehen 8 Hexadezimal Zahlen. Hierbei handelt es sich um eine Zahl mit drei Vorkomma- und vier Nachkommastellen und das Komma ist natürlich auch kodiert. Funktioniert die Konvertierung mit der CONV Awendung. Konnte Array leider nicht finden ... Muss vllt. genauer suchen

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    ... um aus einem Array of Byte einen String zu machen gibt es keine fertige Funktion / Methode. Das mußt du dir schon selbst erstellen ...
    Im einfachsten Fall String erstellen , Header-Bytes des String richtig beschreiben, die Daten-Bytes aus dem Array einzeln darein schreiben und dann das ganze nach Real konvertieren.

    Gruß
    Larry

  9. #9
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.628
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Larry Laffer Beitrag anzeigen
    [..] und dann das ganze nach Real konvertieren.
    Du meinst mit FC39 STRING_R ?
    Ist nicht so einfach.
    Den Format von den BYTE Array von Peter L, und den Format von den STRING für STRING_R sind total unterschiedlich.
    Von Peter L etwa wie: "xxx.yyyy"
    Für STRING_R muss es "±v.nnnnnnnE±xx" ein, wobei
    erste "±" ist das vorzeichen für den Mantissa,
    "v" ist den Ziffer vor den Dezimalpunkt,
    "nnnnnnn" sind die 7 Ziffern nach den Dezimal punkt,
    zweite "±" ist das vorzeichen für den exponent,
    und "xx" ist den Exponent.
    Es wird sehr vaufwendig.

    Ich wurde jeden "x" in Peter L's BYTE Array in ein INT wandeln, und dann multiplizieren mit ein Faktor abhängig von Position (100x, 10x, 1x) und dann suzammen addieren in ein INT für "ganzzahlteil".
    Und dann jeden "y" in Peter L's BYTE Array in ein INT wandeln, und dann multiplizieren mit ein Faktor abhängig von Position (1000x, 100x, 10x, 1x) und dann suzammen addieren in ein INT für "nachkommateil".
    Den REAL Wert bekommt man dann inden man die zwei Werte zusammenfügt:

    L "nachkommateil"
    ITD
    DTR
    L 0.0001 // 1234.0 ins 0.1234 wandeln
    *R
    L "ganzzahlteil"
    ITD
    DTR
    +R
    T "realwert"
    Jesper M. Pedersen

Ähnliche Themen

  1. REAL in TIME wandeln in SCL
    Von zloyduh im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 17.03.2011, 22:24
  2. REAL auf INT wandeln
    Von neibeck im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 14.07.2008, 18:01
  3. Umwandlung Real in ASCII
    Von SFx im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 27.04.2005, 16:05
  4. Umwandlung ASCII in Real
    Von Anonymous im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 27.04.2005, 14:55
  5. ASCII => Real
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 03.01.2005, 15:16

Lesezeichen

Berechtigungen

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