RXTX Duvidas

2 respostas
S

Galera montei uma classe que se conecta a uma porta serial envia um comando AT e fica aguardando a resposta, em seguida exibe a resposta e fecha a porta.

O problema é que mesmo fechando a porta e não dando nenhum erro no fechamento, ao tentar reabri-la a seguinte exception é mostrada. “javax.comm. Conexao owned byPortInUseException: Port currently owned by ConexaoCampo”

Ou seja parece que ela não foi fechada.
segue abaixo os codigos, se alguem tiver uma ideia do que pode ser, por favor me ajude.

Obrigado!

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package comandosat;

/**
 *
 * @author Shakall
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        SerialComm.setPorta("COM1:");
        SerialComm.setTimeout(500);
        SerialComm.setVelocidade(9600);
        int cont = 0;
        while (cont < 3) {
            cont++;
            System.out.println(cont);
            System.out.println(SerialComm.getPosicaoGPS());
        }
    }
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package comandosat;

import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import javax.comm.CommPortIdentifier;
import javax.comm.SerialPort;

/**
 *
 * @author Shakall
 */
public class SerialComm {

    private static String porta;
    private static int timeout=1000;
    private static int velocidade=9600;
    private static CommPortIdentifier cp;
    private static SerialPort serial;
    private static InputStream entrada;
    private static OutputStream saida;
    private static Enumeration list;

    public static int getTimeout() {
        return timeout;
    }

    public static int getVelocidade() {
        return velocidade;
    }

    public static void setTimeout(int timeout) {
        SerialComm.timeout = timeout;
    }

    public static void setVelocidade(int velocidade) {
        SerialComm.velocidade = velocidade;
    }

    private static void listarPortas() {
        list = CommPortIdentifier.getPortIdentifiers();
    }

    public static void exibirPortas() {
        if (list == null) {
            listarPortas();
        }
        while (list.hasMoreElements()) {
            System.out.println(((CommPortIdentifier) list.nextElement()).getName());
        }
    }

    public static void setPorta(String comm) {
        porta = comm;
    }

    public String getPorta() {
        return porta;
    }

    public static String getPosicao(String porta) {
        setPorta(porta);
        return getPosicaoGPS();
    }

    public static String executarComando(String comando) {
        if (porta != null) {
            try {
                ObterIdDaPorta();
                AbrirPorta();
                enviarComando(comando);
                entrada = serial.getInputStream();
                StringBuffer aux = new StringBuffer();
                while (entrada.available() > 0) {
                    aux.append((char) entrada.read());
                    Thread.sleep(100);
                }
                FecharCom();
                return aux.toString();
            } catch (Exception ex) {
                System.out.println("executarcomando");
                ex.printStackTrace();
            }
        }
        return null;
    }

    public static String getPosicaoGPS() {
        return executarComando("AT_IGPS");
    }

    private static String AbrirPorta() {//abre a porta disponivel ou não
        if (cp != null) {
            try {
                serial = (SerialPort) cp.open("ConexaoCampo", timeout);
                serial.setSerialPortParams(velocidade, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
                //serial.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
                return "OK";
            } catch (Exception ex) {
                System.out.println("abrirporta");
                ex.printStackTrace();
            }
        }
        return "Erro ao criar porta";
    }

    private static void FecharCom() {//fechar porta
        try {
            if (entrada != null) {
                entrada.close();
            }
            if (saida != null) {
                saida.close();
            }
            if (serial != null) {
                System.out.println("fechado");
                serial.close();
            }
        } catch (Exception ex) {
            System.out.println("fecharcomm");
            ex.printStackTrace();
        }
    }

    private static String enviarComando(String comando) {//envia um comando para a porta
        if (comando.indexOf("\r") < 0) {
            comando = comando + "\r";
        }
        try {
            saida = serial.getOutputStream();
            saida.write(comando.getBytes());
            Thread.sleep(100);
            return "Envio ok";
        } catch (Exception ex) {
            System.out.println("enviarcomando");
            ex.printStackTrace();
        }
        return "Não enviado, verifique a porta";
    }

    private static String ObterIdDaPorta() {//pega a porta especificada no construtor
        try {
            if (cp == null) {
                cp = CommPortIdentifier.getPortIdentifier(porta);
                if (cp == null) {
                    return "erro ao obter porta";
                }
            }
        } catch (Exception ex) {
            System.out.println("obterid");
            ex.printStackTrace();
        }
        return "ok";
    }
}

2 Respostas

W

meu fax modem ta na COM2 e não é listado abaixo… e quando tento acessar COM2 dá aquele erro ali embaixo: O que faço?

Stable Library

Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
COM1
LPT1

depois quando tento

Erro obtendo ID da porta: gnu.io.NoSuchPortException

W

wellingtonfoz:
meu fax modem ta na COM2 e não é listado abaixo… e quando tento acessar COM2 dá aquele erro ali embaixo: O que faço?

Stable Library

Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
COM1
LPT1

depois quando tento

Erro obtendo ID da porta: gnu.io.NoSuchPortException

=======================================

SOLUÇÃO:

A porta estava sendo usada por outro programa. Encerrei o tal programa e executei novamente o meu código e fungou! =D

Criado 21 de julho de 2010
Ultima resposta 17 de jan. de 2013
Respostas 2
Participantes 2