Comunicação Porta Serial

Estou tendo um probleminha na porta de comunicação serial…
Eu consigo listar as portas, só q naum consigo fazer um open

cp = CommPortIdentifier.getPortIdentifier(Porta); // Pega o id da porta porta = (SerialPort) cp.open("PortSerial", timeout); // abre a porta
   nesta segunda linha q esta acontecendo um erro, como segue abaixo:
   javax.comm.PortInUseException: Port currently owned by Unknown Windows Application

OBs.: estou pegando a lista de portas com esse comando
Enumeration portas= CommPortIdentifier.getPortIdentifiers();

Naum sei, mas estou achando q ele esta trazendo as portas que estao em uso já… gostaria de saber se tem como listar alguma porta sem uso??
acho q deve ser isso que esta causando erro…

desde já agradeço
Thiago

Cara, tbm tive um monte de problemas com comunicação serial, peguei uma classe praticamente pronta aki numa apostilado guj e consegui fazer ela funcionar, segue o codigo:

[code]import java.util.Enumeration;
import javax.comm.;
import java.io.
;

/**
*

  • @author Rafael
    */

//classe Principal
public class SComm implements Runnable, SerialPortEventListener {
//propriedades
private String Porta;
public String Dadoslidos;
public int nodeBytes;
private int baudrate;
private int timeout;
private CommPortIdentifier cp;
private SerialPort porta;
private OutputStream saida;
private InputStream entrada;
private String informacao;
private Thread threadLeitura;
//indicadores
private boolean IDPortaOK; //true porta EXISTE
private boolean PortaOK;// true porta aberta
private boolean Leitura;
private boolean Escrita;

private principal pri;
//construtor default paridade : par
//baudrate: 9600 bps stopbits: 2 COM 1
public SComm() {
    //pri = new principal();
    Porta = "COM1";
    baudrate = 9600;
    timeout = 1000;
    //System.out.println("Entrei no construtor");
};
//um Objeto ComObj é passado ao construtor
//com detalhes de qual porta abrir
//e informações sobre configurações
public SComm( String p , int b , int t ){
    this.Porta = p;
    this.baudrate = b;
    this.timeout = t;
};
//habilita escrita de dados
public void HabilitarEscrita(){
    Escrita = true;
    Leitura = false;
}
//habilita leitura de dados
public void HabilitarLeitura(){
    Escrita = false;
    Leitura = true;
}
//Obtém o ID da PORTA
public void ObterIdDaPorta(){
    try {
        cp = CommPortIdentifier.getPortIdentifier(Porta);
        System.out.println(cp + "  " + Porta);
        if ( cp == null ) {
            System.out.println("A " + Porta + " nao existe!" );
            System.out.println("ERRO!Abortando..." );
            IDPortaOK = false;
            System.exit(1);
        }
        IDPortaOK = true;
    } catch (Exception e) {
        System.out.println("Erro durante o procedimento. STATUS: " + e );
        IDPortaOK = false;
        System.exit(1);
    }
}
//Abre a comunicação da porta
public void AbrirPorta(){
    try {
        porta = (SerialPort)cp.open("SComm",timeout);
        PortaOK = true;
        System.out.println("Porta aberta com sucesso!");
        //configurar parâmetros
        porta.setSerialPortParams(baudrate,
        porta.DATABITS_8,
        porta.STOPBITS_2,
        porta.PARITY_NONE);
    } catch (Exception e) {
        PortaOK = false;
        System.out.println("Erro ao abrir a porta! STATUS: " + e );
        System.exit(1);
    }
}
//função que envie um bit para a porta serial
public void EnviarUmaString(String msg){
    if (Escrita==true) {
        try {
            saida = porta.getOutputStream();
            System.out.println("FLUXO OK!");
        } catch (Exception e) {
            System.out.println("Erro.STATUS: " + e );
        }
        try {
            System.out.println("Enviando um byte para " + Porta );
            System.out.println("Enviando : " + msg );
            saida.write(msg.getBytes());
            Thread.sleep(100);
            saida.flush();
        } catch (Exception e) {
            System.out.println("Houve um erro durante o envio. ");
            System.out.println("STATUS: " + e );
            System.exit(1);
        }
    } else {
        System.exit(1);
    }
}
//leitura de dados na serial
public void LerDados(){
    if (Leitura == true){
        try {
            entrada = porta.getInputStream();
            System.out.println("FLUXO OK!");
        } catch (Exception e) {
            System.out.println("Erro.STATUS: " + e );
            System.exit(1);
        }
        try {
            porta.addEventListener(this);
            System.out.println("SUCESSO. Porta aguardando...");
        } catch (Exception e) {
            System.out.println("Erro ao criar listener: ");
            System.out.println("STATUS: " + e);
            System.exit(1);
        }
        porta.notifyOnDataAvailable(true);
        try {
            threadLeitura = new Thread(this);
            threadLeitura.start();
        } catch (Exception e) {
            System.out.println("Erro ao iniciar leitura: " + e );
        }
    }
}

//método RUN da thread de leitura
public void run(){
    try {
        Thread.sleep(2000);
    } catch (Exception e) {
        System.out.println("Erro. Status = " + e );
    }
}
//gerenciador de eventos de leitura na serial
public void serialEvent(SerialPortEvent ev){
    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:
        byte[] bufferLeitura = new byte[8];
        try {
            while ( entrada.available() > 0 ) {
                nodeBytes = entrada.read(bufferLeitura);
            }
            String Dadoslidos = new String(bufferLeitura);
            if (bufferLeitura.length == 0) {
                System.out.println("Nada lido!");
            } else if (bufferLeitura.length == 1 ){
                System.out.println("Apenas um byte foi lido!");
            } else {
                System.out.println(Dadoslidos);
                //System.out.println("Rafael " + Dadoslidos.substring(0,2));
                if(Dadoslidos.substring(0,2).equals(new String("00"))){
                    System.out.println("entrei");
                    pri.atualizaInfo(Dadoslidos.substring(0,2), "velVento");
                    System.out.println("passei");
                }
            }
           
        } catch (Exception e) {
            System.out.println("Erro durante a leitura: " + e );
        }
        
        /*if(Dadoslidos.substring(1,3) == "dir"){
            pri.atualizaInfo(Dadoslidos.substring(4,4), "dirVento");
        }
        
        if(Dadoslidos.substring(1,3) == "ven"){
            pri.atualizaInfo(Dadoslidos.substring(4,5), "velVento");
        }
        
        if(Dadoslidos.substring(1,3) == "vel"){
            //pri.atualizaInfo(Dadoslidos.substring(4,6), "velObjeto");
            System.out.println("Entrei onde naum era pra entrar");
        }*/
        
        
        System.out.println("n.o de bytes lidos : " + nodeBytes );
        break;
    }
}
//função que fecha a conexão
public void FecharCom(){
    try {
        porta.close();
        System.out.println("CONEXAO FECHADA>>FIM..");
    } catch (Exception e) {
        System.out.println("ERRO AO FECHAR. STATUS: " + e );
        System.exit(0);
    }
}
//Acessores
public String obterPorta(){
    return Porta;
}
public int obterBaudrate(){
    return baudrate;
}

}[/code]

