RFID Reader Anbindung
Alle mittels dieser SPS Bibliothek unterstützten RFID Reader werden über serielle Kommunikationsschnittstellen mit der Steuerung verbunden (RS 232, RS 422, RS 485 und virtuelle serielle COM Ports).
Dazu können folgende Beckhoff Produkte genutzt werden:
- Serielle EtherCAT Klemmen: EL6001, EL6002, EL6021, ...
- Serielle K-Bus Klemmen: KL6001/KL6031, KL6021, ...
- COM-Port eines beliebigen IPC und Embedded PC mit TwinCAT System.
Verwendung mehrerer RFID-Reader Es muss je RFID-Reader eine separate Verbindung zu einer separaten Klemme erfolgen. Eine Unterstützung mehrerer RFID-Reader an einem RS485-Netz ist mit der SPS-RFID Bibliothek vorerst nicht gegeben. |
Einrichten der seriellen Kommunikation in TwinCAT PLC Control
Der serielle Datenaustausch wird mit den Bausteinen der TwinCAT SPS Bibliothek COMlibV2 eingerichtet.
Legen Sie einen Sende- sowie einen Empfangspuffer vom Type ComBuffer an. Dies kann global geschehen, muss aber nicht zwangsläufig.
Legen Sie außerdem noch zwei Daten Strukturen an, wie Sie im TwinCAT System Manager zur seriellen Kommunikation verwendet werden:
Falls der COM-Port verwendet wird, sieht dies wie folgt aus:
gPcComRxBuffer :ComBuffer;
gPcComTxBuffer :ComBuffer;
PcComInData AT %I* :PcComInData;
PcComOutData AT %Q* :PcComOutData;
Neben PcComInData/PcComOutData sind bei Verwendung einer seriellen Klemme EL6inData22B/EL6outData22B sowie KL6inData5B/KL6outData5B und andere Datentypen möglich. Diese Strukturen werden im System Manager mit den Kanälen der seriellen Schnittstelle verlinkt.
Bei Verwendung des Com-Ports muss hierzu im SystemManager zusätzlich der SyncMode aktiviert werden. |
Im TcSystemManager müssen die SPS-Variablen der richtigen (schnellen) Task zugeordnet und von dort passend verlinkt sein. Falls mehrere Tasks verwendet werden und die SPS-Variablen nicht innerhalb der richtigen Task liegen, können diese per Drag & Drop zur anderen Task verschoben werden. |
Zur seriellen Kommunikation muss eine Instanz des 'SerialLineControl' angelegt werden. Diese wird in einer schnellen Task (<= 1 ms) zyklisch aufgerufen. Die nötige Taskzykluszeit ist abhängig von der Anwendung, der Datenmenge, der Baudrate und der Schnittstelle.
Je nach Anwendung und Schnittstelle ist es oft sinnvoll dies in einer zusätzlichen Task auszuführen, welche schneller ist als die Task der Applikation.
Beispiel 1: Beim Anschluss eines RFID Gerätes an einen COM Port und einer Baudrate von 115200 Baud ist eine Zykluszeit von 1ms notwendig.
Beispiel 2: Beim Anschluss eines RFID Gerätes an eine EL6001 und einer Baudrate von 9600 Baud ist eine Zykluszeit von maximal 6ms notwendig.
Weitere Informationen sowie Erläuterungen zur Verwendung virtueller COM-Ports sind in der Dokumentation der SPS Bibliothek Serielle Kommunikation zu finden.
Exemplarische Darstellung der COM Port Einstellungen im TwinCAT System Manager:
Der Aufruf des SerialLineControl ist im Folgenden exemplarisch dargestellt.
Aufruf als StructuredText im Falle der COM Port Verwendung:
LineControl(
Mode := SERIALLINEMODE_PC_COM_PORT,
pComIn := ADR(PcComInData),
pComOut := ADR(PcComOutData),
SizeComIn := SIZEOF(PcComInData),
TxBuffer := gPcComTxBuffer,
RxBuffer := gPcComRxBuffer
);
Aufruf als StructuredText im Falle der Verwendung einer EtherCAT Klemme:
LineControl(
Mode := SERIALLINEMODE_EL6_22B,
pComIn := ADR(EL6ComInData),
pComOut := ADR(EL6ComOutData),
SizeComIn := SIZEOF(EL6ComInData),
TxBuffer := gEL6ComTxBuffer,
RxBuffer := gEL6ComRxBuffer
);
Aufruf als StructuredText im Falle der Verwendung einer K-Bus Klemme:
KL6Config3(
Execute := bConfig3,
Mode := SERIALLINEMODE_KL6_5B_STANDARD,
Baudrate := 9600,
NoDatabits := 8,
Parity := 0,
Stopbits := 1,
Handshake := RS485_FULLDUPLEX,
ContinousMode := FALSE,
pComIn := ADR(KlComInData3),
pComOut := ADR(KlComOutData3),
SizeComIn := SIZEOF(KlComInData3),
Busy => bConfig3Act,
Done => bConfig3Done,
Error => bConfig3Error
);
IF NOT KL6Config3.Busy THEN
bConfig3 := FALSE;
LineControl3(
Mode := SERIALLINEMODE_KL6_5B_STANDARD,
pComIn := ADR(KlComInData3),
pComOut := ADR(KlComOutData3),
SizeComIn := SIZEOF(KlComInData3),
TxBuffer := gKlComTxBuffer3,
RxBuffer := gKlComRxBuffer3
);
END_IF