Comunicaçao ASCII com Java. [Resolvido]

30 respostas
Vinicius_Zibetti_Res

Gente estou precisando de algum material bom que explique como se cria uma comunicação através de portas USB e como se envia/recebe dados da porta, utilizando Java.

Obs: Ja pesquisei no google e encontrei algumas coisas, mas parece que falta algo, e eu não consigo entender.

Muito obrigado !

30 Respostas

davidbuzatto

Você quer fazer isso com Java direto?
Não dá.

Você vai precisar implementar algo em alguma linguagem nativa que permita esse tipo de coisa como C, C++, etc., e então usar JNA ou JNI para fazer sua aplicação Java invocar código nativo (da sua outra aplicação).

[]'s

lina

davidbuzatto:
Você quer fazer isso com Java direto?
Não dá.

Você vai precisar implementar algo em alguma linguagem nativa que permita esse tipo de coisa como C, C++, etc., e então usar JNA ou JNI para fazer sua aplicação Java invocar código nativo (da sua outra aplicação).

[]'s

Oi,

Por exemplo, tenho uma aplicação Java que se comunica e troca mensagens com um pin-pad USB utilizando as bibliotecas rxtx.

Não seria algo do tipo?

Tchauzin!

douglaskd

pelo que vi no site a RxTx foi criada usando o mingw32, compilador C

pois ele possui DLLs de acesso nativo: rxtxParallel.dll e rxtxSerial.dll

e acredito que o RXTXcomm.jar acesse essas DLLs via JNI, e abstraia os conceitos de hardware do programador java…

nunca trabalhei com ele, então não posso afirmar que seja isso mesmo…

Vinicius_Zibetti_Res

Não estou entendendo muito claramente, O Java possui ou não possui alguma biblioteca para comunicação ASCII ??

Se não possui, por favor me deem uma orientação, se sim, qual é a biblioteca e como posso utiliza-la.

Realmente estou com dificuldades nesta parte, esta muito confuso e obrigado !

lina

douglaskd:
pelo que vi no site a RxTx foi criada usando o mingw32, compilador C

pois ele possui DLLs de acesso nativo: rxtxParallel.dll e rxtxSerial.dll

e acredito que o RXTXcomm.jar acesse essas DLLs via JNI, e abstraia os conceitos de hardware do programador java…

nunca trabalhei com ele, então não posso afirmar que seja isso mesmo…

Oi,

Exatamente isso.

Tchauzin!

Vinicius_Zibetti_Res

Não estou entendendo muito claramente, O Java possui ou não possui alguma biblioteca para comunicação ASCII ??

Se não possui, por favor me deem uma orientação, se sim, qual é a biblioteca e como posso utiliza-la.

Realmente estou com dificuldades nesta parte, esta muito confuso e obrigado !

G

davidbuzatto:
Você quer fazer isso com Java direto?
Não dá.

Você vai precisar implementar algo em alguma linguagem nativa que permita esse tipo de coisa como C, C++, etc., e então usar JNA ou JNI para fazer sua aplicação Java invocar código nativo (da sua outra aplicação).

[]'s

mas ai o cara é obrigado a aprender outra linguagem?

e se for pra vários SOs? ele vai ter q implementar um pra cada e ainda C?

Vinicius_Zibetti_Res

Olá eu implementei a RXTXComm.jar aqui, funcionou a comunicação com a port serial, muito boa a biblioteca.

Só que eu me deparei com um probleminha aqui, se alguem puder me explicar:
Não achei a API do RXTXComm.jar, precisava dela.
Não sei usar bem a Biblioteca, quais os principais metodos para comunicação e como recebo dados e como posso enviar dados para a porta selecionada.

OBRIGADISSIMO a quem puder me ajudar.

Obs: É importada como biblioteca nativa mas da para utilizar normalmente no Java.

Vinicius_Zibetti_Res

Apenas UP!

dcl

Se não der mesmo pra achar a API, use the source: http://java.decompiler.free.fr/?q=jdgui

Mas recomendo dar uma fuçada no Google antes disso.

Vinicius_Zibetti_Res

AHn, fods é que o pessoal sabe quase nada sobre esse assunto…

lina

Oi,

Por meio do CommPortIdentifier você descobre quais portas estão ativas na maquina e também realiza a conexão OPEN.

Algo do tipo:

try {

          CommPortIdentifier
          cp = CommPortIdentifier.getPortIdentifier("COM5");

          if (cp != null) { // Encontrei algum porta.
      
             SerialPort           
             porta = (SerialPort)cp.open("SerialComLeitura", timeout); // Tento abrir a porta.
        
             // Aqui você define as propriedades da porta com setSerialPortParams
          } 
          
        } catch (Exception e) {
        }

