Soluzioni software per l’acquisizione dati

ACQUISIZIONE DATI –

Una panoramica delle diverse soluzioni open-source oggi disponibili per i sistemi di acquisizione dati e controllo con funzionalità di misura e elaborazione.

Praticamente ogni ambito di applicazione, da quello industriale a quello della ricerca, prevede l'impiego di sistemi di acquisizione dati e controllo, con funzionalità di misura e elaborazione. Negli anni sono stati fatti notevoli progressi nella direzione di fornire agli utilizzatori soluzioni più o meno integrate che consentano di ridurre i tempi di sviluppo e le curve di apprendimento, oltre all'indipendenza dall'hardware sottostante. Accanto alle più note piattaforme commerciali, grazie anche al supporto costante della comunità scientifica, si sono man mano evolute anche alcune interessanti soluzioni open-source. Di seguito ne presentiamo alcune.

Il framework Comedi
Comedi (COntrol and MEasurement Device Interface), ad esempio, è un progetto open-source iniziato negli anni '90 da David Schleef e teso alla realizzazione di un frame-work per semplificare e uniformare lo sviluppo e l'integrazione di driver per schede di acquisizione dati in ambiente Linux. Supporta nativamente programmazione in linguaggio C/C++ ma ne esistono estensioni per applicazioni scritte in Perl e Python (ad esempio pycomedi). Il framework si compone di un package base, denominato direttamente Comedy, e della libreria Comedilib. Il primo fornisce il repository dove rilasciare i driver per le schede di acquisizione dati di tipo plug-in (chiamate 'device') e che saranno caricati nel kernel space di Linux. Comedilib, invece, distribuita separatamente, fornisce l'interfaccia comune di accesso ai driver a livello user-space con le tipiche funzioni per apertura e chiusura di un device, acquisizione dei dati sincrona od asincrona, singola e multipla, calibrazione ed error reporting. Kcomedilib ne è la versione compilata come modulo kernel linux per l'utilizzo in applicazioni real-time; supporta le estensioni RTAI e RTLinux/GPL. Sul sito del progetto è riportata la lista delle schede attualmente supportate ma data la natura aperta del frame-work è possibile estendere questa con modelli specifici della propria applicazione. Sono inoltre segnalati i riferimenti di applicazioni basate su Comedi, come ad esempio il progetto Orocos per lo sviluppo di una libreria C++ portabile per funzionalità avanzate di controllo in robotica o l'iniziativa RTXI (Real-Time eXperiment Interface) per applicazioni di acquisizione dati hard real-time sotto Linux in esperimenti di biologia.

Controllo Visa con pyVisa
La maggior parte degli strumenti di misura per Pc supporta oggi l'architettura Visa (Virtual Instrument Software Architecture) che definisce Api generiche per l'accesso e la gestione delle relative risorse. Inizialmente standardizzata dalla VXI plug&play Alliance, l'architettura è oggi supportata dalla IVI (Interchangeable Virtual Instrument) Foundation. Supporta nativamente comunicazione su protocolli generici come RS232, GPIB e VXI o specifici come HiSLIP. Ne sono standardizzate implementazioni e interfacce per applicazioni in linguaggi C, Visual Basic e ovviamente G (il linguaggio di programmazione grafica implementato in LabView) ma in linea di principio è possibile utilizzare l'architettura in un qualsiasi altro ambiente in grado di supportare chiamate a funzioni in librerie DLL (ovvero caricata dinamicamente in fase di esecuzione). In particolare, pyVisa ne è il frame work per l'utilizzo in Python. PyVisa, supportata sotto Linux o Windows, consiste di due moduli. Il primo, denominato, vpp43.py implementa il wrapper per le funzioni Visa sotto Python (l'implementazione di tali funzioni deve essere fornita altrove) per l'accesso all'hardware mentre il secondo, visa.py, ne definisce classi e metodi astratti per acquisizione dati e applicazioni di controllo e misura.

Procedure di test in Java con iControl
Sempre più applicazioni di test e misura richiedono l'automazione di specifiche procedure di acquisizione dati e controllo. iControl è un frame-work open source realizzato in Java che rende disponibile tale funzionalità mediate un processore in grado di interpretare una lista di comandi stilati in un classico file di testo. iControl utilizza la modalità Java Native Access per accedere ai driver dell'hardware, tipicamente forniti direttamente da produttori e terze parti; supporta attualmente comunicazione su Gpib, porta seriale, Ethernet e Usb ma può essere esteso piuttosto facilmente per introdurre supporto per protocolli diversi standard o custom. Funziona su sistemi operativi Windows e Macintosh. I singoli comandi specificati nello script testuale corrispondono a metodi Java invocati a run-time dal frame-work o comandi Python opportunamente interpretati. Oltre a supportare nativamente il linguaggio Java, infatti, iControl adotta il package Jython per il supporto per Pyhton così da estendere le capacità di scripting con istruzioni di salto e di tipo condizionale e per la gestione delle variabili. Così, iControl può essere esteso sia definendo script generici richiamati a run-time che introducendo nuovi metodi in Java o Python (nel qual caso è però ovviamente richiesto di ricompilare il frame-work). iControl dispone di Gui per l'editing e la gestione degli script ma può anche funzionare da riga di comando (avendo creato gli script con un editor di testo qualsiasi).

SciPhy, un intero ecosistema open-source

