| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/10/2010 13:02:50
|
laudenpower
JavaEvangelist
![[Avatar]](/images/avatar/090d1f9732c52fc3770cba691cff7d11.jpg)
Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline
|
Boa tarde,
Gostaria de saber se alguém já conseguiu utilizar o rxtxcomm para enviar dados (118 caracteres) pela porta serial em tempo menor que 10ms.
Preciso me comunicar em uma rede rs-485 e para não ter problemas no processamento do protocolo do dispositivo preciso escrever extretamente rápido, porém o melhor tempo que eu consegui foi de 11ms utilizando o OutputStreamWriter. Nesse caso estou notando que perco tempo quando eu chamo o método flush da classe (se não chamo ele os dados não chegam ao outro lado da comunicação).
Desde já agradeço a todos pela atenção.
|
Enquanto cultivares teu saber, nada tens a temer!
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/10/2010 13:06:51
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
Qual é a baud rate que você usa? 118 caracteres (118 * 10 bits), a 4800 baud, deve dar 250 milissegundos. Bem mais que os 10 ms que você citou.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/10/2010 13:18:50
|
laudenpower
JavaEvangelist
![[Avatar]](/images/avatar/090d1f9732c52fc3770cba691cff7d11.jpg)
Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline
|
Opa! foi mal esqueci de dar a configuração utilizada na porta serial.
A porta está configurada para:
-Baud: 57600
-Paridade: none
-DataBit: 8
-StopBit: 1
-Controle de fluxo: None
Tava pensando em utilizar o java.nio para tentar otimizar esse tempo.
Alias além do rxtxcomm você conhece mais alguma outra api serial (que não seja a finada java.comm e a giovynet).
|
Enquanto cultivares teu saber, nada tens a temer!
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/10/2010 13:31:02
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
Fazendo as contas ainda não está batendo.
Você quer mandar 118 caracteres (1062 bits, já que você tem 1 stop bit e 8 bits de dados - eu tinha feito a conta de 10 bits porque supunha que você poderia usar 2 stop bits), e isso a 57600 baud dá 18,3 milissegundos - você disse 11, tem alguma coisa errada nessa história aí.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/10/2010 13:32:29
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
Mais uma coisinha - como você iria usar java.nio nisso? Não consigo entender. rxtx não lida com a interface serial como se fosse um arquivo em disco ou um socket, que são as formas que são tratadas por java.nio
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/10/2010 13:47:34
|
laudenpower
JavaEvangelist
![[Avatar]](/images/avatar/090d1f9732c52fc3770cba691cff7d11.jpg)
Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline
|
Pera, tais certo. Eu fiz a medição errada....
Para enviar 73 caracteres eu levo 11ms não 118 como eu havia dito. Nesse caso eu pensei no java.nio por estar ficando sem opção, mas agora depois de ler alguns materiais eu vi que não serve para o meu caso.
Tipo a situação em que eu me encontro é uma rede rs-485 onde o servidor realiza uma comunicação com o dispositivo (e mais outros 4) com um intervalo minimo de 20ms entre uma comunicação e outra. Dessa forma a minha comunicação deve chegar ao servidor antes dele iniciar a comunicação com o próximo dispositivo. Se isso acontecer o protocolo não é respeitado e o software não funciona.
This message was edited 1 time. Last update was at 28/10/2010 14:30:40
|
Enquanto cultivares teu saber, nada tens a temer!
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/10/2010 14:18:51
|
juliocbq
GUJ Expert
![[Avatar]](/images/avatar/153704bb24a28e9a6bb49e8ffde1492e.jpg)
Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Online
|
entanglement wrote:Mais uma coisinha - como você iria usar java.nio nisso? Não consigo entender. rxtx não lida com a interface serial como se fosse um arquivo em disco ou um socket, que são as formas que são tratadas por java.nio
E outra, o código java por melhor ou pior que seja não vai influenciar na velocidade. A biblioteca rxtx é "nativa", ou seja quem manda é ela.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/10/2010 14:21:31
|
laudenpower
JavaEvangelist
![[Avatar]](/images/avatar/090d1f9732c52fc3770cba691cff7d11.jpg)
Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline
|
juliocbq wrote:
entanglement wrote:Mais uma coisinha - como você iria usar java.nio nisso? Não consigo entender. rxtx não lida com a interface serial como se fosse um arquivo em disco ou um socket, que são as formas que são tratadas por java.nio
E outra, o código java por melhor ou pior que seja não vai influenciar na velocidade. A biblioteca rxtx é "nativa", ou seja quem manda é ela.
Pois é, minha ficha já caiu.
Agora tenho que achar uma forma de melhorar esse tempo. Já tivesse que fazer algo assim?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/10/2010 14:42:23
|
juliocbq
GUJ Expert
![[Avatar]](/images/avatar/153704bb24a28e9a6bb49e8ffde1492e.jpg)
Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Online
|
laudenpower wrote:
juliocbq wrote:
entanglement wrote:Mais uma coisinha - como você iria usar java.nio nisso? Não consigo entender. rxtx não lida com a interface serial como se fosse um arquivo em disco ou um socket, que são as formas que são tratadas por java.nio
E outra, o código java por melhor ou pior que seja não vai influenciar na velocidade. A biblioteca rxtx é "nativa", ou seja quem manda é ela.
Pois é, minha ficha já caiu.
Agora tenho que achar uma forma de melhorar esse tempo. Já tivesse que fazer algo assim?
Não há muito o que fazer, porque o dispositivo com o qual você vai se comunicar é quem vai ditar a taxa de transferência de bits.
Agora se o hardware é projeto seu ae você pode configurar a taxa que achar melhor.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/10/2010 14:49:19
|
laudenpower
JavaEvangelist
![[Avatar]](/images/avatar/090d1f9732c52fc3770cba691cff7d11.jpg)
Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline
|
juliocbq wrote:
laudenpower wrote:
juliocbq wrote:
entanglement wrote:Mais uma coisinha - como você iria usar java.nio nisso? Não consigo entender. rxtx não lida com a interface serial como se fosse um arquivo em disco ou um socket, que são as formas que são tratadas por java.nio
E outra, o código java por melhor ou pior que seja não vai influenciar na velocidade. A biblioteca rxtx é "nativa", ou seja quem manda é ela.
Pois é, minha ficha já caiu.
Agora tenho que achar uma forma de melhorar esse tempo. Já tivesse que fazer algo assim?
Não há muito o que fazer, porque o dispositivo com o qual você vai se comunicar é quem vai ditar a taxa de transferência de bits.
Agora se o hardware é projeto seu ae você pode configurar a taxa que achar melhor.
Mas nesse caso, existe alguma forma de eu baixar o tempo de escrita? Pelo que eu andei vendo o servidor foi desenvolvido em VB, nesse caso acho que a manipulação de porta serial deve ser muito mais apurada pelo fato de ser algo que já além de rodar nativo ainda tem a vantagem de utilizar o SO de uma maneira melhor para escrever na porta.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/10/2010 14:52:24
|
juliocbq
GUJ Expert
![[Avatar]](/images/avatar/153704bb24a28e9a6bb49e8ffde1492e.jpg)
Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Online
|
laudenpower wrote:
juliocbq wrote:
laudenpower wrote:
juliocbq wrote:
entanglement wrote:Mais uma coisinha - como você iria usar java.nio nisso? Não consigo entender. rxtx não lida com a interface serial como se fosse um arquivo em disco ou um socket, que são as formas que são tratadas por java.nio
E outra, o código java por melhor ou pior que seja não vai influenciar na velocidade. A biblioteca rxtx é "nativa", ou seja quem manda é ela.
Pois é, minha ficha já caiu. Agora tenho que achar uma forma de melhorar esse tempo. Já tivesse que fazer algo assim?
Não há muito o que fazer, porque o dispositivo com o qual você vai se comunicar é quem vai ditar a taxa de transferência de bits. Agora se o hardware é projeto seu ae você pode configurar a taxa que achar melhor.
Mas nesse caso, existe alguma forma de eu baixar o tempo de escrita? Pelo que eu andei vendo o servidor foi desenvolvido em VB, nesse caso acho que a manipulação de porta serial deve ser muito mais apurada pelo fato de ser algo que já além de rodar nativo ainda tem a vantagem de utilizar o SO de uma maneira melhor para escrever na porta.
Deixa eu entender uma coisa primeiro. Você está usando rs232 para comunicação(porta serial)? O servidor que você está dizendo é uma máquina na rede ou um hardware específico? Essa comunicação é pela rede?
This message was edited 1 time. Last update was at 28/10/2010 14:53:48
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/10/2010 15:01:16
|
laudenpower
JavaEvangelist
![[Avatar]](/images/avatar/090d1f9732c52fc3770cba691cff7d11.jpg)
Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline
|
juliocbq wrote:
laudenpower wrote:
juliocbq wrote:
laudenpower wrote:
juliocbq wrote:
entanglement wrote:Mais uma coisinha - como você iria usar java.nio nisso? Não consigo entender. rxtx não lida com a interface serial como se fosse um arquivo em disco ou um socket, que são as formas que são tratadas por java.nio
E outra, o código java por melhor ou pior que seja não vai influenciar na velocidade. A biblioteca rxtx é "nativa", ou seja quem manda é ela.
Pois é, minha ficha já caiu.
Agora tenho que achar uma forma de melhorar esse tempo. Já tivesse que fazer algo assim?
Não há muito o que fazer, porque o dispositivo com o qual você vai se comunicar é quem vai ditar a taxa de transferência de bits.
Agora se o hardware é projeto seu ae você pode configurar a taxa que achar melhor.
Mas nesse caso, existe alguma forma de eu baixar o tempo de escrita? Pelo que eu andei vendo o servidor foi desenvolvido em VB, nesse caso acho que a manipulação de porta serial deve ser muito mais apurada pelo fato de ser algo que já além de rodar nativo ainda tem a vantagem de utilizar o SO de uma maneira melhor para escrever na porta.
Deixa eu entender uma coisa primeiro.
Você está usando rs232 para comunicação(porta serial)?
O servidor que você está dizendo é uma máquina na rede ou um hardware específico?
Sim estou usando rs232 em um barramento rs485 (nesse caso muda o padrão elétrico, mas ta valendo). O servidor é um aplicativo feito em VB que fica realizando uma comunicação (query) em cada dispositivo do barramento (são 5) verificando se ocorreu algum evento (pressionamento de um botão por exemplo). Meu objetivo é tomar o lugar de um desses dispositivos (que são hardwares específicos) e agir como se fosse um deles emulando exatamente o protocolo que o dispositivo real utiliza. O protocolo já foi "desvendado" utilizando um sniffer de porta serial, mas agora falta sincronizar a troca de comunicação, sendo que nesse caso se eu comunicar na vez de outro dispositivo da rede o processo de comunicação não acontece.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/10/2010 15:08:50
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
RS-485 serve para criar uma espécie de rede industrial via interface serial. É realmente meio tosco - veja http://en.wikipedia.org/wiki/EIA-485 - e cada sistema normalmente tem de definir como é que um computador fala com os outros, via half-duplex. Normalmente você tem um computador central, que fala com vários dispositivos.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/10/2010 15:17:02
|
laudenpower
JavaEvangelist
![[Avatar]](/images/avatar/090d1f9732c52fc3770cba691cff7d11.jpg)
Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline
|
Realmente, o negócio é bem tosco mesmo, mas nesse caso esse é o primeiro passo de migração desse sistema. Tipo eu tava precisando gastar o mínimo de tempo possível para não ter problemas na comunicação do outro dispositivo, sendo que já enxuguei tudo que podia no software e só falta isso. Tipo tava medindo e para realizar a leitura de um bloco de 97 caracteres levo menos de 10ms mas a escrita de 73 caracteres ferra tudo, pois leva 11 ms. Pelo tanto de coisa que eu já tentei to ficando sem opção. E tem mais uma tipo não é sempre que eu estoro o tempo de escrita na maioria das vezes eu consigo escrever no tempo certo.
|
Enquanto cultivares teu saber, nada tens a temer!
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/10/2010 15:22:09
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
Se você puser um osciloscópio na linha, provavelmente vai ver que deve haver um intervalo significativo entre o tempo em que você recebe a mensagem do servidor e o tempo em que os bytes são jogados no fio. Se isso estiver ocorrendo, não adianta você se preocupar com rxtx, e sim com o tempo de processamento da mensagem em si.
Estou chutando que você está é com problemas para receber a mensagem, não para mandá-la. Se for isso, provavelmente você terá de ver como é que se recebe algo via rxtx e isso não fique "muito" bufferizado.
|
|
|
 |
|
|