Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

DSP con CompactRIO e protocollo EtherCAT

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?

Scarica tutti
0 Kudos
Messaggio 1 di 8
5.148Visualizzazioni

Allego l'ultima immgagine.

0 Kudos
Messaggio 2 di 8
5.146Visualizzazioni

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/

0 Kudos
Messaggio 3 di 8
5.085Visualizzazioni

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?

0 Kudos
Messaggio 4 di 8
5.075Visualizzazioni

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?

0 Kudos
Messaggio 5 di 8
5.073Visualizzazioni

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!

0 Kudos
Messaggio 6 di 8
5.070Visualizzazioni

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!

0 Kudos
Messaggio 7 di 8
5.068Visualizzazioni

Crepi!
Grazie ancora, appena metterò mano sulla nuova strumentazione proverò così come dici e scriverò qui com'è andata!

0 Kudos
Messaggio 8 di 8
5.066Visualizzazioni