Pyhton è uno dei linguaggi che forse meglio si presta alla realizzazione di sistemi di acquisizione dati e controllo. Si tratta, infatti, di un linguaggio dinamico, caratterizzato da elevato livello di astrazione e pensato per una migliore 'leggibilità' del codice, con una sintassi chiara e concisa, il supporto per paradigmi multipli di programmazione (inclusa la programmazione ad oggetti, quella procedurale, funzionale o imperativa) e la gestione automatica della memoria. Presenta una curva di apprendimento piuttosto breve e la disponibilità di un'ampia documentazione sul web oltre a numerose librerie native sia per calcolo numerico che analisi e visualizzazione dati. SciPy, in particolare, è un intero ecosistema di applicazioni e frame work scritto in linguaggio Python ideale per la realizzazione di sistemi di acquisizione, gestione ed elaborazione dati. La libreria base SciPy library, ad esempio, che include anche il package NumPy, fornisce le funzionalità principali di gestione ed elaborazione dati per il calcolo scientifico. SymPy estende queste supportando il calcolo simbolico mentre Pandas introduce metodi e strutture, di facile impiego ma dalle elevate prestazioni, per l'analisi dati. Matplotlib, poi, rende disponibili le funzioni per la rappresentazione grafica 2D (con, ad esempio, grafici a linee e barre, a torta o polari) emulando quanto presente sotto Matlab. IPython, infine, implementa una shell interattiva di tipo terminale o grafica (basata su Qt). Include il supporto per alcuni dei principali toolkit per la realizzazione di Gui, come ad esempio wxPython, PyQt4/PySide, PyGTK e Tk, con la possibilità di abilitare dinamicamente a run-time l'interfaccia utente desiderata, commutare tra due diverse o gestirne l'esecuzione parallela di più di una. Esecuzione del codice, informazioni di testo, grafici e dati generici possono essere combinati in un singolo documento, condivisibile con colleghi e convertibile in formati standard come html o pdf.

Un'alternativa open-source a Matlab, Gnu Octave
Praticamente ogni applicazioni di controllo e misura richiede funzionalità per di elaborazione dati. In molti casi i tradizionali linguaggi di alto livello come C/C++ possono apparire inadeguati per la mancanza di supporto nativo di alcuni concetti matematici necessari alla propria applicazione o l'assenza di funzioni per la rappresentazione grafica dei dati, oltre a richiedere curve di apprendimento più lunghe. Per questo, sia nell'industria che nel settore della ricerca, sono spesso usati software di calcolo numerico specifici, tra i quali il più diffuso tra quelli commerciali è certamente Matlab. Octave ne è invece un'alternativa open-source. Inizialmente concepito nel 1988 come software a corredo per un libro di testo per reattori chimici scritto da James B. Rawlings dell'Università del Wisconsin-Madison e John G. Ekerdt della Università del Texas, è poi diventato a partire dagli anni '90 un ambiente interattivo per, appunto, il calcolo numerico ed è attualmente supportato da J.W. Eaton sotto licenza Gnu Gpl. Diversi sono gli esempi d'impiego di Octave nel settore industriale o della ricerca. La Nasa, ad esempio, l'ha impiegato per la progettazione dei sistemi di docking di alcuni satelliti mentre presso l'Università di Sheffield è usato in alcuni software per il riconoscimento di celle cancerogene; è stato anche adottato dalla Jaguar per l'analisi della telemetria delle proprie auto di Formula 1. Come Matlab, Octave è un linguaggio 'interpretato' con interfaccia da riga di comando; adotta metodi numerici per la soluzione dei problemi matematici e non, come invece Mathematica o Maple, metodi simbolici. Supporta tutti i principali tipi di dati, inclusi i tipi a singola precisione e matrici e vettori, con relative funzioni di manipolazione. Sono disponibili toolkit per la rappresentazione grafica dei dati, le soluzioni di equazioni non lineari, l'integrazione numerica, l'interpolazione polinomiale, le applicazioni di statica ed elaborazione d'immagini. Sebbene nativamente pensato come linguaggio batch o per esecuzione da riga di comando, offre anche alcune funzionalità elementari per la realizzazione di Gui, come finestre di I/O e progress bar e prevede quindi funzioni specifiche che semplificano l'integrazione di Gui sviluppate in altri ambienti.

Sistemi di controllo distribuito con Epics

Epics (Experimental Physics and Industrial Control System) è un insieme di applicazioni e tool software per la realizzazione di sistemi di controllo e misura distribuiti per applicazioni in ambito industriale o della ricerca scientifica. Il sistema adotta un'architettura client/server con i server, altrimenti indicati come Ioc (Input/Output Controller), demandati all'acquisizione dei dati di campo ed al controllo locale (mediante dispositivi plug&play) e i client, o Opi (Operator Interface), per l'elaborazione dati ed il controllo remoti. I server sono tipicamente realizzati mediante sistemi embedded cPci, Vme/Vxs o xTca. Le informazioni raccolte sono trasferite mediante messaggi scambiati secondo un paradigma di tipo publish/subscribe. Channel Access è il protocollo adottato per la comunicazione su rete, di tipo soft real-time. Epics supporta architetture distribuite, anche su larga scala, modulari e scalabili, di tipo event driven. Originariamente era previsto il supporto per il solo sistema operativo VxWorks per quanto concerne i server IOC, ma dal 2004 sono stati gradualmente introdotte le principali distribuzioni GNU/Linux, Solaris, Windows, MacOS ed Rtems. Per i client, sono quindi disponibili frame-work, come Edm (Extensible display manager) e Medm (Motif/Edm), per la realizzazione di Gui per il controllo mediante interfaccia grafica e package per l'integrazione sotto ambienti diversi come Matlab, LabView, Perl, Python, Tcl, ActiveX o simili. Epics è impiegato correntemente in numerosi esperimenti ed apparati in giro per il mondo, tra i quali, ad esempio, in Europa l'acceleratore Desy in Germania o il reattore nucleare Iter in Francia.

Pubblica i tuoi commenti