ST_RFID_Control

Die Eingangsstruktur stCtrl beinhaltet Variablen, mit denen sich das Verhalten des Funktionsbausteins parametrieren lässt.

Die zwei Variablen tPreSendDelay und tPostSendDelay bieten optional die Möglichkeit Verzögerungszeiten zu parametrieren.

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    :POINTER TO BYTE; (* 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
ST_RFID_Control 1:

Mehrere RFID Reader an einem RS485-Netz

Eine Unterstützung mehrerer RFID Reader an einem RS485-Netz ist mit der TwinCAT‑RFID‑Bibliothek 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 TwinCAT-RFID-Bibliothek übernommen werden, wozu die Eingangsvariable bAddrAutoMode auf TRUE belassen werden kann.

Alle Hersteller

Name

Beschreibung

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.

Wenn 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, wenn bAddrAutoMode nicht gesetzt ist.

iDstAddrSnd

Zieladresse im Falle der RS485-Kommunikation. Diese Adresse wird verwendet, wenn bAddrAutoMode nicht gesetzt ist.

bAddrAutoMode

Auswahlmöglichkeit im Falle der RS485-Kommunikation. Wenn bAddrAutoMode aktiviert ist [default: TRUE], werden die RS485‑Adressen automatisch zugewiesen. Die oben angegebenen Adressen werden nicht verwendet. Wenn bAddrAutoMode deaktiviert (FALSE) ist, werden oben angegebene Adressen verwendet.

bLogging

Mit bLogging lässt sich eine zusätzliche Ausgabe aktivieren. Mithilfe 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.

ST_RFID_Control 2:

Beim ersten Aufruf des Funktionsbausteins mit bLogging = TRUE, wird die Ausgabe „Logging initialized“. erzeugt. In diesem ersten Zyklus werden keine Kommunikationsdaten überwacht.

pRawDataCommand

Der reguläre Funktionsbaustein der TwinCAT-RFID-Bibliothek kann ebenso zur Low-Level-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 dem Bibliotheksbaustein nur lesend zugegriffen.

Weitere Informationen zum Ablauf der Low-Level-Kommunikation sind im Abschnitt 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

Name

Beschreibung

iHeadNumber

Wenn 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

Name

Beschreibung

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. Wenn iVHLFileID den Wert 0xFF [default] hat, so wird der RFID Reader 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

Mithilfe 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.

ST_RFID_Control 3:

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. Wenn 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

Wenn 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

Name

Beschreibung

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. Der Datentyp ist T_RFID_TranspSRN.
Dies ist in den meisten Fällen nicht notwendig. Wenn eine bestimmte Reader-Konfiguration dies notwendig macht, sind Details hierzu bei der diesbezüglichen Beschreibung in der proprietären Spezifikation zu finden.

Pepperl+Fuchs

Name

Beschreibung

iHeadNumber

Wenn ein RFID-Lesegerät mit mehreren Leseköpfen angesprochen wird, so wird in der Eingangsvariablen iHeadNumber eine Wahl des Lesekopfes angegeben. iHeadNumber wird auch als IdentChannel bezeichnet.

iDCType

Mit dieser Variablen und dem Befehl ChangeDCType kann bei Pepperl+Fuchs Readern 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:

ST_RFID_Control 4:

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 in das 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 Anfragetelegramm sichergestellt. Soll das Anfragetelegramm möglichst direkt abgeschickt werden, 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.

ST_RFID_Control 5:

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken

TC3.1.4013

PC oder CX (x86, x64)

Tc2_RFID