Ler peso balança Serial + Criando um listener

8 respostas
marcospaulo.suporte

Amigos, boa tarde.
Estou com uma dúvida besta, tenho uma classe que aprendi por esse link que está está comunicando normal com minha balança serial, porém eu não consigo pegar o peso da mesma.

Na minha classe principal (feito no netbeans), eu chamo minha outra classe ' SerialComLeitura '.
public Principal() {
        initComponents();
         //Iniciando leitura serial
        SerialComLeitura leitura = new SerialComLeitura("COM3", 9600, 0);
        leitura.HabilitarLeitura();
        leitura.ObterIdDaPorta();
        leitura.AbrirPorta();
        leitura.LerDados();
        try {
            Thread.sleep(500);
        } catch (InterruptedException ex) {
            System.out.println("Erro na Thread: " + ex);
        }
        leitura.FecharCom();
    }
O retorno que tenho é sucesso em: obter Id porta,Abrir comunicaçao, Lerdados, Thread e em fechar porta. na função
leitura.LerDados();
Ele me retorna null.

Pelo que andei lendo e pesquisando aqui no fórum com dúvidas similares, eu tenho que colocar um listener na minha função SerialPortEvent, mas não sei como fazer isso. Segue meu código.

public void run(){
        try {
            Thread.sleep(5);
            //NÃO ESTOU FAZENDO NADA AQUI.
// TENHO QUE CHAMAR A FUNÇÃO serialEvent AQUI, COMO FAZER ISSO COM SerialPortEvent ?
        } catch (InterruptedException e) {
            System.out.println("Erro de Thread: " + 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;}}

Enfim, pelo que percebi, meu código nao executa o método serialEvent, por que?

Obrigado pela ajuda.

8 Respostas

H

Olá, quando eu precisei capturar o peso

eu utlizei o RXTX e o seguinte código:

import java.io.UnsupportedEncodingException;

import jssc.SerialPort;

import jssc.SerialPortException;

import jssc.SerialPortList;

public class Main {

public static void main(String[] args) throws UnsupportedEncodingException {
    String[] portNames = SerialPortList.getPortNames();
    for (String portName : portNames) {
        System.out.println(portName);
    }

    SerialPort serialPort = new SerialPort("COM3");
    try {
        System.out.println("Port opened: " + serialPort.openPort());
        System.out.println("Params setted: " + serialPort.setParams(9600, 8, 2, 0));
        System.out.println("successfully writen to port: " + serialPort.writeBytes(new byte[]{0x04}));
        byte[] buffer = serialPort.readBytes(46);//Read 10 bytes from serial port
        System.out.println(new String(buffer));
        System.out.println("Port closed: " + serialPort.closePort());
    } catch (SerialPortException ex) {
        System.out.println(ex);
    }

}

}

só fazer o ajuste que precisa....

Abraços

J

Já testou se é um problema no Hardware? Se os dados que a balança envia estão corretos? Tá importando as classes corretamente?

marcospaulo.suporte

Javalente, obg pela resposta.
Eu já usei esse mesmo código para enviar dados para uma impressora zebra usando códigos ZPL e funcionou perfeitamente, no debug que faço pra ver se a comunicação está certa, ele me retorna positivo. Algumas pessoas dizem que preciso pegar informações com o fornecedor, outros dizem que preciso enviar um comando para a balança e o fabricante (Toledo) me disse que preciso comprar um aparelho pra comunicar (PC-link), não entendi porque, visto que tenho comunicação serial.

Mais uma vez, obrigado pela ajuda.

marcospaulo.suporte
himorrivel:
Olá, quando eu precisei capturar o peso

eu utlizei o RXTX e o seguinte código:

import java.io.UnsupportedEncodingException;

import jssc.SerialPort;

import jssc.SerialPortException;

import jssc.SerialPortList;

public class Main {

public static void main(String[] args) throws UnsupportedEncodingException {
    String[] portNames = SerialPortList.getPortNames();
    for (String portName : portNames) {
        System.out.println(portName);
    }

    SerialPort serialPort = new SerialPort("COM3");
    try {
        System.out.println("Port opened: " + serialPort.openPort());
        System.out.println("Params setted: " + serialPort.setParams(9600, 8, 2, 0));
        System.out.println("successfully writen to port: " + serialPort.writeBytes(new byte[]{0x04}));
        byte[] buffer = serialPort.readBytes(46);//Read 10 bytes from serial port
        System.out.println(new String(buffer));
        System.out.println("Port closed: " + serialPort.closePort());
    } catch (SerialPortException ex) {
        System.out.println(ex);
    }

}

}

só fazer o ajuste que precisa....

Abraços

himorrivel, obg pela ajuda, vou testar o código e te aviso ok?

Abraços;

[UPDATE]

Testei aqui e não funcionou, está estranho não pegar esses dados, ele só me retornou:

COM3
Port opened: true
Params setted: true
successfully writen to port: true

ele não chega a executar :

System.out.println(new String(buffer));
        System.out.println("Port closed: " + serialPort.closePort());

Obrigado pela ajuda;

H

então… essa é a configuração da balança que eu utilizei, cada balança possui um padrão… vai vai precisar ver os padrões de sua balança e fazer a adaptação no código…

Abraços

marcospaulo.suporte

himorrivel:
então… essa é a configuração da balança que eu utilizei, cada balança possui um padrão… vai vai precisar ver os padrões de sua balança e fazer a adaptação no código…

Abraços

Estou vendo isso agora, estou com o manual da balança.

No meu caso, ficou assim:

System.out.println("Params setted: " + serialPort.setParams(1200, 7, 2, 0)); //Bits por segundo: 1200 //Bits de dados: 7 //Paridade: nenhum // Bits de parada: 2 // Controle de fluxo - na propriedades do meu hardware está como nenhum (mas nao sei o que é).

Mas ainda sem resultados, vou continuar testando, vlw.

H

agora, faltou um detalhe:

System.out.println("successfully writen to port: " + serialPort.writeBytes(new byte[]{0x04}));

essa linha, é a linha de comando que eu faz a solicitação da balanca, isso tb muda de balanca para balanca....

e apoveito para falar que essa linha:
[/code]byte[] buffer = serialPort.readBytes(46);//Read 10 bytes from serial port [code]

tb muda de balanca para balanca....

Abraços

marcospaulo.suporte

himorrivel:
agora, faltou um detalhe:

System.out.println("successfully writen to port: " + serialPort.writeBytes(new byte[]{0x04}));

essa linha, é a linha de comando que eu faz a solicitação da balanca, isso tb muda de balanca para balanca…

e apoveito para falar que essa linha:

byte[] buffer = serialPort.readBytes(46);//Read 10 bytes from serial port

tb muda de balanca para balanca…

Abraços

Legal, vou pesquisar sobre isso, pois agora estou recebendo retorno, alguns caracteres estranhos, deve ser por causa dos bytes que estou enviando.

Mais uma vez obrigado, abraços;

Criado 9 de outubro de 2015
Ultima resposta 19 de out. de 2015
Respostas 8
Participantes 3