Parametros de comunicacao serial

Amigos
Estou usando RXTX na leitura da porta serial (balança eletronica) e os dados lidos vem com muito “lixo”, não sei se é assim mesmo que tem que vir para depois eu ter que tratar estes dados, mas o fato é que pelo HyperTerminal, os dados vem bem legiveis, “limpos”, se os parametros estiverem corretos, se mudar os parametros só vem “lixo”. A partir disto fiz o teste de mudar os parametros no meu programa e para qualquer coisa que eu definir nestes parametros, os dados são lidos, mas vem com “lixo” do mesmo jeito, me levando a crer que estes parametros estao sendo ignorados.
Por isso eu acho que tem algo errado no programa e gostaria da ajuda do pessoal do forum para confirmar isto, antes de ter todo trabalho para “limpar” na mão os dados lidos da serial.
Segue o codigo abaixo.

public class SCom implements Runnable, SerialPortEventListener {
//propriedades
    private String Porta;
    public String dadosLidos;
    public String dadosLidosSel;
    public int nodeBytes;
    private int baudrate;
    private int timeout;
    private CommPortIdentifier cp;
    private SerialPort porta;
    private OutputStream saida;
    private InputStream entrada;
    private Thread threadLeitura;
    
    public String displayStatus;
    
    public String monitorStatus;
    
    public void setTextStatus(String monitorStatus){
        this.monitorStatus = monitorStatus;
    }
    
//indicadores
    private boolean IDPortaOK; //true porta EXISTE
    private boolean PortaOK;// true porta aberta
    private boolean Leitura;
    private boolean Escrita;
//construtor default paridade : par
//baudrate: 9600 bps stopbits: 2 COM 1
    
    
    public SCom() {
        Porta = "COM1";
        baudrate = 9600;
        timeout = 20000;
    };
//um Objeto ComObj � passado ao construtor
//com detalhes de qual porta abrir
//e informa��es sobre configura��es
    public SCom( String p , int b , int t ){
        this.Porta = p;
        this.baudrate = b;
        this.timeout = t;
    };
//habilita escrita de dados
    public void HabilitarEscrita(){
        Escrita = true;
        Leitura = false;
        displayStatus = "Habilitando Escrita";
        setTextStatus(displayStatus);
    }
//habilita leitura de dados
    public void HabilitarLeitura(){
        Escrita = false;
        Leitura = true;
        displayStatus = "Habilitando Leitura";
        setTextStatus(displayStatus);
    }
//Obt�m o ID da PORTA
    public void ObterIdDaPorta(){
        try {
            cp = CommPortIdentifier.getPortIdentifier(Porta);
            displayStatus = "Porta selecionada: " + Porta + " - " + cp;
            setTextStatus(displayStatus);
            if ( cp == null ) {
                JOptionPane.showMessageDialog(null,
                        "A " + Porta + " n�o existe. Abortando !",
                        "Erro!",
                        JOptionPane.ERROR_MESSAGE);
                System.out.println("A " + Porta + " nao existe!" );
                System.out.println("ERRO!Abortando..." );
                displayStatus = displayStatus + " " + "A " + Porta + " n�o existe. Abortando !";
                setTextStatus(displayStatus);
                IDPortaOK = false;
                System.exit(1);
            }
            IDPortaOK = true;
            displayStatus = displayStatus + " - Id Porta OK !";
            setTextStatus(displayStatus);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,
                    "Erro durante o procedimento. STATUS" + e,
                    "Erro!",
                    JOptionPane.ERROR_MESSAGE);
            System.out.println("Erro durante o procedimento. STATUS" + e );
            displayStatus = "Erro durante o procedimento. STATUS" + e ;
            setTextStatus(displayStatus);
            IDPortaOK = false;
            System.exit(1);
        }
    }
    
