(通信企业管理)J串口通信编程指导

上传人:管****问 文档编号:128091617 上传时间:2020-04-08 格式:DOC 页数:8 大小:101.07KB
返回 下载 相关 举报
(通信企业管理)J串口通信编程指导_第1页
第1页 / 共8页
(通信企业管理)J串口通信编程指导_第2页
第2页 / 共8页
(通信企业管理)J串口通信编程指导_第3页
第3页 / 共8页
(通信企业管理)J串口通信编程指导_第4页
第4页 / 共8页
(通信企业管理)J串口通信编程指导_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《(通信企业管理)J串口通信编程指导》由会员分享,可在线阅读,更多相关《(通信企业管理)J串口通信编程指导(8页珍藏版)》请在金锄头文库上搜索。

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网站选择其他版本下载。地址如下:http:/ 配置 解压缩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. 获得串口标识指定串口的端口号,生成串口的标识类的实例

3、。m.CommPortIdentifier是通讯端口管理器,控制访问到通讯端口的中心类。 一个应用程序首先使用CommPortIdentifier中的方法,通过相关的驱动去获取那些通讯端口是可用的 并且选择一个端口便于开始。它包括如下功能: a. 通过驱动决定通讯端口是可用的。 b. 打开通讯端口为了I/O操作。 c. 决定端口的拥有者。 d. 解析端口拥有者的争夺。 e. 管理事件显示在端口拥有者的中的状态改变。示例代码如下:代码:CommPortIdentifier portID = null;try/ CommPortIdentifier 取得portID = CommPortIdent

4、ifier.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()以及getOutputStre

6、am()从每个串口产生对应的输入输出流对象。示例代码如下:代码:/受信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(); c

7、atch (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接口。 为Seri

8、alPort添加监听Listener。 实现该接口的serialEvent (SerialPortEvent event)方法。 通过BufferedReader的read()方法逐byte读取。当然也可以用readLine()方法进行逐行读取。示例代码如下:代码:public class SerialPortTerminal extends SerialPortHandlerimplements SerialPortEventListener /受信 protected BufferedReader comReader; /送信 protected BufferedOutputStream

9、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

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.getEventT

11、ype() 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 (

12、newData = -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); break;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号