| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/02/2004 22:16:32
|
dsiviotti
Virtual Machine Man
![[Avatar]](/images/avatar/b3f61131b6eceeb2b14835fa648a48ff.jpg)
Membro desde: 19/01/2004 01:35:23
Mensagens: 541
Localização: Rio de Janeiro
Offline
|
Oi pessoal,
Tenho um cliente que é uma empresa de telecomunicações que tem um programinha de tarifação telefônica em delphi muito fraquinho. Gostaria de desenvolver um tarifador deste tipo em java. Não tem nada de mais além do fato de eu não ter a menor idéia de como capturar a entrada serial em java. O PABX fica ligado no computador pela porta serial e a cada ligação um "bilhete" é enviado com alguns bytes contendo as informações da chamada. Se alguém souber como eu posso capturar a entrada da serial eu agradeço...
|
Douglas Siviotti |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/02/2004 11:03:12
|
klebergf
JavaGuru
![[Avatar]](/images/avatar/c8afc03d400890791fa62.gif)
Membro desde: 05/11/2003 14:12:07
Mensagens: 224
Localização: Curitiba PR
Offline
|
Existe um API para isso a JavaComm. De uma boa pesquisada sobre ela.
http://java.sun.com/products/javacomm/index.jsp
|
"Onde estão os atos de bravura e rebeldia,
Ternuna guerrada dia-a-dia?
Será que estamos sós?"
(gessisnger/maltz) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/02/2004 11:41:29
|
Luca
Moderador
![[Avatar]](/images/avatar/17e62166fc8586dfa4d1bc0e1742c08b.jpg)
Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline
|
Olá
Conheço bem javax.comm e vou lhe dar uma dica que devia cobrar uma nota:
Já funciona em Delphi a comunicação serial? Então esquece esta parte que já funciona, deixe em Delphi. Faça a parte nova em Java e comunique com o Delphi por sockets ou por JNI.
[]s
Luca
|
Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."
CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/02/2004 14:10:40
|
MedioCore
Debugger
![[Avatar]](/images/avatar/c8c665823fa6d90a064df.gif)
Membro desde: 20/05/2003 13:36:08
Mensagens: 56
Localização: Curitiba
Offline
|
Luca wrote:
Já funciona em Delphi a comunicação serial? Então esquece esta parte que já funciona, deixe em Delphi. Faça a parte nova em Java e comunique com o Delphi por sockets ou por JNI.
[]s
Luca
Pô Luca... com uma dica dessas eh melhor o dsiviotti cobrar de vc...
Usá JNI eh um pé no saco.
Use somente o javax.comm. Vai ter de estudar um pouco mas vai ficar um negócio bem feito. Sem gambiarras.
Tente dar uma olhada no fonte do programa que vc já tem e tente ir convertendo aos poucos.
é isso...
MedioCore
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/02/2004 14:26:39
|
Luca
Moderador
![[Avatar]](/images/avatar/17e62166fc8586dfa4d1bc0e1742c08b.jpg)
Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline
|
Olá
Ei, usar 2 ou mais linguagens não é gambiarra. E dificilmente algo feito com javax.comm (verdadeira gambiarra bugenta) vai ficar melhor do que feito em Delphi ou principalmente em C. Comunicação serial é trabalhoso e custa caro. Se o Delphi já está pronto e funcionando então é só alterar para comunicar com Java.
O JNI é facinho de usar, o único problema é a performance pois os métodos que a API expõe para nosso uso são limitados. As vezes nestes casos com sockets se consegue melhor performance.
PS: Na empresa em que estava até 2001 se usava um driver feito em VB para comunicação serial que funcionava direitinho. A empresa só substituiu pela dificuldade de instalação.
[]s
Luca
|
Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."
CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/02/2004 14:42:52
|
MedioCore
Debugger
![[Avatar]](/images/avatar/c8c665823fa6d90a064df.gif)
Membro desde: 20/05/2003 13:36:08
Mensagens: 56
Localização: Curitiba
Offline
|
Opa,
Como não é gambiarra ? Se vc pode fazer a mesma coisa usando apenas uma unica linguagem , usar um módulo desenvolvido em outra linguagem no minimo não eh recomendado, certo ?!
Lógico, que se a complexidade para desenvolver o tal módulo for muito alta ou inviavel deve-se optar por JNI ou sockets.
JNI é bom ? Sim sim... mão na roda !!
Sockets é bom ? Opa... com certeza...
O que é mais simples ? Javacomm
Já pensou dar suporte nisso tudo depois ?! As pessoas acham que quanto mais tecnologias aplicarem num projeto, melhor ele funionará...
Na boa, o negócio é simplificar...
[]´s
MedioCore
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/02/2004 14:49:33
|
black_fire
Virtual Machine Man
![[Avatar]](/images/avatar/1714726c817af50457d810aae9d27a2e.jpg)
Membro desde: 10/08/2003 17:14:27
Mensagens: 642
Localização: Campinas/SP
Offline
|
Na última empresa que eu trabalhei, fiz uma integração de um painel de Mensagens, porta serial.
Achei a api bem simples, tem a comunicação direta e alguns observers para pegar as respostas.
Não achei nada traumático a implementaçào, pelo contrário, no cd do painel vinha um exemplo em delphi e c++, achei muito mais chato de implementar...
Uma opnião muito particular:
Se vc está trabalhando por projeto, faça em java, afinal se tá funcionando não quer dizer que não pode ser trocado... ($$$$), diga para os kras que é melhor ter um projeto homogêneo...
Se vc é funcionário fixo e o negócio tá funcionando bem, esqueçe, vc vai perder tempo de projeto em uma coisa que já existe. O que vc pode fazer é criar Classes específicas para a comunicação com o delphi, quando vc terminar o projeto, mude as classes e mantenha os metodos que fazem a comunicação, ou seja, comunique com o delphi, pensando em uma mudança para java no fim do projeto...
Um abraço galera....
|
-------------------------------------
Rodrigo G. Tavares de Souza
"When you don't have walls...you don't need Windows..."
-------------------------------------
Acesse meu blog: Migrando de Java para C++
http://rodrigomgsys.wordpress.com
------------------------------------- |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/02/2004 15:00:17
|
Luca
Moderador
![[Avatar]](/images/avatar/17e62166fc8586dfa4d1bc0e1742c08b.jpg)
Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline
|
Olá
Se o driver em Delphi já funciona e está pronto acho que fazer a mesma coisa em Java é desnecessário. Como o javax.comm está longe de ser bom, a solução em Java não há de ser melhor do que a que já está funcionando. É como você bem disse, o negócio é simplificar.
[]s
Luca
|
Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."
CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/02/2004 15:30:19
|
dsiviotti
Virtual Machine Man
![[Avatar]](/images/avatar/b3f61131b6eceeb2b14835fa648a48ff.jpg)
Membro desde: 19/01/2004 01:35:23
Mensagens: 541
Localização: Rio de Janeiro
Offline
|
Na verdade, apenas presto serviço para a empresa em um outro sistema. O tarifador em Delphi é um pacote fechado, por isso do meu interesse, eu queria fazer um outro para substituí-lo. Eu já imaginava que fazer este tipo de coisa em java não era tão simples, ontem dei uma pesquisada aqui no GUJ e li sobre a javacomm.
Pelo que vi do tarifador, existe o sistema de armazenamento em si e um outro pequeno só para capturar a serial. Acho que o mais simples é mesmo fazer um programinha em delphi que leia a serial e o resto (cálculos, relatórios, etc) posso fazer em java.
Na realidade, se eu entendi bem a javacomm é mais ou menos isso que vai acontecer, só que ao invés de um programinha em delphi é uma dll. De qualquer forma haverá confusão entre o java e recursos nativos. Eu acho...
Obrigado pelas dicas...
|
Douglas Siviotti |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/02/2004 16:24:01
|
MedioCore
Debugger
![[Avatar]](/images/avatar/c8c665823fa6d90a064df.gif)
Membro desde: 20/05/2003 13:36:08
Mensagens: 56
Localização: Curitiba
Offline
|
Luca, mudando de assunto...
Já tentou usar JNI pra acessar a inteface serial usando interrupções de hardware ?
A um tempo atras precisei usar JNI pra fazer um FTP usando a porta serial. Toda a comunicação deveria ser feita por interrupções de hardware. Tipo, eu tinha que ter uma dll(feita em C) para enviar e receber bits.
Já mecheu com isso ou conhece alguem que tenha conseguido implementar algo de genero ?
[]´s
MedioCore
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/02/2004 17:03:52
|
Luca
Moderador
![[Avatar]](/images/avatar/17e62166fc8586dfa4d1bc0e1742c08b.jpg)
Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline
|
Olá
Até o Win 98 a gente podia fazer in, out direto nas portas e ler as tabelas de interrução. A partir do Win NT, o Windows não permite mais acesso direto ao hardware as aplicações comuns que são executadas no chamado "user mode".
O micro procesador Intel suporta 4 modos (ou anéis) aonde os programas podem rodar. Os modos permitem programas rodar com níveis de privilégios diferentes para acessar ao hardware a a outros programas em execução.
O Win NT/2000/XP usa apenas 2 modos: modo privilegiado normalmente chamado de "kernel mode" e modo sem privilégio chamado de "user mode". Componentes que rodam no "kernel mode" podem acessar diretamente ao hardware e aos recursos de software do sistema. Na arquitetura NT/2000/XP só os componentes do grupo NT Executive tem este acesso, isto é, o HAL (hardware abstraction layer), o micro kernel, as seções USER e GDI e os device drivers. Todos os programas que não rodam em "kernel mode", isto é, aqueles do "user mode" NÃO podem acessar diretamente ao hardware.
Solução: escrever um device driver. É dificil mas não impossível, resta saber se cabe no orçamento do seu projeto. Geralmente é melhor contratar um especialista pois há um monte de regras para seguir e isto não é fácil. Primeiro precisa fazer download do SDK da Microsoft pois só com o Visual Studio não se consegue fazer. Depois a depuração dá bem mais trabalho do que softwares normais.
Nos tempos do velho DOS fiz vários device drivers para plotters, tablets e outros dispositivos gráficos. Há uns 2 anos atrás fui estudar como fazer um device driver para conseguir verificar o status de impressora paralela e acabei desistindo. Deixei a tarefa para o fabricante da impressora. Em Java é impossível fazer isto só com javax.comm.
Melhor e mais fácil é procurar algo pronto como o SerialIO, veja: http://www.sc-systems.com/. (Não é free)
Outros links:
http://www.beyondlogic.org/ (ótimo, não deixe de visitar. Explica como acessar ao hardware)
http://www.easysw.com/~mike/serial/ (Não é para Win , mas tem toda a teoria)
Linux:
http://wass.homelinux.net/howtos/Comm_How-To.shtml (Uso de rxtx)
PS: Com JNI o Java acessa uma dll que acessa às interrupções. Há que ter cuidado com as questões de timing para não perder caracteres na porta serial.
[]s
Luca
|
Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."
CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/02/2004 17:53:29
|
Luca
Moderador
![[Avatar]](/images/avatar/17e62166fc8586dfa4d1bc0e1742c08b.jpg)
Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline
|
Olá
Resolvi complementar a mensagem anterior porque a API javax.comm suporta comunicação serial baseada em interrupções. Lembrei disto depois de postar a msg anterior porque no ano passado migramos uma aplicação bancária do Win para Linux. Ao usar rxtx para ler/gravar um PINpad serial foi necessário usar pooling pois no rxtx deu encrenca nas interrupções e não havia tempo para descobrir o porque. Isto me diz então que com o pinpad, os eventos no Win eram capturados direitinho.
No seu caso outros problemas podem ter ocorrido já que comunicar com PINpad é simples. Veja alguns problemas de javax.comm citados pelo pessoal do SerialIO: http://www.sc-systems.com/support/jspCommAPI.htm
Um link antigo porém ainda útil: http://www.javaworld.com/javaworld/jw-05-1998/jw-05-javadev_p.html
[]s
Luca
|
Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."
CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/02/2004 18:28:57
|
MedioCore
Debugger
![[Avatar]](/images/avatar/c8c665823fa6d90a064df.gif)
Membro desde: 20/05/2003 13:36:08
Mensagens: 56
Localização: Curitiba
Offline
|
Huummm...
Então, tudo isso sobre o kernel mode user mode eu já tinha lido... Era um projetinho pra facul mesmo e seria feito em win98.
O problema é que eu precisaria fazer os "in" e "out" direto na interrupção e ficar escutando algumas interrupções pra ver estado da linha, estado do buffer etc. Sem nenhuma API por trás.
Depois disso, na camada de enlace implementar um protocolo de janela deslizante.
Depois outra camada de aplicação com funções para o usuário "dir" "get" "put" etc...
Tudo em C... hehehe
Tentei usar Java mas java não acessa interrupções diretamente então veio a idéia de usar jni.
Mesmo assim valeu pelas idéias.
[]´s
Lucas
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/03/2007 12:56:20
|
junior.cefet
Smalltalk
Membro desde: 08/03/2007 12:53:38
Mensagens: 1
Offline
|
Eu peguei um exemplo de aplicação aqui no site para comunicação serial, mas toda as vezes que rodo o aplicativo, ele me diz que não foi possível capturar a porta serial, alguém sabe o porquê disso? Só um detalhe. Testei em 7 computadores e somente 1 ele capturou a porta serial.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/03/2007 03:33:32
|
Sousa_ERS
Smalltalk
Membro desde: 11/03/2007 03:31:00
Mensagens: 1
Offline
|
Amigo, você sabe informar algum site, onde eu possa ter a informação de como fazer uma comunicação entre JAVA e C?
Obrigado!!
|
|
|
 |
|
|