Sfondo
Ho un apparecchio di prova con un numero di dispositivi di acquisizione dati / comunicazione su di esso che viene usato come test di fine linea per un prodotto.
A causa di tutti i vari sensori usati nel banco e della necessità di eseguire la procedura di test quasi in tempo reale, sto avendo difficoltà a strutturare il programma per essere più amichevole da modificare in seguito. Ad esempio, un dispositivo di acquisizione dati USB di National Instruments viene utilizzato per controllare un'uscita analogica (carico) e monitorare un ingresso analogico (corrente), una bilancia digitale con un'interfaccia dati seriale, un manometro con un'interfaccia dati seriale diversa e il prodotto è interfacciato tramite una DLL proprietaria che gestisce la propria comunicazione seriale.
La parte difficile
L'aspetto "in tempo reale" del programma è il mio più grande punto di svolta. Ad esempio, ho bisogno di tempo per quanto tempo il prodotto deve andare dalla posizione 0 alla posizione 10.000 al decimo di secondo. Mentre è in viaggio, ho bisogno di accelerare un output del NI DAQ quando raggiunge la posizione 6.000 e farlo scendere quando raggiunge la posizione 8.000. Questo tipo di controllo sembra facile sfogliando i documenti LabVIEW di NI, ma per ora sono bloccato con C #. Tutta la comunicazione esterna viene eseguita tramite il polling, il che rende molti loop fastidiosi.
Ho schiaffeggiato un modello Consumer Consumer sfuso in cui il thread del produttore scorre leggendo i sensori e imposta le uscite. Il thread Consumer esegue funzioni contenenti cicli temporizzati che interrogano il Producer per i dati correnti ed eseguono i comandi di movimento come richiesto. Il thread UI esegue il polling di entrambi i thread per l'aggiornamento di alcuni indicatori che indicano l'avanzamento del test corrente.
Non so da dove cominciare
Esiste uno schema più appropriato per questo tipo di applicazione?
Ci sono buone risorse per scrivere loop di controllo in software (non LabVIEW) che si interfacciano con sensori esterni e che altro?