《Java串口通信编程指导.doc》由会员分享,可在线阅读,更多相关《Java串口通信编程指导.doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java串口通信编程Java串口通信编程 第8页/共8页1. 概述在java中,利用Java Communication包可以操作串口,但官方的包在3.0之后就只支持Linux和Solaris平台了,Windows平台的只支持到98年出的 2.0版本,不过在XP下还能使用。另外,也可以用开源的Rxtx实现串口通信,这里仅以Java Communication包,在Windows平台实现串口通信进行说明。2. 前期准备2.1. 下载Java Communication包 下载地址如下:http:/mdubuc.freeshell.org/Jolt/javacomm20-win32.zip。 如果
2、是非Windows平台,请到Sun网站选择其他版本下载。地址如下:2.2. 配置 解压缩javacomm20-win32.zip 把win32com.dll拷贝到JAVA_HOMEjrebin 把comm.jar拷贝到JAVA_HOMEjrelibext 把m.properties拷贝到JAVA_HOMEjrelib set CLASSPATH=JAVA_HOMEjre libext comm.jar;%classpath%3. 实现过程主要步骤包括: 获得串口标识 打开串口 设置串行端口通讯参数 获取输入(出)流 进行读写操作3.1. 获得串口标识指定串口的端口号,生成串口的标识类的实例。m
3、.CommPortIdentifier是通讯端口管理器,控制访问到通讯端口的中心类。 一个应用程序首先使用CommPortIdentifier中的方法,通过相关的驱动去获取那些通讯端口是可用的 并且选择一个端口便于开始。它包括如下功能: a. 通过驱动决定通讯端口是可用的。 b. 打开通讯端口为了I/O操作。 c. 决定端口的拥有者。 d. 解析端口拥有者的争夺。 e. 管理事件显示在端口拥有者的中的状态改变。示例代码如下:代码:CommPortIdentifier portID = null;try/ CommPortIdentifier 取得portID = CommPortIdentif
4、ier.getPortIdentifier(COM1);catch(NoSuchPortException ex)ex.printStackTrace();3.2. 打开串口示例代码如下:代码:try/ port = (SerialPort)portID.open(portApp, 5000);catch(PortInUseException ex) ex.printStackTrace();5000(毫秒)是超时时间。3.3. 设置串行端口通讯参数设置串口传输的波特率、数据位、停止位、奇偶校验等参数。示例代码如下:代码:try / 通信条件設定/ 通信速度 9600 baud/ 8bit/
5、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);3.4. 获取输入(出)流利用getInputStream()以及getOutputStream
6、()从每个串口产生对应的输入输出流对象。示例代码如下:代码:/受信protected BufferedReader comReader;/送信protected BufferedOutputStream comWriter;try / RS-232C 入力用 Reader 生成comReader = new BufferedReader( new InputStreamReader(port.getInputStream();/ RS-232C 出力用 Writer 生成comWriter=new BufferedOutputStream(port.getOutputStream(); cat
7、ch (IOException ex)ex.printStackTrace();3.5. 进行读写操作 写操作很简单,只需要调用BufferedOutputStream的write()方法就可以了。示例代码如下:代码:try comWriter.write(送信内容。);comWriter.flush(); catch (IOException e) port.close();System.out.println(Serial Send Error:+e);e.printStackTrace(); 读操作,需要如下步骤: 继承SerialPortEventListener接口。 为Serial
8、Port添加监听Listener。 实现该接口的serialEvent (SerialPortEvent event)方法。 通过BufferedReader的read()方法逐byte读取。当然也可以用readLine()方法进行逐行读取。示例代码如下:代码:public class SerialPortTerminal extends SerialPortHandlerimplements SerialPortEventListener /受信 protected BufferedReader comReader; /送信 protected BufferedOutputStream co
9、mWriter; 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 生成
10、 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.getEventTyp
11、e() case SerialPortEvent.OUTPUT_BUFFER_EMPTY:/ Data Available 以外処理break;case SerialPortEvent.DATA_AVAILABLE:/ Data Available 処理String buffer = null; StringWriter strWriter = new StringWriter(); char c = new char20; int newData = 0; int i = 0; while (true) try newData = comReader.read();/ 入力読込 if (ne
12、wData = -1 | newData = 0x0d) / CR break; ci = (char)newData; if(i 100) break; catch (IOException ex) return; i+; try strWriter.write(c); strWriter.flush(); buffer = strWriter.toString(); strWriter.close(); retText = buffer; comReader.close(); port.close(); catch(Exception e) setReadfinishFlg(true);
13、break; 4. 测试相关正确安装Java Communication API,并将自己的程序编译通过以后,你可以按如下方法测试这个程序。如果你只有一台机器,你可以利用一条RS-232电缆将COM1和COM2连接起来,在COM1上运行自己的串口读写程序,在COM2上运行第二章辅助工具中提到的串口调试工具。如果你有两台机器的话,你可以利用一条RS-232电缆将两台机器的COM1(或者是COM2)连接起来,在一端运行程序,另外一端运行串口调试工具。5. 示例代码6. 辅助工具6.1. 模拟串口 软件名称:Virtual Serial Port Driver 目 的:由于串口开发,需要硬件接口,以
14、及串口链接线。使用本软件可以在没有硬件串口接口和链接线的情况下,模拟出串口,并且可以让模拟出的两个串口互相导通。 下载地址: (14天免费试用)6.2. 串口调试工具 软件名称:Serister 目 的:测试的辅助工具,日文界面,可以接受RS232C传过来的数据,并且以多种形式表现出来,如以十六进制显示,以文本方式显示等。还可以编辑送信内容,进行送信等。 下载地址:http:/www.vector.co.jp/soft/win95/hardware/se423507.html (免费) 软件名称:SuperCommTool超级串口调试器 目 的:和上面的功能类似,这个是中文界面的。 下载地址: (免费) 软件名称:串口调试(AccessPort) 目 的:更强大的串口检测调试工具。 下载地址: (免费)