Rxtx

8 respostas
java
P

Não consigo fazer conexão com balança Elgin SA-110. Alguém poderia me ajudar?

8 Respostas

P

O que vc ja fez?

P

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
P

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);

P

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

M

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)

P

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

P

Poderia me ajudar com jssc então

P

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);
    }

}

}

Criado 26 de novembro de 2016
Ultima resposta 27 de nov. de 2016
Respostas 8
Participantes 3