Da tanto pra vc fazer a leitura como escrita.

Se naum conseguir me de um toque.

Falow

OPa!! valeussss… mesmo… essa classe funcionou direitinho…
o engraçado q esta quase igual a minha q tinha feito… mas tudo bem

Brigaduuu

fllwssss

Alguem me pode ajudar??

Tou me iniciando nestas andanças de java e jcomm e ainda não domino muito :frowning:

Tou tentando este seu exemplo mas ta ma dar erro:
"java.lang.NoSuchMethodError: main
Exception in thread “main” "

Acho k falta o main alguem me pode indicar um para este caso?? Please!!!

Muito Obrigado

Tou testando uns exemplos do tutorial de java api comm. e quando no codigo coloco:

listaDePortas = CommPortIdentifier.getPortIdentifiers();
System.out.println(“FHJK:” +listaDePortas);

da me o seguinte erro:

“javax.comm.CommPortEnumerator@e7b241”

Alguem me pode ajudar!!

Muito Obrigado

Ola!Tou testando esse exemplo e da me o seguinte erro:

“Scomm.java”: class SComm is public, should be declared in a file named SComm.java at line 23, column 1

k diz respeito a seguinte linha: " private principal pri;"

Alguem pode me ajudar?? Please

[quote=BrunoNave]Alguem me pode ajudar??

Tou me iniciando nestas andanças de java e jcomm e ainda não domino muito :frowning:

Tou tentando este seu exemplo mas ta ma dar erro:
"java.lang.NoSuchMethodError: main
Exception in thread “main” "

Acho k falta o main alguem me pode indicar um para este caso?? Please!!!

Muito Obrigado [/quote]

Realmente essa duvida eh bem basica :slight_smile:

Quando vc coloca um programa pra rodar em java ele procura a main do arquivo, e esse ai nao tem main.
Pra resolver esse problema adicione no codigo esse fragmento, antes de fechar a ultima chave:

public static void main(String[] args) {
new SComm();
}

depois tem que ver se tem mesmo um dispositivo conectado na com1, senao nao vai funcionar.

[quote=BrunoNave]Ola!Tou testando esse exemplo e da me o seguinte erro:

“Scomm.java”: class SComm is public, should be declared in a file named SComm.java at line 23, column 1

k diz respeito a seguinte linha: " private principal pri;"

Alguem pode me ajudar?? Please[/quote]

em java a classe principal tem que ter o mesmo nome que o arquivo.
Se o nome do arquivo for MeuNome, o nome do arquivo q a contem deve ser MeuNome.java

Dá uma entrada aqui, tem muito coisa sobre comunicação serial utilizando a API RXTX: http://www.viamais.net/blog/index.php?s=rxtx.
Só um detalhe: a apostila do Guj é realmente excelente, contudo na leitura de alguns equipamentos o código postado lá quebra as strings causando certo transtorno. Os exemplos do blog que indiquei não dá esses problemas.