To ferrado me ajudem - Ler dados da porta serial usando javax.comm  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
analyser
JavaEvangelist
[Avatar]

Membro desde: 26/02/2007 09:31:49
Mensagens: 329
Offline

Olá galera to com um mega problema preciso urgente ler dados da porta serial para um trabalho, mais não estou conseguindo se alguem identificar o motivo por favor me ajude, eis o código:


Peguei o exemplo de leitura de um artigo, mais não entendi como ele vai chamar o metodo serialEvent, sendo que não tem nada chamando ele, e todos exemplos que vi de leitura nenhum chama esse metodo, como é possivel??

Abraços

Analyser
nielsen.tekla
Thread.start()
[Avatar]

Membro desde: 16/07/2007 22:41:14
Mensagens: 31
Localização: Natal-RN
Offline

Qual é o erro que esta dando? eu estou usando numa comunicação com CLP e ta tudo tranquilo.

Nielsen C. Damasceno
[Email] [WWW] [Yahoo!] aim icon [MSN] [ICQ]
analyser
JavaEvangelist
[Avatar]

Membro desde: 26/02/2007 09:31:49
Mensagens: 329
Offline

nielsen.tekla wrote:Qual é o erro que esta dando? eu estou usando numa comunicação com CLP e ta tudo tranquilo.


Ai que ta, não esta dando erro, ele apenas não recebe...

Analyser
analyser
JavaEvangelist
[Avatar]

Membro desde: 26/02/2007 09:31:49
Mensagens: 329
Offline

nielsen.tekla wrote:Qual é o erro que esta dando? eu estou usando numa comunicação com CLP e ta tudo tranquilo.


Ai que ta, não esta dando erro, ele apenas não recebe...

Analyser
nielsen.tekla
Thread.start()
[Avatar]

Membro desde: 16/07/2007 22:41:14
Mensagens: 31
Localização: Natal-RN
Offline

Ja tentou debugar na rotina que esta recebendo?
ve se ele esta enviando dados!!!
pode ser erro na rotina de receber dados

This message was edited 1 time. Last update was at 21/09/2007 19:16:20


Nielsen C. Damasceno
[Email] [WWW] [Yahoo!] aim icon [MSN] [ICQ]
Fabio_De_Carli
Entusiasta Java

Membro desde: 06/06/2007 13:19:43
Mensagens: 23
Offline

Da uma olhada nesta dica vc se te ajuda...

Abraços


1) Baixar a API:
Você encontra a API disponível no site:
http://java.sun.com/products/javacomm/index.jsp
Basta baixar a API e realizar os procedimentos de instalação. Após baixar a API, descompactá-la,
você
terá:
o Copiar o arquivo win32com.dll para o diretório C:\JavaSDK\BIN (isto é, o diretório onde o
J2SDK foi instalado no seu PC).
o Copiar o arquivo comm.jar para o diretório C:\JavaSDK\BIN\LIB.
o Copiar o arquivo javax.comm.properties para o diretório C:\JavaSDK\BIN\LIB.
o Em seguida configure o CLASSPATH para que ele reconheça o arquivo comm.jar.


RECONHECENDO AS PORTAS
//....
Enumeration listaDePortas;
listaDePortas = CommPortIdentifier.getPortIdentifiers();
//...
//..
int i = 0; portas = new String[10];
while (listaDePortas.hasMoreElements()) {
CommPortIdentifier ips = (CommPortIdentifier)listaDePortas.nextElement(); portas[i] =
ips.getName();
i++;
}
//..


ABRINDO AS PORTAS
O método getPortIdentifier(String porta) da classe CommPortIdentifier retorna um identificador da
porta escolhida. Precisamos instanciar um objeto para receber esse identificador:
CommIdentifier cp = CommPortIdentifier.getPortIdentifier(minhaPortaEscolhida);
Em seguida criamos uma instância da classe SerialPort utilizando o identificador. Note que uma
conversão deverá ser feita. A porta só pode ser instanciada através desse ?casting? e ao mesmo
tempo abrimos a porta para comunicação:
SerialPort porta = (SerialPort)cp.open("SComm",timeout);
O método open() tem como parâmetros o nome da classe principal (faça isso para não gerar
conflitos) e o valor desejado para timeout. Em seguida, precisamos atribuir fluxos de entrada e saída.
Basta utilizar as classes Abstratas OutputStream e InputStream, já que a classe SerialPort
implementa os métodos de entrada e saída dessas classes para comunicação serial. Para ler dados na
porta serial:
InputStream entrada = porta.getInputStream();
E para escrever dados na porta serial:
OutputStream saida = porta.getOutputStream();
Em seguida precisamos configurar os parâmetros de comunicação serial, para isso utilizamos o
método setSerialPortParams:
porta.setSerialPortParams(baudrate, porta.DATABITS_8, porta.STOPBITS_2,
porta.PARITY_NONE);

ENVIANDO DADOS
Depois de configurar a porta para comunicar e definido o fluxo de saída, podemos comunicar os
dados. Isso é bem simples:
String msg = ?Olá Mundo!?;
saida.write(msg.getBytes());
Thread.sleep(100);
saida.flush();



RECEBENDO DADOS
porta.addEventListener(this);
porta.notifyOnDataAvailable(true);
public void serialEvent(SerialPortEvent ev){
switch (ev.getEventType()) {
//?
case SerialPortEvent.DATA_AVAILABLE: byte[] bufferLeitura = new byte[20];
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);
}
} catch (Exception e) {
System.out.println("Erro durante a leitura: " + e );
}
System.out.println("n.o de bytes lidos : " + nodeBytes ); break; }
}
rafaelpagliuca
Smalltalk

Membro desde: 22/09/2007 02:48:08
Mensagens: 3
Offline

Muito bom esse mini-tutorial do Fabio_De_Carli.

Mas Fábio, não podemos simplesmente descartar esse evento serialEvent e deixar um while(true) num thread separado verificando o tempo inteiro se temos data esperando pra ser inputada??

Por favor gostaria de entender qual a vantagem de utilizar um listener para tal fim!

(Estou perguntando isso pq em um projeto pessoal meu também estou mexendo com envio e recebimento de informações [no caso, via bluetooth]. Estou pronto para atualizar minha aplicação caso eu encontre outras maneiras mais corretas de solucionar o meu problema).

Atenciosamente, Rafael.
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team