RS232 Schnittstelle Rückmeldung nach HEX Befehl

Moin,

komme irgendwie leider nicht weiter - bin wohl zu neu in IPS.

Folgendes:
Ich sende einen HEX Code an die RS232 Schnittstelle und das Gerät an dieser sendet einen HEX Code zurück.
Verbindung steht und funktioniert auch.
Wie lese ich denn die RS232 Befehle ein?
Das mit Registrier Variablen habe ich gelesen, aber irgendwie wohl noch nicht verstanden.

Hat da ggf jmd bitte ein Beispiel für mich?

Heisst „sende HEX code“ - s.u. und dann?

<?php $str = "xxx"; COMPort_SendText (12345,$str); IPS_sleep(100); $str3 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; COMPort_xSendText (12345,$str3); IPS_sleep(100); $str2 = "xxxx"; COMPort_SendText (12345,$str2); ?>

Was ich bis dato habe ist:

Instanz Serial Port
Darunter die String Variable
dann das Skript mit SetValue($_IPS[‚VARIABLE‘], $_IPS[‚VALUE‘]);
baue ich die Anfrage an die RS232 davor?

Der Einfachheit/Verständnis halber würde ich das in zwei Scripte aufteilen. Das eine Script macht ‚Senden an Schnittstelle‘ (das hast du schon) und das andere Empfangen (Register Variable).

Du erzeugt eine Instanz vom Typ Register Variable sowie ein Script, nenne wir es ‚Empfangen von RS232‘. Die RegisterVariable erhält als Ziel dieses Script und als Gateway (oben im Menü Gateway ändern) den seriellen I/O (mit der ID 12345 aus deinem Beispiel).

Jetzt baust du in das Empfangsscript mal ein print $_IPS[‚VALUE‘]; und öffnest den Meldungs-Dialog.
Wenn du das Ergebnis aus mehreren Abfragen zusammensetzen musst, NICHT SetValue verwenden sondern RegVar_SetBuffer. Sobald du dann aus mehreren Durchläufen in Kombination mit RegVar_GetBuffer deine Information vollständig zusammengesetzt hast, kannst du das Ergebnis in eine normale Variable mit SetValue setzen.

OK, DANKE!

Scheinbar werden bei den HEX Werten nun immer die AnfangsNullen abgschnitten.
Also aus „03“ wird dann nur „3“ ausgegeben.

Kann man das ändern?

Ferner, wenn ich aus einem längeren HEX Wert nur bestimmte Stellen analysieren will, wie bekomme ich die heraus? [Das 1. Problem muss dafür natürlich gelöst sein, da ich sonst nicht die richtige stelle erwischen könnte 9

Das wird ein Anzeige/Konvertierungsfehler sein. Lass dir das ganze mal umgerechnet anzeigen. Z.B. mit hexdec, hexbin, etc. Einfach mal ein wenig spielen.

Im Debugger wird es korrekt angezeigt.
Wenn ich mir die Original Var angucke kommt nur kryptische Zeichen heraus.

Ich lasse es mir mit anzeigen:
$dataStr = strToHex($data);
IPS_LogMessage( „irgendeineVARIABLE“,"".$dataStr);

function strToHex($string)

{

$hex='';

for ($i=0; $i < strlen($string); $i++)

{

    $hex .= dechex(ord($string[$i]));

}

return $hex;

}

Ob du als String „etwas siehst“ hängt natürlich vom HEX Wert ab. Sind ja nur wenige Zeichen druckbar.
ASCII Tabelle ist dein Freund.

gruß
bb

Als Dec ausgegeben fehlen ja auch die Nullen

Bei der konvertierung Zahl (Hex oder Dezimal zu String) fällt immer die führende Null weg. Du musst mit der Binär-Repräsentation weiter rechnen.

Ah ok - dh did Werte sind immer noch in den korrekten Stellen und wenn ich die n Stelle brauche zieht er mir die auch?

Was ist denn zb bei 00 00 00 01
Da Käme dann 0 0 0 1

?

Wenn es eine Decimal zu Hex String Umwandlung sein soll wird bei mir immer gerne sprintf genommen , z.B.

sprintf("%02X,$val);

1 „Gefällt mir“