LusoRobótica - Robótica em Português

Software => Software e Programação => Tópico iniciado por: samc em 19 de Dezembro de 2017, 22:28

Título: Software para captura de dados (Serial COM) com timestamp
Enviado por: samc em 19 de Dezembro de 2017, 22:28
Viva, foi um pouco difícil decidir que título em português servia para explicar a ajuda que estou a pedir... Por isso vou tentar explicar a situação de forma a ver se alguém me consegue dar umas dicas.

Recebi esta semana uma dummy load ajustável/"programável" e uma das features extra é que é possível utilizar a comunicação serial num dos modos (é transmitido o valor da tensão da carga com uma precisão de 0.01V)
Após fazer vários tentativas e experimentar as várias combinações das opções do software de captura de dados (o software com que consegui ter melhor resultados foi com o RealTerm) finalmente lá consegui ler corretamente os valores.
Agora o meu próximo passo seria fazer uma captura de dados para um ficheiro, de forma a depois poder traçar um gráfico em função do tempo.
O meu problema é que não conheço nenhum software que realize essa tarefa de uma forma mais eficaz. Os resultados que tive com o RealTerm foram muito insatisfatórios (devido à minha "noobice" nestas matérias): os dados não ficaram separados por grupo de bytes e o timestamp apenas foi aplicado no início (fiz uma captura de 10 segundos)

Alguém conhece algum software que me possa indicar para fazer esta captura?



Em anexo deixo algumas imagens dos resultados obtidos.
O formato dos dados é:
Código: [Seleccione]
byte 1 - tensão antes do ponto decimal   byte 2 - tensão após ponto decimal   byte 3 - valor lógico de controlo => 1 se não houver errosNeste caso pode-se ver nas imagens em anexo a ser medida uma tensão de 5.06V

Deixo também uma imagem que fiz com instruções para ajudar a quem tiver uma dummy load igual e quiser experimentar essa funcionalidade (não precisa de perder tempo a pesquisar)

Obrigado desde já pelas respostas
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: Njay em 20 de Dezembro de 2017, 01:46
Bom, eu fazia isso em TCL, claro :D

Sei lá, começava por abrir um ficheiro de texto pa mandar pa lá as leituras

set fd  [open myfile.txt w]

Depois abria e configurava a COMx (digamos que x = 5):

set sd  [open {\\.\com5} r]
fconfigure $sd -buffering full -buffersize 3 -translation binary -mode 115200,none,8,1


E depois entrava num loop simples a ler os dados da COM e a enviá-los para um ficheiro:

while 1  {
    binary scan [read $sd 3] ccc parteInteira parteDecimal error
    if {$error != 1}  {
        puts "A leitura retornou erro, vou bazar"
        exit
    }
    puts $fd $parteInteira.[format %02i $parteDecimal]
    flush $fd
}


Isto é um loop infinito mas dá para parar com CTRL+C. Isto foi tudo feito de cabeça e portanto pode ter erros, mas se quiseres experimentar a gente afina isso.

Tenho aqui um zip com um interpretador de TCL pequeno e que não é preciso instalar:

https://lusorobotica.com/index.php?topic=8032.msg90559#msg90559

Há outras linguagens de scripting/alto nível em que é possível fazer este tipo de coisa facilmente.
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: vasco em 20 de Dezembro de 2017, 10:09
Se calhar o Arduino IDE (sim, eu sei que é uma resposta estranha) é capaz de te fazer um gráfico disso automaticamente, nunca experimentei, não sei se dá para processar valores que vêm todos na mesma linha (sem um \n ou \r a separar), mas pode ser que sim.
Fora isso, perl, python ou tcl, é à escolha.

Nota: só usei tcl nos tempos do telnet e dos modems em que dava jeito usar o expect para falar com essas coisas, se não fosse a msg do Njay nem me lembraria da sua existência. nice!  ;D

Ainda existe o Visual Basic ? :-) Acho que ainda não o usei no sec XXI :-) Mas pelo que me lembro era relativamente trivial fazer esse tipo de coisa.

É irritante o timestamp só aparecer uma vez, a única ideia que tenho é fazer o close e re-open da COM de x em x bytes, mas a essa velocidade isso implica perder umas quantas leituras.
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: KammutierSpule em 20 de Dezembro de 2017, 10:21
Parece magia aí o código TCL! :P
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: samc em 20 de Dezembro de 2017, 11:35
@Njay clap clap  ;)

Óptima sugestão com direito a código e tudo, mas procurava mesmo um software que fizesse esse tratamento de dados. É que na minha cabeça, isto é algo tão comum que quase de certeza certeza já existiria um software completo e com várias opções extra para realizar esta tarefa. Comparo isto a caso necessitasse de desenhar um gráfico com os dados, não valeria estar a pena a perder tempo precioso e "inventar a roda novamente" com várias opções já existentes.

