RFID über COM-Port

Hallo,

ich möchte eine Kommunikation mit dem RFID von Siemens über den COM-Port bauen. Ich versuche das mit

COMPort_SendText($id, String);

zu machen.
Was steht im String? Kann mir jemand einen Hinweis geben, welche Befehle ich schicken soll?

Hi,

wird jetzt von uns erwartet, dass wir nach allen Siemens RFID Modulen suchen, uns eines rauspicken, welches zu diesen doch sehr dürftigen Info´s passen könnte; und dann sollen wir das passende Handbuch nach den Befehlen durchsuchen, in die IPS Befehle verpacken:

und mundgerecht servieren.

Sorry, aber ein bisschen mehr Eigeninitiative wäre nicht schlecht, aber das mindeste, was ich erwarte, ist ein Link zum Produkt.

mfg

BerndJ

kurze frage:
Du willst zum RFID leser etwas schicken?
Wenn du nur den code auslesen willst dann brauchste noch ne registervariable die du dann in einen string speichern kannst.

cu.
uriel2006

Hallo,

die notwendigen Steuerbefehle habe ich angeblich gefunden. Sie sehen so aus.

[0x01] Inventory
[0x80] Read Configuration
[0x81] Write Configuration

etc.

Wenn ich

COMPort_SendText(36354 /*[Reader-COM-Port]*/, "[0x01] Inventory");

schicke, bleibt meine Register Variable, die eine Antwort vom Reader holt, leer.:confused:

Hi,

die Kommunikation mit dem Reader ist wirklich ein Problem geworden.
Hier ist der Link zum Handbuch. Der benötigte Reader ist SLG D11.
Ich habe auf verschiedene Art und Weise versucht, die Befehle an Reader zu schicken. Aber vergeblich…

Mann, mach es doch nicht so kompliziert.

Eine Anleitung der Parametrierung, ein Link zu den möglichen Befehlen braucht man um dir zu helfen.

Doch keine Produktbeschreibung mit Maßzeichnung.

Muß es denn Siemens sein, reicht nicht auch ein anderes RFID-Gerät für 20 Euro?

Hi,

haste ja HIER mal vorgestellt, falls er bei der Suchen Funktion des Forums noch nicht drüber gefallen sein sollte.

mfg

BerndJ

Guten morgen,

Wenn ich
Code:

COMPort_SendText(36354 /[Reader-COM-Port]/, „[0x01] Inventory“);

Hierbei steht 0x01 für hex 1.
COMPort_SendText(36354 /[Reader-COM-Port]/, chr(1));
Währe da wohl richtiger.
0x81 ist dann übrigens nicht COMPort_SendText(36354 /[Reader-COM-Port]/, chr(81));
sondern
COMPort_SendText(36354 /[Reader-COM-Port]/, chr(129));
weil hex 0x81 im dezimalsystem 129 ist.
…gute Nacht :wink:
// Sven

Wenn ich

COMPort_SendText($id, chr(1));

schreibe oder eine andere dezimale Zahl in chr einpacke, sehe ich im Debug-Fenster für die Register Variable „COM-Port“:

