Mibex
Fevereiro 17, 2009, 7:58pm
#1
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…!!!
Modelo Catraca Box - com comunicação serial padrões RS232 e RS485.
RS232: cabo com até 100m de comprimento
RS485: cabo com até 1.500m de comprimento, permite a conexão de até 32 catracas ou Inners à mesma porta serial
(necessário conversor RS232/RS485 conectado ao computador)
Modelo Catraca Box Net - comunicação Ethernet 10/100 Mbps (TCP/IP)
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.)
Responde o “enantiomero”…
Ai fica mais facil de ajudar.
Mibex
Fevereiro 18, 2009, 9:38am
#5
E ai galera!!!
é uma catraca da topdata, modelo “top” e a comunicação é por serial(com1,com2).
blz
Vlw pela ajuda!!!
procure rxtx, vai encontrar muita coisa.
Importe o pacote da mesma e manda bala.
Mibex
Fevereiro 18, 2009, 10:10am
#7
Desculpe a ignorancia mais oq é esse rxtx??
É 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.
Mibex
Fevereiro 18, 2009, 11:05am
#10
Valeu pessoal!!!
Vou dar uma olhada nos links e posto os resultados!!!
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?
fdcarli
Fevereiro 19, 2009, 8:07am
#12
...
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
Mibex
Fevereiro 19, 2009, 11:13am
#13
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
[code]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;
}
}
[/code]
Se puderem me ajudar com esse probleminha
Vlw pessoal!!!
fdcarli
Fevereiro 19, 2009, 7:59pm
#14
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_chanan
Fevereiro 20, 2009, 11:26am
#15
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.
Mibex
Março 12, 2009, 8:50am
#16
O erro não esta na porta. Essa variável esta assumindo o valor “com1”. Alguém pode ajudar, to completamente perdido.