serielle HexDaten auswerten/filtern/verarbeiten

Hallo,

ich habe mal eine Frage und stehe völlig auf dem Schlauch.
Ich habe ein Gerät das bei Bewegung seriell eine Hexidezimalen String schicken.
Diesen versuche ich nun auszuwerten.
Ich habe bereits folgendes gemacht.

  1. I/O Instanz Serial Port angelegt
  2. Einen Cutter angelegt und mit der Instanz verbunden
  3. eine RegisterVariable angelegt und sowohl mit der Cutter Instanz verbunden als auch mit einem Script (was ich gerade versuche zu erstellen)

Nun zeigt sich folgendes Bild:
Wir das Gerät bewegt senden es folgenden String:
0B 00 01 00 00 01 7F6E0A 01 00 10
wobei der erste Teil das Gerät und der zweite die Bewegungsrichtung zeigt

Der String in eine andere Richtung sieht folgendermaßen aus:
0B 00 01 00 00 01 7F 6E 0A 00 00 10

Jetzt hätte ich gerne die Geräte-ID und die Bewegung in zwei Variablen abgebildet.
Ich hatte bereits ein bischen probiert aber irgendwie bekomme ich das nicht richtig hin!

folgendes habe ich schon:

if ($_IPS['SENDER'] == "RegisterVariable")
{
$data = $_IPS['VALUE'];
$test = explode (" ", $data);

SetValue(23554,$test[10]);
}

Leider funktioniert das nicht und mir fehlt die Unterteilung und die „Umrechnung“ von Hex in ein verwertbares Format!

Kann mir jemand kurz helfen?
Danke!

Woher weißt du, dass es HEX ist? Wenn du den HEX Haken im Debug aktiviert hast, dann hast du kein HEX, sondern Binärdaten :slight_smile: (=Meine Vermutung)

Das zweite ist, dass du dann auf einen String zugreifen willst.

Möglich wäre dann evtl. (9 statt 10, weil Indizes 0-basierend sind)


SetValue(23554, ord($data[9]));

paresy

PS: Ansonsten sieht es sehr gut aus. Die größte Hürde hast du ja im Prinzip schon geschafft :slight_smile:

Sowas kann man übrigens ohne Script mittem Text Parser auch ganz gut direkt in Variablen hauen. Aber wenns Binärdaten sind wird das nicht gehen, da man da leider nicht Hex anklicken kann.

Anti

Hallo zusammen,

bin jetzt etwas weiter gekommen habe nun ein weiteres Problem, vielleicht könnte mir jemand kurz einen Gedankenanstoß geben.
Ich empfange auf der seriellen Schnittstelle Binärdaten. Diese lasse ich in die Registervariable schreiben und dann mit „bin2hex“ wieder ausgeben.
Der String sieht zum Beispiel folgendermaßen aus:
0a52017bc3010072400150
Dort zeigen die ersten beiden Stellen (0a) die Länge des nachfolgenden Strings, in dem Falle also 10.
Die nächsten beiden kennzeichnen das Gerät (7b), und die vorletzten beiden (01) den Status.
Die Länge des Strings kann sich von Gerät zu Gerät unterscheiden, daher benötige ich jetzt folgendes.

  1. Auswertung des ersten beiden Stellen und Ausgabe der Länge des Strings
  2. Extraktion der angegebenen Stellen und Speicherung in einer Variablen

Bin ich damit auf dem richtigen Weg?

Danke für die Hilfe!

Gruß
spooniester