Depois disso, até onde eu sei, você deverá utilizar o OutputStream e InputStream para realizar a troca de informações.

Tchauzin!

ViniGodoy

ASCII é só o formato de codificação de texto. Não é nem um protocolo de comunicação.
O Java permite que você escreva dados binários, portanto, você pode usar codificação ASCII ou qualquer outra, no protocolo que quiser.

O que o Java não fornece é uma forma de se comunicar por USB ou por portas seriais. Aí, só com JNI como o David falou.
Então, ou você baixa uma biblioteca de terceiros que use o JNI para você, ou implementa você mesmo usando C++ ou C.

mas ai o cara é obrigado a aprender outra linguagem?

e se for pra vários SOs? ele vai ter q implementar um pra cada e ainda C?

Sim, é obrigado. Mas não precisa se limitar ao C, pode ser C++ também.

E se for para vários SOs, ele vai ter que tomar cuidado adicional no C++ para compilar para múltiplas plataformas (isso hoje em dia é fácil, pois muitas APIs C++ já são multiplataforma e fazem comunicação com serial ou usb).
É por esse tipo de coisa que o Java não é uma linguagem muito popular para desktop.

Vinicius_Zibetti_Res

Gente, desculpe encomodar de novo mas será que alguem saberia me falar como envio uma string para a porta serial através do RXTX
EX:
Quero Enviar para a porta serial a string “ADDRESS123” ?

Alguem pode me exclarecer isso, por não estou conseguindo de jeito nem um ?

Vinicius_Zibetti_Res

Gente, como ninguem sabe ou não está querendo me explicar, por favor será que alguem sabe algum forum em que possa me ajudar ??

Eu realmente não estou conseguindo, estou estudando um protocolo aqui, ele ja está feito, mas não consigo enviar a string para a porta serial…

Obrigado !

G

então cara. posta como vc fez e q não ta funcionando. pra ver se alguem acha onde ta o prob

Vinicius_Zibetti_Res

Então amigo, o problema esta a enviar para a porta serial a string, só este o problema mesmo…
Eu não consigo formular um codigo atravez do RXTX que envie para a porta serial, por ex: “ADDRESS01”…

G

não tem um outputstream não?

como não tenho aki fica dificl.

mas imagino q tenha um outputstream.

se vc postar como ta tentando ajudaria

Vinicius_Zibetti_Res

Vejamos, segue:

private SerialPort serialPort;
	serialPort = (SerialPort) portIdentifier.open("RTBug_network", 2000);
	serialPort.setSerialPortParams(speed, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_ODD);
        private OutputStream outputStream = serialPort.getOutputStream();
	public boolean writeSerial(String message) {
		boolean success = false;
		if (isConnected()) {
			try {
				outputStream.write(message.getBytes());
				success = true;
				System.out.println("Submitted");
			} catch (IOException e) {
				disconnect();
			}
		}
		return success;
	}

Estou tentando assim.

Vinicius_Zibetti_Res

Obs: Ele conecta na porta serial, ja testei, disso tenho certesa, mas não envia a string para a porta seria.

G

como sabe q nao envia?

Vinicius_Zibetti_Res

Eu sei por que o equipamento que recebe a string com o protocolo, não responde…

G

mas ele não responder não quer dizer q não enviou.

imagine: (só uma analogia)

o cara se chama Pedro.

vc diz: Paulo!!

ele não responde.
significa q vc não falou?
ou q não falou o nome correto?

coloca outra coisa pra escutar e q mostra td q escutou. q ai vc vai ver se falou, e se sim, o q falou.

Vinicius_Zibetti_Res

Então, este equipamento de acordo com o protocolo que estou lendo no manual, quando envio a string, ele deve responder com outra mensagem.

String x = ""; Scanner sc = new Scanner(System.in); while(true){ x = sc.nextLine(); if(x.equals(null) || x.equals("")); else{ System.out.println("OK"); break; } }

Só que fica em loop infinito, ou seja, não esta funcionando.

G

não mostrou nada não?

Vinicius_Zibetti_Res

Não, ou seja, realmente não esta comunicando…
Que frustração cara…

G

Vinicius Zibetti Resko:
Não, ou seja, realmente não esta comunicando…
Que frustração cara…

vc usou o q pra monitorar do outro lado?

Vinicius_Zibetti_Res

Eu utilizei uma saida fisica, ele acende um LEED.

Vinicius_Zibetti_Res

Mais sugestões ??
Por favor.

Vinicius_Zibetti_Res

Consegui fazer, depois de muita, muita briga mesmo, deu certo.

RXTX é uma ótima biblioteca de comunicação e muito rápida também.

Criado 23 de fevereiro de 2012
Ultima resposta 15 de mar. de 2012
Respostas 30
Participantes 7