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.
[code]
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;}}[/code]
Enfim, pelo que percebi, meu código nao executa o método serialEvent, por que?
Obrigado pela ajuda.
Olá, quando eu precisei capturar o peso
eu utlizei o RXTX e o seguinte código:
[code]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);
}
}
}[/code]
só fazer o ajuste que precisa…
Abraços
Já testou se é um problema no Hardware? Se os dados que a balança envia estão corretos? Tá importando as classes corretamente?
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.
[quote=himorrivel]Olá, quando eu precisei capturar o peso
eu utlizei o RXTX e o seguinte código:
[code]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);
}
}
}[/code]
só fazer o ajuste que precisa…
Abraços
[/quote]
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;
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
[quote=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[/quote]
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.
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
[quote=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
[/quote]
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;