关于java串口读取数据的编码!

Johnltq 2011-07-04 10:09:05
该如何去读取串口数据,最好能有编码和说明!菜鸟在做一个java串口调试小工具,希望能得到高手的指点。
...全文
228 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
import java.io.*;
import java.util.*;
import javax.comm.*;

public class SerialBean implements Runnable,SerialPortEventListener
{
String PortName;
int baud;
CommPortIdentifier portId;
SerialPort serialPort;
static OutputStream out;
static InputStream in;
String Buf=null;// 缓存一条最新信息
boolean hasData=false;// 标志有无新数据
StringBuilder buf=new StringBuilder(128);
Thread readThread;

public SerialBean(int PortID,int baud)
{
PortName="COM"+PortID;
this.baud=baud;

}

public int Initialize()
{
int InitSuccess=1;
int InitFail=-1;
try
{
portId=CommPortIdentifier.getPortIdentifier(PortName);
try
{
serialPort=(SerialPort)portId.open("Serial_Communication",2000);
serialPort.setSerialPortParams(this.baud,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
}
catch(PortInUseException e)
{
return InitFail;
}
catch(TooManyListenersException e)
{
return InitFail;
}
catch(UnsupportedCommOperationException e)
{
return InitFail;
}
try
{
in=serialPort.getInputStream();
out=serialPort.getOutputStream();
}
catch(IOException e)
{
return InitFail;
}

}
catch(NoSuchPortException e)
{
return InitFail;
}
readThread=new Thread(this);
readThread.start();
return InitSuccess;
}

public boolean hasData()
{
return hasData;
}
public String ReadPort()
{
if(hasData)
{
this.hasData=false;
return this.Buf;
}
else
return null;
}

@SuppressWarnings("deprecation")
public void ClosePort()
{
if(readThread!=null )
readThread.stop();
if(serialPort!=null)
serialPort.close();
}
@Override
public void serialEvent(SerialPortEvent event)
{
/**
* 事件类型:
*
* BI -通讯中断.    CD -载波检测.    CTS -清除发送.    DATA_AVAILABLE -有数据到达.   
* DSR-数据设备准备好.    FE -帧错误.    OE -溢位错误.    OUTPUT_BUFFER_EMPTY
* -输出缓冲区已清空.    PE -奇偶校验错. RI - 振铃指示.
*/
switch(event.getEventType())
{
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:

try
{
char b;
while(in.available()>0)
{
b=(char)in.read();
buf.append(b);
}
int beg=0,end=0;
for(int i=0;;i++)
{
if(buf.length()<2)
{
return;
}
if(buf.charAt(0)=='\r'&&buf.charAt(1)=='\n')// 以回车换行开头
{
beg=2;
}
else
// 不以换行开头
{
beg=0;
}
end=buf.indexOf("\r\n",beg);
if(end==-1)// 未接受完一整条信息
break;
Buf=buf.substring(beg,end);// 截取数据
buf.delete(0,end+2);// 删除已用数据
System.out.printf("--%s--\n",Buf);
this.hasData=true;

}

// System.out.println(con);
}
catch(IOException e)
{
}
break;
}
}

public void run()
{
try
{
Thread.sleep(2000);
}
catch(InterruptedException e)
{
}
}
}
桃园闲人 2011-07-04
  • 打赏
  • 举报
回复
串口??
是串型化接口吗?
Fly_m 2011-07-04
  • 打赏
  • 举报
回复
使用rxtx包做串口开发,比官方的要好一些。
约翰羊 2011-07-04
  • 打赏
  • 举报
回复
楼上的需要一个包
http://www.oracle.com/technetwork/java/index-jsp-141752.html

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