| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2007 18:14:13
|
analyser
JavaEvangelist
![[Avatar]](/images/avatar/d5e9d9e23447e1907c70ac5d9b29edcc.jpg)
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2007 18:59:59
|
nielsen.tekla
Thread.start()
![[Avatar]](/images/avatar/005fa89da7d48e0c0cd6536000ed2cb5.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2007 19:09:03
|
analyser
JavaEvangelist
![[Avatar]](/images/avatar/d5e9d9e23447e1907c70ac5d9b29edcc.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2007 19:10:21
|
analyser
JavaEvangelist
![[Avatar]](/images/avatar/d5e9d9e23447e1907c70ac5d9b29edcc.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2007 19:15:12
|
nielsen.tekla
Thread.start()
![[Avatar]](/images/avatar/005fa89da7d48e0c0cd6536000ed2cb5.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2007 21:59:48
|
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; }
}
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/09/2007 03:12:31
|
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.
|
|
|
 |
|
|