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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Real to Hex

  1. #1
    Registriert seit
    21.05.2013
    Beiträge
    17
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo liebe Community,

    ich hoffe ihr könnt mir bei meinem Problem weiterhelfen.
    Und zwar versuche ich eine Real bzw eine LReal in eine Hex umzuwandeln.
    Beispiel:
    12.34 -> 0x414570a4

    Ich möchte gerne eine IDN(SoE-Parameter, in diesem Fall ein Offset) beschreiben dies geht aber anscheinend nur im Hex-Format.
    Um nun aus der Steuerung die Fließkommazahl auf den Paramter zu schreiben, habe ich bisher leider keine brauchbare Funktion gefunden und wenn ging es halt nur so, dass die Nachkommastellen wegefallen sind. Diese werden aber dringend benötigt!
    Daher meine Frage kann man eine Fließkommazahl wie Real in eine Hexadezimal konvertieren?

    Ich würde mich mich sehr freuen, wenn einer eine Idee hat.

    Gruß
    TwinCatBeginner
    Zitieren Zitieren Real to Hex  

  2. #2
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 920 Danke für 740 Beiträge

    Standard

    Hexadezimal ist kein Zahlenformat, sondern eine Darstellungsweise des gespeicherten Wertes.
    Alle Werte werden binär gespeichert. Das ergibt aber ziemlich lange Zahlenreihen von 0 oder 1. Deshalb stellt man oft jeweils 4 bit als einen Hexadezimalwert dar. Sprich wenn irgendwo 1111 binär gespeichert ist, kann man das auch als F hexadezimal darstellen, aber umwandeln muss man da nichts.

    Fazit: Dein Wert ist (auch) schon hexadezimal. Du musst nur die Darstellung umschalten, um das (selbst) auch so zu sehen. Die SPS sieht eh' alles als binär.

  3. #3
    Registriert seit
    12.04.2010
    Beiträge
    300
    Danke
    22
    Erhielt 54 Danke für 52 Beiträge

    Standard

    Hallo,
    hucki hat zwar recht, trotzdem ist es wichtig den Datentyp zu beachten und eventuell zu konvertieren.

    Welches Datenformat hat der Zielparameter ? DINT, UDINT, REAL ???

    Machst du eine Zuweisung : "Para = Realwert" ?

    Falls ja, dann müssen ja die Datentypen übereinstimmen sonst gibt's einen Fehler.

    Aber machst du das vielleicht anders, z.B. memcpy() ??, dann musst du eventuell vorher REAL->ZIELFORMAT eine Konvertierung machen.

    z.B. Realwert = 12.3, nun soll der INTEGER Zielparameter = 123 sein. REAL->INT würde nur 12 ergeben, also (REAL * 10) --> INT, in dieser Art.


    Wenns nicht klar ist, poste noch mal mehr Infos.

    bg
    bb

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

    Standard

    0x414570A4 ist der REAL-Wert 12.34 in HEX-Ansicht. Da muß nichts konvertiert werden.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    Registriert seit
    21.02.2011
    Ort
    Deutschland, Baden-Würtemberg
    Beiträge
    990
    Danke
    115
    Erhielt 125 Danke für 100 Beiträge

    Standard

    Ein uralter Post aber ich habe doch eine Frage hierzu:

    Ich möchte Farbenwerte (BYTE, 0-255) für ROT GRÜN und BLAU in der Visualisierung als Mischfarbe anzeigen.
    Laut Codesys Hilfe muss im Feld der Farbvariablen eine Zahl im HEX-Format angeben werden (z.B. 16#00ff00ff) dabei sind die ersten beiden 00 nur zum Ausfüllen des benötigen DWORD da.

    Nun frage ich mich aber, wie ich z.B. die Werte 127 (=Rot), 55 (=Grün), und 200 (=Blau) in ein HEX Format dieser Form bekomme.

    Ich steh total auf dem Schlauch, benutze sonst nie das HEX Format.

    Danke schon mal und Grüße,
    Flo

    edit:// Achja: mein erster Lösungsansatz war folgender:

    dwMischfarbe:= (bFarbeRot * 1000000) + (bFarbeGrün * 1000) + bFarbeBlau;

    Aber das war Schmarn
    Geändert von KingHelmer (27.03.2015 um 13:53 Uhr)

  6. #6
    Registriert seit
    16.03.2014
    Beiträge
    359
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard

    Hi,
    ggf. hilft dir das weiter:
    Kann man ja ausbauen...

    LG
    Shrimps
    Code:
    VAR CONSTANT
    (* Definition der Normfarben *)
    (* http://www.farb-tabelle.de/de/farbtabelle-html4.htm   *)
    (* führende 00 wegen DWORD, dann BBGGRR Blau,Grün,Rot als Hex *)
    
    def_col_black   : dword := 16#00000000;
    def_col_navy    : dword := 16#00800000;
    def_col_blue    : dword := 16#00FF0000;
    def_col_green   : dword := 16#00008000;
    def_col_teal    : dword := 16#00808000;
    def_col_lime    : dword := 16#0000FF00;
    def_col_aqua    : dword := 16#00FFFF00;
    def_col_maroon  : dword := 16#00000080;
    def_col_purple  : dword := 16#00800080;
    def_col_olive   : dword := 16#00008080;
    def_col_gray    : dword := 16#00808080;
    def_col_silver  : dword := 16#00C0C0C0;
    def_col_red     : dword := 16#000000FF;
    def_col_fuchsia : dword := 16#00FF00FF;
    def_col_yellow  : dword := 16#0000FFFF;
    def_col_white   : dword := 16#00FFFFFF;
    END_VAR

  7. #7
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.354
    Danke
    455
    Erhielt 694 Danke für 519 Beiträge

    Standard

    Zitat Zitat von KingHelmer Beitrag anzeigen
    edit:// Achja: mein erster Lösungsansatz war folgender:

    dwMischfarbe:= (bFarbeRot * 1000000) + (bFarbeGrün * 1000) + bFarbeBlau;

    Aber das war Schmarn
    Der Lösungsansatz war gar nicht soooo Schmarrn, du hast nur den Unterschied in der Zahlenbasis 10 und 16 nicht beachtet.

    Beispiel:
    16#FF = 10#255. So weit so gut
    16#FF00 != 10#255000, sondern 10#65280
    und so weiter...

    Du müsstest Rot mal 10000hex und Grün mal 100hex nehmen.

    Zwei Lösungen fallen mir ein:

    R*(16#FF0000 / 10#255) + G*(16#FF00/10#255) + B
    ist dasselbe wie
    R*16#10000 + G*16#100 + B
    heißt also
    R*10#65536 + G*10#256 + B

    Sonst geht auch (je nach Programmierumgebung)
    (R<<16)+(G<<8)+B

    Sonst kann man wahrscheinlich mit Google und "RGB to hex" auch viel finden.

    Zitat Zitat von KingHelmer Beitrag anzeigen
    , wie ich z.B. die Werte 127 (=Rot), 55 (=Grün), und 200 (=Blau) in ein HEX Format dieser Form bekomme.
    127*65536 + 55*256 + 200 = 8337352 und das ist automatisch 16#7F37C8.
    Das müsste deine Visu dann problemlos schlucken.
    Geändert von RONIN (27.03.2015 um 14:53 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  8. Folgender Benutzer sagt Danke zu RONIN für den nützlichen Beitrag:

    KingHelmer (27.03.2015)

  9. #8
    Registriert seit
    16.03.2014
    Beiträge
    359
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard

    So als Schnellschuss:
    Jede der 3 Farben von Dez nach Hex wandeln (gibts Funktionen für)
    und dann alles mit String-Concat aneinanderhängen !

    LG
    Shrimps

  10. #9
    Registriert seit
    16.03.2014
    Beiträge
    359
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard

    Das lies mir keine Ruhe

    Viel Spaß
    Shrimps

    Code:
    PROGRAM MAIN
    VAR
        rot        : BYTE := 127;
        gruen    : BYTE := 5;
        blau    : BYTE := 200;
        hex        : STRING;
        tmp : STRING;
    END_VAR
    hex := '00';
    
    tmp := DWORD_TO_HEXSTR(blau,2,FALSE);
    hex := CONCAT(hex,tmp);
    
    tmp := DWORD_TO_HEXSTR(gruen,2,FALSE);
    hex := CONCAT(hex,tmp);
    
    tmp := DWORD_TO_HEXSTR(rot,2,FALSE);
    hex := CONCAT(hex,tmp);

  11. #10
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.354
    Danke
    455
    Erhielt 694 Danke für 519 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @shrimps. Ich glaub du hast KH missverstanden.
    Zitat Zitat von KingHelmer Beitrag anzeigen
    Laut Codesys Hilfe muss im Feld der Farbvariablen eine Zahl im HEX-Format angeben werden (z.B. 16#00ff00ff) dabei sind die ersten beiden 00 nur zum Ausfüllen des benötigen DWORD da.
    KH möchte die Farbe eines Felds dynamisieren damit, wenn er z.B. 255/0/0 eingibt, das Feld rot wird.
    Der Parmater ist dezimal vom Typ DWORD. Es geht also nicht um Textanzeige von "FF0000".

    Edit: Falls es die Funktion HEXSTR_TO_DWORD gibt, könnte man ja deinen zusammengesetzten String zurückwandeln...
    Geändert von RONIN (27.03.2015 um 15:22 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  12. Folgende 2 Benutzer sagen Danke zu RONIN für den nützlichen Beitrag:

    KingHelmer (27.03.2015),shrimps (27.03.2015)

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 11.10.2012, 16:51
  2. Umwandlung real -> hex und zurück
    Von Flo im Forum Programmierstrategien
    Antworten: 3
    Letzter Beitrag: 20.08.2008, 22:34
  3. Datenprotokoll in HEX
    Von t3kaese im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 11.07.2008, 11:43
  4. Integer, Hex
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 13.01.2006, 22:08
  5. Int --> Hex
    Von merlin im Forum Programmierstrategien
    Antworten: 1
    Letzter Beitrag: 01.08.2005, 16:30

Lesezeichen

Berechtigungen

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