Boa tarde a todos, estou tentando desenvolver uma aplicação para capturar o peso de uma balança filizola mf-30 com java, mas sem sucesso!
No código que estou fazendo, utilizei a biblioteca jSerialComm.
A balança está conetada e comunicando na porta COM3, porque testei com outro software.
import com.fazecast.jSerialComm.SerialPort;
public class testeLeituraSerial {
public static void main(String[] args) {
// Configuração da porta serial
SerialPort comPort = SerialPort.getCommPort("COM3"); // Substitua "COM1" pela porta correta
comPort.setComPortParameters(9600, 8, SerialPort.ONE_STOP_BIT, SerialPort.NO_PARITY);
comPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 0, 0);
if (comPort.openPort()) {
System.out.println("Porta serial aberta com sucesso!");
try {
// Envio do comando para capturar o peso (consulte o manual da balança para o comando correto)
String command = "P"; // Exemplo de comando para solicitar o peso (de acordo com o protocolo da balança)
comPort.getOutputStream().write(command.getBytes());
// Leitura da resposta da balança
byte[] buffer = new byte[1024];
int bytesRead = comPort.getInputStream().read(buffer);
String response = new String(buffer, 0, bytesRead);
// Tratamento da resposta para extrair o peso
System.out.println("Peso capturado: " + response.trim());
} catch (Exception e) {
e.printStackTrace();
} finally {
comPort.closePort();
}
} else {
System.out.println("Erro ao abrir a porta serial.");
}
}
}
Não retorna o peso. Alguém tem ideia do que está errado. Ou uma sugestão melhor para fazer isso…
Não retorna nada? Tentou forçar o “flush”
Testou escrevendo mais coisas no COM3? Não precisa que mandar cabeçalho nem nada?
sinceramente não sei o que precisa. O protocolo está correto. Testei a comnunicao com um software. Parece que algumas balanças necessitam que uma string para mandar o peso de volta. Não achei o manual dessa balanca em especifico.
E como vc sabe que está bandando os bytes esperados pela balança?
Acabei descobrindo, precisa enviar a string “\u0005” que a balanca vai retornar o peso…
package MAIN;
import com.fazecast.jSerialComm.SerialPort;
public class SerialCommunication {
private SerialPort serialPort;
public void initialize() {
// Obter todas as portas seriais disponíveis
// SerialPort[] ports = SerialPort.getCommPorts();
// for (SerialPort port : ports) {
// System.out.println("Porta disponível: " + port.getSystemPortName());
// }
// Configurar a porta serial COM3
serialPort = SerialPort.getCommPort("COM3");
serialPort.setBaudRate(9600);
serialPort.setNumDataBits(8);
serialPort.setNumStopBits(SerialPort.ONE_STOP_BIT);
serialPort.setParity(SerialPort.NO_PARITY);
// Abrir a porta serial
if (serialPort.openPort()) {
System.out.println("Porta serial aberta com sucesso.");
} else {
System.out.println("Falha ao abrir a porta serial.");
return;
}
// Configurar a leitura de dados
serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_BLOCKING, 500, 0);
}
public void setarComando(String command) {
if (serialPort != null && serialPort.isOpen()) {
byte[] commandBytes = command.getBytes();
serialPort.writeBytes(commandBytes, commandBytes.length);
// System.out.println("Comando enviado: " + command);
} else {
System.out.println("Porta serial não está aberta.");
}
}
public String lerReposta() {
if (serialPort != null && serialPort.isOpen()) {
byte[] readBuffer = new byte[1024];
int numRead = serialPort.readBytes(readBuffer, readBuffer.length);
String response = new String(readBuffer, 0, numRead).trim();
System.out.println("Resposta da balança: " + response);
return response;
} else {
System.out.println("Porta serial não está aberta.");
}
return "";
}
public void close() {
if (serialPort != null && serialPort.isOpen()) {
serialPort.closePort();
System.out.println("Porta serial fechada.");
}
}
public static void main(String[] args) {
SerialCommunication serialComm = new SerialCommunication();
serialComm.initialize();
while(true){
// Comando para solicitar o peso (verifique o comando correto para sua balança)
String command = " \u0005"; // Exemplo de comando, substitua com o comando correto para sua balança
serialComm.setarComando(command);
// Ler a resposta da balança
serialComm.lerReposta();
}
// Fechar a conexão
//serialComm.close();
}
}
Era o que eu estava tentando lhe dizer.