Mensagens enviadas por: laudenpower
Índice dos Fóruns » Perfil de laudenpower » Mensagens enviadas por laudenpower
Autor Mensagem
Acho que o mercado local é quem vai determinar qual o tipo de sistema mais lucrativo você deverá desenvolver.
A NF-E é uma boa pedida mas penso que é muito burocrático o desenvolvimento (para conseguir legalizar e tudo mais).
Procure fazer um estudo do mercado primeiro para saber o que o mesmo está pedindo.

Espero ter ajudado
Sei que não é o assunto do tópico, mas como vi a forma que estais aprendendo a lidar com JTable me atrevo a lhe fazer uma recomendação...

Qualquer coisa que pensares fazer com tabelas em swing, te aconselho a fazer sem a ajuda da IDE, simplesmente por que ela te monta um código monstro que provavelmente não será alterado sem a ajuda dela. Ao invés disso procure ler sobre AbstractTable model que é a forma mais profissional que existe de se trabalhar com tabelas em swing.

Aqui mesmo no guj existe um artigo falando sobre isso e ja adianto, é chato pacas no início mas o resultado é muito mais interessante do que deixar na mão da IDE.

Espero ter ajudado de alguma forma.

Abraço e sucesso nos estudos
Nesse caso o método receive está dentro de um while com um InputStream chamando um read?

Se for isso ele vai ficar conectado até o servidor desconectar, ou então o próprio socket fechar a conexão.

Outra coisa que notei é que se a situação acima se confirmar, vais ter duas threads inacessíveis pois no loop ao dar new nas threads você troca a referência da thread já criada pela nova thread.
soned wrote:Sim, eu estou usando um conversor usb-serial.

segue abaixo o código:



Coloca então aquele código que te falei.
Se você utilizar adaptadores usb<->serial utilize o seguinte método:
portaSerial.notifyOutputEmpty(true)

Teria como mostrar o código para melhor visualização?
Primeiro como o Vinny mesmo disse procure nos apresentar o protocolo.

Segundo você pode utilizar o método read da classe InputStream que te retorna o decimal do caracter, dessa forma vc lê todos os caracteres e com base no protocolo junta em uma palavra apenas.
Estava instalando o qtcreator depois da dica do julio e ao tentar compilar a api de porta serial que o mesmo indicou tenho o seguinte erro:



O que poderia ser?
juliocbq manda o teu mail que eu te mando a imagem, pois não tenho lugar para fazer upload para mostrar a imagem.
juliocbq wrote:
laudenpower wrote:Bom, vou desfiar meu rosário...
Tenho um servidor feito em vb que realiza uma consulta via serial rs485 para 5 dispositivos diferentes e com seus respectivos endereços.
Acontece que o meu objetivo é "tomar" o lugar de um desses 5 dispositivos, e para isso eu preciso emular o protocolo de comunicação dele.
A parte de emular o protocolo já foi realizada, porém o servidor realiza uma consulta de status dos dispositivos em um intervalo de 30ms entre um dispositivo e outro, e a consulta de status consiste em um pacote de 12 caracteres, onde está contido o endereço do dispositivo (para que o mesmo responda na sua vez).
Essa consulta é realizada em todos os dispositivos pelo servidor e quando acontece algo a algum dispositivo, esse deve responder assim que recebe o pacote de consulta contendo o seu endereço.
Então o dispositivo possui 30ms para realizar o envio do comando que indica a ocorrencia do evento nele (como o pressionamento de uma botoeira, por exemplo).
Nesse caso se o dispositivo demora mais de 30ms para devolver o comando referente ao evento ocorrido, o servidor acaba recebendo esse comando durante a consulta de outro dispositivo, invalidando assim o envio do dispositivo e quebrando o protocolo.

Resumindo: Preciso enviar um comando para o servidor numa faixa máxima de 30ms depois de receber o comando de consulta com o endereço do dispositivo emulado, pois se isso não acontecer o servidor passa a consultar o proximo dispositivo e o comando enviado é invalidado pelo servidor.

Tentei fazer isso em: Java, VB e delphi6 falhei miseravelmente em todos eles.


Nesse caso a forma que o C++ utiliza para manipular porta serial é a mesma do java (com rxtx), VB e delphi? (Nesse caso o C++ utiliza apenas a api do windows ou existe outra forma?).

Posso estar errado, mas não creio que o c++ vá resolver a sua situação. Todas essas opções que você usou(java, delphi, vb) usam a mesma api do windows internamente.