//Abre a comunica��o da porta
    public void AbrirPorta(){
        try {
            
            porta = (SerialPort)cp.open("SComm", timeout);
            
//configurar par�metros
            porta.setSerialPortParams(baudrate,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_2,
                    SerialPort.PARITY_EVEN);
            
            porta.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
            
            
            PortaOK = true;
            System.out.println("Porta aberta com sucesso!");
            displayStatus = "Porta aberta com sucesso!" + "\n Porta: " + porta;
            setTextStatus(displayStatus);

            
        } catch (Exception e) {
            PortaOK = false;
            JOptionPane.showMessageDialog(null,
                    "Erro ao abrir a porta! STATUS: " + e,
                    "Erro!",
                    JOptionPane.ERROR_MESSAGE);
            System.out.println("Erro ao abrir a porta! STATUS: " + e );
            displayStatus = "Erro ao abrir a porta! STATUS: " + e;
            setTextStatus(displayStatus);
            System.exit(1);
        }
    }
//fun��o que envie um bit para a porta serial
    public void EnviarUmaString(String msg){
        if (Escrita == true) {
            try {
                System.out.println("Teste envio, FLUXO OK!");
                displayStatus = "Teste envio, FLUXO OK!";
                setTextStatus(displayStatus);
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null,
                        "Erro. STATUS: " + e,
                        "Erro!",
                        JOptionPane.ERROR_MESSAGE);
                System.out.println("Erro.STATUS: " + e );
                displayStatus = "Erro.STATUS: " + e ;
                setTextStatus(displayStatus);
            }
            try {
                System.out.println("Enviando um byte para " + Porta );
                System.out.println("Enviando : " + msg );
                displayStatus = "Enviando um byte para " + Porta + "Enviando : " + msg ;
                setTextStatus(displayStatus);
                saida.write(msg.getBytes());
                Thread.sleep(100);
                saida.flush();
            } catch (Exception e) {
                System.out.println("Houve um erro durante o envio. ");
                System.out.println("STATUS: " + e );
                displayStatus = "Houve um erro durante o envio. " + "STATUS: " + e ;
                setTextStatus(displayStatus);
                System.exit(1);
            }
        } else {
            System.exit(1);
        }
    }
//leitura de dados na serial
    public void LerDados(){
        displayStatus = "";
        if (Escrita == false){
            try {
                entrada = porta.getInputStream();
                System.out.println("Leitura FLUXO OK!");
                displayStatus = displayStatus + "Leitura FLUXO OK!" ;
                setTextStatus(displayStatus);
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null,
                        "Erro de fluxo! STATUS: " + e,
                        "Erro!",
                        JOptionPane.ERROR_MESSAGE);
                System.out.println("Erro.STATUS: " + e );
                displayStatus =  displayStatus + "Erro.STATUS: " + e  ;
                setTextStatus(displayStatus);
                System.exit(1);
            }
            try {
                porta.addEventListener(this);
                System.out.println("SUCESSO. Porta aguardando...");
                displayStatus = displayStatus + " SUCESSO. Porta aguardando...";
                setTextStatus(displayStatus);
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null,
                        "Erro ao criar listener! STATUS: " + e,
                        "Erro!",
                        JOptionPane.ERROR_MESSAGE);
                System.out.println("Erro ao criar listener: ");
                System.out.println("STATUS: " + e);
                displayStatus = "Erro ao criar listener: " + "STATUS: " + e;
                setTextStatus(displayStatus);
                System.exit(1);
            }
            porta.notifyOnDataAvailable(true);
            try {
                threadLeitura = new Thread(this);
                displayStatus = displayStatus + " Iniciando Leitura ..." ;
                setTextStatus(displayStatus + "\n");
                threadLeitura.start();
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null,
                        "Erro ao iniciar leitura! STATUS: " + e,
                        "Erro!",
                        JOptionPane.ERROR_MESSAGE);
                System.out.println("Erro ao iniciar leitura: " + e );
                displayStatus = "Erro ao iniciar leitura: " + e ;
                setTextStatus(displayStatus);
            }
        }
    }
//m�todo RUN da thread de leitura
    public void run(){
        try {
            Thread.sleep(5000);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,
                    "Erro! STATUS: " + e,
                    "Erro!",
                    JOptionPane.ERROR_MESSAGE);
            System.out.println("Erro. Status = " + e );
            setTextStatus("Erro. Status = " + e );
        }
    }
    
