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:

RFID-Reader-Anbindung 1:
RFID-Reader-Anbindung 2:

Je RFID Reader muss eine separate Verbindung zu einer separaten Klemme erfolgen. Eine Unterstützung mehrerer RFID Reader an einem RS485-Netz ist mit der TwinCAT-RFID-Bibliothek vorerst nicht gegeben.

Einrichten der seriellen Kommunikation in TwinCAT 3 XAE

Der serielle Datenaustausch wird mit den Bausteinen der TwinCAT-SPS-Bibliothek Tc2_SerialCom eingerichtet.

Legen Sie einen Sende- sowie einen Empfangsbuffer vom Typ „ComBuffer“ an. Dies kann global geschehen, muss aber nicht zwangsläufig. Legen Sie außerdem zwei Datenstrukturen an, wie Sie im TwinCAT System Manager zur seriellen Kommunikation verwendet werden.

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

Verlinken Sie die Strukturen im TwinCAT System Manager mit den Kanälen der seriellen Schnittstelle. Bei Verwendung des ComPorts müssen Sie hierzu im TwinCAT System Manager am IO-Gerät zusätzlich die Option SyncMode aktivieren. Die SPS-Variablen müssen im TwinCAT System Manager der richtigen (schnellen) Task zugeordnet und von dort passend verlinkt sein.

Legen Sie zur seriellen Kommunikation eine Instanz des SerialLineControl an. Diese muss in einer schnellen Task (<= 1 ms) zyklisch aufgerufen werden. 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, die 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 1 ms notwendig.

Beispiel 2: Beim Anschluss eines RFID‑Gerätes an eine EL6001 und einer Baudrate von 9600 Baud ist eine Zykluszeit von maximal 6 ms notwendig.

Weitere Informationen sowie Erläuterungen zur Verwendung virtueller COM Ports finden Sie in der Dokumentation der SPS-Bibliothek „Serielle Kommunikation“.

Exemplarische Darstellung der COM-Port-Einstellungen im TwinCAT System Manager:

RFID-Reader-Anbindung 3:

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