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… :roll:
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.
[quote=“Luca”]
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[/quote] :twisted:
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.
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.
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 ú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…
:arrow: 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… :twisted: ($$$$), 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…
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.
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…
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 ?
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)
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
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.
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.
eu costumo usar a api rxtx para comuniação serial…eh bem simples de usar…
acho que deveria fazer em java msm kra…podera ter uma sistema multiplataforma e vender para outros depois …o custo vai cair para o cliente se usar um so livre,… e vc pode ganhar mais,…
Olá,
Também estou precisando desenvolver (na linguagem Java) um tarifador para o PABX IntelBras. Este PABX é conectado ao computador pela porta serial. Porém estou com dificuldades, pois não sei como acessar os bilhetes gerados por ele para que eu possa verificar o tempo de ligação de cada ramal. Fiz uma pesquisa e não consegui encontrar nada em java que pudesse me ajudar. Se alguém souber ou tiver uma idéia de como fazer isso em Java e puder me ajudar ficarei muito grato. Obrigado.