读书人

串口有关问题

发布时间: 2012-04-07 17:31:51 作者: rapoo

串口问题
做串口发送和接受数据是遇到了问题,希望各位前辈帮忙
代码片断
public void serialEvent(SerialPortEvent event)//实现串口监听中的方法
{
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:
byte[] readBuffer=new byte[1];
System.out.println( "为什么只执行一遍? ");
try
{
while(inputStream.available()!=-1)
{
int numBytes=inputStream.read(readBuffer);
area.append(new String(readBuffer));
}
System.out.println( "为什么不执行这一句呢? ");
}
catch(Exception e){}


break;
}
}


[解决办法]
byte[] readBuffer=new byte[1];//读串口数据,每次读的数据大小
while(inputStream.available()!=-1)//开始不停的接受设备上发过来的数据

[解决办法]
一直在while循环里面呢 因为一直有数据过来
[解决办法]
看看我的,这个串口接收以TAB开头,ENTER结尾的字符,由于buffer小了接收不完,所以buffer要大,但又会加入空的东西,也就是加上ascii为0的东西,所以要去掉这些东西,你看看改一下下面的
public void readData()
{
readBuffer = new byte[50];
try
{
while (in.available() > 0)
{
in.read(readBuffer); }
if (!enter)
{
deleteControlChar(readBuffer);
enter = false;
}
}
catch (IOException e)
{
e.printStackTrace();
}
}

/**
* @param readBuffer
* @return void
*/
private void deleteControlChar(byte[] readBuffer)
{
String buff = new String(readBuffer);
//boolean tab = false;
Calendar cal = Calendar.getInstance();
String time = cal.get(Calendar.HOUR_OF_DAY) + ": "
+ cal.get(Calendar.MINUTE) + ": " + cal.get(Calendar.SECOND);

for (int i = 0; i < buff.length(); i++)
{
/*System.out.println( "letter: " + buff.charAt(i) + " -> "
+ (int) buff.charAt(i));
System.out.print( "tab: ");
System.out.println(tab == true);
System.out.print( "enter: ");
System.out.println(enter == true);*/
if ((int) buff.charAt(i) == 9 && !enter)
{
tab = true;
}

if (tab && (int) buff.charAt(i) != 0 && (int) buff.charAt(i) != 9)
{
if ((int) buff.charAt(i) == 13)
{
tab = false;
enter = true;
rev = strBuff.toString();
String revCS = owner.getCheckSum(rev.substring(0, rev
.length() - 1));
if (!rev.equals( "000X123456789 "))
{
if (revCS.equals(rev))
{
received++;
//System.out.println( "received= " + received);
System.out.println(time + " received: " + rev);

setReceived();
checkType(rev);
}
else
{
System.out.println(time + " received: " + rev);
System.out.println( "but received should be: "
+ revCS);
//send also
/*received++;
setReceived();
checkType(rev);*/
}
}


else
{
System.out.println(time + " received: " + rev);
}

strBuff.delete(0, strBuff.length());
break;
}
strBuff.append(buff.charAt(i));
}
}
}

读书人网 >J2SE开发

热点推荐