06-15-2015 05:11 AM - modificato 06-15-2015 05:12 AM
Buongiorno a tutti!
Sto sviluppando un programma di acquisizione e elaborazione in FPGA.
Il software utilizzato (LabVIEW, modulo FPGA, Modulo RT, NI-RIO, NI-IndCom) è tutto aggiornato al 2014.
Prima di scrivere nel forum ho consultato lo stesso sia italiano che inglese e ho letto i due manuali "Getting started with Labview FPGA" (con annessi video) e "High Performance FPGA Developer's Guide". Non ho trovato però una soluzione.
L'hardware che al momento sto utilizzando è composta da:
1) Uno chassis 9104, con un modulo di acquisizione 9220;
2) Un controller 9022 collegato a 1);
3) Uno slave 9144 collegato via EtherCAT al controller 9022, con modulo di I/O digitale 9401.
4) Dispongo anche di un controller 9014 collegato a un secondo chassis 9104.
Attualmente sto facendo girare un primo VI di acquisizione e elaborazione nello chassis 9104. Vorrei che i tre segnali di uscita elaborati da questo VI arrivassero in ingresso al 9144, che in seguito a una successiva elaborazione inviasse dei segnali di uscita tramite 9401.
Se non ho capito male, per poter utilizzare il protocollo di comunicazione etherCAT devo utilizzare le user-defined variable e passare necessariamente attraverso il controller real-time.
Preventivamente ho misurato il tempo impiegato per l'esecuzione di ogni programma, riscontrando che:
a) Il VI di prima acquisizione e elaborazione ha un periodo di 12,5us.
b) Il VI sullo slave ha un periodo di 164us.
Le domende che porgo sono:
Come mai non posso fissare il tempo di Scan Period a 164us sincronizzando con quest'ultimo tutti i VI? Provando infatti mi dice che il tempo è troppo breve. Il tempo continua a risultare breve fino a 264us, mandando comunque in timeout il programma (anche fino a 300us). Per l'applicazione che sto sviluppando mi è necessario restare in prossimità dei 164us. Utilizzando questa configurazione hardware è possibile? Come mai lo scan period risulta "troppo piccolo" anche se inserisco un VI semplicissimo della durata di qualche tick?
Ho pensato quindi a una seconda configurazione hardware che prevede la comunicazione diretta di due chassis, tramite moduli I/O digitali. Potrebbe andare bene anche questa?
in data 06-15-2015 05:12 AM
Allego l'ultima immgagine.
in data 06-23-2015 04:55 AM
Ciao Salinger86
Non puoi fissare il tempo di scan engine a 164us perché il periodo che imposti come tempo di scan engine deve comprendere sia il tempo necessario per lo scan delle variabili, sia quello necessario per la tua applicazione (che è già di per sé 164us), dai un'occhiata all'immagine in questo link nella sezione Scan Engine Timing
http://zone.ni.com/reference/en-XX/help/371361L-01/lvioscanhelp/scan_engine/
in data 06-23-2015 07:26 AM
Innanzitutto grazie per la risposta!
Ho dato un'occhiata al link. In più tramite forum e contatti telefonici ho saputo che il 9022 non può comunque arrivare a periodi così piccoli. In attesa di cambiare l'hardware, che tu sappia c'è un modo per misurare anche il tempo di scan delle variabili?
in data 06-23-2015 07:29 AM
Per curiosità, dove vengono scritti i segnali v1 e v2 (user defined variables), che vengono letti nel vi dello slave? Immagino ci sia un vi real-time nel cRIO che estrae i dati dalla DMA "9104to9022", li elabora e scrive il risultato nelle user defined variables, è corretto?
in data 06-23-2015 07:47 AM
Sì anche se mi sono accorto che ho fatto un errore nel pubblicare le immagini. Inizialmente funzionava come hai descritto tu, poi ho provato a sostituire anche la comunicazione tra chassis e controller con delle user defined variable!
in data 06-23-2015 07:49 AM
Capisco! Non credo esista un modo diretto per misurare unicamente il tempo di scan delle variabili. Quello che mi viene in mente è fare in modo analogo a come avevi proceduto in precedenza: dato che lo scan period (tempo scan variabili + tempo esecuzione dell'applicazione) è noto (misurabile con Get Scan Engine Period.vi o impostabile a progetto in my computer -> properties), proverei a diminuirlo gradualmente, vedendo qual è un limite approssimativo per il quale la applicazione inizia a crashare e sottrarre da questo tempo limite il tempo di esecuzione dell'applicazione... Nel tuo caso, se hai individuato 300us come tempo limite, immagino che lo scan delle variabili impieghi circa 300us-164us = 146us
In bocca al lupo!
in data 06-23-2015 07:54 AM
Crepi!
Grazie ancora, appena metterò mano sulla nuova strumentazione proverò così come dici e scriverò qui com'è andata!