RegVar_SetBuffer

Hallo,

ich versuche RFID-Reader über COM-Port abzufragen. Wie man Buffer verwendet, habe hier und hier gelesen. Irgendwie klappt es nicht. Wird der Buffer am Ende des Skriptes selbst gelöscht?
Ablauf: von anderem Skript wird das Kommando „Antenne einschalten“ an den Reader gesendet. Hier geht es um das Empfangen und Auswerten von Daten. Je nach Auswertung werden weitere Kommandos verschickt.

<?

  $data  = RegVar_GetBuffer(36354);
  $data .= $IPS_VALUE;

  // String nach Hex umwandeln
  $str = Str2Hex($data);

  //Wenn  Datenstream vollständig, dann verarbeiten
if (strlen($data) == 6) {

	// ID des Transponders lesen: [0x01]Inventory
	 $inventory = chr(0x07).chr(0xFF).chr(0xB0).chr(0x01).chr(0x00).chr(0x1C).chr(0x56);

	 // wenn Antwort auf "Antenne ein " ist 'OK'
	 if ($str == "06 00 6A 00 9E D0 ") {
         SetValueString(34253 /*[RFID-Reader-1\getCommand-COM-Port-1\readerAntwort]*/, "OK, Antenne ein");
         COMPort_SendText(36354 /*[Reader-COM-Port-1]*/, $inventory);
	 RegVar_SetBuffer(36354, "");
		
	 }

	 // Wenn Antwort auf Inventory 'No Transponder in Reader Field'
	 if ($str == "06 00 B0 01 5C 63 ") {

			SetValueString(34253 /*[RFID-Reader-1\getCommand-COM-Port-1\readerAntwort]*/, "No Transponder");
	 }
 }

	 elseif ((substr($str, 0, 14) == "11 00 B0 00 01")&(strlen($data) == 17)) {
	       // UID des Transponders extrachieren
			 $tagID = substr($str, 21, 23);
			 SetValueString(34253 /*[RFID-Reader-1\getCommand-COM-Port-1\readerAntwort]*/, $tagID);
			// Antenne ausschalten
                        $rfOff = "\x06\xFF\x6A\x00\6D\x16";
			 COMPort_SendText($id, $rfOff);
			 RegVar_SetBuffer(36354, "");
	 }

 else {

      // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
      RegVar_SetBuffer(36354, $data);
 }
 

?>

Kommentier erst mal deine Kommentare aus. Normalerweise muss das eine Fehlermeldung bringen!

Fehlermeldung kommt keine, die ID des Transponders wird aber nicht gelesen, da die Daten im Buffer nicht vollständig gespeichert werden. Nur den letzten String wird gespeichert.

Wenn der String nicht vollständig ist, dann musst Du solange Daten in den Buffer schreiben bis er vollständig ist.
Hat der Datenstring kein Trennzeichen oder eine Checksumme wenn er vollständig ist.

Wird der Buffer am Ende des Skriptes selbst gelöscht?

Wenn Du ihn löschst schon, ansonsten nicht.

Mach doch das Debug Fenster der RegVar auf, da siehst Du doch was drinnen steht.

Wann und welche Trennzeichen können vorkommen?

Du kannst Fragen stellen. :rolleyes: Sieh doch im Protokoll nach, da muss es doch drinnen stehen.

In welchem Protokoll?:confused: Ich habe kein.
Am Ende jeder Nachricht wird die Prüfsumme angehängt, nichts mehr. Wie kann man damit entscheiden, ob der Datenstring vollständig ist?