Beispiel iDTRONIC RFID Leser in TwinCAT
Dieses Beispielprogramm ermöglichst die Nutzung eines iDTRONIC RFID Lesers in der TwinCAT SPS.
Die Anbindung geschieht mittels USB und der entsprechende Treiber sorgt für einen virtuellen COM Port. Im Windows Gerätemanager wird dieser Port angezeigt und die zugewiesene Portnummer kann ermittelt sowie ggf. geändert werden.
Weitere Vorrausetzungen zur Verwendung des TwinCAT Beispielprogrammes:
- TwinCAT XAE 3.1.4022 (oder höher) auf dem Engineering-PC
- TwinCAT XAR 3.1.4022 (oder höher) auf dem Zielsystem
- Installation von TF6340 TwinCAT Serielle Kommunikation auf dem Zielsystem
- Lizenz für TwinCAT 3 SPS und TF6340 TwinCAT Serielle Kommunikation
- Usb-To-Virtual-ComPort Treiber (je nach Betriebssystem im iDTRONIC SDK verfügbar)
- iDTRONIC RFID Leser
TwinCAT 3 Projekt Download: TC3_IdTronicRfid_Sample
Die komplette Applikation befindet sich im Programmbaustein IdTronic_Communication()
. Die Hintergrundkommunikation leistet eine Instanz vom Funktionsbaustein SerialLineControlADS
aus der Bibliothek Tc2_SerialCom. Nach Parametrierung der Struktur stSendMessage:ST_IdTronic_CommandMessage
können verschiedenste Kommando-Nachrichten zum Lesegerät hin abgeschickt werden. Nachrichten werden empfangen und in der Struktur stRcvMessage:ST_IdTronic_ReplyMessage
zur weiteren Verarbeitung zur Verfügung gestellt.
Das Lesegerät sendet nur auf Anfrage. Es handelt sich um eine bidirektionale Kommunikation. Es werden keine Transponderkarten automatisch erkannt und dies übermittelt. Hierfür stehen verschiedene Kommandos zur Verfügung.
Um die Hintergrundkommunikation zum RFID Lesegerät zu gewährleisten, muss der korrekte COM Port parametriert werden. Details zur seriellen Hintergrundkommunikation sind mit TF6340 Serielle Kommunikation dokumentiert.
stSerialCfg : ComSerialConfig := ( ComPort:= 7,
Baudrate:= 9600,
Parity:= ComParity_t.PARITY_NONE,
DataBits:= 8,
StopBits:= ComStopBits_t.STOPBITS_ONE );
Ein korrekt geöffneter Port, wird über die Variable bPortOpened
signalisiert. Ist diese TRUE
kann die Kommunikation mit dem RFID Lesegerät starten. Hierzu werden die Funtionsbausteine FB_IdTronic_Rfid_RcvMessage
und FB_IdTronic_Rfid_SendMessage
verwendet, welche über die Pufferinstanzen RxBuffer
und TxBuffer
mit der Hintergrundkommunikation in Verbindung stehen. Diese zwei Funktionsbausteine bieten Lese- sowie Schreibmöglichkeiten und werden selbst nicht angepasst. Sie sind bereits allgemein implementiert, so dass allein mittels Parametrierung innerhalb vom Programmbaustein IdTronic_Communication
eine individuelle Applikation erstellt werden kann.
Es stehen über 40 Kommandos mit der Enumeration E_IdTronic_Command
zur Auswahl. Beispielsweise E_IdTronic_Command.MF_GetSRN
zur Abfrage der Seriennummer eines Mifare® Transponders. Die Parametrierung der Kommando-Nachricht erfolgt entsprechend dem proprietären Protokoll (siehe Protokolldokumentation im SDK: https://download.idtronic.de/Embedded/Embedded%20HF%20SDK.zip) in der Struktur stSendMessage
.
TYPE ST_IdTronic_CommandMessage :
STRUCT
nStationId : BYTE;
nDataLength : USINT := 1; // includes the cmd byte and the data bytes
eCmd : E_IdTronic_Command;
aData : ARRAY[0..253] OF BYTE;
END_STRUCT
END_TYPE
Nach Anpassung dieser Parameterstruktur kann die Kommando-Nachricht zum RFID Lesegerät hin verschickt werden.
(* send message *)
IF bSendMessage AND NOT fbSendMsg.bBusy THEN
bSendMessage := FALSE;
fbSendMsg.bExecuteCmd := TRUE;
// todo: adapt stSendMessage for the selected command
fbSendMsg.stSendMessage := stSendMessage;
END_IF
fbSendMsg(TxBuffer:=TxBuffer);
Empfangene Nachrichten werden in der Struktur stRcvMessage
dargestellt und müssen nur noch im Detail weiter verarbeitet werden.
(* receive message *)
fbRcvMsg(RxBuffer:=RxBuffer);
IF NOT fbRcvMsg.bBusy AND NOT fbRcvMsg.bError AND fbRcvMsg.bMsgReceived THEN
stRcvMessage := fbRcvMsg.stRcvMessage;
// todo: process the received message
END_IF
Der Aufbau von stRcvMessage
ist dabei wie folgt:
TYPE ST_IdTronic_ReplyMessage :
STRUCT
nStationId : BYTE;
nDataLength : USINT; // includes the status byte and the data bytes
eStatus : E_IdTronic_StatusCodes;
aData : ARRAY[0..253] OF BYTE;
END_STRUCT
END_TYPE
Mit diesem Beispielprogramm können in Analogie zu obigem Ablauf komplexe Zustandsmaschinen programmiert werden, in deren Verlauf eine umfangreiche Kommunikation zwischen der TwinCAT SPS und dem iDTRONIC RFID Lesegerät entsteht.