rxtx for java_RXTX串口通信 java
import gnu.io.*;import java.io.*;import java.util.*;
@SuppressWarnings("rawtypes")public class SerialReader extends Observable implementsRunnable,SerialPortEventListener{staticCommPortIdentifier portId;int delayRead = 100;int numBytes; //buffer中的实际数据字节数
private static byte[] readBuffer = new byte[1024]; //缓存串口读入的数据
staticEnumeration portList;
InputStream inputStream;
OutputStream outputStream;staticSerialPort serialPort;
HashMap serialParams;
Thread readThread;//端口是否打开了
boolean isOpen = false;//端口读入数据事件触发后,等待n毫秒后再读取,以便让数据一次性读完
public static final String PARAMS_DELAY = "delay read"; //延时等待端口数据准备的时间
public static final String PARAMS_TIMEOUT = "timeout"; //超时时间
public static final String PARAMS_PORT = "port name"; //端口名称
public static final String PARAMS_DATABITS = "data bits"; //数据位
public static final String PARAMS_STOPBITS = "stop bits"; //停止位
public static final String PARAMS_PARITY = "parity"; //奇偶校验
public static final String PARAMS_RATE = "rate"; //波特率
public booleanisOpen(){returnisOpen;
}/*** 初始化端口操作的参数.
*@throwsSerialPortException
*
*@see
*/
publicSerialReader(){
isOpen= false;
}public voidopen(HashMap params){
serialParams=params;if(isOpen){
close();
}try{//参数初始化
int timeout =Integer.parseInt( serialParams.get( PARAMS_TIMEOUT )
.toString() );int rate =Integer.parseInt( serialParams.get( PARAMS_RATE )
.toString() );int dataBits =Integer.parseInt( serialParams.get( PARAMS_DATABITS )
.toString() );int stopBits =Integer.parseInt( serialParams.get( PARAMS_STOPBITS )
.toString() );int parity =Integer.parseInt( serialParams.get( PARAMS_PARITY )
.toString() );
delayRead=Integer.parseInt( serialParams.get( PARAMS_DELAY )
.toString() );
String port=serialParams.get( PARAMS_PORT ).toString();//打开端口
portId =CommPortIdentifier.getPortIdentifier( port );
serialPort= ( SerialPort ) portId.open( "SerialReader", timeout );
inputStream=serialPort.getInputStream();
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
serialPort.setSerialPortParams( rate, dataBits, stopBits, parity );
isOpen= true;
}catch( PortInUseException e ){System.out.println("端口"+serialParams.get( PARAMS_PORT ).toString()+"已经被占用"+e);
}catch( TooManyListenersException e ){System.out.println("端口"+serialParams.get( PARAMS_PORT ).toString()+"监听者过多"+e);
}catch( UnsupportedCommOperationException e ){System.out.println("端口操作命令不支持"+e);
}catch( NoSuchPortException e ){System.out.println("端口"+serialParams.get( PARAMS_PORT ).toString()+"不存在"+e);
}catch( IOException e ){System.out.println("打开端口"+serialParams.get( PARAMS_PORT ).toString()+"失败"+e);
}
serialParams.clear();
Thread readThread= new Thread( this);
readThread.start();
}public voidrun(){try{
Thread.sleep(50);
}catch( InterruptedException e ){
e.printStackTrace();
}
}public voidstart(){try{
outputStream=serialPort.getOutputStream();
}catch(IOException e) {
e.printStackTrace();
}try{
readThread= new Thread(this);
readThread.start();
}catch(Exception e) {
e.printStackTrace();
}
}//start() end
public voidrun(String message) {try{
Thread.sleep(4);
}catch(InterruptedException e) {
e.printStackTrace();
}try{if(message!=null&&message.length()!=0)
{
System.out.println("发送数据:"+message);
outputStream.write(message.getBytes());//往串口发送数据,是双向通讯的。
}
}catch(IOException e) {
e.printStackTrace();
}
}public voidclose(){if(isOpen){try{
serialPort.notifyOnDataAvailable(false);
serialPort.removeEventListener();
inputStream.close();
serialPort.close();
isOpen= false;
}catch(IOException ex){
ex.printStackTrace();
System.out.println("关闭串口失败");
}
}
}public voidserialEvent( SerialPortEvent event ){try{
Thread.sleep( delayRead );
}catch( InterruptedException e ){
e.printStackTrace();
}switch( event.getEventType() ){case SerialPortEvent.BI: //10
case SerialPortEvent.OE: //7
case SerialPortEvent.FE: //9
case SerialPortEvent.PE: //8
case SerialPortEvent.CD: //6
case SerialPortEvent.CTS: //3
case SerialPortEvent.DSR: //4
case SerialPortEvent.RI: //5
case SerialPortEvent.OUTPUT_BUFFER_EMPTY: //2
break;case SerialPortEvent.DATA_AVAILABLE: //1
try{//多次读取,将所有数据读入
while (inputStream.available() > 0) {
numBytes=inputStream.read(readBuffer);
}//打印接收到的字节数据的ASCII码
for(int i=0;i
}//numBytes = inputStream.read( readBuffer );
changeMessage( readBuffer, numBytes );
}catch( IOException e ){
e.printStackTrace();
}break;
}
}//通过observer pattern将收到的数据发送给observer//将buffer中的空字节删除后再发送更新消息,通知观察者
public void changeMessage( byte[] message, intlength ){
setChanged();byte[] temp = new byte[length];
System.arraycopy( message,0, temp, 0, length );
notifyObservers( temp );
}public voidopenSerialPort(String message){
HashMap params = new HashMap();
String port="COM1";
String rate= "9600";
String dataBit= ""+SerialPort.DATABITS_8;
String stopBit= ""+SerialPort.STOPBITS_1;int parityInt =SerialPort.PARITY_NONE;
params.put( SerialReader.PARAMS_PORT, port );//端口名称
params.put( SerialReader.PARAMS_RATE, rate ); //波特率
params.put( SerialReader.PARAMS_DATABITS,dataBit ); //数据位
params.put( SerialReader.PARAMS_STOPBITS, stopBit ); //停止位
params.put( SerialReader.PARAMS_PARITY, parityInt ); //无奇偶校验
params.put( SerialReader.PARAMS_TIMEOUT, 100 ); //设备超时时间 1秒
params.put( SerialReader.PARAMS_DELAY, 100 ); //端口数据准备时间 1秒
try{
open(params);//打开串口//LoginFrame cf=new LoginFrame();//addObserver(cf);//也可以像上面一个通过LoginFrame来绑定串口的通讯输出.
if(message!=null&&message.length()!=0)
{
String str="";for(int i=0;i<10;i++)
{
str+=message;
}
start();
run(str);
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
rxtx for java_RXTX串口通信 java相关推荐
- 使用RXTX实现简单串口通信调试工具
最终效果如下图: 1.把rxtxParallel.dll.rxtxSerial.dll拷贝到:C:\WINDOWS\system32下. 2.RXTXcomm.jar 添加到项目类库中. packag ...
- java 串口波特率_JAVA串口通信的方法
以前经常用C语言操作串口,实现一些发送接收之类的小功能,最近项目中也用到了串口通信,不过语言变成了Java,这个搞起来略蛋疼. Java说起来就是各种库各种引用,所以得到某些需求先google搜一把~ ...
- java linux 串口_Linux Java 串口通信 | 学步园
费了好大的劲搞定Linux系统上用Java写串口通信的问题. jdk中没有原生的串口api,网上找了半天的资料,大概知道了:Linux系统上用Java写串口程序,有两个包比较常用,一个是当年sun官方 ...
- java comm api_java基于RXTXcomm.jar的串口通信
java基于RXTXcomm.jar的串口通信 RXTX的下载及配置 首先确定你安装的JDK的位数,安装相应位数的jar包. 将rxtxSerial.dll.rxtxParallel.dll复制到\j ...
- java comm jar_java基于RXTXcomm.jar的串口通信
java基于RXTXcomm.jar的串口通信 RXTX的下载及配置 mfz-rxtx-2.2-20081207-win-x64 下载地址:http://download.csdn.net/downl ...
- Java 如何串口通信以及常见报错解决
文章目录 一.Java 串口通信部署 准备 部署 1. 配置 Java 环境 2. 新建项目,引入依赖. 3. 代码(网上荡的) 运行 二.Java 串口通信报错 1. JDK 有关错误 2. dll ...
- JAVA与下位机传感器进行DTU串口通信并将数据插入数据库
最近在做一个物联网项目,需求是将传感器数据在无网络的环境下收集到服务器.思前想后,决定走DTU通信. 前提: 1.DTU相关配置请自行百度,本项目使用的是原子云4G DTU,需要准备4G物联网卡. 相 ...
- Java通过串口通信实现温度监测
开发环境 JDK1.8 + Rxtx2.1.7 + Eclipse 一: 首先,你需要下载一个额外的支持Java串口通信操作的jar包,由于java.comm比较老了,而且不支持64位系统,这里推荐 ...
- 基于java的串口通信
文章目录 前言 一.RXTX是什么? 二.环境搭建 引入库 三.代码实现 SerialPortManager类 Tools类 重要代码解析 读取数据 写数据 写EPC号 询查单张标签 CRC校验 测试 ...
- java基于RXTXcomm.jar的串口通信
java基于RXTXcomm.jar的串口通信 RXTX的下载及配置 mfz-rxtx-2.2-20081207-win-x64 下载地址:http://download.csdn.net ...
最新文章
- 五 Django 1.5.4 User Authentication 用户认证
- c语言实践 1/1+1/2+1/3+1/4+...+1/n
- Android相机的实现
- 前端学习(2122):项目演示
- ListView和SlidingDrawer
- Cannot find class [xxx] for bean with name ‘‘ defined in class
- matlab2c使用c++实现matlab函数系列教程- polyval函数
- RxJava -- 从 create 开始 (一)
- (1)、win10 本地 安装 rabbitmq
- javascript如何设置名字输入不合法
- 张尧学等人获奖,理由不充分
- 一名2012计算机应届毕业生的求职之路
- 计算分辨率长宽比(等比例缩放)
- kotlin读取文件算法
- linux服务器网络不稳定,Linux服务器故障排查指南7:网络缓慢状况
- FileZilla FTP服务器源代码分析
- 将自己写的网站发布到外网sunny-ngrok
- DBLINK使用的思考
- 如何关闭windows10易升更新程程序
- ThreeJs 打包完成贴图贴图消失问题
热门文章
- 差分编码 matlab,差分编码FSK调制解调matlab源程序.doc
- DEDECMS5.7自动采集更新伪原创插件高级版GBK
- “双态IT”成就业务“互联网+”转型
- VS2015编译eXosip2-4.1.0 osip2-4.1.0
- opencms学习笔记
- 墨卡托与经纬度转换工具
- 网易im 服务器消息格式,网易云信快速集成以及消息类型自定义
- centos安装office及PDF阅读器
- 如何集中远程管理各种USB设备,还不了解一下?
- ASP.NET程序设计_新闻发布系统