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);
}
?>