Não consigo fazer conexão com balança Elgin SA-110. Alguém poderia me ajudar?
Rxtx
8 Respostas
O que vc ja fez?
Eu baixei o driver do cabo e diz que é na porta com4, depois implementei esse código:
import java.io.UnsupportedEncodingException;
import jssc.SerialPort;
import jssc.SerialPortException;
import jssc.SerialPortList;
public class Teste {
public static void main(String[] args) throws UnsupportedEncodingException {
String[] portNames = SerialPortList.getPortNames();
for (String portName : portNames) {
System.out.println(portName);
}
SerialPort serialPort = new SerialPort(“COM4”);
try {
System.out.println("Port opened: " + serialPort.openPort());
System.out.println("Params setted: " + serialPort.setParams(9600, 8, 1, 0));
System.out.println("successfully writen to port: " + serialPort.writeBytes(new byte[]{0x04}));
byte[] buffer = serialPort.readBytes(1024);//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);
}
}
}, Mas depois descobri não não recebo nada na Strean, queria saber pq isso está ocorrendo
E outro código, esse aqui:
public class SerialComm implements SerialPortEventListener {
private String getPortNameByOS() {
String osname = System.getProperty("os.name", "").toLowerCase();
if (osname.startsWith("windows")) {
return "COM4";
}else {
System.out.println("Seu S.O não é suporte ");
System.exit(1);
return null;
}
}
private CommPortIdentifier getPortIdentifier(String portName) {
//Pega os identificadores de porta
Enumeration portList = CommPortIdentifier.getPortIdentifiers();
//Varre as possíveis portas
while (portList.hasMoreElements()) {
CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement();
//Verifica se a porta é a serial
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
System.out.println("Available port: " + portId.getName());
//Verifica se é o identificador correto (COM1 ou ttsy0)
if (portId.getName().equals(portName)) {
System.out.println("Found port: " + portName);
boolean portFound = true;
return portId;
}
}
}
return null;
}
InputStream inputStream; //O InputStream fica fora porque é utilizado depois
public void execute() {
//Pega a porta pelo S.O.
String portName = getPortNameByOS();
//Retorna o identificador da porta
CommPortIdentifier portId = getPortIdentifier(portName);
//Se o PortId for nulo, não há porta disponível
if (portId != null) {
try {
//Abre a porta serial solicitada
SerialPort serialPort = (SerialPort) portId.open(this.getClass().getName(), 2000);
//Pega o InputStream da Porta Serial
inputStream = serialPort.getInputStream();
//Passa os parametros da porta serial
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
//Cria um novo Listener de Eventos
serialPort.addEventListener(this);
//Avisa se tive alguma mudança na Porta Serial
serialPort.notifyOnDataAvailable(true);
} catch (PortInUseException e) {
} //Implente sua exception aqui
catch (IOException e) {
} //Implente sua exception aqui
catch (UnsupportedCommOperationException e) {
e.printStackTrace();
} catch (TooManyListenersException e) { //Implente sua exception aqui}
}
}else {
System.out.println("Porta Serial não disponível");
}
}
public void serialEvent(SerialPortEvent event) {
switch (event.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:
//Se tiver dados disponíveis
byte[] readBuffer = new byte[1024];
try {
int numBytes = 0;
while (inputStream.available() > 0) {
numBytes = inputStream.read(readBuffer);
}
String result = new String(readBuffer);
System.out.println("Read: "+result);
} catch (IOException e) {}
break;
}
}
}
Do mesmo jeito, não consigo ler nada, depois executei o código System.out.print(inputStream.avaliado);
Já li o manual, e configurei de acordo, não tem dll para a balança, estou com muita dificuldade, penso até na possibilidade do cabo não está funcionando, mas quando conecto, aparece a porta, aí fica complicado meu problema
Uma coisa que gosto de fazer quando vou desenvolver para algum equipamento serial em que eu precise ler e escrever diretamente na porta é primeiro testar em algum programa de terminal (Aqui uso o RealTerm), faça este teste para afastar a possibilidade de algum problema no seu código/seu ambiente de desenvolvimento.
Outra coisa, tudo bem que talvez você não tenha intenção de rodar este sistema em outros OSs, mas precisa mesmo programar especificamente para permitir apenas o Windows? Se é pela questão serial acredito que o RxTx trate disso transparentemente (nao sei, nunca usei isso, tenho mais experiencia com a jssc)
Fiz o teste no Hercules, e deu certo, mas não consegui no programa, Estou apenas testando no windows, pois na loja para onde estou desenvolvendo eles usam windows, ainda não sei muito coisa, mas ainda, obrigado pela ajuda que você está me dando
Poderia me ajudar com jssc então
Utilizei esse daqui, mas não ler nada
public class Teste {
public static void main(String[] args) throws UnsupportedEncodingException, SerialPortTimeoutException {
String[] portNames = SerialPortList.getPortNames();
for (String portName : portNames) {
System.out.println(portName);
}
SerialPort serialPort = new SerialPort("COM4");
try {
System.out.println("Port opened: " + serialPort.openPort());
System.out.println("Params setted: " + serialPort.setParams(9600, 8, 1, 0));
System.out.println("successfully writen to port: " + serialPort.writeBytes(new byte[]{0x05}));
byte[] buffer = serialPort.readBytes(49);//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);
}
}
}