JavaComm - OBD_II - ScanTool -

Ola amigos já pesquisei bastante sobre este assunto neste forum e realmente estou precisando de ajuda pois não estou conseguindo resolver um problema.

Estou fazendo o trabalho de conclusão do meu curso de ciencia da computação e resolvi fazer em Java por NÃO dominar esta linguagem e assim poder ter oportunidade de aprender um pouco mais.

Basicamente meu projeto consiste na comunição SERIAL com uma placa que tem um microcontrolador que conversa com a injeção eletronica de automoveis que usam o padrão OBD-II e traduz isto para ASCII jogando pela serial.

A placa esta funcionado perfeitamente, qdo uso o Hyperterminal e digito por exemplo o comando de solicitação de RPM recebo os valores em ASCII.

Estou usando como base o tutorial da JAVACOMM disponivel aqui no GUJ.

Meu problema esta no momento de RECEBER OS DADOS … não consigo receber os dados completos, não tenho nenhuma intimidade com THREADS e estou desconfiado que o problema deve estar por ter multiplos pontos de execução.

Se alguma alma caridosa puder me ajudar ficaria infinitamente feliz… pq tranquei e não consigo evoluir…

MUITISSIMO OBRIGADO POR QQ AJUDA…

Se a parte do codigo que le e escreve na Serial:

String text = campoEnviaComandos.getText();
SerialCom st = new SerialCom();
AreaTextoRecebimento.append(text + newline);
AreaTextoRecebimento.append(“Enviando o comando ->” + text + newline);
SComm sc = new SComm(“COM1”,9600,2000);
if ( st.PortaExiste(“COM1”) == true) {
AreaTextoRecebimento.append(“Porta Existe - Iniciando comunicação!” + newline);
//SComm sc = new SComm(“COM1”,9600,2000);
sc.HabilitarEscrita();
sc.ObterIdDaPorta();
sc.AbrirPorta();
String novaLinha = System.getProperty( “line.separator” );
sc.EnviarUmaString(text + novaLinha);
//jTextArea1.append(“Enviado ATZ” + newline);
sc.FecharCom();
}

    // LE A SERIAL
    SerialCom st2 = new SerialCom() ;
    
    if ( st2.PortaExiste("COM1") == true) {
        //System.out.println("Iniciando Leitura da Serial!");
        jTextArea1.append("Iniciando Leitura da Serial!" + newline);
        SComm sc2 = new SComm("COM1",9600,1000);
        sc2.HabilitarLeitura();
        sc2.ObterIdDaPorta();
        sc2.AbrirPorta();
        sc2.LerDados();
        
        try {
            Thread.sleep(3000);
            //Thread.wait();
            //   saida.flush(1;
        } catch (Exception e) {
            System.exit(1);
        }
        /*while (disponivel == false) {
            try {
                wait();
            } catch (InterruptedException e) { }
        
        disponivel = false;
        notifyAll();
          */         
    
    
        try {
            //Thread.sleep(1000);
            //wait();
         //   saida.flush();
        } catch (Exception e) {
            System.out.println("Erro de exceção");
            System.exit(1);
        } 
    
    
    
    //System.out.println("---->>>>"+sc2.retornaDadoLido());
    AreaTextoRecebimento.append(sc2.Dadoslidos + newline);
    //jTextArea1.append(sc2.Dadoslidos + newline);
    //jTextArea1.append("Classe de Teste - uso do metodo de retorno DadosLidos : " + sc2.dadosLidos() + newline);
    //jTextArea1.append("Classe de Teste - uso do metodo de retorno ReadData : " + sc2.ReadData + newline);
    sc2.FecharCom();
    //sc.Comunica(text);
    //AreaTextoRecebimento.append("Dados Recebido do Metodo Comunica -> " + sc.Comunica(text));
    
}

Olá,

Infelizmente nao posso te ajudar em nada sobre isso. A não ser com uma opinião baseada em muito que ja li por ai. O suporte pra portas pararelas em Java não é uma coisa boa. O de USB é melhor. Se tiver possibilidade, mude. Desculpe-me, mas é a unica coisa que posso te ajudar nesse assunto.

Grato!

Na verdade não to usando comunicação Paralela e sim SERIAL e a JAVACOMM parece ser boa, pois tenho alguns exemplos de programas bem escritos com ela… o problema aqui sou EU que não sou inexperiente no JAVA e como programador… :frowning:

Aqui em baixo segue o LOG capturado pelo HYPERTERMINAL:

ATZ // manda reset para a placa

ELM323 v2.0 // resposta da placa com sua versão…

010C // solicitação de leitura do RPM do motor
BUS INIT: …OK // na primeira comuniçao a placa inicializa a comunicação com a Injeção do Carro
41 0C 0D 50 // aqui esta a informação que depois de aplicar uma formula simples ira informar a rotação do motor

010C // solicitação de RPM
41 0C 0D 4E // Resposta…

010C
41 0C 0C E2

010C
41 0C 0C E0

010C
41 0C 0C D4

Pessoal será que alguem teria um “esqueleto” de aplicação que eu pudesse apartir dele evoluir???

Muito Obrigado por qq ajuda

Abcs,

Up