//gerenciador de eventos de leitura na serial
    public void serialEvent(SerialPortEvent ev){
        displayStatus = displayStatus + "\n Inicio SerialEvent" + "\n";
        try {
            File file = new File("etiqueta.txt");
            FileWriter writer = new FileWriter(new File("etiqueta.txt"));
            PrintWriter saidatxt = new PrintWriter(writer, true);
            switch (ev.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:
                    String dadosLidosSel = new String();
                    byte[] bufferLeitura = new byte[16];
                    try {
                        while ( entrada.available() > 0 ) {
                            nodeBytes = entrada.read(bufferLeitura);
                        }
                        String dadosLidos = new String(bufferLeitura);
                        if (bufferLeitura.length == 0) {
                            System.out.println("Nada lido. Verifique a balança!");
                        } else if (bufferLeitura.length == 1 ){
                            System.out.println("Apenas um byte foi lido. Verifique a balança!");
                        } else {
                            
                            //Imprime todos os dados lidos.
                            if (bufferLeitura == null) {
                                System.out.println("(null)");
                            } else {
                                displayStatus = displayStatus + " bufferLeitura: " + Integer.toString(bufferLeitura.length) + "\n";
                                for (int i = 0; i < bufferLeitura.length; ++i) {
                                    if (i % 16 == 0){
                                        //System.out.print (Integer.toHexString ((i & 0xFFFF) | 0x10000).substring(1,5) + " - ");
                                    }
                                    System.out.print(Integer.toHexString((bufferLeitura[i]&0xFF) | 0x100).substring(1,3) + " ");
                                    if (i % 16 == 15 || i == bufferLeitura.length - 1){
                                        int j;
                                        for (j = 16 - i % 16; j > 1; --j)
                                            System.out.print("   ");
                                        System.out.print(" - ");
                                        int start = (i / 16) * 16;
                                        int end = (bufferLeitura.length < i + 1) ? bufferLeitura.length : (i + 1);
                                        for (j = start; j < end; ++j)
                                            //if (bufferLeitura[j] >= 32 && bufferLeitura[j] <= 126){
                                            if (bufferLeitura[j] >= 47 && bufferLeitura[j] <= 58){
                                            System.out.print((char)bufferLeitura[j]);
                                            } else{
                                            System.out.print(".");
                                            }
                                        System.out.println();
                                    }
                                }
                                System.out.println();
                            }
                            
                            saidatxt.println(dadosLidos);
                        }
                    } catch (Exception e) {
                        JOptionPane.showMessageDialog(null,
                                "Erro durante leitura! STATUS: " + e,
                                "Erro!",
                                JOptionPane.ERROR_MESSAGE);
                        System.out.println("Erro durante a leitura: " + e );
                    }
                    System.out.println(" n.o de bytes lidos : " + nodeBytes );
                    break;
                    
            }
            saidatxt.close();
            
            writer.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    
//fun��o que fecha a conex�o
    public void FecharCom(){
        try {
            porta.close();
            System.out.println("CONEXAO FECHADA>>FIM..");
            displayStatus = "CONEXAO FECHADA>>FIM.." ;
            setTextStatus(displayStatus);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,
                    "Erro ao fehcar comunica��o! STATUS: " + e,
                    "Erro!",
                    JOptionPane.ERROR_MESSAGE);
            System.out.println("ERRO AO FECHAR. STATUS: " + e );
            displayStatus = "ERRO AO FECHAR. STATUS: " + e  ;
            setTextStatus(displayStatus);
            System.exit(0);
        }
    }
}

No entando o comando abaixo me mostra que os valores foram setados… aumentando mais ainda minhas duvidas.

            setTextStatus(displayStatus + "\n BaudRate: " + porta.getBaudRate() + "\n DataBits: " + porta.getDataBits() + "\n StopBits: " + porta.getStopBits() + "\n Parity: " + porta.getParity() + "\n FlowControlMode: " + porta.getFlowControlMode()  + "\n ");

Obrigado a todos

Senhores
Acabei de descobrir com o fornecedor, que o problema é um bug no envio da propria balança.
Obrigado pela atenção