SewiGの日記
2005-07-01 [金]
■ [Programming] ICカード/ICタグ リーダ・ライタ (2)
JavaでRS232Cなどのシリアル・パラレルポートへアクセスには、Comunication APIを使用します。まず、以下のサイトで必要なファイルをダウンロードします。
http://java.sun.com/products/javacomm/index.html
以下、Windowsの場合のインストール方法を示します。
- javacomm20-win32.zipを解凍
- win32com.dll を <JAVA_HOME>\bin にコピーします。
- comm.jar を <JAVA_HOME>\lib にコピーします。
- javax.com.properties を <JAVA_HOME>\lib にコピーします。
JREもインストールされている場合は、以下も行います。
- win32com.dll を <JRE_HOME>\bin にコピーします。
- comm.jar を <JRE_HOME>\lib にコピーします。
- javax.com.properties を <JRE_HOME>\lib にコピーします。
コンパイル・実行時に CLASSPATH に comm.jar を指定します。
あとは読取装置の通信方式に従って、通信するだけです。EFG-400の場合は、シリアル通信の場合、「調歩同期式, RS232C, 57600bps, データビット8bit, ストップビット1bit, パリティチェックなし」なので以下のようにして、ポートの取得をし、入力と出力を得ます。
CommPortIdentifier ports; SerialPort port; OutputStream out; InputStream in; ports = CommPortIdentifier.getPortIdentifier("COM1"); port = (SerialPort)ports.open("RS232C", 1000); port.setSerialPortParams(57600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); out = port.getOutputStream(); in = port.getInputStream();
javax.comm.CommPortIdentifier.open(String arg0, int arg1)のarg1はタイムアウト時間です。あとは、引数を見れば動作が予想できるのではないでしょうか。詳しくはリファレンスをご覧ください。シリアル通信をここまで抽象化して通信できるとは便利です。java.io.InputStream, java.io.OutputStreamが得られれば、あとは、RFIDを読み取る命令などをラップしたメソッドや操作設定のフィールドを集めたクラスを作るなりして、ライブラリにしてしまえばJava用のEFG-400制御ライブラリができます。
EFG-400はTCP/IPもサポートしていますが、これについては後日ということで。