赞
踩
packagecom.gpdi.sericlport;import gnu.io.*;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.sql.PreparedStatement;importjava.sql.Connection;importjava.sql.SQLException;importjava.sql.Timestamp;importjava.text.SimpleDateFormat;import java.util.*;importjava.util.concurrent.BlockingQueue;importjava.util.concurrent.LinkedBlockingQueue;import com.gpdi.utils.*;public class ContinueRead extends Thread implements SerialPortEventListener { //SerialPortEventListener//监听器,我的理解是独立开辟一个线程监听串口数据//串口通信管理类
staticCommPortIdentifier portId;/*有效连接上的端口的枚举*/
static Enumeration>portList;
InputStream inputStream;//从串口来的输入流
static OutputStream outputStream;//向串口输出的流
static SerialPort serialPort; //串口的引用//堵塞队列用来存放读到的数据
private BlockingQueue msgQueue = new LinkedBlockingQueue();
@Override/*** SerialPort EventListene 的方法,持续监听端口上是否有数据流*/
public void serialEvent(SerialPortEvent event) {//
switch(event.getEventType()) {caseSerialPortEvent.BI:caseSerialPortEvent.OE:caseSerialPortEvent.FE:caseSerialPortEvent.PE:caseSerialPortEvent.CD:caseSerialPortEvent.CTS:caseSerialPortEvent.DSR:caseSerialPortEvent.RI:caseSerialPortEvent.OUTPUT_BUFFER_EMPTY:break;case SerialPortEvent.DATA_AVAILABLE://当有可用数据时读取数据
byte[] readBuffer = null;int availableBytes = 0;try{
availableBytes=inputStream.available();while (availableBytes > 0) {
readBuffer=ContinueRead.readFromPort(serialPort);
String needData=printHexString(readBuffer);
System.out.println(new Date() + "真实收到的数据为:-----" +needData);
availableBytes=inputStream.available();
msgQueue.add(needData);
}
}catch(IOException e) {
}default:break;
}
}/*** 从串口读取数据
*
*@paramserialPort 当前已建立连接的SerialPort对象
*@return读取到的数据*/
public static byte[] readFromPort(SerialPort serialPort) {
InputStream in= null;byte[] bytes ={};try{
in=serialPort.getInputStream();//缓冲区大小为一个字节
byte[] readBuffer = new byte[1];int bytesNum =in.read(readBuffer);w
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。