ST_RFID_Control
TYPE ST_RFID_Control :
STRUCT
sSelTranspSRN :T_RFID_TranspSRN; (* serial number shown as hex coded string(ascii) *)
tPreSendDelay :TIME; (* condition: tTimeOut > tPreSendDelay + tPostSendDelay *)
tPostSendDelay :TIME; (* condition: tTimeOut > tPreSendDelay + tPostSendDelay *)
iSrcAddrSnd :UDINT; (* RS485 address *)
iDstAddrSnd :UDINT; (* RS485 address *)
bAddrAutoMode :BOOL := TRUE; (* if AutoMode is activated the communication addresses are handled automatically and set addresses are not used. *)
bLogging :BOOL;
iHeadNumber :USINT := 1; (* if multiple read heads are installed at the reader unit, one can be selected *)
iDCType :USINT := 1;
pRawDataCommand :DWORD; (* data input for low level communication *)
iRawDataCommandLen :UINT;
bBufferedCmd :BOOL;
iVHLFileID :USINT := 16#FF; (* selection of VHL file; default 0xFF (ad hoc VHL file of vhlSetup) *)
iCardTypeMask :UINT := 16#FFFF; (* select which card type should be detected via GetInventory; default 0xFFFF (all types) *)
bReselect :BOOL := TRUE; (* with Reselect every GetInventory gets the first item of the reader's detected card list *)
bAcceptConfCard :BOOL := TRUE; (* a read command also accept configuration cards to configure the rfid reader *)
END_STRUCT
END_TYPE
Die Eingangsstruktur stCtrl beinhaltet Variablen, u.a. die Seriennummer, mit denen sich das Verhalten des Funktionsbausteines parametrieren lässt.
Die zwei Variablen tPreSendDelay und tPostSendDelay bieten optional die Möglichkeit Verzögerungszeiten zu parametrieren. Weitere Hinweise finden sich am Ende der Seite.
RS485 Eine Unterstützung mehrerer RFID Reader an einem RS485 Netz ist mit der PLC RFID Library vorerst nicht gegeben. Es muss je RFID Reader eine separate Verbindung zu einer separaten Klemme erfolgen. In diesem Stand Alone Betrieb ist eine individuelle Adressierung mit iSrcAddrSnd und iDstAddrSnd nicht nötig. Die Adressierung kann demnach automatisch von der PLC RFID Library übernommen werden, wozu die Eingangsvariable bAddrAutoMode auf TRUE belassen werden kann. |
alle Hersteller:
tPreSendDelay | Vor dem Senden eines Kommandos an den RFID Reader wartet der Funktionsbaustein die mit tPreSendDelay angegebene Zeit ab. |
tPostSendDelay | Nach dem Senden eines Kommandos an den RFID Reader wartet der Funktionsbaustein mindestens die mit tPostSendDelay angegebene Zeit ab. Falls bis dahin die erwartete Response noch nicht eingetroffen ist, wartet der Funktionsbaustein weiter auf die Response bis maximal die angegebene Timeout Zeit tTimeOut abgelaufen ist. |
iSrcAddrSnd | Quelladresse im Falle der RS485 Kommunikation. Diese Adresse wird verwendet, falls bAddrAutoMode nicht gesetzt ist. |
iDstAddrSnd | Zieladresse im Falle der RS485 Kommunikation. Diese Adresse wird verwendet, falls bAddrAutoMode nicht gesetzt ist. |
bAddrAutoMode | Auswahlmöglichkeit im Falle der RS485 Kommunikation. Falls bAddrAutoMode gesetzt ist (Default = TRUE), werden die RS485 Adressen automatisch zugewiesen. Die oben angegebenen Adressen werden nicht verwendet. Falls bAddrAutoMode deaktiviert (FALSE) ist, so werden oben angegebene Adressen verwendet. |
bLogging | Mit bLogging lässt sich eine zusätzliche Ausgabe aktivieren. Mit Hilfe von Log View Messages kann so die serielle Kommunikation nachvollzogen werden. Diese Messages werden im Windows Event Viewer sowie im TwinCAT System Manager sichtbar. Dies ist sinnvoll für Test- und Analysezwecke. Das Format der Ausgabe ist nicht festgelegt, um Erweiterungen zu ermöglichen.
Beim ersten Aufruf des Funktionsbausteines mit bLogging=TRUE wird die Ausgabe 'Logging initialized.' erzeugt. In diesem ersten Zyklus werden keine Kommunikationsdaten überwacht. |
pRawDataCommand | Der reguläre Funktionsbaustein der PLC RFID Library kann ebenso zur LowLevel Kommunikation verwendet werden. In dem Fall können Rohdaten direkt an den RFID Reader gesendet werden. Die zu sendenden Rohdaten (z.B. als Bytearray) müssen in dieser Eingangsvariablen angegeben werden. Dabei handelt es sich um einen Pointer auf die zu sendenden Rohdaten. Auf diese Adresse wird von der TcRFID Bibliothek nur lesend zugegriffen. Weitere Informationen zum Ablauf der Low Level Kommunikation sind in dem Kapitel Low Level Kommunikation zusammengefasst. Am Ausgang können die gesendeten sowie die empfangenen Rohdaten jederzeit mittels der Struktur ST_RFID_RawData eingesehen werden. |
iRawDataCommandLen | Die Eingangsvariable iRawDataCommandLen gibt die Länge in Bytes der mittels dem Pointer pRawDataCommand angegebenen Rohdaten an. |
Balluff:
iHeadNumber | Falls ein RFID Lesegerät mit mehreren Leseköpfen angesprochen wird, so wird in der Eingangsvariablen iHeadNumber eine Wahl des Lesekopfes angegeben. |
iDCType | Es kann bei Verwendung von Balluff Readern über iDCType die Blockgröße des Chipspeichers (0->64bytes, 1->32bytes) angegeben werden. |
Baltech:
iVHLFileID | Schreib- und Lesebefehle werden mit der hier ausgewählten VHL Datei ausgeführt. Diese muss in der Konfiguration des RFID Gerätes hinterlegt sein. Falls iVHLFileID den Wert 0xFF [default] hat, so wird der RFID Leser keine normale VHL Datei aus seiner Konfiguration nehmen, sondern eine einfache Ad-Hoc-Datei, welche gewählt werden kann, um nicht konfigurierte/unverschlüsselte Blankokarten zu verwenden. | ||
iCardTypeMask | Mit Hilfe der iCardTypeMask lassen sich bestimmte Transponderkartenfamilien einstellen. Nur die gesetzten Kartentypen werden mit dem Befehl GetInventory erkannt. Alle anderen Kartentypen werden herausgefiltert. Sollen alle Kartentypen erkannt werden, muss dieser Wert nicht verändert werden [default: 0xFFFF]. Für jede akzeptierte Kartenfamilie wird in der iCardTypeMask das jeweilige Bit gesetzt. | ||
Card Type | Card Family | CardTypeMask | |
Mifare / ISO 14443-A | 1 | 0x0001 (Bit 1) | |
LEGIC | 2 | 0x0002 (Bit 2) | |
ISO 15693 | 3 | 0x0004 (Bit 3) | |
ISO 14443-B | 4 | 0x0008 (Bit 4) | |
PICOPASS via ISO 14443-2-B | 5 | 0x0010 (Bit 5) | |
PICOPASS via ISO 15693 | 6 | 0x0020 (Bit 6) | |
bReselect | Wenn bReselect gesetzt ist [default: TRUE], wird bei jeder Abfrage mit dem Befehl GetInventory ein Transponder am Ausgang angegeben, sofern sich ein Transponder im HF Feld befindet. Falls sichergestellt ist, dass sich jeweils nur eine Karte vor dem RFID Reader befindet, sollte diese Einstellung beibehalten werden. Wenn sich mehr als eine Transponderkarte im HF Feld befindet, existiert im RFID Gerät eine Liste erkannter Karten. Um alle Transponder mit dem Befehl GetInventory anwählen zu können, sollte bReselect ausgeschaltet [FALSE] werden. Der Befehl GetInventory geht diese Liste dann durch mehrfaches Aufrufen einem nach dem anderen durch. Nachdem die letzte Karte angewählt wurde, folgt die Rückmeldung eRFR_NoTransponder. Erst wenn eine Karte aus den HF Feld herausgenommen und erneut hineingeführt wird, gibt der Befehl GetInventory den Transponder wieder samt Seriennummer am Ausgang an. | ||
bAcceptConfCard | Falls bAcceptConfCard gesetzt ist [default: TRUE], werden mit dem Befehl GetInventory auch Konfigurationskarten erkannt. Es wird automatisch versucht die darauf vorhandene Konfiguration auf den RFID Reader zu übertragen. Um eine Beeinflussung durch fremde Konfigurationskarten zu verhindern kann dieser Parameter deaktiviert werden. |
Leuze:
sSelTranspSRN | An der Eingangsvariablen sSelTranspSRN kann die Seriennummer des Transponders, auf den der Befehl (z.B. Read/Write) angewendet werden soll, als String angegeben werden. Dies ist in den meisten Fällen nicht notwendig. Falls eine bestimmte Reader-Konfiguration dies notwendig macht, sind Details hierzu bei der diesbezüglichen Beschreibung in der proprietären Spezifikation zu finden. |
Pepperl+Fuchs:
iHeadNumber | Falls ein RFID Lesegerät mit mehreren Leseköpfen angesprochen wird, so wird in der Eingangsvariablen iHeadNumber eine Wahl des Lesekopfes angegeben. | |||
iDCType | Es kann bei Pepperl+Fuchs Readern mit dieser Variablen und dem Befehl 'ChangeDCType' der Transpondertyp am Lesekopf eingestellt werden. Mögliche Werte dafür sind im proprietären Protokoll beim Befehl 'ChangeTag' gelistet. (Sie stimmen nicht mit den Werten der Enumeration E_RFID_TranspType überein.) Auszug unterstützter Transpondertypen: see "Extracted nested table 2" | |||
Data Carrier Type [dec] | Description P+F | Chip Type | Frequency | |
02 | IPC02 | Unique, EM4102 | 125 KHz | |
03 | IPC03 | EM4450 | 125 KHz | |
14 | IPC14 | T5557 (Atmel) | 125 KHz | |
20 |
| all ISO 15693 complaint data carriers | 13.56 MHz | |
21 | IQC21 | I-Code SLI (NXP) | 13.56 MHz | |
22 | IQC22 | Tag-it HF-I Plus (TI) | 13.56 MHz | |
23 | IQC23 | my-D (infineon) SRF55V02P | 13.56 MHz | |
24 | IQC24 | my-D (infineon) SRF55V10P | 13.56 MHz | |
33 | IQC33 | Fujitsu FRAM MB89R118 | 13.56 MHz | |
35 | IQC35 | I-Code SLI-S (NXP) | 13.56 MHz | |
... | ... | ... | ... | |
99 |
| default type of the connected read head |
| |
bBufferedCmd | Die meisten Befehle werden umgehend nach dem Aufruf einmal bearbeitet. Je nach RFID Reader können Befehle dauerhaft anstehen. Dies ermöglicht unter anderem einen Lesevorgang, sobald der RFID Transponder ins Lesefeld kommt, ohne einen extra Befehl dazu abzuschicken. Entweder ist dies in der RFID Reader Konfiguration konfigurierbar (Balluff, Deister, Leuze) oder mit dieser Eingangsvariablen auswählbar (Pepperl+Fuchs). Ist an einem Lesekopf ein solch gepufferter Befehl aktiv, darf der Trigger Mode nicht für diesen Kanal aktiviert werden bzw. aktiv sein! Ebenso darf kein Rohdatenbefehl abgesetzt werden, welcher diesen Kanal betrifft! |
Verzögerungszeiten
Die zwei Variablen tPreSendDelay und tPostSendDelay bieten optional die Möglichkeit Verzögerungszeiten zu parametrieren.
Beide Variablen stellen sicher, dass zwischen zwei Anfragen an den RFID Reader eine Verzögerung abgewartet wird. Wird die Verzögerungszeit als tPreSendDelay angegeben, so ist eine Verzögerung zwischen dem letzten Antworttelegram und dem nächsten Anfragetelegram sichergestellt. Soll das Anfragetelegram möglichst direkt abgeschickt werden, so kann tPostSendDelay verwendet werden.
Es gilt die Bedingung 'tTimeOut > tPreSendDelay + tPostSendDelay'. Andernfalls wird ein Fehler am Ausgang ausgegeben.
Im proprietären Protokoll der Balluff RFID Reader ist eine Mindestverzögerungszeit zwischen zwei Befehlen von 300 ms spezifiziert. |
Im proprietären Protokoll der Leuze electronic RFID Reader ist eine Mindestverzögerungszeit zwischen Empfang und Befehl von 150 ms spezifiziert. |