dwidmayer Posted June 22, 2015 Share Posted June 22, 2015 Hallo zusammen,gibt es eine einfache Möglichkeit eine Hexzahl in Binärcode umzuwandeln? Hintergrund ist eine Messbox mit 32 digitalen Eingängen. Die Zustände der Eingänge werden über das iCom Modul angefordert und sind im HEX Format..Wenn alle 32 DI's auf High sind kommt (8xF)FFFFFFFF über die Schnittsltelle.In DASYLab sollen nun alle 32 DI's mit Statusanzeigen visualisiert werden.Als Anhang ist noch eine PDF mit Screenshot's angefügt.iCom.pdf Quote Link to comment Share on other sites More sharing options...
HolWo Posted June 24, 2015 Share Posted June 24, 2015 Hallo!Im Prinzip könnten Sie mit dem Formatstring ahl die ganze Zahl von DASYLab interpretieren lassen (hexadezimale Schreibweise als ASCII-Text übertragen). Siehe Bild "simu_senden_ascii_0xFFFFFFFF.jpg".Das Problem hierbei ist, dass diese große Zahl nicht ohne Verlust von Präzision an folgende Module zwecks Weiterverarbeitung (z.B. Mathematik >>> Bitmaske) weitergegeben werden kann; DASYLabs Leitungen unterstützen bisher nur den Datentyp float (6-7 Stellen Genauigkeit).Können Sie das Gerät evtl die Hex-Daten ohne "ASCII-Verpackung" senden lassen? Siehe Bild simu_senden_hex_0xFFFFFFFF.jpg. Formatstring ist in allen Kanälen nur ein b für Byte (die 13h entspricht dem Carriage return-Symbol).Dann könnte man nämlich die übertragene Zahl byteweise lesen und dann die vier einzelnen Kanäle mit dem Bitmaske-Modul behandeln, sodass man daraus die einzelnen (nicht) gesetzten Bits identifizieren kann.Eine weitere Möglichkeit wäre, sofern Sie DASYLab 13 haben: Sie geben die empfangenen Daten nicht über einen Ausgang des RS232-Moduls aus, sondern schreiben diese per Formatstring $1 in einen von DASYLabs globalen String ($1 => glob. String 1, $47 => glob. String 47, usw).Mit dem Script-Modul könnte man dann eine Umwandlung programmieren, die dann aus dem empfangenen Ascii-Text ">0000FFFF" beispielsweise zwei globale Variablen mit einem dezimalen Wert belegt. "0000" => glob. Var 1 = 0 (dezimal), "FFFF" => glob. Var 2 = 65535. Diese Variablen könnte man dann wieder auslesen und mit dem Bitmaske-Modul in die einzelnen Bits "aufsplitten". Quote Link to comment Share on other sites More sharing options...
dwidmayer Posted July 6, 2015 Author Share Posted July 6, 2015 Lässt sich der Wert nicht teilen, dass die ersten 16 Bit auf Kanal 1 und die 2. 16 Bit auf Kanal 2 ausgeben werden?Bsp. 1x 4ahl und ahl\r ?? Quote Link to comment Share on other sites More sharing options...
HolWo Posted July 7, 2015 Share Posted July 7, 2015 Ok, mit vier Kanälen geht's (siehe Bild).Formatstrings:Kanal 0: 1x 2ah <-- 1x um die spitze Klammer loszuwerdenKanal 1: 2ahKanal 2: 2ahKanal 3: 2ah\r <-- \r für das abschließende CR, das in meinem Schaltbild als Nachrichtenabschluss dient.Die vier Kanäle können Sie nun jeweils mit dem Bitmaske-Modul "auseinandernehmen" und die einzelnen Bits extrahieren. Quote Link to comment Share on other sites More sharing options...
dwidmayer Posted July 8, 2015 Author Share Posted July 8, 2015 Vielen Dank für die rasche Hilfe!! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.