Pessoal estou tendo dificuldades em ler uma string a qual estou recebendo via porta serial (COM). Estou fazendo a leitura nesta COM a qual está conectada a uma balança da Toledo. Esta balança quando verificado através do hyperterminal retorna a seguinte string .0+(00180000000000, onde os primeiros quatro caracteres indicam que o peso está estabilizado e a partir do sétimo caracter até o décimo indica o peso da balança. No caso do exemplo eu teria como resultado 180.0 Kg. Acontece que ao rodar o programa que tenho para leitura na porta serial, além de dividir a string, me é retornado na tela do eclipse o seguinte resultado:
String: .+0(…
String: 0018…
String: 0000000000…
O programa que tenho para fazer a leitura na porta serial é o SimpleRead da página da Sun o qual adaptei, mas a leitura na porta é feita em bytes, os quais transformo em String. Tentei fazer um replaceAll, mas ao colocar o caracter a ser substituído verifiquei que o . que aparece na tela do eclipse, onde dei um System.out.println na verdade não é um ponto e ao colarmos o mesmo no local de substituiçao ele não é reconhecido como caracter. Ao copiar a string que está sendo impressa no eclipse o resultado é o seguinte:
String: +0(
Note que o restante da string não aparece devido aos caracteres estranhos
Agradeço se alguém puder dar uma dica e indicar se existe algum
outro tipo de declaração de variável que eu possa utilizar ao invés de
byte para capturar esta string direto na porta serial.
Posta a parte do cídog que recebe a String e a parte que imprime na tela.
Aí fica mais fácil da gente saber onde está o erro.
té +
Aí está o código:
[code]import java.io.;
import java.util.;
import javax.comm.*;
import javax.xml.rpc.ServiceException;
import fardocompra.WSFardoCompra;
import fardocompra.WSFardoCompraService;
import fardocompra.WSFardoCompraServiceLocator;
/**
*/
public class Balanca_Jagxtreme implements Runnable, SerialPortEventListener
{
static CommPortIdentifier portId;
static Enumeration portList;
InputStream inputStream;
SerialPort serialPort;
Thread readThread;
/**
* Declaração do Método args
*
*/
public static void main(String[] args)
{
boolean portFound = false;
String defaultPort = "COM2";
if (args.length > 0)
{
defaultPort = args[0];
}
portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements())
{
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)
{
if (portId.getName().equals(defaultPort))
{
System.out.println("Found port: "+defaultPort);
portFound = true;
Balanca_Jagxtreme reader = new Balanca_Jagxtreme();
}
}
}
if (!portFound)
{
System.out.println("port " + defaultPort + " not found.");
}
}
/**
* Declaração do Construtor
*
*/
public Balanca_Jagxtreme()
{
try {
serialPort = (SerialPort) portId.open("JagxtremeApp", 2000);
} catch (PortInUseException e) {}
try {
inputStream = serialPort.getInputStream();
} catch (IOException e) {}
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {}
serialPort.notifyOnDataAvailable(true);
try {
serialPort.setSerialPortParams(4800, SerialPort.DATABITS_7,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException e) {}
readThread = new Thread(this);
readThread.start();
}
/**
* Declaração do Método
*
*/
public void run()
{
try {
Thread.sleep(20000);
} catch (InterruptedException e) {}
}
/**
* Declaração do Método event
*
*/
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[20];
try {
while (inputStream.available() > 0)
{
int numBytes = inputStream.read(readBuffer);
}
String teste = new String(readBuffer);
System.out.println("String teste:" + teste);
String segunda = teste.substring(0,4);
System.out.println("String segunda:" + segunda);
char[] ch1 = segunda.toCharArray();
if (ch1[0]=='.' && ch1[1]== '+' && ch1[2] == '0' && ch1[3] == '(')
{
System.out.println("Segundo Teste:" + teste);
String peso = teste.substring(6,10);
double peso1 = Double.parseDouble(peso);
peso1 = (peso1) / 10;
System.out.println("Peso:" + peso1);
int empresa = 1,filial = 1,porta = 1;
WSFardoCompraService webservice = new WSFardoCompraServiceLocator();
WSFardoCompra fardoCompra = webservice.getFardoCompra();
fardoCompra.salvarPeso(empresa,filial,porta,peso1);
}
} catch (IOException e) {} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
}
[/code]Agradeço se alguém puder me dar uma força.
Pessoal, ainda estou tentando solucionar este problema de quebra da string na leitura da mesma, se alguém tiver uma dica será bem vinda, pois estou meio perdido e sem idéia de como resolver este problema.