※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

Java Communication API

Javaからシリアル・パラレルポートを制御するためのAPI。ネイティブメソッドを使用している。


Javadoc
http://java.sun.com/products/javacomm/javadocs/javax/comm/package-summary.html
※なぜかNon-Frameバージョンしかない。

なお、3rd Partyではあるが、
RXTXはJava CommAPI互換の上にI2C、RS485にも対応した実装を行っている。また対応するOSもWin32、Linux、Macと主要なものを網羅している。
パッケージ名が違うので注意。


バージョン

最新版は3.0Update1(2006年3月現在)。

対応するポート

現在対応しているor使用できるポートは以下の通りです。
  • シリアルポート(RS-232C)
  • パラレルポート

また下記はWindowsXP+ USB-シリアル変換器での動作を確認しています。
  • シリアルポート(RS-422)
  • シリアルポート(RS-485)
RS-422,485においてもCommAPIの使用方法はRS-232Cとまったく同じです。

対応するOS


Windows

Sunがサポートしている。

※2005年11月15日現在ダウンロードできなくなっている。バイナリの機能はJREに標準装備されたとの噂もあるが、真相は定かではない。現在下記の方法で使える可能性があるらしいが、現在検討中。

    1. Java Comm APIのlinux版をSunのサイトからダウンロード
    2. jre/libにjavax.comm.propertiesをコピー
    3. jre/lib/extにcomm.jarをコピー

以上
追記(2005/11/15):やはり上記ではうまくいかないようだ。
jre/binにwin32com.dllがないから??


また裏技的に、下記のサイト
http://www-06.ibm.com/jp/developerworks/ibm/020913/j_i-barcd.html
の最下部にある「必要なcommポート・ファイルをダウンロードしてください。」というリンクをクリックすると以前のcomm.jar,javax.comm.properties,win32com.dllをダウンロードすることが出来る。





RXTXも使用可能。
http://www.rxtx.org/

Solaris

Sunがサポートしている。


Linux

数年前からサンが正式にサポートしている。
http://java.sun.com/products/javacomm/downloads/index.html

RXTXも使用可能。
http://www.rxtx.org/



IBM版もある。


JCLという物もあったらしい。が、RXTXに吸収されているらしい。



Mac

下記を使えばいいらしいが詳細は不明。動くかどうかも不明。使った方はご一報を。
http://homepage.mac.com/pcbeard/javax.comm.MRJ/

RXTXは使用可能。
http://www.rxtx.org/

自作

下記を使えばどんなOSにも対応可能。というか、C言語の雛形しかないので、その先は自作する必要がある。腕に自身のある人向け。
http://www.openje.org/kommapi/

製品版

Serialio.com SerialPort
製品版のため有償だが、PCから組み込みまで幅広いプラットフォームをサポートしている。
https://serialio.com/products/serialport/serialport.htm


CommPortIdentifier

CommPortIdentifierを使うとパラレル・シリアル両ポートの高度な制御が可能となる。
具体的には
  1. 名前によるポートの取得(COM1,/dev/ttyS0など)
  2. 使用可能なポート名のリストの取得
  3. オーナー名を付けたポートのオープン
  4. オーナー情報を利用したポートのコントロール
などなど。Serial,Pararellにとらわれず、抽象的にコントロールできる。

なお、初期化はコンストラクタではなく

CommPort port = CommPortIdentifier.getPortIdentifier("COM1");

のように行う。


使用可能なポートの取得

COM1や/dev/ttyS0などの機種やOSに依存する名前をソースコード中にハードコーディング{{fn ソース中に変更不可能な形で記述してしまうこと。特に文字列を決め打ちしてしまうことを指す場合が多い。}}するのはJavaの性質上好ましくない。
また、名前は合っていても、機種によってはそのポートは実際には存在しないことも多い。(特にノートパソコンなど)
そこでポート名を動的に取得し、GUIやコマンドラインから対話的にポートを選択するようにプログラムするのが最もスマートな方法だと言える。
使用可能なポート名を取得するには次のような方法を使う。
CommPortIdentifier portId;
ArrayList list = new ArrayList();
Enumeration en = CommPortIdentifier.getPortIdentifiers();
while (en.hasMoreElements()) {
    portId = (CommPortIdentifier) en.nextElement();
    list.add(portId.getName());
}

シリアルポートだけ取得する場合は

CommPortIdentifier portId;
ArrayList list = new ArrayList();
Enumeration en = CommPortIdentifier.getPortIdentifiers();
while (en.hasMoreElements()) {
    portId = (CommPortIdentifier) en.nextElement();
    if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
        list.add(portId.getName());
    }
}

という風に条件を付ける。
パラレルの場合はPORT_SERIALをPORT_PARALLELにする。

北陽電機(HOKUYO)製の測域センサURGの距離取得プログラム例


URG-X04LX(プロトコルはSCIP1.0)に対応(してるはず)。
下記の添付ファイルをダウンロードしてください。

※各自の責任において使用してください。作者は一切の責任を負いかねます。

リンク


FA のための Java プログラミング講座
http://www.javainthebox.net/JavaForFA/08-09CommAPI/No.08/commapi1.html

  
添付ファイル

サイト内検索


更新履歴

取得中です。