Caso precisasse de fazer um tratamento de dados muito específico onde na minha cabeça só conseguira realizar tal tarefa através de um software personalizado, iria usar o MATLAB que é onde estou mais confortável para fazer isso (nunca usei TCL na minha vida). Mas estava com medo de estar a perder tempo desnecessariamente com algo que podia ser feito através do uso de uma aplicação que de certeza estaria mais completa e mais profissional do que qualquer script que eu escrevesse
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: LVirtual em 20 de Dezembro de 2017, 15:27
eu tenho um softare feito por mim para isso :)
ate mete os dados recebidos na porta serie num ficheiro excel em tempo real e tudo e ate gera graficos.
diga-se de passagem que foi o meu maior desafio em visual basic 6.0 porque me obrigava a fazer leituras a 19600 bauds...
e ficou mais que optimo, foi tambem o meu primeiro software vendido a alguem. ;)

alem disso permite com poucas mexidas no codigo recortar todos os campos de dados de forma que os mesmos sejam lidos num grafico em tempo real
e com o formato que for necessario.

se quiseres experimentar o dito cujo de forma free trial basta mandares pm ;)
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: samc em 20 de Dezembro de 2017, 16:14
Obrigado pela "oferta" LVirtual  ;)
Estou a ver que vou ter mesmo de meter mãos à obra e criar uma app simples em Node.js para realizar essa leitura.
O node.js é de certa forma o meu python  ::) nunca me cativou para aprender e sei que seria uma mais-valia, mas fez-me sempre alguma confusão escrever uma linguagem com base na indentação do código, prefiro usar as chavetas e ter uma sintaxe mais próxima do C...

Estive a resistir a isto porque tenho ainda de certa forma o trauma do desenvolvimento desnecessário, para aí no início dos anos 2000, quando tive o meu primeiro PC e o acesso à internet era muito limitado, perdi muitas horas a desenvolver um software para uso pessoal (curiosamente em VB6 como o LVirtual) de gestão e catalogação da minha coleção de jogos.
Passado não muito pouco tempo, quando comecei a ter um acesso mais comum à internet, "descobri" que existiam muitos e melhores programas de catalogação e deixei de usar o software que tinha desenvolvido.
Este foi apenas um dos muitos exemplos de situações similares que aconteceram na minha vida.

PS: por acaso fiquei curioso e fui experimentar se o executável ainda corria passados todos estes anos e com a excepção da ajuda (formato WinHelp que ficou obsoleto) ainda "está funcional". Fica a partilha so screenshot que trás ainda algumas recordações para alguns, com aquela interface tão datada... Windows XP style  :P
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: jm_araujo em 20 de Dezembro de 2017, 16:25
Há aqui meia duzia de recomendações:
https://arduino.stackexchange.com/questions/1180/serial-data-plotting-programs
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: LVirtual em 20 de Dezembro de 2017, 16:36
Obrigado pela "oferta" LVirtual  ;)
Estou a ver que vou ter mesmo de meter mãos à obra e criar uma app simples em Node.js para realizar essa leitura.
O node.js é de certa forma o meu python  ::) nunca me cativou para aprender e sei que seria uma mais-valia, mas fez-me sempre alguma confusão escrever uma linguagem com base na indentação do código, prefiro usar as chavetas e ter uma sintaxe mais próxima do C...

Estive a resistir a isto porque tenho ainda de certa forma o trauma do desenvolvimento desnecessário, para aí no início dos anos 2000, quando tive o meu primeiro PC e o acesso à internet era muito limitado, perdi muitas horas a desenvolver um software para uso pessoal (curiosamente em VB6 como o LVirtual) de gestão e catalogação da minha coleção de jogos.
Passado não muito pouco tempo, quando comecei a ter um acesso mais comum à internet, "descobri" que existiam muitos e melhores programas de catalogação e deixei de usar o software que tinha desenvolvido.
Este foi apenas um dos muitos exemplos de situações similares que aconteceram na minha vida.

PS: por acaso fiquei curioso e fui experimentar se o executável ainda corria passados todos estes anos e com a excepção da ajuda (formato WinHelp que ficou obsoleto) ainda "está funcional". Fica a partilha so screenshot que trás ainda algumas recordações para alguns, com aquela interface tão datada... Windows XP style  :P

esse tipo de bases de dados tambem eu fiz quando andava a aprender a mexer no Vb 6 :)

gosto do winhelp e do xp style :)
alias tenho os meus "Sevens" configurados ao modo do XP, nao gosto de tantas mariquices visuais como a MS obriga a ter agora...

podes sempre formatar o firmware para enviar os dados para a porta serie em formato csv ou seja separado por virgulas e depois meteres o velhinho hyperterminal a receber os dados e gravar num ficheiro e depois meteres o excell a trabalhar os dados em forma de grafico, mas isso vai-te causar um diferimento na analise dos dados.
se queres poder analisar os dados em tempo real vais ter sempre que criar uma aplicaçao para pc que te trate os dados na forma visaul que precisares em tempo real. Quanto a isso nao ha nada a fazer...


um adicional ao texto:

reconheço perfeitamente bem esses ficheiros com estenxao frx e frm por tras da imagem da BDJogos.exe... ;)
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: Njay em 20 de Dezembro de 2017, 18:24
Se deres extensão CSV ao ficheiro que sai do script, ele é lido pelo excel.

