TRAVAMENTO DE PORTAS COM PARA TROCA DE DADOS
Olá Pessoal, não sei muito bem como escrever sobre este problema que estou passando de forma mais tecnica, porém la vai. Estou atuando em um projeto que tem contato com as portas COM do computador para troca de dados, porém estou tendo alguns problemas de travas as portas por algum motivo e sempre tenho que desplugar e plugar as portas no computador pq elas simplesmentes param de ser listadas como uma porta disponivel para troca de dados. Acredito que elas podem estar parando pq eu não limpo o buffer que faz a troca de mensagens cada vez que termino a rotina que a utilizo.
Alguem ja teve uma experiencia parecida ?
Tentei também achar isso em algum outro site mas acredito que esse problema é muito nichado.
Desde já agradeco.
boa tarde, sr.
qual a série da porta COM? (RS-000, por exemplo) está usando USB ou diretamente a COM? talvez seja só o drive*
qual tecnologia vc está usando para acessar a porta COM? alta abstração ou low level (WinAPI, C/C++) assim sendo, vc está acessando a porta COM diretamente ou usa alguma API específica do SO?
via windows, acesse devmgmt.msc. via linux, sugiro pesquisar, mas no ubuntu eu executo um comando ls
simples:
ls /dev/ttyUSB* /dev/ttyS* /dev/serial/by-id/
está rodando em Windows ou Linux (mas sem docker)?
oq está conectado na porta COM? um Arduino, um leitor de código de barras, ou um dispositivo industrial...?
algum outro processo pode estar tentando acessar a mesma porta ao mesmo tempo?
bom, se a porta não for fechada corretamente, pode ficar "presa" até o SO forçar a liberação, de forma bloqueante. e cobsiderando que se vc n estiver sendo intermediado por um SO (há casos em q isso ocorre), então o sr terá de manipular e matar os objetos q consomem esses recursos, sem intermediários. e digamos q o sr esteja utilizando alguma lib, deve-se monitorar o ciclo de vida de objetos e processos, pois, para algumas libs, a porta pode ficar travada se o buffer de entrada/saída não for limpo corretamente. se estiver usando uma lib, consulte as docs em busca de um método "flush"; geralmente é isso.
a depender das respostas, poderei ajudar mais. contextualize mais a situação.
uma solução rápida é expor uma API REST a partir de qualquer dispositivo conectado via USB, a fim de facilitar o desenvolvimento, não envolver low level mas abstrair melhor.
prontamente, aguardamos retorno.
Meus 2 cents:
Fale um pouco mais sobre o ambiente onde isto ocorre: se windows/linux/esp32/etc, versao do s.o., driver que esta usando, etc.
Este tipo de problema tem toda a cara de ser driver - p.ex. voce tentou o mesmo processo via VM ? Colocar o S.O. que faz a troca de dados em uma VM (p.ex. Virtualbox) e ver se muda alguma coisa.
Outro ponto eh se a serial eh via adaptador usb ou via porta serial fisica - adaptadores USB/Serial podem ser bastante chatos de trabalhar.
Uso linux com balanca serial - e tive algumas dores de cabeca neste sentido.