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

Ergebnis 1 bis 8 von 8

Thema: Int als Hexadezimalwerte darstellen und in String schreiben

  1. #1
    Registriert seit
    08.02.2012
    Beiträge
    71
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    ich bin gerade dabei ein universellen MBus Baustein zu bauen. Das Auslesen und zuordnen passt soweit alles. Jetzt ist allerdings ein Problem. Die Werte sind BCD codiert. Denke an einem Besipiel ist es besser zu erklären:

    Also!

    Ich bekomme folgende Daten in einem Array: 100 52 52 48 was Hexadezimal folgendem entspricht: 16#64 16#34 16#34 16#30 Der tatsächliche Wert den ich brauche ist 64343430 also die der Hexadezimalschreibweise. diese will ich dann entweder als String speichern oder noch besser als Real wert um danach noch die ausgelesene Zehnerpotenz zu multiplizieren. Kann mir jmd sagen wie ich von der Int schreibweise auf meinen Tatsächlichen wert komme?!??!

    Danke im Voraus

    Gruß
    Zitieren Zitieren Int als Hexadezimalwerte darstellen und in String schreiben  

  2. #2
    Registriert seit
    19.10.2009
    Beiträge
    194
    Danke
    8
    Erhielt 50 Danke für 44 Beiträge

    Standard

    Umwandeln in String geht einfach mit MEMCPY. Fürs Umwandeln in REAL können die Zahlen entspr. der Wertigkeit addiert werden. Beispiel:
    Code:
    VAR
        arr: ARRAY[0..3] OF BYTE;
        str: STRING(4);
        f: REAL;
    END_VAR
    MEMCPY(ADR(str), ADR(arr), 4);
    f:= BYTE_TO_REAL(arr[1]-16#30)*100.0
        + BYTE_TO_REAL(arr[2]-16#30)*10.0
        + BYTE_TO_REAL(arr[3]-16#30);
    Das in der Annahme dass die Daten ASCII codiert sind. Für diesen komischen Hex-String kann die Funktion DATA_TO_HEXSTR aus der TcUtilities.lib verwendet werden

    hexstr:= DATA_TO_HEXSTR(ADR(arr), 4, FALSE);

    Gruß
    witkatz
    Geändert von witkatz (29.03.2012 um 15:08 Uhr)

  3. #3
    carki ist offline Benutzer
    Themenstarter
    Registriert seit
    08.02.2012
    Beiträge
    71
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hmm also ich arbeite mit CoDeSys da gibt es die Funktion MEMCPY nicht (glaub ich zumindestens) und die Lib ist ja auch für Twincat oder?!?1

  4. #4
    Registriert seit
    19.10.2009
    Beiträge
    194
    Danke
    8
    Erhielt 50 Danke für 44 Beiträge

    Standard

    Wenn die Darstellung wirklich so ist wie du sie beschreibst (ich bin da skeptisch), dann kannst du die Werte enspr. ihrer Wertigkeit addieren. Geht das vielleicht so in CODESYS?
    Code:
    f:= 0;
    FOR i:= 0 TO 3 DO
        f:= f * 100
            + BYTE_TO_LREAL(arr[i] / 16) * 10
            + BYTE_TO_LREAL(arr[i] AND 16#0F);
    END_FOR

  5. Folgender Benutzer sagt Danke zu witkatz für den nützlichen Beitrag:

    carki (29.03.2012)

  6. #5
    carki ist offline Benutzer
    Themenstarter
    Registriert seit
    08.02.2012
    Beiträge
    71
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke ))))))))) Jap das funktioniert bestens!!!!! hast mir sehr doll weitergeholfen

    Dann noch ne andere Frage hast du auch solch ein Lösungsweg um aus 2Byte 3Buchstaben zu machen?!?!? Zum Beispiel 0422h ergeben 'ABC'....

  7. #6
    Registriert seit
    01.10.2009
    Ort
    Regensburg
    Beiträge
    77
    Danke
    8
    Erhielt 11 Danke für 11 Beiträge

    Standard

    Hallo,

    Aus 2 Byte 3 Buchstaben? ist für ein ASCII Zeichen nicht auch ein Byte erforderlich?

    Aber um aus BYTE, WORD, DWORD, ARRAY of BYTE strings zu bauen hab ich dir was.
    Ich benutze das immer um um aus einem ARRAY of BYTE einen string zusammenzubauen und es funktioniert einwandfrei.
    Arbeitet mit Pointern, also bitte Vorsicht bei Verwendung

    und es ist für TwinCat, also bei anderen Plattformen schauen ob es die Funktion F_ToCHR, oder was ähnliches, gibt.

    cheers
    Angehängte Dateien Angehängte Dateien

  8. #7
    carki ist offline Benutzer
    Themenstarter
    Registriert seit
    08.02.2012
    Beiträge
    71
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke schonmal ich werde es gleich ausprobieren.

    Ja aus 2 Byte sollte es iwie funktionieren 3 Buchstaben zu erzeugen. So sieht es das M-Bus Protokoll vor. Die Formel dafür ist folgende:

    [code]
    2 Byte = [ ASCII (1. Buchstabe) - 64 ] * 32 *32
    + [ ASCII (2. Buchstabe) - 64 ] * 32
    + [ ASCII (3. Buchstabe) - 64 ]
    [\code]

    Ich will es jetzt allerdings anders herum haben. Also habe die 2 Bytes und möchte daraus die 3 Zeichen erhalten. Habe aber leider keine Idee wie das funktionieren soll.

    P.S. Hey Witkatz wie kommst du auf die oben genannte Formel??? habe jetzt auch daten mit merh als 4 Byte und zwar maximal 8 Bytes die ich in Real ändern muss. Hast du da ein Tip für mich?

    gruß

  9. #8
    Registriert seit
    01.10.2009
    Ort
    Regensburg
    Beiträge
    77
    Danke
    8
    Erhielt 11 Danke für 11 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Die Funktion wird Dir da nur zum Teil helfen, da die Bytes direkt in ASCII umgewandelt werden.

Ähnliche Themen

  1. Blockmove mit Datenformat Int und String
    Von sailor im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 20.05.2010, 10:49
  2. Int na. String und String zusammensetzen
    Von bastler im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 09.11.2008, 20:29
  3. Texte aus SPS als string schreiben
    Von nonguru im Forum HMI
    Antworten: 5
    Letzter Beitrag: 03.02.2008, 22:08
  4. String laden und in einem DB Schreiben
    Von free_tv im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 13.05.2006, 16:41
  5. Array als String darstellen
    Von DiplomandSPS im Forum HMI
    Antworten: 10
    Letzter Beitrag: 30.03.2004, 23:18

Lesezeichen

Berechtigungen

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