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

Ergebnis 1 bis 10 von 10

Thema: Konvertierung: Dezimalwert als Hexadezimal in einem String darstellen

  1. #1
    Registriert seit
    08.01.2015
    Beiträge
    20
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo liebes Forum,
    Ich kämpfe gerade zwischen meinem Geist und Codesys. Eines von beiden kommt momentan nicht weiter ;/

    Mein Vorhaben ist:
    Eine Berechnete Checksumme über XOR gibt mir einen Dezimalwert wieder. (Beispiel dez 23)
    Dieser Dezimalwert ergibt den Hexadezimalwert 17 hex.

    Ab hier beginnt Mein Problem:
    Ich möchte jetzt diesen Wert (“17“ als hex) an einen String anfügen um das Telegram fertigzustellen.
    Das Telegramm sieht das als String in etwa so aus: $SD*17


    Eigentlich kann es nicht so schwer sein, aber ich hänge da gerade.

    Vielleicht kann mir einer von euch den entscheidenen Stups geben, freue mich auf hilfreiche posts .
    Mfg
    Zitieren Zitieren Konvertierung: Dezimalwert als Hexadezimal in einem String darstellen  

  2. #2
    Registriert seit
    07.06.2006
    Ort
    Bayern
    Beiträge
    623
    Danke
    27
    Erhielt 156 Danke für 139 Beiträge

    Standard

    23 / 16 = 1 Rest 7

    funktioniert natürlich nur für Dezimalzahlen bis 255 - darüberhinaus müßtest du dann halt erstmal / 256 rechnen.

    Weiterhin dann noch 10 - 15 in A - F umwandeln - fertig.

  3. #3
    Registriert seit
    20.01.2012
    Beiträge
    98
    Danke
    0
    Erhielt 36 Danke für 34 Beiträge

    Standard

    Hallo,

    wenn es sich immer nur um ein Byte handelt, kannst Du auch ein Byte Array mit 16 Werten anlegen

    char:Array [1..16] OF BYTE:=48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70;

    Dann isolierst Du das High Nibble Byte_Hi:=SHR(Byte_Check,4); und das Low Nibble Byte_Lo:=Byte_Check AND 2#00001111;

    Jetzt hast Du die beiden Zeichen über char[Byte_Hi+1] und char[Byte_Lo+1]

    Gruß

  4. #4
    xenon185 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.01.2015
    Beiträge
    20
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @uncle_tom: thx, ich denke das wird mein weg werden. Wobei du sicher nicht 23/16 meintest sonder 23-16

    ich werde mir eine Schleife basteln, die dann die Variable (x) in jedem durchlauf um 16 reduziert und eine var (i) um einen erhöhen lassen. So bekomme ich dann die höheren 4 bit's
    Ist der Wert der Variable (x) dann kleiner, gleich 15 kommt dieser wert in eine andere var (z) und so habe ich dann beide Werte mit denen ich dann weiter arbeiten kann.

  5. #5
    xenon185 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.01.2015
    Beiträge
    20
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @thruser: ich glaub deine Variante habe ich jetzt erst Verstanden. Das sparrt mir sogar noch eine wenig mehr arbeit, thx. Und ja ich habe immer nur ein Byte : -> TOP

  6. #6
    xenon185 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.01.2015
    Beiträge
    20
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @thruser: Deine Variante Funktioniert perfekt und dazu sehr übersichtlich.
    Ist zwar nicht zu dem Thema direkt aber hast du vielleicht noch eine Idee wie ich einen String bestehen aus x Zeichen XOR verknüpfen kann mit auch relativ wenig aufwand

    z.B.

    $HCMMG,2.2,,,F,5*CHECKSUM zwischen dem $ und dem * sollen alle Zeichen XOR verknüpft werden.


    Danke, Mfg

  7. #7
    Registriert seit
    20.01.2012
    Beiträge
    98
    Danke
    0
    Erhielt 36 Danke für 34 Beiträge

    Standard

    Hi,

    wußte ich doch daß das NMEA ist.

    Sieh Dir mal die Funktion code oaus der oscat lib an. Mit der bekommst Du den ASCII Code eines Zeichens aus einem String an einer bestimmten Stelle. Das dann in eine Schleife packen.

    Das oben geht natürlich auch mit WORD oder DWORD. Man muß nur mehr zerlegen.

    Gruß

  8. #8
    xenon185 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.01.2015
    Beiträge
    20
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ok schau ich mir mal an.

    Frage mal an euch: Wie übertrage ich ein "$" Zeichen?
    Wenn ich ( TEXT:STRING := '$24'; ) eingeben bekomme ich immer als Ausgabe $$ also zwei Dollar zeichen. jemand eine Idee.

  9. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Ich vermute mal, das ist nur ein Darstellungsproblem (weil das $ ein Escape-Zeichen ist), tatsächlich steht da nur 1 '$' drin.
    Kopiere den String mal auf ein Byte-Array und laß Dir die Bytes dezimal anzeigen.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #10
    xenon185 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.01.2015
    Beiträge
    20
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke, das stimmt. Also reines Darstellungsproblem

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 16.10.2012, 20:38
  2. BYTE in STRING Konvertierung
    Von SCLNewbie im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 12.10.2012, 01:55
  3. Int als Hexadezimalwerte darstellen und in String schreiben
    Von carki im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 30.03.2012, 09:15
  4. Array als String darstellen
    Von DiplomandSPS im Forum HMI
    Antworten: 10
    Letzter Beitrag: 30.03.2004, 23:18
  5. Konvertierung Real in String
    Von linax im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 08.12.2003, 17:40

Lesezeichen

Berechtigungen

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