Fórum Ler Porta Serial #460795
12/11/2013
0
Eu queria saber como ler uma porta serial e pegar os valores dele e separar os dados...
Nunca fiz nada nem parecido, nem sei se ele fica lendo os dados constante ou se manda uma vez e para....
Tentei seguir o exemplo daqui do devmedia mas não deu certo, não lê os dados... sei que o rate é de 19200
Usei um exemplo chamado BlackBox que é mais ou menos o que quero, a diferença é que não vou mostrar num campo e sim pegar cada valor e separar campo à campo.
Rafael Diniz
Curtir tópico
+ 0Posts
12/11/2013
[desativado] Gonçalves
para falar com portas seriais em JAVA você vai trabalhar com SOCKETS.
A Oracle disponibilizou a terceira versão da Java Communications API que permite, entre outras coisas, conexão, controle, taxas de transferência, leitura, gravação, etc ...
Os links abaixo demonstram como realizar leitura e gravação.
http://stackoverflow.com/questions/336714/reading-serial-port-in-java
http://www.java2s.com/Code/Java/Development-Class/COM-Port.htm
Abaixo, o link para a Java Communication API
http://www.oracle.com/technetwork/java/index-jsp-141752.html
Se quiser tirar dúvida de algo que você venha a escrever, coloca aqui que eu te ajudo.
Gostei + 0
14/11/2013
Rafael Diniz
Gostei + 0
26/11/2013
Rafael Diniz
Estou conseguindo ler a porta e tal.. mas estou com problema de lógica...
É assim, tenho dispositivos diferentes, e ele mostra o modelo dele na primeira linha de dados enviados da porta... ai queria pegar esse modelo e enviar para a leitura do buffer para a classe respectiva do modelo.
Tentei usar getters e setters mas da erro, pois parece que cada envio do buffer ele zera as variáveis.
Resumindo, é pegar o modelo nos dados do buffer e depois só mandar os buffers para a classe correta, e não tendo que procurar o modelo toda hora (mesmo que isso seja praticamente impossível)
Gostei + 0
26/11/2013
[desativado] Gonçalves
preciso de mais detalhes. Tem como postar parte do codigo, telas, etc? Senao vai ficar dificil somente com os dados que voce passou ...
Gostei + 0
27/11/2013
Rafael Diniz
Desculpe por postar sem analisar bem, antes
Gostei + 0
27/11/2013
Rafael Diniz
Tenho estes dois métodos que leem a porta serial... o primeiro trata de um jeito mais lento e o outro mais rápido e traz mais valores... só que não posso usar o 2 do jeito que ta pq é utilizado por outro sistema e não quero plagiar...
vc poderia me ajudar com um bom método de ler porta serial? para preencher bem o buffer e rápido e com mais informações como o 2?
public void serialEvent(SerialPortEvent event) {
switch (event.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:
byte[] readBuffer = new byte[2048];
try {
int numBytes = 0;
while (inputStream.available() > 0) {
try
{
synchronized (this) {
wait(10000L);
}
}
catch (InterruptedException e)
{
}
numBytes = inputStream.read(readBuffer);
}
String result = new String(readBuffer);
result = result.substring(1, numBytes);
System.out.println("Lendo ======================================================");
System.out.println(result);
inicio.validaDados(result);
} catch (IOException e) {
System.out.println(e);
}
break;
}
}
public void serialEvent2(SerialPortEvent event)
{
StringBuffer bufferLeitura = new StringBuffer();
int novoDado = 0;
switch (event.getEventType())
{
case 1:
while (novoDado != -1) {
try
{
novoDado = inputStream.read();
if (novoDado == -1) {
break;
}
if ('\r' != (char)novoDado) {
bufferLeitura.append((char)novoDado);
}
}
catch (IOException ioe)
{
System.out.println("ERRO - Erro de leitura serial: " + ioe);
}
}
inicio.validaDados(new String(bufferLeitura));
System.out.println(bufferLeitura + "\n");
}
}
Gostei + 0
27/11/2013
[desativado] Gonçalves
Isto é realmente necessário? Você tentou diminuir este valor? 100 segundos ou 100000L que você colocou é 1 minuto 3 40 segundos por leitura ...
Será que isto não resolveria?
Não tenho como testar teu código porque não tenho (além da USB) nenhuma porta serial, cabo, dispositivo pronto para transmitir e testar, etc ... é um chute.
Gostei + 0
28/11/2013
Rafael Diniz
Gostei + 0
28/11/2013
[desativado] Gonçalves
Gostei + 0
28/11/2013
Rafael Diniz
só que ainda tem dados que não vem...
ainda não consegui identificar esse motivo, que um vem normalmente e o outro não
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)