Catraca topdata

15 respostas
M

Aew galera!!!

to com um probleminha!!!
Tenho uma catraca topdata, e não estou conseguindo fazer ela se comunicar com o meu projeto em java.

Sei que tem uma maneira dela se comunicar por meio do JNI…porém eu não faço a minima idéia nem como começa
se alguém puder ajudar eu ja to agradecendo…

Vlw!!!

Aguardo dicas…!!!

15 Respostas

A

http://edn.embarcadero.com/article/20679

http://www.urubatan.com.br/chamando-metodos-nativos-dllso-em-java-sem-jni/

E

Qual o modelo da catraca? Pode ser que você tenha de usar sockets (no caso da “Box Net”) ou então comunicação serial (nesse caso, use o JavaComm. Um exemplo de implementação dessa especificação é a RxTx.)

H

Responde o “enantiomero”…
Ai fica mais facil de ajudar.

M

E ai galera!!!

é uma catraca da topdata, modelo “top” e a comunicação é por serial(com1,com2).

blz

Vlw pela ajuda!!!

H

procure rxtx, vai encontrar muita coisa.
Importe o pacote da mesma e manda bala.

M

Desculpe a ignorancia mais oq é esse rxtx??

T

http://www.rxtx.org/

H

É uma api pra controlar a porta serial do pc… com ela vc pode enviar comandos e receber comandos da sua catraca…
mas pra isso vc deve saber como a catraca funciona.

pra utilizar a api da uma olhada nesse link q vai t ajudar:

http://www.devmedia.com.br/articles/viewcomp.asp?comp=6722

Dei uma procurada sobre a sua catraca e a empresa desenvolvedora fornece informações para desenvolvimento, então acho melhor vc entrar em contato direto com a fabricante. Eles devem ter um material bom, sobre a comunicação com o equipamento.

M

Valeu pessoal!!!

Vou dar uma olhada nos links e posto os resultados!!!

L

Vc já tem a dll pronta para a comunicação? Sabe as funções que ela possui para poder operá-la…??? Ou vc tem um protocolo de comunicação com a catraca?

F
...  
System.loadLibrary("myDllSemExtensao"); // Nome da sua dll sem extensão  
MyDllWrapper myDll = new MyDllWrapper();  
int valor;  
valor = myDll.myMethod();  
...

Tenta desta maneira…

Fiz uma aplicação e deu certo! flw

M

Eu tenho a dll e suas funções tmb leopoldof...

Agora no caso do colega fdcarli é só colocar esse código que a catraca ja entra em comunicação com o aplicativo em java...?

Eu montei um projetinho de teste utilizando RXTX que nem os colegas thingol e homisinho recomendarão porém
acontece o seguinte erro

"Erro obtendo id da Porta:gnu.io.NoSuchPortException
Java Result: 1"

O código que contém esse erro está aqui

public class serialComLeitura implements Runnable, SerialPortEventListener {
        public String dadosLidos;
        public int nodeBytes;
        private int baudrate;
        private int timeout;
        private CommPortIdentifier cp;
        private SerialPort serialPorta;
        private OutputStream saida;
        private InputStream entrada;
        private Thread threadEntrada;
        private Thread threadLeitura;
        private boolean idPortaOK;
        private boolean portaOK;
        private boolean leitura;
        private boolean escrita;
        private String porta;
        protected String peso;
        
        public void setPeso(String peso){
            this.peso = peso;
        }
        public String getPeso(){
            return peso;
        }

        public void setSerialPorta(SerialPort serialPorta){
            this.serialPorta = serialPorta;
        }
        public SerialPort getSerialPorta(){
            return serialPorta;
        }         
        
        public void serialComLeitura(String p, int b, int t){
            this.porta = p;
            this.baudrate = b;
            this.timeout = t;
         }