Nesse caso c++ utiliza a api do windows também?
thingol wrote:Se seu dispositivo requer que a resposta seja enviada em no máximo 30 ms, eu diria que é necessário deixar só essa parte que recebe a requisição e envia uma resposta (qualquer que seja ela) em uma thread com a prioridade RealTime (as outras threads não devem usar essa prioridade).

Esse é um dos poucos casos em que é absolutamente necessário alterar a prioridade de uma thread.

Atenção! Atenção! Atenção! Essa thread deve fazer quase nada, exceto pelo fato de responder rapidamente à requisição do dispositivo. Qualquer regra de negócio, etc, deve ser feita fora dessa thread.

(Por que é que você não precisaria disso se sua thread ficasse escutando um socket ou esperando ler de um arquivo? É que nesses dois casos o Windows já eleva a prioridade da thread que está esperando ler de um socket, ou ler de um arquivo, para uma prioridade bem alta. Uma vez que o socket tenha sido lido ou o arquivo tenha sido lido, então a prioridade baixa automaticamente. Mas no caso de uma interface serial, isso não ocorre. )


Nesse caso essa estratégia devo aplicar em c++ né?
Nesse caso eu também teria que cuidar da thread de recebimento de dados? pois se eu demorar muito nessa hora eu não terei tempo para escrever.
Nesse caso em termos de performance ele se encaixa na situação que relatei ao vinny?
O code blocks funcionou corretamente, tava dando erro por que eu não apontei a pasta do projeto. Agora to lendo sobre c/c++ nesse caso pude observar que a sintaxe é muito próxima do java (o que prova que java "chupinhou" a sintax dos caras )
Nem me fale esse projeto é de longe o mais porre que já tive.

Tipo em delphi enxugamos tudo e mais um pouco, fizemos todas as verificações da mensagem (como o endereço a qual ela se destina por exemplo) direto pelo indice da String, utilizamos inclusive uma dll chamada inpout32.dll que manipula direto os pinos da porta e nada adiantou.
Nesse caso tens um exemplo de como utilizar porta serial usando c++ e como se configura o code blocks? No caso do code blocks, ele ta dando um erro que não deixa salvar o projeto.

Agradeço a atenção.
Tipo pelo que já foi verificado tudo indica ser a porta, pois o código foi extensamente revisado e tudo que poderia indicar perda de performance (como loops de verificação de caracter entre outras coisas) foi retirado. Tipo a estratégia de leitura da porta serial é a de pooling ou seja a porta é verificada constantemente para verificar se chegou dados (isso é realizado sem nenhum tipo de sleep).
Bom, vou desfiar meu rosário...
Tenho um servidor feito em vb que realiza uma consulta via serial rs485 para 5 dispositivos diferentes e com seus respectivos endereços.
Acontece que o meu objetivo é "tomar" o lugar de um desses 5 dispositivos, e para isso eu preciso emular o protocolo de comunicação dele.
A parte de emular o protocolo já foi realizada, porém o servidor realiza uma consulta de status dos dispositivos em um intervalo de 30ms entre um dispositivo e outro, e a consulta de status consiste em um pacote de 12 caracteres, onde está contido o endereço do dispositivo (para que o mesmo responda na sua vez).
Essa consulta é realizada em todos os dispositivos pelo servidor e quando acontece algo a algum dispositivo, esse deve responder assim que recebe o pacote de consulta contendo o seu endereço.
Então o dispositivo possui 30ms para realizar o envio do comando que indica a ocorrencia do evento nele (como o pressionamento de uma botoeira, por exemplo).
Nesse caso se o dispositivo demora mais de 30ms para devolver o comando referente ao evento ocorrido, o servidor acaba recebendo esse comando durante a consulta de outro dispositivo, invalidando assim o envio do dispositivo e quebrando o protocolo.

Resumindo: Preciso enviar um comando para o servidor numa faixa máxima de 30ms depois de receber o comando de consulta com o endereço do dispositivo emulado, pois se isso não acontecer o servidor passa a consultar o proximo dispositivo e o comando enviado é invalidado pelo servidor.

Tentei fazer isso em: Java, VB e delphi6 falhei miseravelmente em todos eles.
A diferença que preciso é de 30ms em um baudrate de 57600 8 databit 1 stop bit e paridade none.

Será que consigo isso?

O tamanho médio do pacote de dados é de 73 caracteres.

Confesso que só estou tentando c++ por que já tentei em delphi, vb e java e não consegui em nenhuma delas!
 
Índice dos Fóruns » Perfil de laudenpower » Mensagens enviadas por laudenpower
Ir para:   
Powered by JForum 2.1.8 © JForum Team