Bom dia pessoal,
estou com dúvidas na implementação em uma máquina de estado(ME).
Estou fazendo uma aplicação que busca adquirir dados, startando com um trigger, analisar estes dados e mostra-los o resultado gráfico da análise. Bem, para complementar tenho ainda que salvar os dados e gerar um mini relatório em HTML. Todas estes blocos de código estão prontos, porém nõ consigo implementa-lo em uma máquina de estado.
Esta aplicação busca construir uma waterfall, orbita e BODE da partida de um motor.
Abaixo segue como visualizei a ME pela primeira vez:
Uma máquina de estado contendo:
Case 1: Parte de aquisição - Daqmx express adquirindo de 4 canais com trigger no primeiro canal. Constante direcionando para Case 2
Case 2: Parte da análise - FFT e FRF para cálculos e análise dos dados, preparando-os para apresentação. Constante direcionando para Case 3
Case 3: Parte da Apresentação - montagem dos arrays de dados e apresentação dos mesmos nos componentes gráficos. Constante direcionando para Case 1
Loop em paralelo à ME para salvar os dados e construir o relatório.
Dúvida: O fato é que se estivermos no Case de aquisição, o programa estará "preso" na espera da ocorrência de uma trigger, o que impossibilita de manipula-lo caso o motor não gere a mesma. Ex. o motor estiver parado.
Possível solução: baixar o timeout.
Contra: Gerará dados vazios que não sei como manipula-los para evitar que sejam inseridos na análise.
Dúvida: Como posso a qualquer momento executar uma rotina para construção de waterfall?
Possível solução: Utilizar a rotina no loop em paralelo para isto com os dados de uma variável local.
Dúvida: Como posso mudar a seleção de um próximo case, visto que o arranjo feito inicialmente é ciclico:aquisição=>analise=>apresentação=>aquisição=>....?
Possível solução: Criar um case default "em branco" que espera um novo destino.
Contra: Como fazer isto se preciso que ele fique no ciclo somente até eu decidir que é para sair do mesmo.
Dúvida: Como fazer com que possa parar este processo e fazer com que o programa continue rodando para startar outro ciclo de aquisições?
Possível solução: Inserir um loop externo à ME, parando o loop interno à ME, estria retornando ao loop externo e esperando a nova inicialização.
Dúvida: como relacionar uma estrutura de eventos com uma máquina de estados?
Se alguém estiver disposto a enviar um código exemplo para exemplificar a resolução destes problemas(os códigos do labview são muito básicos), a NI poderia lançar mão de exempos de aplicativos mais complexos para exemplificar a interação e resolução de problemas como este.... agradeço....ou se tiver um e-mail de suporte para enviar o código e discutirmos o mesmo...também é possível. Infelizmente não posso postar o código no site.
Agradeço de antemão a alma caridosa que estiver disposta a encarar esta bomba.
Um abraço.
Leonardo de S. Cavadas
Maintenance Engineer and Inspection - Bureau Veritas do Brasil
Engineer Metallurgist with emphasis in Advanced Materials
Technologist in Computer Science