RFID-Tags mit Java über serielle Schnittstelle auslesen

Heute habe ich mich im Rahmen eines größeren Projekts des IMIS mit dem Auslesen von RFID-Tags mittels Java auseinandersetzen dürfen. Zugegeben, ganz unbefleckt war ich diesbezüglich nicht, allerdings war ich sehr von bisherigen Phidgets-RFID-Readern verwöhnt, die mit Treibern, Beispielprogammen in gängigsten Programmiersprachen und ausführlicher Dokumentation daher kommen. Den verwendeten Low-Cost-RFID-Reader, der über die serielle RS232-Schnittstelle auszulesen war, lag lediglich eine kopierte DIN-A4 Seite mit magerem Informationsgehalt bei. Weitere Informationen waren leider auch im Netz nicht verfügbar. Zwei Stunden Recherche und Programmierung kostete mich der Weg zu einer brauchbaren Java-basierten Lösung.

Serielle Schnittstelle RS232 per USB-Adapter

Wie die meisten Rechner, verfügt mein Macbook nicht über die nötige serielle Schnittstelle. Abhilfe schaffen USB-Seriell-Adapter, wie z.B. das Digitus-USB-seriell-RS232-Adapterkabel, welches u.a. bei Amazon erhältlich ist. Über Adapterkabel angeschlossene Geräte verhalten sich genau wie direkt angeschlossene.

Serielle Schnittstelle RS232 und Java

Java kann von sich aus nicht mit seriellen oder parallelen Schnittstellen kommunizieren. Abhilfe schaffen verschiedene plattformabhängige Libraries. Zwei solcher Libraries, die für gängige Plattformen (Windows/ Mac/ Unix) zur Verfügung stehen, sind javax.comm von Sun/Orcale und rxtx. Die Entwicklung mit rxtx erklärt Captain Universe sehr anschaulich in seinem Artikel JAVA: Serial Port access with javax.comm or rxtx on Windows, Linux etc., weshalb ich mich für diese Library entschieden habe.

Eclipse und Access Restrictions

Wer ebenfalls mit Eclipse entwickelt wird möglicherweise die Fehlermeldung Access restriction: Class is not accessible due to restriction on required library erhalten. Um das Projekt trotz der Mißachtung der Access Rules vorerst kompilieren zu können reicht es die Verletzung von Eclipse nur als Warning und nicht als Error behandeln zu lassen. Die hierfür nötigen Schritte beschreibt Kamal Mettananada in seinem Artikel [Eclipse] Access restriction: Class is not accessible due to restriction on required library. Eine Lösung für das generelle Problem stellt dieses Vorgehen aber nicht dar und ist mit Vorsicht zu genießen.

Gerätespezifische Einstellungen für RFID-Reader

Um erfolgreich von der seriellen Schnittstelle lesen zu können, sind Einstellungen nötig. Dies sind der COM-Port, die Baudrate, die Anzahl der Datenbits, die Anzahl der Paritätsbits, sowie die Anzahl der Stopbits. Diese Daten findet man ggf. auf dem den Readern beiliegenden Informationsblatt unter dem Stichwort Communication-Parameter. Die Kurzschreibweise 8N1 steht für 8 Datenbits, kein (none) Paritätsbits und 1 Stopbit. Im oben erwähnten Beispiel auf der Seite von Captain Universe stehen für die Werte Variablen zur Verfügung.

Erste Ausgabe

Sind alle Vorarbeiten erledigt und der Reader angeschlossen sein, sollte das Beispielprogramm von Captain Universe nun die Tag-Id ausgeben, sobald ein Tag vor das Lesegerät gehalten wird.

Vermeintlich fehlerhafte RFID-Tags

Die Reader senden meist die ASCII-Zeichen 0x30 bis 0x3f, die wie man in der ASCII-Tabelle nachlesen kann 0-9 und sowie den Zeichen :;<=>? entsprechen. Für einen Tag mit der Tag-Id 3456789ABC erhält man also ggf. 3456789:;. Die gültige Tag-Id erhält man indem man folgende Ersetzungen durchführt:

: -> A, ; -> B, < -> C, = -> D, > -> E, ? -> F

Danke!

Ein ganz spezieller Dank geht an die Firma RSS Systems und den netten Mitarbeiter, der mir meine Fragen freundlich und anschaulich beantwortet hat, obwohl kein Geschäft damit verbunden war.

Veröffentlicht von

www.mabraham.de

Kommt noch.