java的串口通讯_第1页
java的串口通讯_第2页
java的串口通讯_第3页
java的串口通讯_第4页
java的串口通讯_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于Java的串口通讯为了更好地查看本文档,请打开word的文档结构视图。修订控制页修订号修订日期修订内容简述修订人审阅人修订后版本号批准人12012-9-13新建曾行明1.0目录修订控制页3目录41. 概述52. 搭建环境52.1 开发环境52.2 扩展包安装52.3 accessPort 的使用52.4 使用串口调试工具查看端口通信73. 编写java串口操作类73.1 串口操作的封装类73.2 main程序134. 运行java程序测试串口通信134.1 打开端口13 4.2 开启java程序的数据监听.141. 概述使用java进行串口通讯。2. 搭建环境2.1 开发环境本次测试使用的环境:Win 7 旗舰版 64位Eclipse 3.7Java 1.6Comm2.0.jar(串口通信的扩展库)AccessPort 1.37串口调试工具(精装版V3.6)VSPD 工具 (创建虚拟串口用)注:1. 因为操作系统是64位的win7,accessport 使用的是 1.372. Comm包是一个扩展包,需要放置到jre的lib/ext 目录下3. 关于创建虚拟串口和串口调试工具的使用请参考:/view/0851b5c408a1284ac850438c.html2.2 扩展包安装扩展包安装如下:下载路径:/Jolt/javacomm20-win32.zip将下载的文件解压缩后,在/javacomm20-win32/commapi目录下有必需的三个文件comm.jar,m. properties和win32comm.dll。将文件comm.jar拷贝到%JAVA_HOME%/jre/lib/ext;文件m. properties拷贝到%JAVA_HOME%/jre/lib; 文件win32comm.dll拷贝到%JAVA_HOME%/bin。注意%JAVA_HOME%是jdk的路径,而非jre。2.3 accessPort 的使用打开软件,使用默认的配置就好了:A 选择端口B 开户端口监听C 停止监听最后点击 上面的蓝色 按钮使用端口。2.4 使用串口调试工具查看端口通信我们使用VSPD建立两个虚拟串口,这两个是数据连通的。这里我创建的是 COM2 、COM3在java程序中监听COM2,那么通过java程序发送的数据会发送到 COM3,从COM3中发送来的数据会被java程序监听到。所以这时我们只需要用“串口调试工具”连接到COM3就可以进行通信测试了。2.3 小节讲到的 AccessPort 工具可以不用,也可以进行测试。3. 编写java串口操作类3.1 串口操作的封装类package org.serial;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Enumeration;import java.util.TooManyListenersException;import m.CommPortIdentifier;import m.PortInUseException;import m.SerialPort;import m.SerialPortEvent;import m.SerialPortEventListener;/* * 项目名称 :illegalsms * 文件名称 :SerialPort.java * 所在包 :org.serial * 功能描述 : *串口类 * 创建者 :集成显卡1053214511 * 创建日期 :2012-9-13 * 修改记录 : */public class DSerialPort implements Runnable, SerialPortEventListener private String appName = 串口通讯测试集成显卡2012;private int timeout = 2000;/open 端口时的等待时间private int threadTime = 0;private CommPortIdentifier commPort;private SerialPort serialPort;private InputStream inputStream;private OutputStream outputStream;/* * 方法名称 :listPort * 功能描述 :列出所有可用的串口 * 返回值类型 :void */SuppressWarnings(rawtypes)public void listPort()CommPortIdentifier cpid;Enumeration en = CommPortIdentifier.getPortIdentifiers();System.out.println(now to list all Port of this PC: +en);while(en.hasMoreElements()cpid = (CommPortIdentifier)en.nextElement();if(cpid.getPortType() = CommPortIdentifier.PORT_SERIAL)System.out.println(cpid.getName() + , + cpid.getCurrentOwner();/* * 方法名称 :selectPort * 功能描述 :选择一个端口,比如:COM1 * 返回值类型 :void *param portName */SuppressWarnings(rawtypes)public void selectPort(String portName)mPort = null;CommPortIdentifier cpid;Enumeration en = CommPortIdentifier.getPortIdentifiers();while(en.hasMoreElements()cpid = (CommPortIdentifier)en.nextElement();if(cpid.getPortType() = CommPortIdentifier.PORT_SERIAL& cpid.getName().equals(portName)mPort = cpid;break;openPort();/* * 方法名称 :openPort * 功能描述 :打开SerialPort * 返回值类型 :void */private void openPort()if(commPort = null)log(String.format(无法找到名字为%1$s的串口!, commPort.getName();elselog(端口选择成功,当前端口:+commPort.getName()+,现在实例化 SerialPort:);tryserialPort = (SerialPort)commPort.open(appName, timeout);log(实例 SerialPort 成功!);catch(PortInUseException e)throw new RuntimeException(String.format(端口%1$s正在使用中!, commPort.getName();/* * 方法名称 :checkPort * 功能描述 :检查端口是否正确连接 * 返回值类型 :void */private void checkPort()if(commPort = null)throw new RuntimeException(没有选择端口,请使用 +selectPort(String portName) 方法选择端口);if(serialPort = null)throw new RuntimeException(SerialPort 对象无效!);/* * 方法名称 :write * 功能描述 :向端口发送数据,请在调用此方法前 先选择端口,并确定SerialPort正常打开! * 返回值类型 :void *param message */public void write(String message) checkPort();tryoutputStream = new BufferedOutputStream(serialPort.getOutputStream();catch(IOException e)throw new RuntimeException(获取端口的OutputStream出错:+e.getMessage();tryoutputStream.write(message.getBytes();log(信息发送成功!);catch(IOException e)throw new RuntimeException(向端口发送信息时出错:+e.getMessage();finallytryoutputStream.close();catch(Exception e)/* * 方法名称 :startRead * 功能描述 :开始监听从端口中接收的数据 * 返回值类型 :void *param time 监听程序的存活时间,单位为秒,0 则是一直监听 */public void startRead(int time)checkPort();tryinputStream = new BufferedInputStream(serialPort.getInputStream();catch(IOException e)throw new RuntimeException(获取端口的InputStream出错:+e.getMessage();tryserialPort.addEventListener(this);catch(TooManyListenersException e)throw new RuntimeException(e.getMessage();serialPort.notifyOnDataAvailable(true);log(String.format(开始监听来自%1$s的数据-, commPort.getName();if(time 0)this.threadTime = time*1000;Thread t = new Thread(this);t.start();log(String.format(监听程序将在%1$d秒后关闭。, threadTime);/* * 方法名称 :close * 功能描述 :关闭 SerialPort * 返回值类型 :void */public void close()serialPort.close();serialPort = null;commPort = null;public void log(String msg)System.out.println(appName+ - +msg);/* * 数据接收的监听处理函数 */Overridepublic void serialEvent(SerialPortEvent arg0) switch(arg0.getEventType()case SerialPortEvent.BI:/*Break interrupt,通讯中断*/ case SerialPortEvent.OE:/*Overrun error,溢位错误*/ case SerialPortEvent.FE:/*Framing error,传帧错误*/ case SerialPortEvent.PE:/*Parity error,校验错误*/ case SerialPortEvent.CD:/*Carrier detect,载波检测*/ case SerialPortEvent.CTS:/*Clear to send,清除发送*/ case SerialPortEvent.DSR:/*Data set ready,数据设备就绪*/ case SerialPortEvent.RI:/*Ring indicator,响铃指示*/ case SerialPortEvent.OUTPUT_BUFFER_EMPTY:/*Output buffer is empty,输出缓冲区清空*/ break; case SerialPortEvent.DATA_AVAILABLE:/*Data available at the serial port,端口有可用数据。读到缓冲数组,输出到终端*/ byte readBuffer = new byte1024; String readStr=; String s2 = ; try while (inputStream.available() 0) inputStream.read(readBuffer); readStr += new String(readBuffer).trim(); s2 = new String(readBuffer).trim(); log(接收到端口返回数据(长度为+readStr.length()+):+readStr); log(s2); catch (IOException e) Overridepublic void run() tryThread.sleep(threadTime);serialPort.c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论