Java串口通信编程指导

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java串口通信编程指导

Java串口通信编程

概述

在java中,利用Java Communication包能够操作串口,但官方的包在3.0之后就只支持Linux和Solaris平台了,Windows平台的只支持到98年出的2.0版本,只是在XP下还能使用。另外,也能够用开源的Rxtx实现串口通信,那个地点仅以Java Communication包,在Windows平台实现串口通信进行讲明。

前期预备

下载Java Communication包

下载地址如下:/Jolt/javacomm20-win32.zip。

配置

解压缩javacomm20-win32.zip

把win32com.dll拷贝到{JA V A_HOME}\jre\bin

把comm.jar拷贝到{JA V A_HOME}\jre\lib\ext

set CLASSPATH={JA V A_HOME}\jre \lib\ext \comm.jar;%classpath%

实现过程

要紧步骤包括:

获得串口标识

打开串口

设置串行端口通讯参数

猎取输入(出)流

进行读写操作

获得串口标识

指定串口的端口号,生成串口的标识类的实例。

a. 通过驱动决定通讯端口是可用的。

b. 打开通讯端口为了I/O操作。

c. 决定端口的拥有者。

d. 解析端口拥有者的争夺。

e. 治理事件显示在端口拥有者的中的状态改变。示例代码如下:

代码:

打开串口

示例代码如下:

代码:

5000(毫秒)是超时时刻。

设置串行端口通讯参数

设置串口传输的波特率、数据位、停止位、奇偶校验等参数。

示例代码如下:

代码:

try {

// 通信条件の設定

// 通信速度 9600 baud

// データビット 8bit

// ストップビット 1bit

// パリティなし

// フローコントロールの設定

// 無制御を使用

port.setSerialPortParams(9600,

SerialPort.DATABITS_8,

SerialPort.STOPBITS_1,

SerialPort.PARITY_NONE);

port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);

} catch (UnsupportedCommOperationException ex) {

ex.printStackTrace();

System.exit(1);

}

猎取输入(出)流

利用getInputStream()以及getOutputStream()从每个串口产生对应的输入输出流对象。

示例代码如下:

代码:

进行读写操作

写操作专门简单,只需要调用BufferedOutputStream的write()方法就能够了。

示例代码如下:

代码:

读操作,需要如下步骤:

继承SerialPortEventListener接口。

为SerialPort添加监听Listener。

实现该接口的serialEvent (SerialPortEvent event)方法。

通过BufferedReader的read()方法逐byte读取。因此也能够用readLine ()方法进行逐行读取。

示例代码如下:

代码:

protected BufferedOutputStream comWriter;

public SerialPortTerminal(String portName){

super(portName, "SerialPortTerminal");

try {

// SerialPortEvent を受け取るためのリスナの登録

port.addEventListener(this);

} catch(TooManyListenersException ex){

ex.printStackTrace();

System.exit(1);

}

// Data Available イベントを受け取るようにする

port.notifyOnDataAvailable(true);

try {

// RS-232C 入力用の Reader を生成

comReader = new BufferedReader(

new InputStreamReader(port.getInputStream()));

// RS-232C 出力用の Writer を生成

comWriter = new BufferedOutputStream(port.getOutputStream()); } catch (IOException ex){

ex.printStackTrace();

System.exit(1);

}

}

// イベント処理ルーチン

public void serialEvent(SerialPortEvent event) {

switch(event.getEventType()) {

case SerialPortEvent.OUTPUT_BUFFER_EMPTY:

// Data Available 以外のイベントは処理しない

break;

case SerialPortEvent.DATA_AVAILABLE:

// Data Available の処理

String buffer = null;

StringWriter strWriter = new StringWriter();

char[] c = new char[20];

int newData = 0;

int i = 0;

while (true) {

try {

newData = comReader.read();// 入力ストリームから読み込み if (newData == -1 || newData == 0x0d) {// CR

break;

}

c[i] = (char)newData;

if(i > 100){

break;

}

} catch (IOException ex) {

return;

}

i++;

}

try{

strWriter.write(c);

strWriter.flush();

buffer = strWriter.toString();

相关文档
最新文档