Low-Level-Kommunikation

Die TwinCAT-RFID-Bibliothek bietet neben dem High-Level-Befehlssatz auch die Möglichkeit der Low‑Level‑Kommunikation. Dies ist implizit gelöst. Es wird derselbe Funktionsbaustein verwendet.
Es können beliebige Telegramme bis zu einer maximalen Größe von 1024 Bytes empfangen und bis zu einer Größe von 300 Bytes versendet werden.

Ein gesamtes Telegramm setzt sich dabei wie folgt zusammen:

| Prefix | Adressierung | Rohdaten | CRC | Suffix |

Je nach proprietärer Protokollspezifikation können einzelne Bestandteile fehlen. Generell ist die Zusammensetzung aber gleich.

Senden

Zum Senden wird der Befehl eRFC_SendRawData aus dem Befehlssatz verwendet (siehe RFID-Befehlssatz). Die zu sendenden Rohdaten werden in der Eingangsstruktur ST_RFID_Control angegeben.

Um ein Low-Level-Telegramm abzusenden, werden nur die Rohdaten angegeben. Die anderen Bestandteile des Telegramms werden automatisch von der TwinCAT-RFID-Bibliothek ergänzt. Ebenso werden Prüfdaten wie CRC intern erzeugt und eingefügt.

Wenn das Protokoll eine Umkodierung von bestimmten Bytes innerhalb der Rohdaten verlangt, wird dies ebenfalls automatisch von der TwinCAT-RFID-Bibliothek vorgenommen.

Wenn es sich um eine RS485-Schnittstelle handelt, so muss die Adressierung gesondert angegeben werden. Sie darf nicht mit in den angegebenen Rohdaten enthalten sein. Per Default wird die Adressierung automatisch von der Bibliothek übernommen. Sie kann allerdings über Eingangsvariablen in ST_RFID_Control parametriert werden.

Die zuletzt gesendeten Rohdaten können jederzeit am Ausgang des Funktionsbausteins mithilfe der Struktur ST_RFID_RawDatata eingesehen werden. Dies ist unabhängig vom verwendeten Befehl.

Empfangen

Die zuletzt empfangenen Rohdaten können jederzeit am Ausgang des Funktionsbausteins mithilfe der Struktur ST_RFID_RawData eingesehen werden. Die zugehörige Adressierung wird in der Struktur ST_RFID_ReaderInfo ausgegeben.

Bei Nutzung des Befehls SendRawData kann eine direkte Auswertung der empfangenen Antwort nicht garantiert werden.

Beispiel: Wird ein Lesebefehl manuell als Bytefolge mittels des Befehls SendRawData versandt, so werden empfangene Transponderdaten nicht auf eine in ST_RFID_AccessData angegebene Adresse geschrieben. Eine Auswertung/Speicherung der Daten sollte demnach auch manuell mithilfe der immer angegebenen Rohdatenstruktur ST_RFID_RawData geschehen. Bei den angegebenen Rohdaten handelt es sich um das empfangene Telegramm, allerdings ohne Prefix, Suffix, Checksum, CRC oder Shift-Sequence-Kodierung. Wenn das empfangene Telegramm nicht regulär von dem Funktionsbaustein ausgewertet wurde, wird dies zudem über einen Fehler signalisiert.

Um die empfangenen Daten nutzen zu können, müssen diese beispielsweise auf ein Bytearray kopiert werden.

Beispiel einer Zuweisung von empfangenen Daten mithilfe der Funktion MEMCPY():

fbRFIDReader    : FB_RFIDReader;
arrReceivedData : ARRAY [0..511] OF BYTE;
MEMSET( ADR(arrReceivedData), 0, SIZEOF(arrReceivedData) );
MEMCPY( ADR(arrReceivedData),
        fbRFIDReader.stRawData.pReceivedRsp,
        MIN(fbRFIDReader.stRawData.iReceivedRspLen, SIZEOF(arrReceivedData)) );

Balluff RFID Reader: Die Endekennung (LF CR) wird als Suffix zur Erkennung von Telegrammen genutzt. Sobald diese 2 Bytes im Datenstrom erkannt werden, werden vorherige Daten zu einem Telegramm zusammengefasst.