Parece magia não, é magia ;D
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: LVirtual em 20 de Dezembro de 2017, 18:30
Se deres extensão CSV ao ficheiro que sai do script, ele é lido pelo excel.

Parece magia não, é magia ;D

se nao tiver os campos de dados separados por virgulas ou espaços o excell faz-te um manguito a ler o ficheiro...
ou entao mete todo o conteudo numa so celula...
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: Njay em 20 de Dezembro de 2017, 18:36
Só há 1 coluna, por isso não é preciso separador.
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: LVirtual em 20 de Dezembro de 2017, 18:38
Só há 1 coluna, por isso não é preciso separador.

e como é que vais fazer para ajeitar os valores numa coluna unica, se nao estiverem separados por um espaço ou virgula?
é que o excell usa a funçao split array que existe em muitas linguagens para transpor os valores para uma ou mais colunas...

se ele nao souber qual o caracter que separa as colunas mete tudo dentro de uma unica celula ao abrir o ficheiro.
nos ficheiros csv o separador padrao é a virgula. por isso mesmo é que o formato csv é um standard no tratamento estatistico de dados e nao só...
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: Njay em 20 de Dezembro de 2017, 18:55
Estou a falar do problema do samc quer resolver, só há um valor para logar, uma tensão.
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: jm_araujo em 21 de Dezembro de 2017, 09:59
Um aparte:
Porque não tinhas indicado qual o modelo, fui à pesquisa e acho que é igual ao deste review:
http://lygte-info.dk/review/Review%20Electronic%20load%2060W%20UK.html

Consegue-se encontrar o mesmo à venda por volta de 13€ no ebay/ali procurando por "60W load" :
    https://www.ebay.com/itm/253019967332
    https://pt.aliexpress.com/item/9-99A-60W-30V-Constant-Current-Electronic-Load-Discharge-Battery-Capacity-Tester/32749298179.html

Videos:
Review:
https://www.youtube.com/watch?v=snROh2acybs
Reverse Engineer:
https://www.youtube.com/watch?v=KYncNH8_m70
Mods:
https://www.youtube.com/watch?v=K-7kgfbH-eI

E uma implicância minha é que se uma carga é programável não devia ser uma "dummy load". Para mim o termo "dummy load" devia ser usado só para as cargas passivas, tipo estas:
(https://is.alicdn.com/img/pb/670/130/552/552130670_720.jpg) (https://kc9on.com/wp-content/uploads/2017/07/SMD-DUMMY-BNC-TOPs.jpg)
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: samc em 21 de Dezembro de 2017, 12:17
Obrigado pelo link das diversas opções de software @jm_araujo, vão dar-me jeito no futuro
E sim tens toda a razão, o mais correto não seria chamar isto de apenas uma "dummy load". Antes de ter este módulo, utilizava sim uma "dummy load" deste género:
(https://i.ebayimg.com/images/g/24oAAOSwo3pWdIwT/s-l300.jpg)
Mas como não quis estar a utilizar o palavrão "Constant Current Adjustable Electronic Load" utilizei a uma abreviatura comum  ;)
Ah e o módulo que comprei é esse mesmo. Já ouvi dizer que há alguns módulos com menos qualidade (cópia dos "originais") e que não funcionam muito bem ou cujo dissipador não está muito bem montado, mas para já ainda não tive problemas com a minha compra (custou cerca de 13 euros no dia 11/11).


Acabei por tirar uns minutos e escrever um script simples para exportar para CSV (que era o que pretendia para depois ter a liberdade de analisar os dados no Excel)
Deixo aqui o script (que está muito simples e sem grande tratamento de erros -> foi escrito em minutos) para quem quiser utilizar, pelo menos sempre serviu para experimentar pela primeira vez a biblioteca Node-Serialport
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: samc em 21 de Dezembro de 2017, 13:22
A utilização do script é bastante simples (ver imagem em anexo). Como foi algo feito apenas para uso pessoal não existem opções para configuração, as definições são realizadas através das alterações no código (na secção indicada na imagem).
Basta correr o script e ver o resultado na consola da lista de portas serial no sistema e copiar e colar o nome da porta desejada  no código (no meu caso /dev/tty.wchusbserial1410)
O valor '1000' na linha 67 indica o intervalo de escrita de dados. Como não preciso de um log poluído com dados em excesso, coloquei um valor de 1000 milissegundos (na prática até é um valor alto demais para depois realizar a monitorização da descarga de uma bateria porque não preciso de dados ao segundo para ter uma ideia geral do comportamento da bateria).
O CSV por omissão está definido para o formato utilizado em Portugal (para não ter trabalho a importar os dados para o Excel): com ponto e vírgula como separador e vírgula como ponto decimal

Qualquer questão é só depois colocar aqui  ;)
Título: Re: Software para captura de dados (Serial COM) com timestamp
Enviado por: senso em 21 de Dezembro de 2017, 16:52
Python e matplotlib e nem precisas de excell para nada.