Chamar evento SerialEvent RXTX

0 respostas
F

Pessoal, estou com uma dúvida besta. Ja procurei aqui no forum mas não encontrei o que queria. Preciso capturar o peso de uma balança e mostrar em uma janela JAVA. Usei o exemplo postado no DEVMEDIA [url]www.devmedia.com.br/utilizando-a-api-rxtx-para-manipulacao-da-serial-parte-iii/7171[/url].

A balança é uma FILIZOLA BPS-15. Já baixei as dlls no site da filezona e testei a configuração da balança nas ferramentas de teste que vem junto.

Minha dúvida é: Como eu faço para chamar o evento serialEvent ? Eu sei que nesse método o mais importante é o DATA_AVAILABLE, que é gerado quando um evento passa pela porta.

Mas eu nao sei como chamar esse evento. Os outros métodos eu consigo chamar beleza e eles mostram a porta onde a balança esta instalada e se esta disponivel. Só nao sei capturar o peso de algum produto.

Se alguém puder ajudar, agradeço desde já!

Seguem os fontes:
package balanca;

import gnu.io.CommPortIdentifier;
import java.util.Enumeration;

public class SerialCom {

    protected String[] portas;
    protected Enumeration listaDePortas;

    public SerialCom() {
        listaDePortas = CommPortIdentifier.getPortIdentifiers();
    }

    public String[] ObterPortas() {
        return portas;
    }

    public void ListarPortas() {
        int i = 0;
        portas = new String[10];
        while (listaDePortas.hasMoreElements()) {
        CommPortIdentifier ips = (CommPortIdentifier)listaDePortas.nextElement();
        portas[i] = ips.getName();
        i++;
        }
    }// fecha ListarPortas
    
    public boolean PortaExiste(String COMp){
    String temp;
    boolean e = false;
    while (listaDePortas.hasMoreElements()){
        CommPortIdentifier ips = (CommPortIdentifier)listaDePortas.nextElement();
        temp = ips.getName();
        if(temp.equals(COMp)== true){
        e= true;
        }// if
    }
    return e;
    
    }// fecha PortaExiste
    
    
}//fecha a classe
package balanca;

import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Iterator;

public class SerialComLeitura implements Runnable, SerialPortEventListener {

    public String Dadoslidos;
    public int nodeBytes;
    private int baudrate;
    private int timeout;
    private CommPortIdentifier cp;
    private SerialPort porta;
    private OutputStream saida;
    private InputStream entrada;
    private Thread threadLeitura;
    private boolean IDPortaOK;
    private boolean PortaOK;
    private boolean Leitura;
    private boolean Escrita;
    private String Porta;
    protected String peso;

    public void setPeso(String peso) {

        this.peso = peso;

    }

    public String getPeso() {

        return peso;

    }

    // public class SComm implements Runnable, SerialPortEventListener {
    //}// fecha SComm
    public SerialComLeitura(String p, int b, int t) {

        this.Porta = p;
        this.baudrate = b;
        this.timeout = t;

    }

    public void HabilitarEscrita() {

        Escrita = true;

        Leitura = false;

    }

    public void HabilitarLeitura() {

        Escrita = false;

        Leitura = true;

    }

    public void ObterIdDaPorta() {

        try {

            cp = CommPortIdentifier.getPortIdentifier(Porta);

            if (cp == null) {

                System.out.println(
                        "Erro na porta");

                IDPortaOK = false;

                System.exit(1);

            }

            IDPortaOK = true;

        } catch (Exception e) {

            System.out.println(
                    "Erro obtendo ID da porta:" + e);

            IDPortaOK = false;

            System.exit(1);

        }

    }

    public void AbrirPorta() {

        try {

            porta = (SerialPort) cp.open("SerialComLeitura", timeout);

            PortaOK = true;

            //configurar parâmetros

            porta.setSerialPortParams(baudrate,
                    porta.DATABITS_8,
                    porta.STOPBITS_1,
                    porta.PARITY_NONE);

            porta.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);

        } catch (Exception e) {

            PortaOK = false;

            System.out.println(
                    "Erro abrindo comunicação: " + e);

            System.exit(1);

        }

    }

    public void LerDados() {

        if (Escrita == false) {

            try {

                entrada = porta.getInputStream();

            } catch (Exception e) {

                System.out.println("Erro de stream: " + e);

                System.exit(1);

            }

            try {

                porta.addEventListener(this);

            } catch (Exception e) {

                System.out.println("Erro de listener: " + e);

                System.exit(1);

            }

            porta.notifyOnDataAvailable(true);

            try {
                threadLeitura = new Thread(this);
                threadLeitura.start();
                run();

            } catch (Exception e) {

                System.out.println("Erro de Thred: " + e);

            }

        }


    }

    public void run() {

        try {

            Thread.sleep(5);

        } catch (Exception e) {

            System.out.println("Erro de Thred: " + e);

        }

    }

    public void serialEvent(SerialPortEvent ev) {
        StringBuffer bufferLeitura = new StringBuffer();
        int novoDado = 0;


        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:
                //Novo algoritmo de leitura.
                while (novoDado != -1) {
                    try {
                        novoDado = entrada.read();
                        if (novoDado == -1) {
                            break;
                        }

                        if ('\r' == (char) novoDado) {
                            bufferLeitura.append('\n');
                        } else {
                            bufferLeitura.append((char) novoDado);
                        }
                    } catch (IOException ioe) {
                        System.out.println("Erro de leitura serial: " + ioe);
                    }

                }

                setPeso(new String(bufferLeitura));

                System.out.println(getPeso());

                break;

        }

    }// fechar o evento da porta serialportevent

    public void FecharCom() {

        try {

            porta.close();

        } catch (Exception e) {

            System.out.println("Erro fechando porta: " + e);

            System.exit(0);

        }

    }

    public String obterPorta() {

        return Porta;

    }

    public int obterBaudrate() {

        return baudrate;

    }
}// fecha a classe
Criado 4 de outubro de 2012
Respostas 0
Participantes 1