        public void habilitaEscrita(){
            escrita = true;
            leitura = false;
        }
        public void habilitaLeitura(){
            escrita = false;
            leitura = true;
        }
        public void obterIdDaPorta(){
            try{
                cp = CommPortIdentifier.getPortIdentifier(porta);
                if (cp == null){
                    System.out.println("Erro na Porta");
                    idPortaOK = false;
                    System.exit(1);
                }idPortaOK = true;
                
            }catch (Exception e) {
                System.out.println("Erro obtendo id da Porta:"+ e);
                idPortaOK = false;
                System.exit(1);
            }    
            
        }
        public void abrirPorta(){
            try{
                serialPorta = (SerialPort)cp.open("serialComLeitura", timeout);
                portaOK = true;
                //configurar os parâmetros
                serialPorta.setSerialPortParams(baudrate, serialPorta.DATABITS_8, serialPorta.STOPBITS_1, serialPorta.PARITY_NONE);
                serialPorta.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
                }catch(Exception e){
                    portaOK = false;
                    System.out.println("Erro abrindo comunicação: " + e);
                    System.exit(1);
                }
        }
        public void lerDados(){
            if (escrita == false){
                try{
                    entrada = serialPorta.getInputStream();
                }catch(Exception e){
                    System.out.println("Erro de Stream: " + e);
                    System.exit(1);
                }
                try{
                    serialPorta.addEventListener(this);
                }catch (Exception e){
                    System.out.println("Erro de Listener: " + e);
                    System.exit(1);                                        
                }serialPorta.notifyOnDataAvailable(true);
                try{
                    threadLeitura = new Thread(this);
                    threadLeitura.start();
                    run();
                }catch (Exception e){
                    System.out.println("Erro de Thread: " + e);
                }
            }
        }
        public void enviarUmaString(String msg){
            if(escrita == true){
                try{
                    saida = serialPorta.getOutputStream();
                    System.out.println("Fluxo OK");
                }catch (Exception e){
                    System.out.print("erro.status: " + e);
                }
                try{
                    System.out.println("Enviando um byte para " + serialPorta);
                    System.out.println("Enviando: " + msg);
                    saida.write(msg.getBytes());
                    Thread.sleep(100);
                    saida.flush();
                }catch (Exception e){
                    System.out.println("Ouve um erro durante o envio: " + e);
                    System.out.println("Status: " + e);
                    System.exit(1);
                }
            }else{System.exit(1);
        }
        }
        public void run(){
            try{
            Thread.sleep(5);
            }catch (Exception e){
                System.out.println("Erro de Thread: " + e);
            }
        }
        public void serialEvent(SerialPortEvent ev){
            StringBuffer bufferLeitura = new StringBuffer();
            int novoDado = 0;
            
            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:
                //Novo algoritmo de entrada
                    while (novoDado != -1){
                        try{
                            novoDado = entrada.read();
                            if(novoDado == -1){
                                break;
                            }
                            if('\r' == ((char)novoDado)){
                            bufferLeitura.append('\n');
                            }else{
                                bufferLeitura.append((char)novoDado);}
                        }catch (IOException ioe){
                                System.out.println("Erro de leitura Serial: " + ioe);
                        }
                    }
                        setPeso(new String (bufferLeitura));
                        System.out.println(getPeso());
                        break;
            }
            
        }
        public void fecharCom(){
            try{
               serialPorta.close();
            }catch (Exception e){
                System.out.println("Erro ao Fechar Porta: " + e);
                System.exit(1);
            }
        }

        public String obterPorta(){
            return porta;
        }

        public int obterbaudrate(){
            return baudrate;
        }
}

Se puderem me ajudar com esse probleminha

Vlw pessoal!!!

F

Olá, pelo que vc me passou o erro esta ocorrendo na linha 49, confira que valor que a String porta esta assumindo, pode ser que a porta estaja errada!

flw T+

J

Eu trabalho com o projeto RxTx e nunca tiv problemas, se vc trabalhar direto com o protocolo da catraca é mais fácil do que com jni e vc tem controle total das funções da catraca. Recomendo RxTx.

M

O erro não esta na porta. Essa variável esta assumindo o valor “com1”. Alguém pode ajudar, to completamente perdido.

Criado 17 de fevereiro de 2009
Ultima resposta 12 de mar. de 2009
Respostas 15
Participantes 8