| 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!
|
 |
|
|