Problemas na leitura de uma string

3 respostas
D

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: [telefone removido]…

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.

3 Respostas

F

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é +

D
Aí está o código:
import java.io.*;
import java.util.*;
import javax.comm.*;
import javax.xml.rpc.ServiceException;
import fardocompra.WSFardoCompra;
import fardocompra.WSFardoCompraService;
import fardocompra.WSFardoCompraServiceLocator;

/**
 * Declaração da Classe
 * 
 */
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;
        }
    } 
}
Agradeço se alguém puder me dar uma força.
D

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.

Criado 19 de dezembro de 2004
Ultima resposta 3 de jan. de 2005
Respostas 3
Participantes 2