ich versuche gerade eine Serielle Kommunikation zu basteln.
Ich habe auch schon erfolgreich Kommandos gesendet und entsprechende Antwort erhalten.
Mein nächster Versuch war das ganze etwas dynamischer zu gestalten und habe mir aus einem String den Hexcode
zusammengebaut. Der Hexcode wird aber im Debug Fenster anders ausgegeben im Transmit als wie der gesendete Code aussieht.
Hat jemand eine Idee woran das liegen könnte ?
Verwende die 4.0 auf einem Raspberry Pi 3
Gesendet wird : \xF6\x0A\x02\x00\x00\x13\x04\x21\x22\x46
Im Transmit steht : 5C 78 46 36 5C 78 30 41 5C 78 30 32 5C 78 30 30 5C 78 30 30 5C 78 31 33 5C 78 30 34 5C 78 32 31 5C 78 32 32 5C 78 34 36
Was soviel heißt das der String 1:1 von Ascii in Hex umgesetzt wird … 5C = / z.b.
Du hast leider gleich zwei Fehler in deinem Skript
echo '\x65'; //geht nicht
echo "\x65"; //korrekt!
Und: Das Hinzufügen von \x in einen String macht daraus nicht magisch, was du erreichen willst. \x ist eine Escape Sequenz, die nur geht, wenn Sie direkt vorhanden ist. Siehe: PHP: Escape sequences - Manual
ich teste auf der aktuellen Beta auch gerade die serielle Kommunikation und habe das Problem, dass beim Rückschreiben (des unvollständigen Telegramms) in den Buffer der Registervariablen plötzlich pro Zeichen (byte) ein Null hinzugefügt wird.
Beispiel:
Ich teile mit explode („Anfang des Telegramms“,$hexdaten) den hexdaten-String auf. Den zweiten Teil möchte ich gern wieder in den Buffer zurückschreiben (da ja dies mein „neues“ Telegramm ist).
Die hexToString-Umwandlung liefert auch wunder bar:
5A A5 01 00
Wenn ich dies nun in die Registervariable schreibe (RegVar_SetBuffer($_IPS[‚INSTANCE‘], $telegram2) steht im DEBUG der Registervariable:
5A 0A 05 01 00 00
Um die Daten der Registervar vernünftig in HEX auswerten zu können, muss ich folgendes tun:
$data = RegVar_GetBuffer($_IPS[‚INSTANCE‘]);
// neu empfangene Daten an $data anhängen
$data .= $_IPS[‚VALUE‘];
echo "
data $data"; DIES LIEFERT IRGENDWELCHEN ZEICHENMÜLL (Ascii)
$hexdata=ascii2hex($data); ERST HIERMT KOMME ICH ZU GEscheiten HEX-Darstellungen welche ich auch wieder „bearbeiten“ kann.
Dadurch macht sich auch wieder eine Rückumwandlung hexToString erforderlich.
Hast Due einen Tipp wie ich mir diese dopplete Umwandlung schenke und trotzdem noch gescheite HexBytes sehe?
Ah sorry habe Hextostring gelesen und stringtohex gedacht.
Grundsätzlich würde ich so wenig wie irgendwie möglich versuchen den String in ein lesbares Format zu wandeln.
Wonach trennst du den den String?
Zeig mal das ganze Script von dem empfangen der Daten.
Michael
PS:ascii2hex ist ja keine Funktion von PHP. Wie sieht die aus?