当前位置:文档之家› Java接收串口数据

Java接收串口数据

import java.io.*;
002
import java.util.*;
003
import https://www.doczj.com/doc/7410519320.html,m.*;
004

005
public class SerialBean implements Runnable,SerialPortEventListener
006
{
007
String PortName;
008
int baud;
009
CommPortIdentifier portId;
010
SerialPort serialPort;
011
static OutputStream out;
012
static InputStream in;
013
String Buf=null;// 缓存一条最新信息
014
boolean hasData=false;// 标志有无新数据
015
StringBuilder buf=new StringBuilder(128);
016
Thread readThread;
017

018
public SerialBean(int PortID,int baud)
019
{
020
PortName="COM"+PortID;
021
this.baud=baud;
022

023
}
024

025
public int Initialize()
026
{
027
int InitSuccess=1;
028
int InitFail=-1;
029
try
030
{
031
portId=CommPortIdentifier.getPortIdentifier(PortName);
032
try
033
{
034
serialPort=(SerialPort)portId.open("Serial_Communication",2000);
035
serialPort.setSerialPortParams(this.baud,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
036
serialPort.addEventListener(this);
037
serialPort.notifyOnDataAvailable(true);
038
}
039
catch(PortInUseException e)
040
{
041
return InitFail;
042
}
043
catch(TooManyListenersException e)
044
{
045
return InitFail;
046
}
047
catch(UnsupportedCommOperationException e)
048
{
049
return InitFail;
050
}
051
try
052
{
053
in=serialPort.getInputStream();
054
out=serialPort.getOutputStream();
055
}
056
catch(IOException e)
057
{
058
return InitFail;
059
}
060

061
}
062
catch(NoSuchPortException e)
063
{
064
return InitFail;
065
}
066
readThread=new Thread(this);
067
readThread.start();
068
return InitSuccess;
069
}
070

071
public boolean hasData()
072
{
073
return hasData;
074
}
075
public String ReadPort()
076
{
077
if(hasData)
078
{
079
this.hasData=false;
080
return this.Buf;
081
}
082
else
083
return null;
084
}
085

086
@SuppressWarnings("deprecation")
087
public void ClosePort()
088
{
089
if(readThread!=null )
090
readThread.stop();
091
if(serialPort!=null)
092
serialPort.close();
093
}
094
@Override
095
public void serialEvent(SerialPortEvent event)
096
{
097
/**
098
* 事件类型


099
*
100
* BI -通讯中断. CD -载波检测. CTS -清除发送. DATA_AVAILABLE -有数据到达.
101
* DSR-数据设备准备好. FE -帧错误. OE -溢位错误. OUTPUT_BUFFER_EMPTY
102
* -输出缓冲区已清空. PE -奇偶校验错. RI - 振铃指示.
103
*/
104
switch(event.getEventType())
105
{
106
case SerialPortEvent.BI:
107
case SerialPortEvent.OE:
108
case SerialPortEvent.FE:
109
case SerialPortEvent.PE:
110
case SerialPortEvent.CD:
111
case SerialPortEvent.CTS:
112
case SerialPortEvent.DSR:
113
case SerialPortEvent.RI:
114
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
115
break;
116
case SerialPortEvent.DATA_AVAILABLE:
117

118
try
119
{
120
char b;
121
while(in.available()>0)
122
{
123
b=(char)in.read();
124
buf.append(b);
125
}
126
int beg=0,end=0;
127
for(int i=0;;i++)
128
{
129
if(buf.length()<2)
130
{
131
return;
132
}
133
if(buf.charAt(0)=='\r'&&buf.charAt(1)=='\n')// 以回车换行开头
134
{
135
beg=2;
136
}
137
else
138
// 不以换行开头
139
{
140
beg=0;
141
}
142
end=buf.indexOf("\r\n",beg);
143
if(end==-1)// 未接受完一整条信息
144
break;
145
Buf=buf.substring(beg,end);// 截取数据
146
buf.delete(0,end+2);// 删除已用数据
147
System.out.printf("--%s--\n",Buf);
148
this.hasData=true;
149

150
}
151

152
// System.out.println(con);
153
}
154
catch(IOException e)
155
{
156
}
157
break;
158
}
159
}
160

161
public void run()
162
{
163
try
164
{
165
Thread.sleep(2000);
166
}
167
catch(InterruptedException e)
168
{
169
}
170
}
171
}

相关主题
文本预览
相关文档 最新文档