em 01-02-2013 11:29 AM
Buenas,
Estou tentando, sem sucesso, utilizar um sistema PXI com 4 placas de aquisição 5105 para adquirir sinais simultaneamente. O problema é que o sistema precisa de alto desempenho, caso contrário utilizaria os blocos NI-TCLK para sincronia e um loop geral para aquisição. Esse modelo acaba sobrecarregando somente um núcleo, fazendo o sistema todo ficar limitado.
Decidi, então, utilizar timed loops, colocando uma 5105 e designando um processador para cada timed loop. Infelizmente, não consigo sincronizar as aquisições, o que é crucial para a aplicação.
Como posso sincronizar a aquisição de cada placa com cada timed loop?
Postei essa dúvida no forum em inglês, caso alguém precise de mais detalhes.
em 01-03-2013 04:36 AM
Bom dia, Giovanno. Tudo bem?
Então como comentei no fórum anterior e verificamos o teu código. O problema está na variáveis locais que você está executando se você passar todos os fios sem essas variáveis, ou seja com os fios direto nas funções e nesse caso não precisará da estrutura de sequência, pois o código já irá fazer isso.
O modo que você estruturou está correto, o único problema são essas variáveis locais mesmo. E outra observação é o gerenciamento de erro do seu código. Para que futuramente, se o código for aumentado.
Atenciosamente
em 01-03-2013 10:54 AM
Boa tarde, Erick,
Não sei se entendi bem a tua dica de remover as variáveis e substituí-las por fios. Há a possibilidade de tu fazer isso no meu código e postar aqui, depois?
Quanto ao gerenciamento de erros, vou deixar para mais adiante do código, depois que resolver esse problema de sincronia. Agradeço a preocupação.
Obrigado!
em 01-04-2013 04:25 AM
Outra coisa que queria saber, os dois controles de stop é necessário? Não entendi, pois um é true e outro é false. Você já fez cursos com a National?
Atenciosamente.
em 01-04-2013 05:17 AM
Bom dia, Erick,
Obrigado pela resposta. Entretanto, ela não ajuda a resolver meu problema. Não sei se fui claro o suficiente com a minha dúvida.
Tem algum meio de fazer as placas adquirirem continuamente, a partir de um único comando de "start", sincronizadamente? Eu precisaria da função de sincronia com algumas características do bloco "niScope Initiate Acquisition". Os blocos de sincronização exigem que o "niTCLK Initiate" seja rodado todo loop, e o ideal seria que ele iniciasse a aquisição e só parasse mediante comando.
Isso é possível?
Att,
Giovanno
em 01-04-2013 06:19 AM
Bom dia. Giovanno. Tudo bem?
Eu verifiquei toda a estrutura. E tem funções que não seria necessário como o Timed Loop, essa estrutura é utilizada em Real-Time. Eu encontrei um guia que você pode estar seguindo para estruturar a sua programação. E é possível adquirir continuamente os seus sinais e outro detalhe é a utilização do Loop For. Você programa com outra linguagem? A estrutura de programação lembra muito C. Segue abaixo o guia.
http://www.ni.com/white-paper/3382/en
Att.
em 01-04-2013 09:49 AM
Boa tarde, Erick,
Eu programo em LabVIEW há quatro anos já, mas não fiz nenhum curso da NI. O timed loop não seria necessário caso a taxa de aquisição não fosse tão alta. Se eu utilizar um while só para adquirir todos os sinais de todas as placas, o software acaba sobrecarregando somente um núcleo do meu i7. Então, recorri a timed loops para atribuir cada placa a um núcleo. A melhora no desempenho foi gritante.
Eu consegui rodar o código com os timed loops e o acionamento individual de cada placa sem sincronia, na velocidade necessária, mas as aquisições obviamente também são sincronizadas, o que não me serve.
Há algum meio de fazer as 4 5105 adquirir ininterruptamente em sincronia, sem precisar de um start a cada loop?
aguardo resposta,
em 01-04-2013 11:09 AM
Bom, Giovanno. Para fazer a sincronização de vários canais do jeito que você deseja é assim como o exemplo acima.
Atenciosamente.
em 01-04-2013 11:12 AM
Segue em anexo o VI.
em 01-10-2013 08:04 AM
Bom Dia Giovanno,
Tente implementar o exemplo da figura abaixo. É o mesmo que o Érick te passou, mas com um loop while temporizado sobre o VI de leitura.
Execute esse VI e monitore o processamento pelo Gerenciador de Tarefas do Windows. Me diga se processamento ainda permanece alto.