TRANSMITTED (
TRANSMITTED "
TRANSMITTED +

usw. :confused:

OK, verstanden. Man muss zu der HEX-Ansicht wechseln.

Hi Leute,

ich weiß schon!

Man muss doch hexadez. Zahlen in chr umwandeln. Und man muss 7 Parameterblöcke senden, z.B.

COMPort_SendText($id, chr(0x07));
COMPort_SendText($id, chr(0xFF));
COMPort_SendText($id, chr(0xB0));
COMPort_SendText($id, chr(0x01));
COMPort_SendText($id, chr(0x00));
COMPort_SendText($id, chr(0x1C));
COMPort_SendText($id, chr(0x56));

Weil so das Protokol ist! Für so einen Befehl bekomme ich ENDLICH eine Antwort von dem Reader!

Vielen Dank allen für die Unterstützung!:slight_smile:

Schon nächste Frage:

COMPort_SendText($id, chr(0x07));
COMPort_SendText($id, chr(0xFF));
COMPort_SendText($id, chr(0xB0));
COMPort_SendText($id, chr(0x01));
COMPort_SendText($id, chr(0x00));
COMPort_SendText($id, chr(0x1C));
COMPort_SendText($id, chr(0x56));

kann man das in einer Zeile schicken? Wie bei String mit ‚.‘?

Klar ist das möglich.

1.Variante:

$string = chr(0x07) . chr(0xFF) . chr(0xB0) . chr(0x01) . chr(0x00) . chr(0x1C) . chr(0x56);
COMPort_SendText($id, $string);

Variante 2:

$string = "\x07\xFF\xB0\x01\x00\x1C\x56";
COMPort_SendText($id, $string);

Gruß

OK, danke,

beide Varianten finktionieren wunderbar!
Ich soll auch die vom Reader gesendete Daten auswerten, dafür sie in hexadezimale Zahlen konvertieren.

Die Funktion

function stringToHex($string) {
   $hexstring='';
   for ($x=0;$x<strlen($string);$x++) {
		$hexstring.=dechex(ord(substr($string,$x,1)));
	}
	return($hexstring);
}

gibt eine hexadeziamale Zahl zurück, leider mit Fehlern: einige Nullen werden verloren. Kann man das irgendwie vermeiden?

Statt „06 00 69 00 f6 fa“ bekomme ich „60690f6fa“. Die strlen($IPS_VALUE)=6 wird aber richtig ausgerechnet, nach Anzahl der Blöcke.

Wie kann man die vom Reader gesendete Daten richtig empfangen?:confused:
Manchmal werden sie in einem Datensatz gesendet, manchmal in drei, manchmal in zwei.
Mit $data = $IPS_VALUE empfange ich nur den letzten Datensatz.

Hi,

wer [Schon nächste Frage:

COMPort_SendText($id, chr(0x07)); COMPort_SendText($id, chr(0xFF)); COMPort_SendText($id, chr(0xB0)); COMPort_SendText($id, chr(0x01)); COMPort_SendText($id, chr(0x00)); COMPort_SendText($id, chr(0x1C)); COMPort_SendText($id, chr(0x56)); 

kann man das in einer Zeile schicken? Wie bei String mit ‚.‘?[/QUOTE]"]der Kiste viele Fragen stellt]([QUOTE=noch_anfänger;82774), braucht sich über viele Antworten nicht zu ärgern.

Stell nur eine und schon gibt´s nur eine entsprechende Antwort; und es klappt mit dem Zuweisen zur entsprechenden Variable. :smiley:

mfg

BerndJ

Die Doku (RegisterVariable - IP-Symcon :: Automatisierungssoftware) hat passende Codebeispiele.

Über viele Antworten würde ich mich nur freuen. :smiley:
Daten mit RegVar_GetBuffer($IPS_INSTANCE) kan ich empfangen. Sie auszuwerten geht aber nicht, da ich sie vom String nach Hex konvertieren muss, und die Nullen werden verloren. Antwort auf diese Frage warte ich schon seit Tagen vergeblich…:o

versuchs mal so.

// Funktion zur Umwandlung eines String nach Hex
function Str2Hex($daten)
{
    $Hex = "";
     for($i=0; $i<strlen($daten); $i++)
   $Hex .= sprintf("%02X ", ord($daten[$i]));
     return $Hex; // String in hexadezimaler Schreibweise
}

Auf dem Bildschirm sehe ich den String „06 00 69 00 F6 FA“, die if-Abfrage wird aber nicht erfüllt

if ($str == "06 00 69 00 F6 FA") { echo...;}

Ist der String nicht der, der man auf dem Bildschirm sieht?

Schon klar, der String ist "06 00 69 00 F6 FA " (mit Leerstelle am Ende). Habe zuvor trim(string) verwendet, hat nicht funktioniert.