STORIOLOGIA HA RAGGIUNTO E SUPERATO I 2 MILIARDI DI VISITE > >

 

 

(attenzione: il file é unico, di 900 K, pari a circa 400 pagine - da leggersi solo in  progressione)
_____________________________________________________________________________

REALIZZAZIONE DI UN TRADUTTORE
SCPI
nnnn
PER LA COMUNICAZIONE DI STRUMENTI IN RETE
TESI  OTTOBRE 1998
UNIVERSITA’ DEGLI STUDI DI PADOVA - FACOLTA’ DI INGEGNERIA - DIPARTIMENTO DI ELETTRONICA E INFORMATICA


Capitolo 1
IL PROGETTO VIRLAB
(VIrtual Remote LABoratory)

1.1 COS’ E’ IL PROGETTO "VIRLAB"

Capitolo 2
INFORMAZIONI SCAMBIATE
2.1 REQUISITI DELLE INFORMAZIONI SCAMBIATE
2.2 VIRTUALIZZAZIONE DEL BANCO
2.3 STRUTTURA LOGICA DELLE INFORMAZIONI
2.4 IMPLEMENTAZIONE NEL CASO DI COMUNICAZIONE DIRETTA
2.5 IMPLEMENTAZIONE NEL CASO DI COMUNICAZIONE VIA HTTP
2.6 REALIZZAZIONE DELLA CLASSE VirlabCmd
2.7 LISTA DEI COMANDI IMPLEMENTATI E CODICI CORRISPONDENTI

Capitolo 3
IL LINGUAGGIO SCPI
3.1 INTRODUZIONE
3.2 ORGANIZZAZIONE DEL LINGUAGGIO SCPI
3.3 DESCRIZIONE DI ALCUNI SOTTALBERI
3.4 SINTASSI E STILE DEI COMANDI SCPI
3.5 NOTAZIONI DELLO STANDARD SCPI
3.6 I PARAMETRI

Capitolo 4
PROGETTO "TRADUTTORE"
4.1 INTRODUZIONE
4.2 OBBIETTIVI DEL PROGETTO "TRADUTTORE"
4.3 TABELLE DI TRADUZIONE DEGLI STRUMENTI
4.4 OPERAZIONI ESEGUITE DAL CODICE "TRADUTTORE"
4.5 STRUTTURA DEL "TRADUTTORE"
4.6 SIMULATORE DI TRADUZIONE
4.7 IL PROGETTO ProTrans17

Capitolo 5
MANUALI SCPI DEGLI STRUMENTI
5.1 INTRODUZIONE
5.2 STRUMENTO: OSCILLOSCOPIO HP54615B.
5.3 STRUMENTO: MULTIMETRO HP3478A
5.4 STRUMENTO: ANALIZZATORE DI SPETTRO HP35660A
CONCLUSIONI
BIBIOGRAFIA

 

INTRODUZIONE

SISTEMA DI MISURAZIONE AUTOMATICO.

Un sistema automatico di misura può essere schematizzato in

HOST
COMPUTER
BUS DI DATI
BUS DI CONTROLLO
STRUMENTI

Questa l'architettura di un sistema di misurazione automatico.

Ogni strumento deve essere dotato di una struttura aggiuntiva per trasmettere i valori misurati e per ricevere dall' elaboratore centrale comandi per una predisposizione iniziale o per un adeguamento della sua configurazione a causa di variazioni delle grandezze da misurare. A tal fine ogni strumento avrà una adeguata struttura elettronica composta sia da una parte hardware che da una parte software. Le istruzioni ricevute in tale sistema saranno riconosciute tra il set di istruzioni implementate e decodificate in modo da agire su un particolare blocco funzionale del dispositivo. Gli strumenti da inserire in un sistema di misura automatico possono non presentare il pannello frontale dei comandi in quanto tutte le funzioni ottenibili dallo strumento vengono messe a disposizione con modalità completamente diverse. Ogni strumento può essere considerato una interfaccia intelligente che acquisisce e condiziona dei segnali di ingresso, estrae da essi delle informazioni, li elabora e li trasmette ad un host computer dove confluiscono i dati forniti dagli altri strumenti presenti nel sistema di misura.

L' elaboratore centrale effettuerà una elaborazione globale dei dati ricevuti e considerando alcuni parametri sarà in grado di intervenire sui dispositivi.

Per la scelta delle caratteristiche del canale di comunicazione possono essere adottati vari criteri. Si può ottimizzare qualche parametro come la velocità di trasmissione, la semplicità costruttiva o di impiego del canale trasmissivo. Un simile modo di procedere porta sicuramente ad una notevole efficienza del collegamento in un ben definito contesto operativo, ma presenta anche vari inconvenienti. Richiede difatti una notevole impegno sia nella progettazione e nella messa a punto dei vari trasmettitori e ricevitori necessari per la comunicazione, sia per la predisposizione del software di gestione dell' intera attività di trasferimento delle informazioni. In un diverso contesto operativo dove viene richiesto l' ottimizzazione di qualche altro parametro un sistema così realizzato è difficilmente riutilizzabile. Una alternativa a questo modo di procedere è di accettare invece una ottimizzazione più globale, adottando ad esempio, dei tipi di canali di trasmissione già utilizzati per il collegamento con altre periferiche. Sono stati realizzati sistemi costituiti da strumenti in grado di comunicare adottando una trasmissione seriale asincrona secondo il protocollo RS-232. La trasmissione seriale asincrona è una modalità di trasmissione molto utilizzata nel collegamento fra unità centrale e periferiche. Essa richiede una struttura del trasmettitore e del ricevitore molto semplice, mentre il canale di trasmissione si può ridurre a soli tre conduttori: due per la trasmissione dei segnali e uno per il riferimento dei potenziali. Questo canale di trasmissione è adatto per le normali periferiche ma non considera le specifiche esigenze degli strumenti di misura, i quali prevedono la trasmissione di particolari tipi di informazioni. Di conseguenza alcune prestazioni sono accettabili, mentre altre, anche se usuali per uno strumento sono insoddisfacenti e comportano, ad esempio, una riduzione della velocità effettiva di trasmissione delle informazioni.

Per superare queste difficoltà sono stati proposti vari tipi di canali di trasmissione per la gestione degli strumenti di misura. Parecchie sono le caratteristiche che deve presentare uno standard di comunicazione. Fra queste, quelle di maggior interesse sono: la distanza dei collegamenti, il numero di dispositivi collegabili e la velocità di trasferimento delle informazioni. La Hewlett-Packard ha messo a punto un protocollo chiamato HP-Interface Bus, HP-IB, che è stato adottato dall' organizzazione internazionale IEEE con la sigla IEEE-488. Esso si caratterizza per i seguenti parametri generali: la struttura generale del sistema di misura è a bus, in tal modo è possibile la trasmissione in parallelo di più bit contemporaneamente ed è semplice apportare variazioni del numero di componenti collegabili al sistema. Il bus viene realizzato tramite linee raggruppate fra loro in un cavo (party-line bus). La velocità di trasmissione massima teorica è pari a 1Mbytes/s. Il numero massimo di elementi collegabili è 15 e la lunghezza del bus dipende dal numero di elementi collegati ed è inferiore ai 20 m.

Per lo standar 488 si può utilizzare nel sistema una configurazione lineare.(fig. 2 )

Dei cavi della lunghezza tipica di un paio di metri con opportuni connettori alle due estremità consentono di collegare fra loro in sequenza i vari strumenti. Con un ulteriore cavo si collegano questi con l' elaboratore. I connettori originali 488 presentano 24 terminazioni o pin.

Da un punto di vista logico il bus 488 può essere suddiviso in data bus e control bus.

BUS 488 HOST
COMPUTER
CONNETTORE
DEVICE A
CONNETTORE
DEVICE B
CONNETTORE
DEVICE C

Configurazione lineare nel collegamento degli strumenti ad un bus 488.

Il data bus è costituito da otto linee che consentono la trasmissione in parallelo di dati codificati su otto bit. La trasmissione è asincrona, ogni dato richiede una procedura di partenza per la sua trasmissione, ultimata la quale si ha una procedura di fine trasmissione. Vi sono poi altre otto linee per il controllo, una linea per il potenziale di riferimento dei vari segnali, una linea di sicurezza per il collegamento a terra degli involucri degli strumenti, le restanti sei linee svolgono una parziale funzione di schermo per ridurre l' influenza dei rumori. Lo standard 488 ha stabilito delle regole che devono essere seguite per trasferire una informazione tramite il bus, definendo la struttura meccanica del bus e le caratteristiche elettriche statiche e dinamiche dei segnali che partecipano al trasferimento.

Le informazioni che vengono trasmesse ad esempio fra due componenti del sistema possono essere suddivise in quattro livelli (fig. 3). Al livello inferiore (layer A ) sono definite le varie caratteristiche meccaniche ed elettriche. Il successivo ampliamento apportato allo standard, denominato IEEE 488.2 riguarda i due livelli sovrastanti che impongono le regole da seguire per lo scambio di messaggi, ad esempio, le varie unita’ di misura, il formato da utilizzare per rappresentare un valore numerico, se in virgola fissa oppure in virgola mobile. Al livello superiore (layer C) lo standard IEEE 488.2 definisce come devono essere formulati i vari comandi o richieste di tipo generale, vale a dire normalmente presenti nei vari strumenti. Ad esempio, viene stabilito come ogni dispositivo deve organizzare il suo byte di stato in modo che l' host computer possa utilizzare una unica routine per la sua decodifica, avendo imposto il significato di ciascun bit del registro di stato. Ad un livello ancora superiore (layer D) si possono definire le regole per la formulazione dei vari messaggi da scambiarsi fra i componenti del sistema. Questi messaggi sono molto influenzati dalle caratteristiche specifiche degli strumenti collegati.

Le regole di comunicazione stabilite in tale livello non sono definite dal protocollo IEEE 488.2 ma nè costituiscono una estensione, le cui convenzioni attualmente sono rispettate solamente da alcuni costruttori di strumenti. Si prevede, nel futuro immediato, una maggiore diffusione di queste convenzioni per la comunicazione tra strumenti. L' insieme di messaggi scambiabili prende il nome di linguaggio SCPI (Standard Comand for Programmable Instrument). e sarà l' argomento dei prossimi capitoli.

BUS

Scambio di informazioni fra due dispositivi appartenenti ad uno stesso

Sistema di misura automatico.

D C B A A B C D

ß dispositivo X del sistema à ß dispositivo Y del sistema à
Mfrs. IEEE 488.2 IEEE 488.1 IEEE 488.2 Mfrs.
Specs. Standard Standard Standard Specs.

DOVE:
Livello D rappresenta le funzioni specifiche dei dispositivi
Livello C rappresenta un insieme di funzioni comuni a tutti i dispositivi
Livello B rappresenta un insieme di funzioni per lo scambio di informazioni tra dispositivi
Livello A rappresenta un insieme di funzioni per la gestione delle periferiche di interfaccia

Capitolo 1

IL PROGETTO VIRLAB

1.1 COS’ E’ IL PROGETTO "VIRLAB"

Il progetto "ViRLab" (VIrtual Remote LABoratory) è nato dall’esigenza di trasformare alcuni laboratori, tra cui quelli di misure elettroniche del Dipartimento di Elettronica e Informatica dell’Università di Padova e il corrispondente del Politecnico di Torino, in laboratori utilizzabili anche attraverso elaboratori elettronici situati in sedi distaccate dai Dipartimenti stessi.

E’ interessante osservare che un numero crescente di aziende sta scoprendo i vantaggi offerti dalle soluzioni associate all’uso di strumentazione virtuale le quali permettono, a differenza degli strumenti tradizionali, una maggiore flessibilità e riutilizzabilità. In questo modo lo sviluppo di strumentazione virtuale consente ad un’azienda oltre che un aumento della propria professionalità una diminuzione di costi sia dell’acquisto degli strumenti, sia di sviluppo e di manutenzione.

L’obbiettivo finale del progetto "ViRLab" è quello di realizzare un software che permetta l’utilizzo di strumenti quali oscilloscopi, multimetri, analizzatori di spettro ecc., mediante un elaboratore posto fisicamente a distanza dalla localizzazione stessa degli strumenti attraverso una rete basata, come Internet, sul protocollo TCP/IP. L’utente finale utilizzerà degli strumenti "virtuali" realizzati attraverso apposite interfacce grafiche in modo del tutto simile agli strumenti reali con il vantaggio di poter rielaborare i risultati ottenuti con lo stesso elaboratore con cui effettua le misure. La possibilità di scegliere la modalità di rielaborazione dei dati è uno degli aspetti fondamentali nella distinzione tra strumento reale e virtuale: uno strumento reale ha caratteristiche e prestazioni ben definite dal costruttore e l’utente non può modificarle, invece attraverso la flessibilità del software quest’ultimo può decidere le funzionalità del sistema di misura e la modalità di rappresentazione dei dati per migliorare l’analisi.

La remotizzazione, inoltre, permette di migliorare l’utilizzo delle risorse se si dà la possibilità a più utenti di usare contemporaneamente uno stesso strumento o meglio se si realizza una struttura capace, assegnando alternativamente l’uso di uno strumento a più utenti, di effettuare una condivisione.

Un altro aspetto importante su cui si basa l’intero progetto è quello della separazione "utente-strumento". Se un utente ha bisogno, ad esempio, di utilizzare un oscilloscopio non deve preoccuparsi di come accedere ad esso ma deve supporre che il proprio PC sia lo strumento. Egli non deve conoscere l’indirizzo della macchina che ha fisicamente collegato un oscilloscopio ma semplicemente che vuole usare un oscilloscopio; di più, se un utente ha bisogno di utilizzare un banco di misura con determinati strumenti sarà compito del software trovare il primo banco libero con gli strumenti richiesti in un insieme pre-assegnato.

Architettura del laboratorio remoto

Nel progetto "ViRLab", si può far riferimento ad un sistema composto da uno o più computer sui quali sono in esecuzione degli applicativi software, che rappresentano gli strumenti "virtuali", da una struttura di rete basata sul protocollo TCP/IP, attraverso cui le informazioni devono essere trasmesse, e da un insieme di computer a cui gli strumenti di misura sono fisicamente collegati con diverse modalità, ad esempio mediante un bus 488 o un collegamento seriale.

Architettura client/server

La situazione più semplice è quella in cui la remotizzazione di un banco di misura avviene mediante due computer direttamente collegati in rete: il primo viene utilizzato dall’utente attraverso un programma applicativo e il secondo, invece, gestisce gli strumenti ad esso collegati. Con questa configurazione il paradigma di comunicazione tra i due computer può essere il classico client/server in cui nell’elaboratore dell’utente è presente un processo client che effettua una richiesta di misura direttamente al processo server in esecuzione sul computer gestore degli strumenti; successivamente il processo server, dopo aver eseguito la misura sullo strumento, spedirà al client i risultati.

In realtà esistono varie situazioni di rete attraverso cui la remotizzazione deve avvenire, in particolare non si ha in genere un collegamento diretto tra i due computer ma esistono diversi intermediari tra loro. Infatti, l’utente che necessità di utilizzare gli strumenti in modo remoto non si trova nello stesso luogo dove fisicamente gli strumenti sono situati ma, ad esempio, in un altro laboratorio o nella propria abitazione. Il laboratorio stesso, inoltre, deve essere pensato come un insieme di elaboratori collegati tra loro, per poter collaborare nella soddisfazione di una richiesta, ed ulteriormente collegati ad Internet attraverso strutture quali firewall e proxy-server (Figura 1.1).

Figura 1.1 Architettura di rete tra utente e strumentazione

Infine, anche l’insieme dei computer client può essere pensato come una rete locale collegata ad Internet mediante proxy-server e firewall. Infatti, attualmente questa architettura rispecchia gran parte delle reti aziendali collegate ad Internet e alla struttura di un ISP (Internet Service Provider).

L’utente utilizza gli applicativi forniti come se essi fossero degli strumenti reali. La modalità di impiego deve essere la stessa sia se gli strumenti sono fisicamente collegati alla macchina dell’utente, sia se si trovano collegati ad un altro computer remoto, sia si tratti di moduli di simulazione. In altri termini, l’utente non deve preoccuparsi di come sono distribuiti fisicamente gli strumenti, ma deve piuttosto pensare che gli strumenti siano gli applicativi.

Il processo client deve quindi limitarsi a fornire una adeguata ed intuitiva interfaccia grafica con la possibilità di:

rielaborazione dei dati provenienti dagli strumenti;
eventuale ritrasmissione in "run-time" di comandi da inviare agli strumenti;
visualizzazione degli stessi con diverse modalità;
memorizzazione dei dati su memoria di massa per un successivo riutilizzo.

Il processo server, invece, non è necessario fornisca un’interfaccia grafica mentre le informazioni sul suo stato devono poter essere ottenute nello stesso modo in cui si inviano i comandi da eseguire su uno strumento. In pratica l’unico modo per poter comunicare con il processo server è attraverso un canale TCP/IP. Tra le caratteristiche principali che il programma server deve possedere si ricordano le seguenti:

* gestione contemporanea in "time-sharing" di più client;
* accesso alla strumentazione, con possibilità di definire delle "macro" o offrire funzioni di simulazione;
* gestione di uno o più insiemi di dispositivi fisici (banchi), tra loro variamente connessi, e/o di moduli di simulazione
* collaborazione con altri server nell’esecuzione dei comandi sulla strumentazione per migliorare lo sfruttamento delle risorse disponibili.

L’interazione tra il processo client e quello server può essere pensata come un ciclo comprendente i seguenti passi:

* il client invia al server un comando, la modalità di trasmissione deve supportare l’attuale evoluzione delle strutture di rete;
* il server riceve il comando, lo interpreta ed esegue la relativa richiesta;
* il server spedisce al client i risultati relativi al comando eseguito;
* il client riceve i dati, li elabora e eventualmente li visualizza in modo adeguato.

L’unicità nella gestione degli strumenti e dei moduli di simulazione, sia in locale che in remoto, implica la presenza di un programma server su ogni macchina dell’intero sistema cioè su ogni macchina degli utenti e su ogni macchina che gestisce fisicamente gli strumenti. I CA, in genere, scambiano informazioni solo con il server locale e la trasmissione via rete avviene tra server.

Questa impostazione comporta l’introduzione di una nomenclatura che distingua il comportamento principale del programma server: esso verrà chiamato "client server" se il suo unico compito è quello di ricevere le richieste localmente dagli applicativi client senza eseguire misure sugli strumenti, verrà invece chiamato "bench server" se il suo unico compito è quello di eseguire le misure impiegando la strumentazione. E’ chiaro che il programma server deve poter funzionare contemporaneamente sia come "client server", sia come "bench server", qualora tali modi vengono contemporaneamente assolti si impiegherà il nome "virlab server". Inoltre nel seguito si indicherà con il nome "client application" (CA) un generico applicativo client che dialoga sia con l’utente per mezzo di opportuna interfaccia grafica, sia con "virlab server".

Gli aspetti fondamentali che riguardano, invece, la trasmissione dei dati sono la specificazione di un "comando remoto" e la modalità di trasmissione di tali comandi via rete. Per la definizione della struttura di tali comandi si deve effettuare uno studio sulle possibili informazioni che essi devono contenere, invece, per la loro rappresentazione si devono tenere presenti i vincoli imposti dalle modalità di trasmissione adottate.

Struttura del comando

Un comando rappresenta la richiesta che un client effettua al server e quindi al suo interno devono essere presenti tutte le informazioni per la specificazione del banco di misura, dello strumento e dell’operazione da eseguire sullo strumento. All’interno del progetto, però, un comando assume un concetto più ampio: esso rappresenta l’unità base per lo scambio delle informazioni sia tra i server che tra server e client.

Con questo si intende che un comando al suo interno non contiene soltanto un indicazione della operazione che deve essere eseguita sulla strumentazione ma anche altre richieste di servizio o informazioni tra cui i risultati stessi della misura, informazioni sullo stato del server e situazioni di errore.

Attraverso questa unicità modalità di gestione delle informazioni si riesce ad ottenere una struttura software molto semplice e flessibile come verrà evidenziato nel paragrafo relativo all’architettura dei moduli software.

Le informazioni contenute in un comando, quindi, sono molteplici ed è necessario creare una classificazione e suddivisione dei possibili valori che i vari campi possono assumere. In particolare questa classificazione deve basarsi su una struttura ben definita che possa identificare in modo univoco un così detto "comando di alto livello" cioè un comando che il server deve interpretare.

In definitiva la struttura interna di un comando rappresenta il linguaggio con cui si può dialogare con un server cioè il linguaggio attraverso il quale può essere fatta una richiesta e il linguaggio con cui le risposte ci vengono spedite.

Il capitolo relativo alla "Rappresentazione delle informazioni" delinea in modo dettagliato la struttura di un comando e specifica i vari formati con cui può essere rappresentato.

Architettura dei moduli software

L’insieme dei moduli software realizzati all’interno del progetto "ViRLab" può essere suddiviso in:

* Uno o più applicativi client che rappresentano gli strumenti virtuali a disposizione
dell’utente;
* Un programma server che gestisce le richieste dei client ed esegue fisicamente le misure sulla strumentazione.

Un applicativo client (CA=Client Application) ha le seguenti caratteristiche:

* È in esecuzione sulla macchina disponibile all’utente, viene attivato come programma "stand-alone" o come procedura di un ambiente integrato (e.g. un VI di LabVIEW);
* Più di un programma CA può essere in esecuzione in un dato istante temporale;
* Può fornire una interfaccia utente;
* Non può inviare direttamente comandi alla strumentazione ma si deve limitare all’invio di richieste al programma server attraverso un canale TCP/IP.

Il programma "virlab server" ha le seguenti caratteristiche principali:

È in esecuzione sulla macchina dell’utente e su ogni macchina del laboratorio, non presenta interfaccia grafica e viene attivato coma programma "daemon" al momento del boot o all’atto della prima richiesta di servizio da parte di un programma CA;

Un solo programma "virlab server" può essere in esecuzione in un dato istante sulla stessa macchina;

Comanda la strumentazione disponibile sulla macchina su cui è in esecuzione oppure dialoga con altri programmi "virlab server" tramite rete per l’esecuzione remota dei comandi;

fornisce ai CA un immagine dei banchi disponibili specificando le caratteristiche degli strumenti e i relativi indirizzi;

può svolgere funzioni di simulazione con comandi identici a quelli corrispondenti a richieste di esecuzione di servizi a dispositivi fisici;

permette l’allocazione delle risorse attraverso richieste specifiche di "lock" e "unlock";

fornisce delle informazioni di "audit" (eventualmente mantenute su file) per tenere traccia della sua evoluzione temporale.

L’interazione tra CA e programma "virlab server" è messa in evidenza nella Figura 1.2 nella quale si può immediatamente notare che, grazie alla presenza di un programma server sia sul PC1 che sul PC2, uno stesso applicativo client (CA) vede gli strumenti A e B allo stesso modo.

Infatti un CA effettua una richiesta sempre al server locale il quale, per come è strutturato internamente, "nasconde" la destinazione reale della richiesta (strumento A o strumento B). In questo modo lo strumento diventa: per l’utente l’applicativo client, per il CA il server locale e per il server locale uno qualsiasi degli strumenti collegati ad un server con cui può dialogare.

Figura 1.2 Accesso alla strumentazione da parte di CA

Con questa struttura è facile immaginare che il laboratorio "virtuale" (ViRLab) sia costituito dall’insieme dei server che sono in grado di scambiarsi le informazioni. Inoltre, la possibilità di trasferire le richieste di un CA attraverso Internet permette, anche, la realizzazione di un laboratorio distribuito cioè composto da un insieme qualsiasi di nodi della rete globale.

Dalla Figura 1.2 si può notare anche che il flusso delle informazioni tra CA, server e dispositivi fisici, in realtà, può avvenire in due modi:

* attraverso il server locale (percorso 1-2-3);

* con un collegamento diretto TCP/IP al server remoto (percorso 5-3).

Al programmatore di CA è lasciata libera scelta tra le precedenti alternative tuttavia, anche se la seconda modalità appare più efficiente, non sempre è possibile instaurare una comunicazione TCP/IP diretta tra CA e server remoto. La comunicazione con il software locale, quindi, permette di svincolare il programmatore dalle problematiche relative alla trasmissione attraverso proxy-server, firewall ecc., evitandogli di prevedere il supporto per tali sistemi. Inoltre la seconda possibilità esclude la macchina locale dal laboratorio e quindi non permette di utilizzare assieme strumenti locali con strumenti remoti. Per ulteriori commenti a tal proposito si veda il capitolo "Protocollo di rete" con particolare attenzione al paragrafo "Scelta del protocollo di comunicazione".

Gli strumenti virtuali o Client Application (CA)

Gli strumenti virtuali del progetto ViRLab sono costituiti da un insieme di programmi, ad esempio realizzati in ambiente LabVIEW, che attraverso un canale TCP/IP comunicano con il programma "virlab server" da cui successivamente ricevono i risultati oggetto di eventuale post-elaborazione e rappresentazione grafica.

1.1.1 Client sviluppati in ambiente LabVIEW

LabVIEW è un ambiente di programmazione di tipo grafico realizzato dalla "National Instruments" ed orientato principalmente allo sviluppo di applicazioni software per la gestione di strumenti di misura. La sua flessibilità è tale da permettere ai programmatori lo sviluppo di software di impiego più generale e non necessariamente limitato alla strumentazione numerica; di fatto LabVIEW si propone come valida alternativa ai compilatori tradizionali.

Per realizzare un generico programma client si utilizzano alcune funzioni di libreria che costituiscono i "mattoncini" fondamentali degli strumenti virtuali: questa organizzazione del software permette di costruire un VI (Virtual Instrument) avente solo le funzionalità desiderate tralasciando quelle non necessarie in una determinata situazione.

Figura 1.3 Esempio di strumento virtuale realizzato con LabVIEW

Un generico programma client LabVIEW è costituito da un pannello frontale, che rappresenta l’interfaccia visibile all’utente. Esso si può considerare suddiviso in due sezioni una per l’ingresso, costituita dall’insieme dei controllori che servono per impostare gli strumenti, e una per l’uscita costituita dall’insieme degli indicatori che permettono la rappresentazione dei dati.

Sono disponibili 3 categorie di librerie, cioè insiemi di applicativi, LabVIEW:

* Libreria locale: i VI accedono direttamente agli strumenti tramite scheda GPIB;
* Libreria remota: i VI accedono agli strumenti utilizzando il modulo SUB-VI che attua la comunicazione con il programma server;
* Libreria SCPI: simile alla libreria remota tranne per il fatto che i comandi inviati agli strumenti sono in formato SCPI.

La scelta dell’ambiente LabVIEW per la realizzazione dei programmi client può essere giustificata per i seguenti motivi:

* Possibilità di realizzare velocemente programmi che gestiscono una sezione di misura;
* Ampia disponibilità di librerie predisposte per l’uso si strumentazione;
* Possibilità di ottenere una struttura modulare dei programmi;
* Possibilità di realizzare un’interfaccia grafica particolarmente accurata per la rappresentazione dei dati.

1.1.2 Client sviluppati con altri ambienti

Un programma client può essere realizzato attraverso diversi ambienti di sviluppo tra cui i tradizionali linguaggi di programmazione. I requisiti richiesti riguardano la modalità con cui deve avvenire la comunicazione con il server e la struttura delle informazioni scambiate. In particolare, un generico client deve instaurare un comunicazione TCP/IP con il server, spedire un comando nel formato specificato nel paragrafo 3 del Capitolo "Rappresentazione delle informazioni", e rimanere in attesa, senza chiudere la connessione, della risposta, che avrà una struttura analoga a quella della richiesta.

All’interno del progetto "ViRLab" sono stati realizzati alcuni client in grado di comunicare con il "virlab server". L’ambiente di sviluppo utilizzato, Visual Basic 5, permette di gestire una comunicazione TCP/IP mediante il controllo standard Winsock. Affinché la comunicazione sia possibile si devono compiere le seguenti operazioni:

* Impostare i parametri della comunicazione (indirizzo, porta);
* Effettuare richiesta di connessione;
* Nel caso in cui la richiesta sia accettata, spedire i dati nel formato opportuno;
* Rimanere in attesa della risposta, senza chiudere la comunicazione;
* Ripetere le operazioni precedenti per altre eventuali richieste;
* Chiudere la comunicazione al termine delle operazioni.

Il programma server

Il programma "virlab server" rappresenta la parte centrale dell’intero progetto ed è su di esso che si basa l’intero funzionamento del laboratorio remoto.

La progettazione software (design) del programma server, basata sulla specificazione dei requisiti, si è orientata su una struttura modulare che può essere schematizza nella Figura 4. La suddivisione in moduli è basata sulle funzioni fondamentali che il server deve svolgere:

* Interpretazione dei comandi (BM);
* Esecuzione dei comandi sulla strumentazione (LIM);
* Trasmissione dei comandi via rete (ECM);
* Comunicazione con gli applicativi client (LCM).

La separazione dell’intero software in 4 moduli fornisce quella semplicità di funzionamento che sta alla base di qualsiasi sistema robusto ed affidabile. Inoltre la modularità fornisce molteplici vantaggi tra cui quelli di seguito elencati:

* Miglior utilizzo delle risorse umane durante la fase di sviluppo con possibilità di assegnazione dei vari moduli a soggetti diversi all’interno del gruppo di lavoro;
* Riduzione dei costi e dei tempi di manutenzione del software nel caso di modifica di uno o più moduli; solo il modulo interessato viene modificato;
*Semplificazione nella ricerca degli errori poiché si evita il fenomeno di "ripple", un errore influenza solo il modulo in cui si verifica;
* Riutilizzabilità dei moduli.

Figura 1.4 Struttura a moduli del programma "virlab server"

Tutte queste proprietà derivano dalla capacità di un modulo di nascondere le informazioni al suo interno ("Hide Information") se esso si identifica completamente con la sua interfaccia verso l’esterno. Un modulo deve fornire un insieme di funzioni e procedure che forniscono ben definite funzionalità; chi usa queste procedure deve essere garantito che la funzionalità richiesta venga eseguita in modo corretto e non deve preoccuparsi di come essa viene svolta.

Inoltre la modularità è un processo ricorsivo nel senso che i moduli possono a loro volta essere suddivisi in sotto moduli e così via. Infatti anche i moduli del server seguono questa linea e sono in genere suddivisi i più sotto moduli sia in senso orizzontale, come nel caso del modulo ECM che è diviso in due moduli distinti (ECMSender e ECMReceiver), sia in modo verticale con stratificazione del software, come nel caso del modulo LIM in cui i vari strati eseguono diversi livelli di traduzione dei comandi. La modularità, però, richiede anche un costo e cioè la precisa e dettagliata specifica delle interfacce tra i moduli poiché queste devono rimanere stabili nel tempo. Una modifica di un’interfaccia comporta la modifica del modulo a cui essa si riferisce, la modifica del modulo, invece, non deve modificare la sua interfaccia.

Lo scambio di informazioni sia tra moduli, sia verso l’esterno, riguarda il contenuto di un comando poiché, come si è precedentemente sottolineato, sia le richieste che le risposte sono trattate allo stesso modo, cioè come comandi. Come si può intuire dunque una modifica della struttura del comando influisce su ogni interfaccia tra moduli e verso l’esterno, quindi se è necessario rendere indipendente le interfacce dalla struttura del comando altrimenti l’intera struttura modulare del sistema non avrebbe più significato. Questo importante aspetto è stato implementato rappresentando uno stesso comando come modulo cioè con interfacce ben definite non modificabili attraverso le quali è possibile ottenere le informazioni in modo indipendente da come internamente sono rappresentate.

In base a queste considerazioni si è pensato di legare tutte le interfacce tra i moduli ad una unica struttura dati con le caratteristiche precedentemente specificate: la classe VirlabCmd. Questa classe possiede tutte le informazioni che specificano un comando che il server deve interpretare ma anche delle procedure per ottenere le informazioni in modo indipendente da come sono organizzate internamente alla stessa classe. Questo è un concetto importante dell’intero progetto poiché, grazie ad esso, sarà possibile modificare in futuro la struttura di un comando senza modificare alcuna riga di codice dei vari moduli.

In particolare, facendo riferimento alla figura 1.4, l’interfaccia 1 è rappresentata dalla stessa classe VirlabCmd, l’interfaccia 2 non è legata alla classe del comando poiché è rappresentata dai "driver" per la comunicazione con la strumentazione, le interfacce 3 e 4 sono ottenute mediante delle funzioni della classe VirlabCmd. Per una dettagliata descrizione delle interfacce, della struttura interna del comando e della classe VirlabCmd si faccia riferimento al capitolo relativo alla "Rappresentazione delle informazioni.

1.1.3 BM: Bench Manager

Il Bench Manager (BM) è il modulo principale dell’intero programma "virlab server" e si occupa della interpretazione e gestione dei comandi. BM è essenzialmente il programma principale ed è esso che coordina gli altri 3 moduli durante la gestione dei comandi. Le richieste possono provenire indistintamente da uno qualsiasi dei moduli sottostanti anche se il modulo di provenienza dà un significato diverso alla richiesta ricevuta:

Se proviene da LCM essa è una richiesta effettuata da un CA, normalmente in esecuzione sullo stesso calcolatore nel quale è in esecuzione BM, poiché LCM si occupa delle connessioni con i programmi applicativi;

Se proviene da ECM essa è una richiesta remota cioè proveniente, normalmente, da un altro "virlab server", poiché ECM si occupa della trasmissione via rete attraverso il protocollo HTTP;

Se proviene da LIM essa è una richiesta contenente i risultati di una misura poiché LIM si occupa della gestione degli strumenti fisicamente connessi al computer su cui è in esecuzione il server.

La gestione delle richieste consiste nel trattamento locale del comando o nel suo smistamento a server remoti. In locale possono essere risolte richieste di informazione o di settaggio di parametri del server e, ovviamente, richieste di esecuzioni di comandi sulla strumentazione. In questo ultimo caso vengono utilizzate apposite code, una per ogni banco di misura, in cui le richieste vengono accodate prima del loro invio al LIM. Le strutture a coda sono necessarie poiché BM permette l’allocazione di interi banchi di misura, con procedure di lock e unlock, con cui una applicazione client può riservarsi l’uso esclusivo di un banco. In pratica BM esegue una allocazione globale delle risorse con timeout che impedisce il blocco critico del sistema nel caso in cui una applicazione non sia più in grado di deallocare la risorsa riservatasi.

Oltre a questo BM si occupa della gestione di un database nel quale vengono inserite le informazioni circa il numero di transazioni tra esso e i vari moduli nonché informazioni sui lock, richieste di informazioni ed errori che sono stati gestiti.

 

1.1.4 ECM: External Communication manager

L’External Communication Manager si occupa della spedizione e ricezione dei comandi via rete attraverso il protocollo HTTP. Esso è diviso in due moduli:

ECMSender che svolge le funzioni di client HTTP, cioè spedisce i comandi;

ECMReceiver che svolge le funzioni di server HTTP, cioè riceve i comandi.

Entrambi i moduli permettono la spedizione e la ricezione di più comandi contemporaneamente. Nella spedizione vengono segnalati a BM eventuali condizioni di errore con opportuni comandi inseriti in una coda FIFO, in ricezione, invece, vengono inseriti i comandi ricevuti in una coda FIFO dalla quale BM può prelevarli quando ritiene più opportuno.

Tra le caratteristiche fondamentali di ECM si ricorda il supporto, grazie al protocollo HTTP, di strutture quali proxy-server e firewall ormai indispensabili nella realizzazione di LAN collegate ad Internet, e la sua indipendenza dalla struttura interna di un comando grazie all’introduzione delle funzioni PutPacket e GetPacket all’interno della classe VirlabCmd con le quali i due moduli inseriscono ed estraggono i comandi da un messaggio HTTP.

Oltre a questo i due moduli forniscono anche funzioni di autenticazione automatica dei messaggi HTTP e di codifica dei dati trasmessi.

1.1.5 LCM: Local Communication Manager

Il modulo Local Communication Manager si occupa della trasmissione dei dati tra le applicazioni client (CA) e BM, cioè del collegamento locale tra server e CA. La trasmissione avviene tramite il protocollo TCP/IP quindi, come già illustrato precedentemente, LCM può essere utilizzato anche per trasmissioni via rete con i pregi della prestazione ma con gli svantaggi legati al mancato supporto per proxy-server.

LCM accetta le connessioni di più applicazioni client contemporaneamente e le identifica tramite un codice numerico che verrà inserito nel comando passato a BM. Il codice è necessario per poter identificare le risposte con i risultati e mandarle al relativo mittente.

Anche in questo caso è importante mettere in evidenza l’indipendenza del modulo dalla struttura interna del comando grazie alla presenza delle funzioni InsertString e GetString con cui LCM trasforma un comando in formato di stringa adatto alla trasmissione via TCP/IP.

1.1.6 LIM: Local Instrument manager

Il modulo Local Instrument Manager ha il compito di eseguire fisicamente un comando su uno strumento. I comandi che esso riceve possono essere considerati di "alto livello" nel senso che necessitano di una traduzione per la loro esecuzione. Il modulo infatti è suddiviso in tre strati ciascuno dei quali effettua una traduzione fino ad arrivare alla particolare stringa da spedire attraverso i vari tipi di collegamenti alla strumentazione:

Bench Command Translator (BCT): esegue la virtualizzazione del banco, cioè riconosce a quale strumento del banco deve essere inviato il comando estraendo tale informazione dal comando stesso. Il compito principale di tale modulo è risolvere l’associazione tra indirizzi virtuali, specificati dalla coppia bench-unit, e indirizzi fisici, individuati da interfaccia e indirizzo di interfaccia.

Instrument Command Translator (ICT): esegue la traduzione di un comando da un opportuno formato "generale", ad esempio SCPI, nel comando corrispondente per uno strumento specifico precedentemente identificato dal BCT;

Hardware Interfaces (HI): realizzano i comandi tradotti per l’interfaccia specifica e per lo strumento fisico collegato all’interfaccia selezionata Si noti che esiste un modulo per ogni interfaccia.

Quando viene richiamata la funzione che LIM fornisce per l’esecuzione di un comando da parte di BM un comando attraversa tutti gli strati di traduzione fino ad arrivare al dispositivo fisico. Successivamente le risposte da parte degli strumenti vengono inserite in appositi comandi e inseriti in una coda da cui BM può prelevarli quando ritiene opportuno.

Un aspetto importante del modulo LIM è che esso si basa su appositi database per le varie traduzioni effettuate sui comandi. Questi sono costituiti da svariate tabelle che devono essere configurate in modo adeguato in base alla strumentazione fisicamente collegata al PC.

Capitolo 2

INFORMAZIONI SCAMBIATE

2.1 Requisiti delle informazioni scambiate

In questo capitolo verrà descritta la rappresentazione delle informazioni gestite dal progetto ViRLab. La loro specifica è di fondamentale importanza per chi vuole realizzare un programma in grado di comunicare con il server del progetto: l’insieme delle specifiche che saranno introdotte può essere considerato il protocollo di comunicazione con il programma server.

Per comprendere come sono strutturate le informazioni scambiate si devono preventivamente specificare i requisiti che deve soddisfare un generico comando interpretato dal server. A tal proposito si deve ricordare che un comando non può contenere solo richieste di misure da eseguire mediante strumentazione, ma anche richieste di informazioni sullo stato del server e i risultati delle stesse misurazioni. In pratica un comando rappresenta l’unità elementare di informazione scambiata nella comunicazione tra i moduli del programma server o con l’esterno.

Le principali proprietà che un comando deve possedere possono essere riassunte nel modo seguente:

un comando deve permette l’identificazione dell’unità su cui la misurazione deve essere eseguita, sia per quanto riguarda la topologia del banco di misura, sia per quanto riguarda l’ubicazione della macchina che ne permette l’utilizzazione;

un comando deve essere applicabile al numero maggiore possibile di strumenti esistenti, deve cioè adottare (o definire) uno standard per la comunicazione con gli strumenti (ad esempio SCPI);

un comando deve fornire una modalità di accesso alla strumentazione indipendente da indirizzi fisici o tipo di interfaccia impiegati (virtualizzazione del banco di misura);

un comando deve possedere una sintassi in vista della sua interpretazione da parte del programma server;

la struttura di un comando deve poter essere modificata idealmente senza comportare cambiamenti ai moduli del programma server, o almeno i cambiamenti richiesti devono essere limitati.

Queste proprietà si traducono nella suddivisione del comando stesso in campi e sotto campi con significati ben precisi. Le informazioni contenute in questi campi e le relazioni tra esse permettono di soddisfare le proprietà precedentemente specificate e quindi una loro modifica comporta la riprogettazione del modulo "Bench Manager" che ha il compito di interpretarli.

Oltre a tutte proprietà si devono introdurre delle codifiche appropriate del comando per renderlo adatto alla trasmissione attraverso i vari canali di comunicazione utilizzati. La codifica è strettamente legata al canale di comunicazione il quale richiede delle caratteristiche ben specifiche a cui è necessario uniformarsi.

I due canali esterni al programma server utilizzati riguardano le interfacce tra :

il modulo LCM e le applicazioni client (CA), realizzata attraverso una comunicazione TCP/IP;

i moduli ECM nelle trasmissione via rete, realizzata attraverso il protocollo HTTP.

Prima di delineare come sono stati strutturati i pacchetti TCP/IP e HTTP nei due casi è necessario analizzare come internamente è suddiviso un comando, suddivisione che si basa su alcuni ulteriori requisiti fondamentali del progetto "ViRLab" che verranno subito descritti.

2.2 Virtualizzazione del banco

Quando si svolge un’operazione che coinvolga un generico strumento connesso localmente a un calcolatore risulta necessario specificare alcuni parametri (ad esempio indirizzi 488). L’operazione stessa può inoltre essere specificata sintatticamente secondo una modalità che dipende dallo strumento specifico che si intende controllare. Un tipico esempio è costituito dai comandi che si inviano normalmente agli strumenti nel formato di stringhe ASCII. Tali comandi assumono costrutto sintattico diverso a seconda della famiglia di strumenti coinvolti (oscilloscopio, multimetro, …), o ancora variano al variare del modello prescelto all’interno di una stessa famiglia (HP54600, Tek TDS340, …). Al fine di superare le precedenti difficoltà si è introdotto il concetto di virtualizzazione di un banco di misura. Per definizione, si pensa che un banco di misura sia fisicamente costituito da un insieme di strumenti che possono essere controllati localmente da un computer, e dai dispositivi sotto test ad essi connessi, ovvero da tutti i moduli eseguibili in grado di fornire dati simulati in risposta a comandi. Con virtualizzazione di un banco di misura si intende mostrare ad un client un banco di test sempre allo stesso modo, come se cioè si trattasse composto di unità le quali reagiscono a comandi software la cui sintassi non cambia al variare degli strumenti fisici effettivamente associate a tali unità o al variare della modalità di collegamento degli strumenti tra loro e con il dispositivo sotto test.

Si osserva che al variare del tempo, ovvero tra un test e un altro, l’organizzazione di un banco può variare. In particolare possono variare

* gli strumenti disponibili,
* le connessioni tra strumenti,
* i dispositivi sotto test, connessi alla strumentazione.

Per quanto riguarda i dispositivi sotto test, si può certamente supporre che una loro variazione sia ininfluente ai fini della organizzazione della procedure di test fintantoché non viene variata anche la topologia delle connessioni alla strumentazione. Si noti che, banalmente, uno degli obiettivi di una procedura di test controllata da calcolatore è proprio quella di poter ripetere lo stesso test su di uno stesso dispositivo o su dispositivi distinti.

Per quanto riguarda le variazioni sia degli strumenti fisicamente disponibili, sia delle connessioni tra strumenti, si osserva che esse comportano in genere anche una parziale ridefinizione della procedura di test, nel senso che i comandi inviati agli strumenti devono essere variati.

Per minimizzare tali modifiche si mette a disposizione una serie di funzioni che consentono di identificare un tipologia delle connessioni e degli strumenti disponibili. Un banco di misura viene quindi identificato mediante una forma del tipo:

nome banco, strumenti fisici connessi, classe di dispositivi sotto test.

e opportune funzioni svolte dal server permettono ai client di verificare se il banco di misura attualmente disponibile, è compatibile con la procedure che sta per essere eseguita.

La definizione di banco di misura comporta la possibilità di poter specificare in "run-time"

* quali strumenti sono disponibili;

* le interconnessioni tra gli strumenti e i DUT (Device Under Test).

Tali informazioni sono organizzate in opportuni file che il programma server legge (periodicamente) in modo da poter rendere disponibili le informazioni corrispondenti ai client o in modo da poter correttamente attivare le procedure di traduzione dei comandi definite nel seguito.

Dal punto di vista di un client l’unica informazione interessante è pertanto il nome di un banco di test il quale si suppone individui univocamente un insieme di strumenti fisici e DUT opportunamente connessi. Inoltre un client si può riferire ad uno strumento o ad un sottoinsieme di strumenti di un banco come una "unità", anch’essa individuata da un nome logico.

Un virlab server può gestire contemporaneamente più banchi di misura composti ognuno da più unità. Le unità, inoltre, possono esser condivise da più banchi che per riservarsene l’uso adottano politiche di allocazione di risorse mediante primitive di "lock" e "unlock".

2.3 Struttura logica delle informazioni

Un comando viene pensato logicamente composto dei campi e sotto campi descritti nella Tabella 2.1

Campo

Sottocampi

Funzione

Annotazioni

Command Class

 

Identifica il tipo di messaggio scambiato.

 

BM

Status

Riservato al BM;

non viene trasferito via rete e alle CA.

Destination

Server

Identifica univocamente il nome o IP del servente al quale il comando è inviato.

"localhost" identifica la macchina locale.

 

Bench

Identifica univocamente il nome di un banco gestito dal server di destinazione.

Opzionale, ma obbligatorio se unit è specificato

 

Unit

Identifica univocamente la sub-unità del banco bench (in pratica un dispositivo fisico o un modulo software) in grado di soddisfare il comando inviato.

Opzionale

Sender

Client

Identifica univocamente il nome o IP del calcolatore client che ha richiesto il comando

 
 

Appl_ID

Identifica univocamente il processo client che ha richiesto il comando, permette l’identificazione tra più applicativi client (CA).

Generato automaticamente dal modulo LCM
 

Cmd_ID

Identifica un comando nel caso di ripetizione dello stesso.

Opzionale

Service

Service_class

Identifica la tipologia di servizio richiesto

 
 

Service_type

Identifica un servizio specifico per la classe indicata

Opzionale

Cmd

 

Costituisce il corpo del comando

Opzionale

Tabella 2.1 Struttura logica di un comando

Questa suddivisione è conseguenza di diversi aspetti che devono essere tenuti in considerazione per una gestione corretta delle informazioni.

In particolare, come conseguenza del fatto che un comando può contenere al suo interno diversi tipi di dati (comandi per gli strumenti, risultati di misurazioni, ecc.), è necessario introdurre una modalità per capire cosa esso contiene. Questo viene realizzato attraverso il campo "Command_Class" con cui si specifica la classe del comando cioè se esso è una richiesta, una risposta, un errore e così via.

Un altro aspetto è quello dell’identificazione del destinatario e del mittente di un comando. Deve essere specificato a chi il comando deve essere inviato sia per quanto riguarda la strumentazione, sia per quanto riguarda l’applicazione client. Si può intuire che i due valori sono simmetrici poiché chi effettua una richiesta, quindi il mittente, durante la ricezione della risposta diventa il destinatario. I campi preposti a questo scopo sono "destination" e "sender" che sono suddivisi a loro volta in sotto campi per l’identificazione all’interno della gerarchia: macchina-banco-unità, se il destinatario è uno strumento, o macchina-applID-commandID, se si tratta di una applicazione client.

Inoltre è necessario introdurre in un comando delle informazioni che facilitino la sua gestione, questo può essere fatto attuando una suddivisione dei comandi stessi in classi e sotto classi che indicano un comportamento ben preciso che il BM deve seguire. Il campo preposto per questo è chiamato "service" poiché identifica un servizio che il BM è il grado di fornire, mentre il campo "type" identifica un tipo di comando nella classe specificata (ad esempio: info-numeroclient o accesso-send).

Infine non può mancare l’indicazione del comando vero e proprio cioè della stringa da inoltrare allo strumento o della stringa che contiene i risultati e così via. Esso può essere considerato il parametro dell’intero comando e viene rappresentato dal campo "Cmd".

La struttura interna di un comando può variare nel tempo e quindi deve essere prevista una implementazione che non comporti uno stravolgimento dell’intero progetto software se essa viene modificata. Un esempio di tale implementazione è la classe VirlabCmd che sarà descritta nel seguito.

2.4 Implementazione nel caso di comunicazione diretta

La struttura logica di un comando presentata nel paragrafo precedente può essere implementata in modi diversi a seconda del modulo di comunicazione coinvolto. Nel caso di una comunicazione tra gli applicati client (CA) e il modulo LCM la codifica avviene come segue.

Figura 2.2 Trasmissione di un comando via TCP/IP nel progetto

Un comando viene compattato in un unico pacchettoTCP/IP nel quale tutti i campi di un comando sono scritti in un’unica stringa secondo la procedura seguente:.

* Si trasformano i valori dei vari campi in stringhe;

* Si riuniscono le varie stringhe ottenute in un'unica stringa più grande utilizzando dei separatori di campo univoci, impiegati per permettere la successiva estrazione dei campi dalla stringa stessa;

* Si definisce una modalità per determinare la fine della stringa;

* Infine i caratteri impiegati nella codifica del campo "Cmd" appartengono alla tabella ASCII intera a 8 bit, ovvero assumono un qualunque valore compreso tra 010 e 25510.

In particolare i separatori utilizzati sono:

* Separatore di campo: carattere di "linefeed" (ASCII code = 10);

* Separatore di sottocampo: carattere di "horizontal tab" (ASCII code=9);

e la modalità per determinare la fine della stringa si basa sull’aggiunta della sua lunghezza in testa all stringa stessa.

La costruzione della stringa avviene mediante i seguenti passi (si ricordi che il campo "BM_status" non viene trasferito ai CA):

* Deve essere inserito un separatore di campo ogni volta che inizia un campo del comando;

* Deve essere inserito un separatore di sottocampo prima di ogni sottocampo;

* In testa alla stringa devono essere inseriti due numeri in formato stringa: il primo, che occupa sempre e solo il primo carattere, indica il numero di cifre del secondo numero, il secondo indica il numero di caratteri dell’intera stringa, compresi i numeri in testa.

Si consideri il seguente esempio in cui per identificare il separatore di campo si utilizza la coppia di caratteri "\n" e per separatore di sottocampo la coppia "\t".

Se il comando da codificare è il seguente:

Command Class

 

0

BM

Status

0

Destination

Server

Pamela.dei.unipd.it

 

Bench

Bench01

 

Unit

Unit01

sender

Client

192.168.97.107

 

Appl_ID

3

 

Cmd_ID

0

service

Service_class

12

 

Service_type

2

Cmd

 

CHAN1:RANGE?

La stringa che lo rappresenta è:

281\n\t0\n\tpamela.dei.unipd.it\tbench01\tunit01\n192.168.97.107\t3\t0\n\t12\t2\n\tCHAN1:RANGE?

Infatti dal primo "\n" , compreso, alla fine vi sono 78 caratteri a cui si devono aggiungere i 3 per i numeri all’inizio ottenendo i numeri 2 e 81 all’inizio della stringa. Si noti la mancanza del campo "BM_status" che non deve essere inserito.

E’ interessante notare che l’introduzione di indicazioni sulla dimensione del pacchetto in testa allo stesso consente di inviare nel campo "Cmd" anche codici di controllo della tabella ASCII, ovvero di poter impiegare un formato binario per la trasmissione di informazioni.

2.5 Implementazione nel caso di comunicazione via HTTP

La seguente codifica è adottata nella trasmissione tra i moduli ECM per il trasferimento dei dati via rete, chi quindi necessità di dialogare in modo remoto con il programma server attraverso il modulo ECM deve adottare la struttura delle informazioni illustrata nel seguito.

Anche in questo caso si tratta di trasformare un intero comando in una stringa poiché HTTP si basa sul protocollo TCP/IP. HTTP però ha delle maggiori restrizioni di TCP/IP poiché i suoi messaggi devono rispettare la struttura delineata dalla grammatica che descrive il protocollo stesso. In particolare, alcuni caratteri di controllo all’interno di un messaggio HTTP assumono un ben determinato significato. Questi caratteri se presenti all’interno di un comando non vengono eliminati con la trasformazione in stringa adottata nel caso di collegamento diretta e un server HTTP interpreterà i messaggi ricevuti in modo errato. Per evitare tale situazione si codifica la stringa del caso diretto in modo da eliminare la presenza dei caratteri di controllo.

 

Figura 2.3 Trasmissione di un comando via HTTP nel progetto

La codifica della stringa adottata può essere considerata una "pseudo" conversione "binhex" in cui ad ogni carattere della stringa vengono associati due caratteri che rappresentano in esadecimale il numero del carattere stesso nella codifica ASCII.

Nelle seguenti tabelle vi sono le funzioni realizzate in Visual Basic per ottenere tali codifiche.

Private Function binhex(ByVal datastring As String) As String
Dim tmpstr As String
Dim c, dc As String
Dim i As Long
Tmpstr = ""
For i = 1 To Len(datastring)
c = Mid(datastring, i, 1)
dc = Hex(Asc(c))
If Len(dc) < 2 Then
Dc = "0" + dc
End If
Tmpstr = tmpstr + dc
Next i
Binhex = tmpstr
End Function

Private Function hexbin(ByVal strdata As String) As String
Dim tmpstr As String
Dim c, dc As String
Dim i As Long
Tmpstr = ""
i = 1
While i <= Len(strdata) – 1
dc = Mid(strdata, i, 2)
c = Chr(Val("&H" + dc))
tmpstr = tmpstr + c
i = i + 2
Wend
Hexbin = tmpstr
End Function

Per chiarire come la codifica avviene consideriamo il seguente comando:

Command Class

 

0

BM

Status

0

Destination

Server

Pamela.dei.unipd.it

 

Bench

Bench01

 

Unit

Unit01

Sender

Client

192.168.97.107

 

Appl_ID

3

 

Cmd_ID

0

Service

Service_class

12

 

Service_type

2

Cmd

 

CHAN1:RANGE?

Al quale verrà associata la seguente stringa del caso di comunicazione con il modulo LCM:

281\n\t0\n\tpamela.dei.unipd.it\tbench01\tunit01\n192.168.97.107\t3\t0\n\t12\t2\n\tCHAN1:RANGE?

Successivamente mediante la codifica "binhex" si otterrà la seguente stringa:

3238310A09300A0970616D656C612E6465692E756E6970642E69740962656E6368303109756E697430310A093139322
E3136382E39372E3130370920310920320A09313209320A094348414E313A52414E47453F

Infatti il codice ASCII di "2" è 32, di "8" è 38 e così via. In particolare si osservi che i separartori di campo e sottocampo sono codificati con "0A" e "09", cioè 10 e 9 in esadecimale. Anche in questo caso non è presente il campo "BM_status" che non deve essere trasferito.

Questa stringa per poter essere trasferita con il protocollo HTTP viene inserita nel "body" di un messaggio HTTP di tipo POST, per maggiori chiarimenti sulla costruzione dei messaggi HTTP si faccia riferimento al paragrafo "Utilizzo del protocollo HTTP nel progetto" del Capitolo "Protocollo di rete".

 

2.6 Realizzazione della classe VirlabCmd

La classe VirlabCmd è un struttura complessa, come si può vedere dalle Tabella 2.4 e Tabella 2.5, in cui, oltre alle informazioni che riguardano i vari campi in cui è stato suddiviso un comando, vi sono anche alcune funzioni e procedure che, dai dati presenti nella struttura, producono delle stringhe adatte alla trasmissione via rete, in pratica realizzano le stringhe per la comunicazione diretta e per la trasmissione via HTTP.

Public CmdClass As Integer

tipo di classe del comando da eseguire

Public Dest_server As String

Nome o IP della macchina server destinatario

Public Dest_bench As String

Nome del banco che contiene lo strumento da utilizzare

Public Dest_unit As String

Nome della unità che identifica uno strumento

Public Sender_client As String

Nome o IP della macchina client

Public Sender_applid As String

Identificativo della applicazione client che ha spedito il comando (vi possono essere più client)

Public Sender_cmdid As String

Identificativo del comando spedito

Public Service_class As Integer

tipo di classe del servizio richiesto

Public Service_type As Integer

tipo di servizio richiesto nella classe

Public Cmd As String

Comando vero e proprio da eseguire

Tabella 2.4 Campi della classe VirlabCmd

Public Function InsertString(ByVal stringdata As String) As Boolean

Aggiorna le variabili della classe comando concordemente a una stringa costruita in accordo alle regole specificate nel paragrafo 3

Public Function GetString() As String

Restituisce una stringa adatta per la trasmissione TCP/IP di LCM (par. 3) a partire dai valori assunti dalle variabili della classe

Public Function GetPacket() As String

Fornisce un comando in formato di stringa codificata adatta all’inserimento nel body di un messaggio HTTP ottenuto apartire dai valori assunti dalle variabili della classe (par. 4)

Public Function PutPacket(ByVal datastring As String) As Boolean

Aggiorna le variabili della classe in accordo alla codifica "pseudo" binhex di una stringa (par. 4) contenente un comando

Tabella 2.5 Funzioni della classe VirlabCmd

Le funzioni presenti nella classe VirlabCmd hanno il pregio di permettere l’indipendenza tra la struttura interna del comando e i moduli del progetto. Infatti, ad esempio, LCM per trasmettere un comando via TCP/IP non ha la necessità di conoscere come è strutturato un comando per poi trasformarlo in formato stringa, ma gli è sufficiente richiamare la funzione "GetString" della classe per ottenere lo stesso risultato. In modo analogo a ECM per produrre la stringa codificata è sufficiente richiamare la funzione "GetPacket" senza preoccuparsi nemmeno della codifica che quindi può essere cambiata anch’essa in futuro senza modificare il modulo.

Ai vari moduli (LCM, ECM, LIM) non interessa cosa deve essere trasmesso ma soltanto che esistano le funzioni per ottenere le stringhe da trasmettere. Infatti, i moduli LCM e ECM possono essere utilizzati per trasmettere qualsiasi tipo di informazione, attraverso i rispettivi canali di comunicazione.

 

2.7 Lista dei comandi implementati e codici corrispondenti

La lista dei comandi implementati rappresenta l’insieme dei comandi a cui il server, ed in particolare BM, è in grado di rispondere. Se si utilizzano dei valori per i vari campi differenti da quelli previsti BM risponde con un messaggio d’errore. Più semplicemente la lista dei comandi implementati rappresenta il "linguaggio" con cui si può dialogare con il server.

Di seguito vengono riassunti i vari valori in apposite tabelle.

2.7.1 Command class

Il campo "command class" serve ad identificare il tipo di comando inviato.

NOME

VALORE

COMMENTO

CC_ERROR

0

messaggio di risposta di tipo errore

CC_REQUEST

1

richiesta di esecuzione di comandi rivolta al server o a una sua componente

CC_ANSWER

2

risposta dal server al client, contenente i dati utili

Service class e service type

Questi 2 campi servono ad identificare il tipo di richiesta ricevuta.

Nel caso di classi di comando del tipo CC_REQUEST:

service class

service type

valore

Commento

SC_BMRESOURCE   0 Richieste di risorse o servizi indirizzate al gestore dei banchi gestiti dal server
  ST_BM_LOCK

0

Richiesta di lock di un banco
  ST_BM_UNLOCK

1

Richiesta di unlock di un banco
SC_BMINFO   1 Richiesta di informazioni al server
  ST_BM_NUMCLIENT

0

Restituisce numero di client connessi
  ST_BM_NUMREQ

1

Restituisce numero di richieste in coda
  ST_BM_TIMEOUT

2

Restituisce timeout per lock/unlock
SC_BMCONFIG   2 Richieste di configurazione di BM
  ST_BM_SETTIMEOUT

0

Cambia timeout
  ST_BM_SINGLEUSER

1

Passa a modalità single-user
  ST_BM_MULTIUSER

2

Passa a modalità multi-user (modo di default)
  ST_BM_EMPTYQUEUE

3

Svuota tutte le code di comandi ricevuti
  ST_BM_RESET

4

Svuota le code, sconnette tutti i client, rilegge il data-base relativo alla configurazione e riavvia il servizio
SC_LIMINFO   11 Richieste di informazioni (a LIM) di banchi gestiti dal server
  ST_LIMI_GENERAL

0

Situazione generale: fornisce elenco banchi e elenco unità (e nomi "veri" del modello) per banco
  ST_LIMI_BENCHLIST

1

Fornisce lista nomi dei banchi gestiti dal server
  ST_LIMI_UNITLIST

2

Fornisce lista nomi di unità per un dato banco
  ST_LIMI_CMDTOUNIT

3

Fornisce lista comandi rivolti di una interfaccia (esempio send, receive,…)
  ST_LIMI_UNITLANGUAGE

4

Chiede che traduzione viene svolta dal traduttore
  ST_LIMI_UNITCMDLIST

5

Lista comandi tradotti (gestiti dallo strumento)
SC_LIMCONFIG   12 Comandi di configurazione dei banchi gestiti dal server
  ST_LIMC_BENCHINI

0

Inizializzazione interfacce banco
  ST_ LIMC_UNITINI

1

Inizializzazione interfacce unità
  ST_LIMC_BENCHSETUP

2

Set-up iniziale banco (BM)
  ST_LIMC_BENCHINITIALIZE

3

Set-up iniziale banco (user)
  ST_LIMC_BENCHTERMINATE

4

Set-up finale banco (user)
  ST_LIMC_LABINI

5

Inizializzazione interfacce di laboratorio
  ST_LIMC_BENCHSETUPTERM

6

Set-up finale banco (BM)
SC_LIMACCESS   13 Richieste di accesso ad unità
  ST_ LIMA_SEND

0

Invia il comando al device
  ST_ LIMA_RECEIVE

1

Riceve dati dal device
  ST_ LIMA_READSTATUSBYTE

2

Legge lo "status byte" del device (solo GBIB)
  ST_ LIMA_WAITSRQ

3

Testa il valore linea SRQ
  ST_LIMA_DATAQUERY

4

Send-Receive in un unico comando (solo GPIB)
  ST_LIMA_WAIT

5

Attende per n millisecondi, n viene indicato nel corpo comando
  ST_LIMA_MACRO

100

Comandi per DLL personalizzate le quali gestiscono più comandi assieme, il corpo comando è una stringa, interpretata dalla DLL, che corrisponde ad un "macro" comando

Per classi di comando del tipo CC_ERROR:

service class

service type

Valore

commento

SC_NOERR

 

0

Nessun errore riscontrato

 

ST_NOERROR

0

 

SC_VLERR

 

1

Errore generale

SC_ECMERR

 

2

Errore da ECM

SC_LCMERR

 

3

Errore da LCM

SC_LIMERR

 

4

Errore da LIM

 

ST_MISSING_BENCH

1

Banco mancante o errato

 

ST_MISSING_UNIT

2

Unità mancante o errata

 

ST_BUFFER_ERROR

3

Errore nella Read-Status-byte

 

ST_WSRQ_ERROR

4

Errore nella WaitSRQ

 

ST_LIM_BUSY

5

Coda comandi piena

 

ST_INTERFACE_ERROR

6

Errore di interfaccia

 

ST_SETUP_ERROR

7

Errore in fase di set-up

 

ST_TRANSLATION_ERROR

9

Errore di traduzione

Messaggi inviati da BM

Questo è l’insieme dei comandi con cui il server risponde alle varie richieste ricevute.

Command Class

Service Class

Service Type

Commento

A seguito di una richiesta di Lock BM risponde con uno dei sottoelencati messaggi:

CC_ERROR

SC_VLERR

ST_VLERR_LOCK_BENCH_NOT_EXIST

1

Lock su banco non esistente

CC_ERROR

SC_VLERR

ST_VLERR_LOCK_NO_MEMORY

2

Lock rifiutato causa overload

CC_ANSWER

SC_NOERR

ST_VLERR_NOERR

3

LOCK Accepted

CC_ERROR

SC_VLERR

ST_VLERR_LOCK_DUPLICATE_COMMAND

4

Comando di lock duplicato

A seguito di una richiesta di Unlock il BM risponde con uno dei sottoelencati messaggi:

CC_ERROR

SC_VLERR

ST_VLERR_UNLOCK_BENCH_NOT_EXIST 5 Unlock su banco non esistente

CC_ERROR

SC_VLERR

ST_VLERR_UNLOCK_NO_MEMORY

6

Unlock rifiutato causa overload

CC_ANSWER

SC_NOERR

ST_VLERR_NOERR

7

UNLOCK Accepted

CC_ERROR

SC_VLERR

ST_VLERR_UNLOCK_DUPLICATE_COMMAND

8

Unlock su risorsa giá deallocata

A seguito di una richiesta di Informazione BM può rispondere con uno dei seguenti messaggi:

CC_ERROR

SC_VLERR

ST_VLERR_INFO_NO_MEMORY

9

Richiesta informazioni rifiutata causa overload

A seguito di un comando generico BM può rispondere con uno dei sottoelencati messaggi:

CC_ERROR

SC_VLERR

ST_VLERR_GENERIC_BENCH_NOT_EXIST

10

Comando su banco non esistente

CC_ERROR

SC_VLERR

ST_VLERR_GENERIC_NO_MEMORY

11

Comando rifiutato causa overload

A seguito di un comando di Riconfigurazione del server il BM risponde con uno dei sottoelencati messaggi:

CC_ANSWER

SC_NOERR

ST_VLERR_CONFIG_OK

22

Riconfigurazione effettuata

CC_ERROR

SC_VLERR

ST_VLERR_TIMEOUT_SMALL

21

Errore: Time Out inferiore a Time inactivity

CC_ERROR

SC_VLERR

ST_VLERR_CMD_WRONG

20

Campo Cmd Errato

CC_ERROR

SC_VLERR

ST_VLERR_PERMISSION_DENIED

18

Accesso negato

La disattivazione del modulo LIM comporta (per ogni Lock, Unlock, comando generico presente in una coda di comandi) la generazione di uno dei sottoelencati messaggi:

CC_ERROR

SC_VLERR

ST_VLERR_UNLOCK_FORCED_NO_LIM

13

Unlock forzato. No LIM

CC_ERROR

SC_VLERR

ST_VLERR_LIM_NOT_EXIST

14

LIM non piú disponibile

CC_ERROR

SC_VLERR

ST_VLERR_LIM_NOT_EXIST_UNLOCK

15

Unlock su LIM non esistente

CC_ERROR

SC_VLERR

ST_VLERR_LIM_NOT_EXIST_LOCK

16

LOCK su LIM non esistente

A causa della scadenza di Time Out di Lock o della scadenza del massimo periodo di inattivitá accettato; BM genera uno dei sottoelencati messaggi:

CC_ERROR

SC_VLERR

ST_VLERR_UNLOCK_FORCED

12

Unlock forzato causa Time Out

CC_ERROR

SC_VLERR

ST_VLERR_UNLOCK_FORCED_INACTIVITY

17

Unlock forzato causa inattivitá

Qualsiasi comando avente codice errato da luogo al seguente messaggio di errore da parte di BM:

CC_ERROR

SC_VLERR

ST_VLERR_COMMAND_NOT_EXIST

19

Codice Comando Errato

Capitolo 3

IL LINGUAGGIO SCPI

3.1 INTRODUZIONE

Per porre rimedio ad una situazione di confusione che si era venuta a creare nei primi anni '60 quando esistevano una larga varietà di interfacce e protocolli di comunicazione non standarizzate per il controllo tramite computer degli strumenti di misura, nel 1975 l' Istitute of Electrical and Electronic Engineers ( IEEE ) approvò la normativa IEEE 488.

IEEE 488 definisce un protocollo standard per la trasmissione di dati fra strumenti e computer. Più precisamente tale normativa definisce un protocollo per lo scambio di informazioni tra strumenti e computer senza specificare il significato dei dati scambiati. Come conseguenza le industrie inventarono estensioni al protocollo dipendenti dallo specifico strumento, così nei primi anni '80 si iniziò a sentire l' esigenza di uno standard che permettesse di specificare anche la semantica dei dati scambiati via IEEE 488.

Nel 1987 la IEEE propose "IEEE 488.2-1987, Codes, Formats, Protocols and Common Commands for Use with IEEE 488.1-1987". Questo standard definisce le regole che devono soddisfare gli strumenti e i controllori di un sistema di misura, unitamente all' organizzazione della comunicazione e pure il formato e le specifiche di alcuni comandi frequentemente usati. Ogni industria di strumentazione era lasciata libera di definire invece il nome e gli effetti di altri comandi, e così è tuttoggi possibile che due strumenti simili e conformi allo standard IEEE 488.2, possano presentare comandi sintatticamente diversi. Per ovviare a tale incoveniente i principali costruttori hanno fondato un consorzio, il quale ha definito un' estensione del protocollo IEEE 488.2, lo standard SCPI (Standard Commands for Programmable Instruments). L' idea base dello standard consiste nel definire istruzioni associabili a blocchi funzionali nei quali si può pensare sia suddivisibile un qualsiasi strumento. Tale approccio presenta parecchi vantaggi. Innanzi tutto è possibile descrivere in modo uniforme una grande varietà di funzioni e strumenti. Vale a dire che lo SCPI rende compatibili, dal punto di vista della programmazione, strumenti di una stessa classe o strumenti aventi le stesse funzionalità. Ad esempio per una misura di tensione in continua su Oscilloscopi di case costruttrici diverse o anche impiegando un multimetro si utilizza sempre la stessa istruzione cioè : SENSe:FUNCtion "VOLTage:DC", in modo analogo per la misura di frequenza mediante un Counter o un Oscilloscopio si userà il comando: SENSe:FUNCtion "FREquency". Si parla talvolta di coerenza di programmazione "verticale" per indicare l' utilizzo dello stesso comando per controllare dispositivi appartenenti alla stessa classe (nell' esempio precedente la classe degli strumenti Oscilloscopi). Viceversa la coerenza "orizzontale" di programmazione consiste nell' uso dello stesso comando per controllare una funzionalità simile in strumenti di classi diverse.

Per quanto riguarda le risposte che gli strumenti inviano all' host computer si osserva che il formato della risposta di uno strumento compatibile SCPI ad una particolare richiesta è ben definita, riducendo così lo sforzo di interpretazione dei dati o dello stato del dispositivo in quanto il formato dei dati e le informazioni sullo stato sono forniti in un formato indipendente dal particolare dispositivo dialogante.

Un ulteriore vantaggio associato allo standard SCPI è quello di ridurre il tempo di sviluppo dei programmi di implementazione dei comandi degli strumenti sui dispositivi compatibili SCPI, fornendo un linguaggio di programmazione facile da interpretare e ben strutturato. In particolare per un impiego remoto dello strumento, semplici comandi SCPI comportano per l' utilizzatore, un controllo della strumentazione SCPI facile e veloce, mentre un controllo della strumentazione tradizionale spesso fornisce parecchi comandi dettagliati, ma complicati.

Il linguaggio è progettato per essere espanso in futuro con nuovi comandi mantenendo la compatibilità con i comandi già definiti; infatti non appena un costruttore propone un nuovo strumento, il linguaggio di programmazione viene aggiornato in modo da rimanere compatibile con gli strumenti SCPI esistenti. Il Consorzio SCPI analizza annualmente le proposte di estensione dei comandi dello standard, proposte che possono essere inoltrate sia dai membri del Consorzio sia da altri enti interessati. Le revisioni dello standard, pubblicate annualmente, hanno validità immediata e diventano parti permanenti del linguaggio, per cui ogni copia di SCPI è caratterizzato dall' anno di emmissione di quella versione. La proposta di un nuovo comando può essere accettata se rispetta le regole di "Syntax and Style" e se non esiste un comando che controlla la stessa funzionalità.

Lo SCPI risulta essere estremamente versatile e adatto alle più diverse applicazioni e può essere utilizzato su interfacce IEEE 488.1, IEEE 488.2, VXI Bus, RS 232C e altre.

Ovviamente, dal punto di vista della programmazione l ' uso dello standard SCPI riduce notevolmente lo sforzo di sostituzione di uno strumento SCPI con un altro SCPI rispetto a strumenti non compatibili con tale standard, ma non risolve le problematiche associate all' accuratezza, alla risoluzione e alle funzionalità diverse degli strumenti.

3.2 ORGANIZZAZIONE DEL LINGUAGGIO SCPI .

Il linguaggio SCPI è definito da una grammatica rappresentata mediante un albero, vale a dire da una struttura gerarchica; ogni stringa comando è formata dalla successione di parole che si incontrano percorrendo l' albero dalla radice ad una foglia terminale.

Il carattere ":" indica il passaggio nell' albero ad una foglia sottostante e separa le parole nel comando. Ad esempio, il comando: SENSe:CURRent:DC:RANGe:AUTO ON è rappresentato, nell' albero SCPI, dal percorso evidenziato nel grafico sottostante:

LIV. 0 SCPI Sottalbero TRIGger
LIV. 1 INPut DISPlay SENSe TRIGger
LIV. 2 COUPling MENU RESistance CURRent DELay
LIV. 3 NAME AC DC
LIV. 4 RANGe
LIV. 5 AUTO

Fig.3.1 Esempio di rappresentazione di un comando SCPI con un albero.

Le parti del comando associate a ciascuna foglia nell' albero sono dette anche "parole chiavi". Ognuna di queste occupa un diverso livello nell' albero. Comandi corti sono formate da parole chiavi di alto livello e forniscono maggiore generalità all' istruzione. Viceversa un comando formato da molte parole chiavi sostituisce nello standard una istruzione di funzionalità più complessa e maggiormente legata alle caratteristiche dello strumento considerato. Inoltre, ad ogni parola chiave si può associare un sottoalbero, il quale si può interpretare come un set di comandi dello strumento caratterizzati da una funzionalità comune. Ad esempio, il sottoalbero TRIGger raccoglie tutte le istruzioni che riguardano il blocco funzionale di sincronizzazione degli eventi. In particolare una foglia terminale può considerarsi un sottoalbero degenere che individua un solo comando.

In questa ottica conviene considerare ogni strumento modellizzato come un insieme di blocchi funzionali che si scambiano dati o messaggi di controllo; ogni blocco rappresenta una particolare funzione dello strumento e lo standard SCPI definisce quindi un albero per la generazione di comandi in corrispondenza di ogni funzione indicata nei blocchi.

Il modello generale di uno strumento programmabile è rappresentato in figura 3.2

* Signal
* Data bus Signal Routing Measurement Function Format
* Trigger Memory
* Signal
* Data bus Signal Routing Signal Generation Format

Fig. 3.2 Modello base di uno strumento programmabile.

Leggenda:

flusso dei controlli
flusso dei dati

Con riferimento alla figura 3.2 ogni blocco rappresenta una sub-unità funzionale di uno strumento. Tali blocchi sono descritti nel seguito.

Signal Routing

E' il blocco di condizionamento del segnale. I comandi associati a questa funzionalità hanno in comune la parola chiave ROUTe del linguaggio SCPI. Tali comandi adattano il segnale alle caratteristiche richieste nella porta di ingresso o nella porta di uscita dello strumento.

Measurement Function

Il blocco Measurement Function puo’ essere scomposto nei sottoblocchi: INPut, SENSe, CALCulate come indicato in figura 3.3

* INPut SENSe CALCulate
* Measurement Function

Fig.3.3 Blocco funzionale Measurement Function

Tale blocco di misura esegue inizialmente un condizionamento del segnale d’ingresso (blocco INPut) tramite le funzioni di filtraggio del segnale ( FILTer), di offset (OFFSet), di amplificazione (GAIN ) e di attenuazione (ATTenuation ).

Successivamente il blocco SENSe converte i segnali fisici in dati numerici da inviare all' host computer; le funzioni tipiche implementate da "SENSe" sono quelle di definizione del tipo, dell’ampiezza, della risoluzione del segnale da misurare. Tale blocco è presente in tutti gli strumenti programmabili che misurano grandezze ed è caratterizzato da un ampio numero di sottosistemi.

Il flusso di dati viene in seguito elaborato (blocco CALCulate) per fornire grandezze derivabili da quelle principali, in genere più semplici da utilizzare o di immediata interpretazione e per convertire unità di misura.

I blocchi INPut, SENSe, CALCulate sono associati agli omonimi sottoalberi dei comandi.

Signal Generation

Strumenti che utilizzano sorgenti interne di segnale sono costituiti da blocchi funzionali di generazione del segnale (Signal Generation), i quali possono essere a loro volta scomposti in tre sottoblocchi: CALCulate, SOURce e OUTPut come indicato in fig.3.4

* CALCulate SOURce OUTPut
* Signal Generation

Fig.3.4 Blocco funzionale Signal Generation.

Il blocco di OUTPut esegue il condizionamento del segnale generato ed è costituito dalle funzioni di filtraggio, di offset, di attenuazione e di guadagno. Esso è presente in tutti gli strumenti del tipo "sorgente di segnale".

Il blocco di SOURce genera un segnale analogico a partire da parametri opportuni o da dati numerici. Tale blocco è presente in tutti i generatori di segnale e contiene un gran numero di funzioni secondarie a seconda del tipo di segnale da generare.

Infine il blocco CALCulate permette la conversione dei dati numerici cambiando l' unità di misura.

I blocchi OUTPut, SOURce, CALCulate sono associati agli omonimi sottalberi dei comandi.

Trigger

Il blocco trigger permette di sincronizzare le operazioni dello strumento. Si distinguono nello SCPI associati a tale blocco funzionale quattro sottoalberi di comando: TRIGger, ARM, INITiate e ABORt .

Memory

Il blocco Memory è associato ad un set di comandi di gestione della memoria del dispositivo. Esso definisce le operazioni di salvataggio dei dati all' interno dello strumento. La memoria dello strumento può essere inaccessibile all' operatore, oppure può essere solo letta o ancora può essere accessibile sia in lettura sia in scrittura.

Format

Il blocco Format consente la conversione dei dati da un formato interno allo strumento a uno adatto alla comunicazione con i dispositivi esterni.

I dati possono essere rappresentati in formato binario, ottale, esadecimale o ASCI.

Uno strumento può implementare solo alcune delle funzionalità del modello di figura 3.2, restringendo al minimo i comandi accettabili. Ad esempio un voltmetro con un solo ingresso può implementare istruzioni SCPI relative ai blocchi di Measurement Function, Trigger, Format senza necessariamente interessare il blocco Memory o Signal Routing.

Pertanto un voltmetro può essere descritto dal sottoinsieme di figura 3.2 rappresentato in fig. 3.5

Signal Measurement Function Format

Trigger

Fig.3.5 Blocchi funzionali essenziali in un voltmetro.

Analogamente, un alimentatore programmabile ad una sola uscita può essere rappresentato dal blocco generatore di segnale e dal blocco formato dei dati:

Signal Signal Generation Format Data Bus

Fig.3.6 Blocchi funzionali essenziali di un alimentatore programmabile.

3.3 DESCRIZIONE DI ALCUNI SOTTALBERI.

DISPlay Sottosistema.

Il sottosistema DISPlay controlla la presentazione testuale, la parte grafica ed le informazioni della traccia. Le informazioni della traccia includono dati di misurazione e dati provenienti dall' interazione dell' utente con il pannello dello strumento.

Le foglie principali del sottoalbero DISPlay sono: MENU, WINDow, GRAPhics, STATe, TEXT, TRACe.

FORMat Sottosistema.

Il sottosistema FORMat raccoglie un vasto insieme di differenti rappresentazioni di dati per il trasferimento numerico e ordinato di informazioni. Le foglie principali del sottoalbero sono: DATA, SREGister.

Il comando associato alla foglia DATA fornisce l' impostazione di configurazione dati. Viene specificato il tipo e la lunghezza dei dati. I tipi di dati validi sono: ASCii, INTeger, UINTeger, REAL, HEXadecimal, OCTal, BINAry, e PACKed. Il parametro <length> da specificare con questo comando è opzionale per tutti i tipi; il suo significato è dipendente dal tipo selezionato. Un esempio di implementazione del comando FORMat:DATA sarà illustrato nel Manuale SCPI dell' oscilloscopio HP54615B.

INPut Sottosistema.

L' input sottosistema controlla le caratteristiche del segnale all' ingresso dello strumento.

In particolare i sottoalberi principali associati a tale sottosistema sono: ATTenuation, COUPling, FILTer, GAIN, IMPedance, OFFSet, POSition.

MEASure Sottosistema.

Lo scopo del gruppo di istruzioni MEASure è l' acquisizione di dati usando un insieme di istruzioni di alto livello. Il gruppo di istruzioni MEASure ha una dualità; si distinguono comandi e richieste caratteristiche. Diversamente, con il sottosistema CONFigure, posizionato allo stesso livello di MEASure, si hanno delle forme distinte di richieste e di comandi. Le istruzioni del sottosistema MEASure si riferiscono alle caratteristiche del segnale quando viene misurato, esse sono strutturate per permettere all' utente di controbilanciare l’ intercambialità del controllo nel processo di misurazione.

MEASURE fornisce una completa capacita’ operativa dove lo strumento e’ configurato; l' effettuazione di una misura fornisce, mediante operazioni sul segnale misurato, i valori di determinati parametri associati. Spesso e’ richiesto un piu’ preciso controllo della misurazione. Percio’ MEASURE e’ integrata provvedendola di due comandi: CONFigure e READ. CONFigure svolge la parte della configurazione della misura e READ svolge l’ acquisizione dei dati post elaborati e parte dell’ elaborazione della misura.

Si può operare una configurazione generica della misurazione utilizzando CONFIGURE e quindi modificare la misurazione cambiando le funzioni dello specifico strumento. Il READ poi, completa il processo di misura. Il sottosistema READ e’ suddiviso in due ulteriori comandi: INITiate[:IMMediate] e FETch?.INITiate[:IMMediate]. Il sottosistema FETCH opera la funzione post elaborazione dati. Su un singolo set di dati acquisiti si possono implementare molte istruzioni FETCH. Per fare un esempio, in un oscilloscopio si possono acquisire molti segnali di misura che contengono parecchie informazioni, come la frequenza del segnale, il voltaggio AC e DC. Un segnale transitorio puo’ essere catturato usando MEASURE, READ o INITIATE. FETCH permette di ottenere ciascuna caratteristica dei differenti segnali senza riacquisire una nuova misura.

MEASURE fornisce la compatibilita’ migliore tra gli strumenti perche’ non e’ richiesta la conoscenza dello strumento per compiere l’ operazione. CONFIGURE/READ e’ meno compatibile se la riconfigurazione dello strumento e’ compiuto tra le operazioni CONFIGURE E READ. Questo perche’ la riconfigurazione dipende dallo strumento specifico. FETCH è ancora meno compatibile perche’ la conoscenza dello strumento e’ necessaria per determinare se l ‘ informazione e’ stata aquisita dallo stesso.

Per fare un altro esempio un oscilloscopio puo’ catturare sia il tempo di salita sia l’ ampiezza dell’ impulso in una singola acquisizione. Se l’ ampiezza dell’ impulso fosse acquisita attraverso un comando MEASURE, sarebbe possibile misurare il tempo di salita.

Se l’ ampiezza dell’ impulso fosse misurata con un cronometro, le informazioni sul tempo di salita non potrebbero essere disponibili senza operare un’ altra acquisizione dei dati. Percio’ FETCH non potrebbe essere usato.

Cambiando alcune parti dell’ acquisizione di uno strumento, i dati di misura esistenti potrebbero essere invalidati. Per esempio la sequenza: INITiate;CONFigure:VOLTage;FETCH:VOLTage? potrebbe generare un errore perche’ il dato e’ stato invalidato dal comando CONFIGURE.

Riconfigurando il display o i blocchi del tracciato non si avra’ questo effetto.

SENSe Sottosistema.

I comandi SENSe sono organizzati in molte sezioni. Ciascuna sezione o sottosistema tratta controlli che riguardano direttamente lo strumento specifico, posizionati nel dispositivo e non riferiti invece alle caratteristiche del segnale diretto. Questi comandi sono relazionati attraverso il nodo SENSe. Il nodo SENSe può essere opzionale in particolari strumenti. Il motivo per il quale SENSe viene reso opzionale è di permettere a dispositivi che dispongono di sensori primari di accettare comandi brevi/corti.

Il nodo SENSE non puo’ essere un optional se SOURce o ROUTe sono optional anch’ essi, poiche’ solo un nodo a un dato livello puo’ essere un optional. Per esempio, un tipico calcolatore puo’ scegliere di fare il nodo SENSE optional, dal momento che i comandi piu’ frequentemente usati sarebbero sotto il sottosistema SENSE. Se il calcolatore contiene anche sia la funzione SOURce sia la funzione ROUTing, queste dovrebbero essere controllate attraverso i loro rispettivi nodi. Un nodo optional come SENSE implica che il dispositivo accettera’ i comandi con o senza il nodo optional e si avra’ lo stesso risultato. Il dispositivo e’ implementato per accettare il nodo optional, se inviato senza errori. In alcuni casi , un sensore puo’ contenere sorgenti dipendenti o funzioni sensorie. L’ aggiuntiva funzionalita’ dipendente sara’ posta come sottonodi SENSE o SOURCE. Inoltre i nodi optionali (SENSE, SOURCE e ROUTE) non sono ammessi se questa funzionalita’ dipendente esiste in un dispositivo. Altrimenti potrebbe verificarsi conflitti nell’ interpretazione dei comandi, per esempio tra SENSE e SOURCE se SOURCE diventa un optional.

Il sottonodo FREQuency di SENSe contiene parecchi comandi che hanno complessi accoppiamenti. Fra gli altri include i comandi START, STOP, CENTER e SPAN.

SOURce

I comandi SOURce sono divisi in molte sezioni. Ciascuna sezione o sottosistema tratta con i controlli che direttamente interessano diversi blocchi del dispositivo, e non sono invece relazionati con le caratteristiche del segnale diretto. Questi comandi sono referenziati attraverso il nodo SOURce . Il nodo SOURce può essere un optional in un dispositivo particolare. La ragione per cui SOURce è optionale è per permettere a dispositivi che sono sorgenti primarie di accettare comandi più corti.

Il nodo SOURce non può essere optionale se lo sono anche il SENSe e il ROUte, perchè solo un nodo ad un dato livello può essere optionale. Per esempio un tipico alimentatore di potenza puo’ scegliere di rendere il nodo SOURce optionale, dal momento che i comandi piu’ frequentemente usati saranno sotto il sottosistema SOURce. Un nodo optional, come SOURce, implica che il dispositivo accettera’ e sviluppera’ i comandi con o senza tale nodo avendo lo stesso risultato. Il dispositivo e’ implementato per accettare il nodo optional, se inviato senza errore. In alcuni casi, un SOURce puo’ contenere sorgenti dipendenti o funzioni sensorie. Allora l’ aggiuntiva funzionalita’ dipendente sara’ collocata come sottonodi SENSE o SOURCE . Inoltre , non sono ammessi i nodi optional (SENSe, SOURce o ROUTe) se questa funzionalita’dipendente esiste in un dispositivo.

Altrimenti potrebbero verificarsi conflitti nell’ interpretazione dei comandi per esempio tra SOURce e SENSe se a SENSe fosse permesso di essere un optional.

I sottonodi principali di SOURce sono CURRent, POWer, VOLTage, FREQuency e RESistance. Questi sottonodi contengono molti set di comando che hanno complessi accoppiamenti.

3.4 SINTASSI E STILE DEI COMANDI SCPI.

Criterio di tacito consenso.

Tutti gli strumenti SCPI devono rispettare le specifiche fisiche di IEEE 488.2, eccetto la sezione 4.1 di IEEE 488.1 "Requisiti", che potrà essere omessa quando lo strumento non implementa l' interfaccia IEEE 488.1.

In questa sezione sono indicate i comandi obbligatori e opzionali del formato SCPI

Comandi obbligatori per IEEE 488.2.

Alcuni comandi già definiti nello standard 488.2 devono essere obbligatoriamente gestiti da uno strumento compatibile SCPI. Tali comandi sono riassunti nella tabella 3.7

*CLS CLEAR STATUS COMMAND
*ESE STANDARD EVENT STATUS ENABLE COMMAND
*ESE?
STANDARD EVENT STATUS ENABLE QUERY
*ESR? STANDARD EVENT STATUS REGISTER QUERY
*IDN? IDENTIFICATION QUERY
*OPC OPERATION COMPLETE COMMAND
*OPC? OPERATION COMPLETE QUERY
*RST RESET COMMAND
*SRE SERVICE REQUEST ENABLE COMMAND
*SRE? SERVICE REQUEST ENABLE QUERY
*STB? READ STATUS BYTE QUERY
*TST? SELF-TEST QUERY
*WAI WAIT-TO-CONTINUE COMMAND

Tabella 3.7 Comandi 488.2 obbligatoriamente gestiti da strumenti compatibili SCPI

Questi particolari comandi prendono il nome di Common Commands e sono inviati dal controller ai vari dispositivi. Essi devono obbligatoriamente iniziare con il carattere ASCII

"*" e sono formati da tre caratteri maiuscoli, eventualmente seguiti da un punto di domanda quando il comando e’ una richiesta di informazioni al dispositivo.

Spesso tali comandi interessano i bit dei registri del dispositivo, quindi conviene prima di descriverli parlare dei registri di stato nello standard 488.2 i quali definiscono lo stato dello strumento. Le informazioni sullo stato di un dispositivo possono essere fornite tramite due modalita’ distinte. La prima e’ basata sull’ uso di registri nei quali viene indicato se rispetto ad una situazione di riferimento si e’ verificato una variazione.

E’ possibile anche avere la successione degli stati di un dispositivo utilizzando una struttura di accodamento ( output queue) nella quale vengono sequenzialmente memorizzate tutte le variazioni di stato che si verificano. In tal modo si ha come informazione aggiuntiva l’ evoluzione dello stato del dispositivo.

Ad ogni strumento e’ imposta una struttura interna minima per indicare il suo stato, che prende il nome di struttura standard , nella quale alcuni parametri sono obbligatori, mentre altri sono lasciati alla liberta’del progettista in modo da permettere la rappresentazione anche di situazioni dipendenti specificatamente dal tipo di strumento utilizzato.

Stato dei dispositivi continuamente monitorati.

Condition Register

Transition Filter

LOGICAL Event Register

OR

Event Enable Register
Summary Message

Fig. 3.8 Struttura logica dei registri interni al dispositivo indicanti il suo stato.

Come rappresentato in figura 3.8 all’ interno dello strumento e’ presente un registro delle condizioni ( Condition Register ) i cui bit rappresentano lo stato attuale del dispositivo.

Il registro degli eventi ( Event Register ) memorizza se si e’ verificato una certa condizione nel registro delle condizioni, queste dipendono dai bit impostati nel registro filtro ( Transition Filter ). In questo modo si puo’ verificare se, ad esempio, si e’ avuto una transizione da falso a vero nel Condition Register.

L’ Event Register e’ di tipo latch, di conseguenza tale registro rimane settato anche se il dispositivo ritorna nello stato precedente. Esso da l’ indicazione che un certo evento si e’ verificato. Lo standard stabilisce delle regole affinche’ si verifichi un determinato evento.

Il registro di abilitazione eventi ( Event enable register ) definisce quali bit del registro Event Register potra’ generare una variazione del segnale di uscita.

Piu’ precisamente ogni bit dell’ Event Register e’ legato mediante AND logico con il corrispondente bit dell’ Event Enable Register. L’ informazione complessiva detta Summary Message e’ il risultato dell’ operazione OR tra tutti i risultati delle operazioni di AND precedenti. Quindi l’ unico bit presente in uscita viene settato se si e’ verificata una delle previste transizioni e se questa transizione era abilitata ad essere segnalata.

Una differente struttura per la rappresentazione dello stato dello strumento e’ schemattizzata in fig. 3.9

Fig. 3.9 Schemattizzazione della struttura standard per la rappresentazione dello stato di un

dispositivo.

Mentre nella struttura precedente era lasciata libera la scelta da parte del costruttore del significato da attribuire ai vari bit dell’ Event Register in questo caso invece il significato dei bit viene imposto, come si puo’ notare dalla fig. 3.9. Tali bit rappresentano situazioni generali, come il verificarsi dei vari tipi di errore ( Command Error, Execution Error, Device Dependent Error, Query Error) e non si riferiscono invece alle funzionalita’ dello specifico strumento. Lo standard 488.2 stabilisce che ogni strumento deve prevedere questo registro e deve essere assegnato quel preciso significato ai vari bit.

Il registro di abilitazione degli eventi può inibire ad una segnalazione più esterna i bit del Event Register. Ogni bit di quest' ultimi registri sono sottoposti ad un operazione di AND logico, e i bit ottenuti sono fra loro posti in OR per fornire un bit di messaggio globale.

Lo standard stabilisce che questo bit di significato globale vada ad influire sul bit 6 del registro di stato denominato Request service RQS. Quest' ultimo assume il significato di variazione dello stato del dispositivo, mentre nel precedente standard 488.1 serviva per indicare una richiesta di servizio.

Quando viene attivata la linea del bus SRQ, l' host computer nel funzionamento serial pool

provvederà a leggere il byte di stato analizzando in particolare il bit 6. Verranno letti anche il bit 5 denominato ESB ed il bit 4, MAV tra gli altri. Il bit ESB, Standard Event Status Bit, viene attivato quando si verifica una delle condizioni previste nel registro dello stato degli eventi. Il bit MAV, Message Available indica invece che è presente qualche elemento da leggere nella Output Queue. I bit 0, 1, 2, 3, 7 del registro sono invece non definiti neppure nella seconda versione dello standard e il loro significato è deciso arbitrariamente dal costruttore. Nello standard SCPI invece il significato dei bit in tale registro rimane invariato ad eccezione del bit 3, chiamato in questo caso bit "Dati dubbi" il quale e’ influenzato dal contenuto del registro omonimo. Tale registro aggiuntivo serve per fornire informazioni relative alla qualita’dei risultati di misura prodotti dallo strumento. In particolare indica le condizioni di sovraccarico e i risultati del test limite inferiore/superiore. Queste condizioni possono essere registrate tutte o in parte nel bit riassuntivo dei dati dubbi (bit 3 del Byte di Stato) tramite il registro di abilitazione. Per impostare la maschera del registro di abilitazione bisogna inviare il comando SCPI obbligatorio STATus:QUEStionable:ENABle X, dove "X" specifica un valore decimale che in notazione binaria rappresenta i bit impostati nel registro.

Il modello di stato SCPI dello strumento si caratterizza, rispetto alla struttura precedente di rappresentazione dello stato del dispositivo, per la presenza di questo ulteriore registro come si nota in fig. 3.10

Una condizione di sovraccarico delle letture ( ad esempio Overload di corrente ) è sempre registrato sia nel registro di Evento standard (bit 3), sia nel registro di Evento dati dubbi

(bit 0, 1 o 9). In questi casi però nella coda degli errori dello strumento non viene registrato nessun errore. Il registro di Evento dati dubbi viene cancellato quando:

* Si esegue un comando *CLS
* Si richiede il suo contenuto con il comando STATus:QUEStionable:EVENt?

Il registro di abilitazione dati dubbi viene cancellato quando:

* Si accende lo strumento.
* Si esegue il comando STATus:PRESet
* Si esegue il comando STATus:QUEStionable:ENABle 0

Fig 3.10 Modello di stato SCPI.

Anche nel modello di stato SCPI il registro riassuntivo Byte di stato indica le condizioni contenute negli altri registri di stato. I dati delle richieste che sono in attesa nel buffer di uscita (chiamato precedentemente Output queue) dello strumento vengono immediatamente indicati dal bit "messaggio disponibile" (bit 4). I bit contenuti nei registri riassuntivi sono indipendenti tra loro. Cancellando un registro di evento, si cancellano anche i bit corrispondenti nel registro riassuntivo Byte di stato. Leggendo tutti i messaggi contenuti nel buffer di uscita, comprese le richieste in corso, si cancella il bit del messaggio disponibile.

E' possibile procedere alla lettura del registro di stato anche senza che il dispositivo ne faccia esplicita richiesta mediante la procedura del serial pool, ma per iniziativa del controller inviando un common command *STB?.

DESCRIZIONE di alcuni common command:

*CLS

Il comando Clear Status azzera i bit del registro di stato e i bit del registro di stato degli eventi. Azzera pure tutti i bit collegati a code ad eccezione della Output Queue.

*ESE

Il comando Standard Event Status Enable imposta i bit del registro dello Standard Event Status Enable. Il parametro di questo comando e' definito come <Decimal Numeric Program Data>. Questo numero e' di tipo integer decimale ed e' espresso in base binaria nella rappresentazione dei bits dello Standard Event Status Enable Register.

Ad esempio per settare il bit 5 (Command Error) e il bit 2 (Query Error) il comando inviato allo strumento dal controller sarà: *ESE 36.

Il parametro inviato al dispositivo deve essere nel range tra 0 e 255 altrimenti si verifichera' un Execution Error.

*ESE?

L' Event Status Enable Query legge i contenuti dello Standard Event Status Enable Register (SESER). In risposta a questa richiesta il dispositivo inviera' il contenuto del SESER nel formato integer con valore compreso tra 0 e 255.

*ESR?

L' Event Status Register Query legge i contenuti dello Standard Event Status Register. Leggendo questo registro azzera i suoi bits e invia un numero intero che convertito in notazione binaria rappresenta in modo ordinato i valori dei bit del registro. Questo numero in notazione decimale deve essere compreso tra 0 e 255.

*OPC

Il comando Operation Complete chiama il dispositivo per impostare il bit "operazione completa" (bit 0) nello Standard Event Status Register quando sono state completate tutte le operazioni in sospeso.

Dopo l'esecuzione del comando lo strumento e' in stato Operation Complete Command Active (OCAS) e ritorna nello stato Operation Complete Command Idle State (OCIS) ogni qualvolta nessuna operazione e' in sospeso e nello stesso tempo il valore del bit OPC e' 1.

Gli eventi seguenti forzano lo strumento in OCIS:

* accensione dello strumento
* esecuzione di *CLS
* esecuzione di *RST

*OPC?

Il comando Operation Complete Query chiama lo strumento per impostare il carattere ASCII '1' nell'output queue quando completa tutte le operazioni in sospeso.

Un dispositivo è nell' Operation Complete Query Active State (OQAS) dopo che ha eseguito *OPC?. Lo strumento ritorna all' Operation Complete Query Idle State (OQIS) ogni qualvolta non vi è nessuna operazione in sospeso e nello stesso tempo imposta un "1" nel output queue.

*STB?

Al comando Status Byte Query richiesto dal controller il dispositivo risponde inviando il byte del registro di stato nel quale in questo caso il bit 6 assume il significato di Master Summary Status, MSS, ed e’ ottenuto logicamente con modalita’ simili a quelle del bit RQS.

*RST

Il comando di Reset riporta lo strumento nello stato di accensione.

Lo stato di accensione e’ specificato nel manuale del dispositivo; il progettista definisce i parametri da assegnare allo strumento quando viene inviato tale comando che corrispondono alla configurazione iniziale.

Non e’ permesso lasciare l’ inizializzazione del comando *RST indefinito.

In particolare per non rischiare di produrre condizioni pericolose devono essere rispettate alcune regole generali:

* Lo strumento, dopo il comando *RST e’ configurato per effettuare misure automatiche.
* Il comando *RST imposta lo strumento nello stato di attesa di un comando che dia inizio alla misura.
* Dopo il comando *RST gli strumenti dovrebbero porsi nelle seguenti condizioni:

* Il Trigger è inattivo.
* Le porte d’uscita sono disattivate.
* Il campo d’ingresso è posto in "AUTORANGE" o alla minima sensibilità

*IDN?

* L’ Identification Query legge dal dispositivo la sua stringa di identificazione
* La stringa di identificazione e’ suddivisa in quattro campi separati da virgole.
* Il primo campo e’ il nome del produttore, il secondo e’ il nome del modello, il terzo non viene utilizzato (sempre a "0"), il quarto e’ un codice di revisione contenente tre numeri.
* Il primo numero e’ il numero di revisione del firmware per il processore principale dello strumento; il secondo e’ per il processore ingresso/uscita e il terzo e’ per il processore del pannello frontale.

Ad esempio per un alimentatore HPE3631A il formato della stringa di identificazione sara’:
HEWLETT-PACKARD, E3631A, 0, X.X-X.X-X.X

*SRE

* Il comando Service Request Enable abilita i bit contenuti nel registro del Byte di stato.
* Il parametro del comando deve essere di tipo integer in notazione decimale.
* La conversione del parametro in notazione binaria deve rappresentare i valori dei bit nel  Service Request Enable Register. Ad esempio per settare il bit 4 (Message Available) il comando da inviare sara’ *SRE 16

*SRE?

Il Service Request Enable Query richiede il contenuto del registro di abilitazione del Byte di stato. Lo strumento risponde con un valore decimale, che corrisponde alla somma ponderata in modo binario di tutti i bit impostati nel registro.

*TST?

Il Self-Test Query esegue un test automatico completo dello strumento. Il risultato e’ "0" se il test automatico passa e "1" o un altro valore diverso da 0 se il test fallisce. In questo caso viene generato un messaggio di errore con ulteriori informazioni sul motivo del fallimento.

*WAI

Il comando Wait to Continue ordina allo strumento di attendere il completamento di tutte le operazioni pendenti prima di eseguire altri comandi attraverso l’ interfaccia.

Comandi opzionali per IEEE 488.2.

Lo standard IEEE 488.2 descrive parecchi comandi che possono essere opzionalmente riconosciuti da uno strumento. Si elencano nella tabella 3.11 alcuni di questi.

*SAV SAVE INSTRUMENT STATE
*RCL RECALL INSTRUMENT STATE
*PSC
POWER ON STATUS CLEAR
*PSC? POWER ON STATUS CLEAR QUERY
*DDT DEFINE DEVICE TRIGGER
*DDT? DEFINE DEVICE TRIGGER QUERY
*RCL RECALL INSTRUMENT STATE
*AAD ASSIGN ADDRESS
*DLF DISABLE LISTENER FUNCTION
*OPT? OPTION IDENTIFICATION QUERY
*PUD PROTECTED USER DATA
*PUD? PROTECTED USER DATA QUERY
*RDT RESOURCE DESCRIPTION TRANSFER
*RDT? RESOURCE DESCRIPTION TRANSFER QUERY

Tabella 3.11. Elenco di alcuni common command opzionali

DESCRIZIONE di alcuni common command opzionali:

*SAV

Il comando Save Command memorizza lo stato attuale dello strumento nella locazione specificata della memoria non-volatile. Per memorizzare gli stati operativi del dispositivo sono disponibili tre locazioni di memoria (numerate 1, 2 e 3).

Ad esempio il comando *SAV 1 memorizza lo stato dello strumento nella prima locazione

*RCL

Il comando Recall Instrument State richiama uno stato precedentemente memorizzato.

Per richiamare uno stato memorizzato occorre utilizzare la stessa locazione di memoria usata per memorizzarlo. Se si richiama uno stato da una locazione di memoria che non e’ stata precedentemente specificata come locazione di memorizzazione la configurazione restituita sara’ quella fornita dal comando *RST.

*PSC

Il comando Power on Status Clear cancella lo stato di accensione. Cancella il byte di stato e le maschere di abilitazione del registro Evento standard quando lo strumento viene acceso ( *PSC 1 ). Quando e’ *PSC 0, il byte di stato e le maschere di abilitazione del registro Evento standard non vengono invece cancellati quando il dispositivo viene acceso. (memoria permanente)

*PSC?

Richiede lo stato del modo di cancellazione all’ accensione. Risponde con "0" (*PSC 0) o "1" (*PSC 1).

I REQUISITI SCPI.

 

Oltre le regole di sintassi proprie dello IEEE 488.2 per la programmazione dei dispositivi vi sono regole aggiuntive imposte dal linguaggio SCPI.

 

Comandi SCPI obbligatori.

I comandi elencati nella tab. 3.12 devono essere implementati in tutti gli strumenti SCPI.

Essi si suddividono in comandi di sistema e comandi di indicazione dello stato.

SYSTem:ERRor? oppure SYSTem:ERRor:NEXT?
SYSTem :VERSion?
STATus :OPERation?
oppure STATus:OPERation:EVENt?
STATus:OPERation:CONDition?
STATus:OPERation:ENABle
STATus:OPERation:ENABle?
STATus:QUEStionable?
oppure STATus:QUEStionable:EVENt?
STATus:QUEStionable:CONDition?
STATus:QUEStionable:ENABle
STATus:QUEStionable:ENABle?
STATus:PRESet

Tabella 3.12 Comandi SCPI obbligatori.

DESCRIZIONE di alcuni comandi SCPI obbligatori:

SYSTem:ERRor?

Richiede il contenuto del registro coda degli errori dello strumento. Gli errori possono essere di tipo hardware o di sintassi dei comandi. La coda puo’ contenere fino a 20 errori. Gli errori vengono comunicati secondo l’ ordine First-In-First-Out (FIFO). Ogni stringa di errore puo’ contenere al massimo 80 caratteri.

Dopo la lettura degli errori della coda l’ indicatore ERROR dello strumento si spegne per indicare che il registro coda degli errori e’ vuoto. Se sono presenti in tale registro piu’ di 20 errori, l’ ultimo errore memorizzato nella coda (il piu’ recente) viene sostituito da –350, "Too many errors". Finche’ non vengono eliminati alcuni errori nella coda, non ne vengono memorizzati altri. La coda degli errori viene azzerata quando l’alimentazione si interrompe o dopo l’esecuzione di un comando *CLS ( azzera stato).Il comando *RST (reset) non azzera la coda di errori.

SYSTem:VERSion?

Interroga lo strumento per conoscere la versione corrente di SCPI

Da’ in risposta una stringa del tipo "XXXX.V" dove le "X" rappresentano l’anno della versione e la "V" rappresenta il numero di versione di quell’anno. (ad esempio, 1993.0).

STATus:QUEStionable:EVENt?

Richiede il contenuto del registro degli eventi Questionable Status.

Lo strumento risponde con un valore decimale, che corrisponde alla somma ponderata in modo binario di tutti i bit impostati nel registro.

STATus:QUEStionable:ENABle <enable value>

Il comando con il parametro specificato in notazione decimale abilita i bit nel registro di abilitazione del Questionable Status. I bit selezionati vengono poi riportati nel registro di Stato.

STATus:QUEStionable:ENABle?

Richiede nel dispositivo il contenuto del registro di abilitazione del Questionable Status.

Il valore restituito e’ un numero decimale che in notazione binaria rappresenta i bit impostati nel registro di abilitazione.

STATus:PRESet

Cancella tutto il contenuto del registro Dati dubbi.

Comandi SCPI opzionali.

Tutti gli altri comandi necessari per la programmazione dello strumento possono essere presenti o meno a seconda delle caratteristiche dello strumento e delle funzioni che si vogliono utilizzare.

Per esempio, uno strumento dedicato alla misura di frequenza potrebbe non implementare un comando per rilevare la tensione; l' implementazione inoltre di certi comandi implica in certi casi che altri debbono esserlo.

Quando un dispositivo non supporta tutti i possibili valori dei parametri permessi da un comando SCPI, se non dichiarato diversamente, può implementare un sottoinsieme di questi valori; ad esempio, se uno strumento implementa solo i sottocomandi RECTangular e UNIForm del comando CALCulate:TRANSform:WINDow, potrebbe generare un errore nella ricezione di un qualsiasi altro parametro definito da SCPI (ad esempio FLATtop, HAMMing, ecc.). Comunque un dispositivo deve riconoscere tutti i parametri di un comando SCPI multiparametro.

Un comando richiesto per implementare una funzione descritta da SCPI può essere omessa sotto particolari condizioni; una di queste potrebbe essere quando il comando da implementare coinvolge una parte dello strumento, la cui configurazione è fissata e corrisponde al valore che dovrebbe prendere quando è spedito il comando *RST. Per esempio, uno strumento con un display che è configurato per essere attivo permanentemente, non necessita di implementare il comando che lo abilita/disabilita, così è richiesto da SCPI che al comando *RST il display sia posto gia’in stato attivo.

Viceversa se uno strumento ha una fissata configurazione, in cui i parametri non corrispondono a quelli di *RST, lo strumento deve implementare i comandi per quei parametri. In tal modo si permettono le transizioni da una configurazione del dispositivo ad un’altra.

Documentazione richiesta.

La documentazione per uno strumento SCPI comprende il numero della versione dello standard che questo strumento utilizza e compare sul manuale di programmazione dello strumento; quest' ultimo deve inoltre avere una sezione separata intitolata "SCPI Conformance Information", che comprende i seguenti punti:

* La versione SCPI che il linguaggio implementa.
* La sintassi di tutti i comandi SCPI ufficialmente riconosciuti e implementati dallo strumento.
* La sintassi di tutti i comandi SCPI implementati dallo strumento, ma che non sono definiti nello standard SCPI.

3.5 NOTAZIONI DELLO STANDARD SCPI.

Nel manuale SCPI si fa ampio uso di diagrammi di flusso di sintassi e di tavole.

Sia i diagrammi che le tavole sono impiegate per rappresentare le notazioni dello standard SCPI. In questo paragrafo si evidenzieranno entrambi.

Interpretazione della tavola di comandi.

La tavola di comandi è utilizzata per definire una serie di comandi SCPI associata ad una radice. Una tavola definisce i comandi, le loro relazioni gerarchiche, i parametri se ve ne sono, e i commenti sui comandi. La tavola è divisa in tre colonne:

KEYWORD (Parola chiave), PARAMETER FORM (Finestra Parametri), e NOTES (Note). La colonna KEYWORD provvede a specificare il nome del comando. Il nome attuale del comando consiste di uno o più parole chiavi SCPI definite in una struttura gerarchica. In un tale sistema ad albero parole chiavi nello stesso livello vengono rappresentate incolonnate e allineate. Viceversa nodi appartenenti a differenti livelli corrispondono nella tavola a parole chiavi collocate diversamente; parole a livello più basso nella gerarchia sono posizionate via via più a destra e nodi piu’ vicini alla radice piu’ a sinistra.

Un particolare comando comporta la specifica dell' intero percorso. Questo percorso è rappresentato nelle tavole mettendo il nodo più alto della gerarchia nella parte più a sinistra e gli altri via via più a destra.

La parentesi quadra indica una parola chiave opzionale. Quando il programmatore citerà il comando con tale parola chiave, l' esecuzione di questo avrà lo stesso effetto nel caso che quest' ultima venga omessa. Un tale nodo è chiamato nodo di default.

L' utilizzo nei comandi delle lettere maiuscole e minuscole viene spiegato nei successivi capitoli distinguendo la forma corta e quella lunga.

La colonna PARAMETER FORM indica il numero e l' ordine di parametri in un comando ed il loro valore. Un comando può permettere l' uso di definiti tipi di parametri SCPI. I tipi di parametri SCPI definiti sono descritti nel paragrafo "PARAMETRI".

Nella colonna PARAMETER FORM una certa quantità di caratteri hanno significato speciale:

* Le parentesi angolate (<>) stanno ad indicare il tipo di parametro.
* Le parentesi quadre ( [] ) sono usate per includere uno o più parametri opzionali nel controllo di uno strumento.
* Mentre la barra verticale ( | ) è usata per separare parametri alternativi.

La forma di interrogativa di un comando si ottiene con l' aggiunta di un punto interrogativo all' ultima parola chiave. Tuttavia non tutti i comandi hanno una forma interrogativa, mentre altri esistono solo in quest' ultima sintassi. Tale differenza viene segnalata nella colonna NOTE. Come esempio supponiamo l' esistenza della tavola 3.13, la quale permette di descrivere alcuni comandi implementati da un analizzatore di spettro.

KEYWORD PARAMETER FORM NOTES

:FREQuency
:[ CW ] <numeric_value>
:AUTO <Boolean>
:CENTer <numeric_value>
:SPAN <numeric_value>

Tavola 3.13 Alcuni comandi implementati da uno strumento.

Per un segnale di lunghezza d' onda continua l' impostazione del valore di frequenza potrebbe essere:

FREQuency:CW 2000000

Dato che il nodo CW è opzionale è valido anche il comando seguente:

FREQuency 2000000

Anche i comandi seguenti sono permessi:

FREQuency:CW:AUTO OFF
FREQuency:AUTO OFF

Le forme interrogative associate ai comandi precedenti sono:

FREQuency:CW:AUTO?
FREQuency:AUTO?

Interpretazione del flusso di diagramma sintattico.

Il flusso di diagramma di sintassi è utilizzato in modo esteso in tutto il manuale SCPI e nello IEEE 488.2. Queste rappresentazioni sintattiche sono note anche come railroad diagrams. Il flusso nel diagramma è dato da una freccia. Queste collegano insieme vari oggetti che formano un comando. Gli oggetti nel diagramma geometricamente possono essere cerchi o scatole. I cerchi indicano caratteri costanti e le scatole indicano una struttura sintattica che è definita nel manuale SCPI.

Nel seguito si rappresentano i diagrammi dei due tipi considerati di comandi SCPI.

Comandi comuni IEEE 488.2.

I comandi comuni e le relative risposte hanno la sintassi specificata in IEEE 488.2 e possono essere rappresentati mediante il diagramma:

* <Program Mnemonic> ?

Fig 3.14 Diagramma sintattico dei comandi comuni nella notazione IEEE 488.2.

Comandi di controllo strumenti.

Il nome del comando consiste in una o più parole chiave organizzate in una struttura gerarchica conosciuta come "Albero di sistema", come è definito dal linguaggio SCPI . Si è già visto che in questo sistema i comandi associati alla stessa funzionalità sono raggruppati insieme sotto un nodo comune nella gerarchia, così come le foglie dello stesso livello sono connesse allo stesso ramo di un albero. Molti rami dello stesso livello sono collegati a pochi rami del livello superiore, e così via finchè i rami del livello superiore si incontrano nell' unica radice dell' albero detta "Root".

Il diagramma di flusso di sintassi di questi comandi è il seguente:

:

<Short form mnemonic>
: <Numeric suffix> ?
<Long form mnemonic>

Fig. 3.15 Diagramma sintattico del comando di controllo secondo lo standard SCPI.

3.6 I PARAMETRI.

Lo standard SCPI usa la forma dei parametri (dati di programma) descritti in IEEE 488.2 con alcune restrizioni; si nota inoltre che lo SCPI specifica i valori per tutti i comandi ad eccezione di *RST. In alcuni casi questi valori di reset dipendono dal dispositivo. Tutti i parametri di misura devono comunque essere inizializzati ad un ben preciso valore per quel particolare strumento, e questo dev’essere documentato nel manuale del dispositivo.

Un comando SCPI può permettere l’uso dei seguenti tipi di dati, che nella notazione utilizzata, sono racchiusi tra "<" e ">".

 

Dati di tipo <CHARACTER PROGRAM DATA>

Consistono in stringhe di caratteri che, dove possibile, seguono le stesse regole di troncamento usate per le parole chiave dei comandi. Per esempio, applicando l’insieme delle regole SCPI, per citare nella risposta di uno strumento la funzione DC Current, si deve utilizzare la stringa "IDC".

In alcuni casi i dati di programma di tipo carattere sono predefiniti come <DECIMAL NUMERIC PROGRAM DATA> cioe’ si considerano come dati di programma numerico decimale. Questi consistono in elementi numerici, che possono essere usati solo per rappresentare dati numerici, e sono descritti in IEEE 488.2. E’ utile sapere che qualsiasi numero superiore a +/- 9.9E37 può generare un errore d’esecuzione. Nei due punti che seguono, è riportata la descrizione delle caratteristiche di questo tipo di dato.

Definizione di <Numeric Value>.

Gli elementi numerici decimali generalmente sono dei numeri espressi nella forma esponenziale. Alcuni <CHARACTER PROGRAM DATA> sono definiti come una particolare forma di quelli numerici. Questi sono: MINimun, MAXimun, DEFault, UP, DOWN, Not A Number (NAN), INFinity, Negative INFinity (NINF). La loro implementazione dev’essere annotata nella documentazione dello strumento, come pure l’eventuale forma opzionale di questi parametri dev’essere annotata nella descrizione dei comandi.

Fanno parte di questo tipo di parametro pure le forme <non-decimal numeric> (IEEE 488.2 nella sez. 7.7.4), <numeric expression> e <label>. Per un ulteriore approfondimento, si rimanda al manuale SCPI .

Il suffisso Unit.

Tutti i dati di Programma di tipo numerico, che hanno un' unità di misura possono accettare un suffisso che lo rappresenta; per un elenco delle unità di misura permesse, si fa riferimento al manuale ( IEEE 488.2 nella sez. 7.7.3).

I suffissi possono essere associati ai multipli o ai sottomultipli dell’unità fondamentale, a eccezione dei casi dove ciò è illogico, come per dB o PCT; in una tabella dello standard ( tabella 7.2 di IEEE 488.2 ) è elencata la lista dei multipli e sottomultipli permessi, e se qualcuno di questi è implementato, allora devono esserlo pure gli altri, ed è concessa la composizione di suffissi.

Se un suffisso è omesso, significa che si fa riferimento all’unità di misura di default, che sono individuate o dall’unità fondamentale associata a quel parametro o, nel caso che ce ne siano più d’una di fondamentale, dal sottosistema :UNITs.

Dati di programma di tipo booleano.

La forma booleana è caratterizzata dai termini ON e OFF. Questi corrispondono rispettivamente al valore 1 e 0, e sono senza unità di misura. Anche un numero decimale può essere utilizzato per rappresentare una variabile booleana: in questo caso, il numero è arrotondato a un intero e un risultato diverso da 0 (OFF) è interpretato come 1 (ON); tutto ciò è descritto nel manuale ( IEEE 488.2 nella sez. 10.25.3.)

Gli elementi ON e OFF dei dati di programma di tipo carattere possono essere accettati come risposta di un dispositivo per aumentare la leggibilità del programma, anche se le risposte sono sempre di tipo numerico e non carattere.

Accoppiamento di funzioni.

Ci sono due forme di accoppiamento: di tipo funzionale e di valore. Un accoppiamento di valore si ha quando, l’ invio di un comando cambia il valore dei dati di un altro comando collegato al primo. L’accoppiamento di funzioni è in generale scoraggiato, tranne nel sottosistema MEASurement, mentre l’accoppiamento di valore, se le equazioni che lo descrivono sono ben specificate, è sempre permesso. Alcune funzioni possono essere disaccoppiate, ma deve comunque esistere la possibilità di riaccoppiarle; se una funzione non può essere disaccoppiata da un’altra, allora il comando che la inizializza non deve esistere o dev’essere implementato solo come richiesta di valore (Query), mentre può essere implementato nel caso la funzione sia inizializzabile solo sotto alcune condizioni.

Per controllare gli accoppiamenti si utilizza la parola chiave AUTO; per esempio, il comando per accoppiare la funzione di risoluzione della larghezza di banda con altre funzioni (che dipendono dallo strumento) potrebbe essere BAND:RES:AUTO ON, mentre per disaccoppiarla si usa il comando BAND:RES:AUTO OFF.

Selezionando :AUTO ONCE, si impostano automaticamente i valori più appropriati dei parametri della funzione e, nel caso sia accoppiata a un’altra funzione, viene disaccoppiata; una successiva richiesta :AUTO? invierà sempre 0, visto che ONCE lascia sempre la funzione in modalità AUTO OFF.

Unita’ di misura e suffissi.

Le unità di misura, oltre che ad essere associate a dei valori numerici, costituiscono esse stesse dei parametri; è il caso di quando si impostano le unità di misura di uno strumento o si vuol conoscere quelle precedentemente impostate. Molte delle informazioni sulle unità di misura e sui relativi suffissi sono specificate nei manuali (IEEE 488.2 sez. 7.7.3 e nello SCPI), oltre che a quanto già citato nei paragrafi precedenti.

Riassunto delle convenzioni utilizzate per la sintassi dei comandi SCPI:

Le parentesi quadre ( [ ] ) indicano parole chiavi o parametri opzionali.
Le parentesi graffe racchiudono parametri in una stringa di comandi.
Le parentesi angolari (< >) indicano che occorre sostituire un valore o un codice per il parametro racchiuso.
La barra verticale ( I ) separa due o più parametri alternativi.

Forma Lunga e Corta.

L’ IEEE 488.2 e lo standard SCPI limitano la lunghezza della parola chiave a dodici caratteri, compreso il suffisso numerico che la può seguire.

La forma lunga può essere formata da una singola parola o dall' accorciamento di una frase, quella corta è data dall' abbreviazione di quella lunga. Per mantenere un insieme uniforme di parole chiave, lo standard definisce alcune regole per la loro generazione.

FORMA LUNGA: è generata da una sola parola o da una frase; nel primo caso la singola parola diventa la parola chiave, nel secondo caso la parola chiave è formata dalla prima lettera di ogni parola e dall' intera ultima parola. Ad esempio, la frase "Relative Velocity" diventa "RVELOCITY".

FORMA CORTA: è formata generalmente dalle prime quattro lettere della forma lunga; l' eccezione si ha quando la forma lunga ha più di quattro lettere e la quarta lettera è una vocale: in questo caso la quarta lettera cade e la forma corta diventa di tre lettere. Ad esempio, la forma corta di "FREE" è "FREE", quella di "SWEEP" è "SWE".

Uso dei due punti ( : ) Quando i due punti sono il primo carattere della parola chiave di un comando, significa che il codice mnemonico successivo e un comando a livello radice. Quando i due punti sono inseriti tra i codici mnemonici di due comandi, indicano che si deve scendere di un livello nel percorso corrente (per il comando di livello radice specificato) nell’ albero dei comandi.

Uso del punto e virgola ( ; ) Il punto e virgola serve per separare due comandi all’interno della stessa stringa di comando. Il carattere di punto virgola non modifica il percorso corrente. Ad esempio, le due istruzioni seguenti sono equivalenti:

:TRIG:DELAY 1;:TRIG:COUNT 10

:TRIG:DELAY 1;COUNT 10

Uso della virgola ( , ) La virgola separa i parametri adiacenti di un comando.

Uso dei caratteri di spaziatura. I caratteri di spaziatura vengono usati per separare i parametri dall' ultima chiave di un comando. Possono esistere delle eccezioni a questa regola.

Uso dei comandi "? " Uno strumento SCPI può inviare le risposte solo se è stato espressamente istruito a farlo. I comandi di richiesta (comandi che terminano con un punto interrogativo, "? ") sono i soli che possono istruire uno strumento ad inviare un messaggio di risposta. Le richieste possono produrre come risultato valori misurati o impostazioni interne dello strumento.

Uso dei comandi "*" I comandi che iniziano con un asterisco sono chiamati common command e servono per controllare le operazioni di reset, auto-test e stato dello strumento. Essi sono presenti su tutti gli strumenti che rispettano lo standard SCPI come gia’ osservato.

Capitolo 4

PROGETTO "TRADUTTORE"

4.1 INTRODUZIONE

Un obbiettivo importante che si realizza con il laboratorio remoto è il processo di virtualizzazione del banco. Con tale processo si tende a mostrare ad un client un banco (di test) sempre allo stesso modo indipendentemente dal tipo di strumenti fisici che lo compongono e dalla modalità di collegamento degli strumenti tra loro e con il dispositivo sotto test. Poichè in genere i comandi inviati ai dispositivi assumono una sintassi dipendente sia dalla famiglia di strumenti coinvolti (multimetro, oscilloscopio..) sia pure all' interno di una stessa famiglia (HP54600, HP54610, Tek TDS340..) è necessario creare un sistema d' interfaccia software per utilizzare nella comunicazione comandi sintatticamente uguali.

Il modulo software Local Instrument Manager ( LIM ) realizza tale interfaccia ed è responsabile dell' esecuzione di comandi che giungono al server e che sono rivolti verso la strumentazione. Il LIM è costituito dai moduli Bench Command Translator, Instrument Command Translator, e Hardware Interfaces come rappresentato in fig. 4.1

Bench Command Translator
Instrument Command Translator
h/w Interfaces
488 232 SIM Macro PC-bus

Fig. 4.1 Architettura del modulo Local Instrument Manager.

Il modulo Bench Command Translator ha essenzialmente il compito di riconoscere a quale strumento del banco viene inviato il comando analizzando il comando stesso e selezionando quindi l' unità corrispondente. Per svolgere tale compito si serve di opportune tabelle di Database, nelle quali vengono descritti, la composizione del banco e le caratteristiche delle interfacce collegate agli strumenti.

Il modulo Instrument Command Translator dovrà tradurre il comando ricevuto nella sintassi specifica dello strumento interessato. Quest' ultimo modulo software è descritto in questo capitolo.

4.2 OBBIETTIVI DEL PROGETTO "TRADUTTORE".

Il modulo Instrument Command Translator è stato realizzato con l' obbiettivo di:

* tradurre comandi SCPI in comandi non-SCPI.
* creare un meccanismo di traduzione indipendente dal tipo di strumento.

Per quanto concerne il primo punto, la maggior parte dei nuovi strumenti, soprattutto della casa costruttrice Hewlett-Packard presenta già una implementazione dei comandi remoti secondo lo standard SCPI, mentre alcuni modelli di strumenti non recenti o di case costruttrici che non fanno parte del Consorzio SCPI, utilizzati in laboratorio, non implementano tale standard. Si è trattato dunque di rendere quest' ultimi adatti ad essere collegati insieme in rete definendo un unico linguaggio di comunicazione.

Per quanto riguarda il secondo punto, il modulo software realizzato in Visual Basic non contiene codice riferito al particolare tipo di dispositivo interfacciato.

In altre parole la scelta del dispositivo da interfacciare non comporta alcuna modifica del progetto a livello di codice. Questa caratteristica del modulo ha un vantaggo evidente: l' aggiunta di un dispositivo non-SCPI nel sistema avviene senza incrementare o cambiare una sola riga di codice. L' obbiettivo viene raggiunto mediante l' utilizzo di tabelle di traduzione; il modulo software è collegato ad un Database (si utilizza Microsoft Access97) contenente le tabelle di traduzione di ciascun strumento.

Se l' utilizzatore del server decide di implementare una nuova istruzione SCPI in uno strumento o cancellarla dovrà semplicemente accedere alla tabella di traduzione corrispondente e aggiungere o cancellare il comando. Se si decide di collegare un nuovo dispositivo in rete, in corrispondenza si dovrà creare una nuova tabella di traduzione.

Il meccanismo di comunicazione tra modulo software e Database sarà chiarito più avanti quando si parlerà della struttura del traduttore.

4.3 TABELLE DI TRADUZIONE DEGLI STRUMENTI.

L' utilizzo delle tabelle degli strumenti di Database in ACCESS è indispensabile nel progetto, per la traduzione delle istruzioni SCPI nelle istruzioni specifiche dello strumento considerato.

Esse infatti forniscono quest' ultima corrispondenza, ed è quindi necessario descrivere le notazioni adottate per i comandi, la modalità di creazione di tali tabelle, e la sintassi utilizzata definita compensando due esigenze contrastanti: la massima semplicità e la corrispondenza con la sintassi del linguaggio SCPI.

Le tabelle degli strumenti sono costituite da sei colonne: la colonna Istruzione SCPI, Livello, Parametri, Traduzione corpo istruzione, Traduzioni con parametri,e Numero. Le prime due colonne sono legate dalla regola di rappresentazione dei comandi. Se facciamo un confronto tra la notazione dei comandi nel manuale SCPI rappresentati tramite la colonna KEYWORD delle tavole di comando e la notazione adottata nelle tabelle, allora come regola generale ad ogni traslazione verso destra di una parola chiave nelle tavole, corrisponde nelle tabelle ad un incremento del valore del livello nella relativa colonna. Nella parte che segue viene considerato un esempio di confronto.

Tavola di comando.

KEYWORD PARAMETER FORM NOTES
:SENSe
:FUNCtion <function_name>
:RESistance
:NPLCycles <numeric_value>
:RANGe
:[UPPer] <numeric_value>
:AUTO <Boolean>|ONCE
:RESolution <numeric_value>
:VOLTage
:[DC]
:NPLCycles <numeric_value>
:RANGe
:[UPPer] <numeric_value>
:AUTO <Boolean>|ONCE
:RESolution <numeric_value>
:AC
:NPLCycles <numeric_value>
:RANGe
:[UPPer] <numeric_value>
:AUTO <Boolean>|ONCE
:RESolution <numeric_value>
:CURRent
:DC
:NPLCycles <numeric_value>
:RANGe
:[UPPer] <numeric_value>
:AUTO <Boolean>|ONCE
:RESolution <numeric_value>
:FRESistance
:NPLCycles <numeric_value>
:RANGe
:[UPPer] <numeric_value>
:AUTO <Boolean>|ONCE
:RESolution <numeric_value>
:AM
:[DEPT]
:RANGe
:AUTO <Boolean>|ONCE

Tavola 4.2 Esempio di rappresentazione ad albero dei comandi.

dove <function_name> è la lista di parametri ad albero. (vedi manuale SCPI)

Prime due colonne di una corrispondente tabella di traduzione.

Istruzione SCPI

Liv

SCPI:

0

SENSe:

1

FUNCtion "

2

VOLTage:

3

DC"

4

AC"

4

RESistance"

3

CURRent:

3

AC"

4

DC"

4

FRESistance"

3

RESistance:

2

NPLCycles <L0>

3

RANGe: <L0>

3

AUTO <L0>

4

RESolution <L0>

3

VOLTage:

2

DC:

3

NPLCycles <L0>

4

RANGe: <L0>

4

AUTO <L0>

5

RESolution <L0>

4

AC:

3

NPLCycles <L0>

4

RANGe: <L0>

4

AUTO <L0>

5

RESolution <L0>

4

CURRent:

2

DC:

3

NPLCycles <L0>

4

RANGe: <L0>

4

AUTO <L0>

5

RESolution <L0>

4

AC:

3

NPLCycles <L0>

4

RANGe: <L0>

4

AUTO <L0>

5

RESolution <L0>

4

FRESistance:

2

NPLCycles <L0>

3

RANGe: <L0>

3

AUTO <L0>

4

RESolution <L0>

3

AM:

2

DEPT:

3

RANGe:

4

AUTO

5

Fig. 4.3 Esempio di rappresentazione ad albero dei comandi.

Si considererà più avanti il significato dei termini racchiusi nelle parentesi angolate ( < > ) legate ai parametri .

Sintassi dei comandi SCPI.

Si distinguono due tipi di comandi SCPI: i comandi SCPI implementati nella tabella di traduzione degli strumenti e i comandi SCPI inviati dall' utente.

Una singola istruzione SCPI nella tabella si scompone in più parti delimitate dal carattere ":" che fanno scendere il comando di un livello: la radice "SCPI:" occupa il livello 0 (ad esso è associato come si vedrà più avanti il puntatore segnalibri(0)), la parola chiave "MEASure:" il livello 1, ect....(Fig. 4.3).

La sintassi dell' istruzione SCPI inviata dall' utente segue le seguenti regole:

vengono considerate obbligatorie le lettere corrispondenti a quelle maiuscole del campo "Istruzione SCPI" del Database.

quelle minuscole possono essere omesse o meno a piacere.

Per esempio se il comando definito nella tabella è:

SENSe:FUNCtion "VOLTage:DC" come è stato implementato nell' esempio di fig. 4.3, l' utente che desidera utilizzare gli effetti sullo strumento di un tale comando potrà farlo inviando al server una stringa contenente una sottostringa qualsiasi tra quelle elencate nel seguito nella lista incompleta della tabella di fig. 4.4

SENS:FUNC "VOLT:DC" (comando in forma contratta)
SENS:FUNCT "VOLT:DC"
SENS:FUNCTI "VOLTA:DC"
SENS:FUNCTIO "VOLTAG:DC"
SENSE:FUNCTION "VOLT:DC"
. . . . .e altre combinazioni simili

Fig. 4.4 Tabella di alcuni comandi sintatticamente corretti per la trasmissione.

Nella lista precedente i comandi si sono rappresentati tutti con lettere maiuscole, è sintatticamente corretto anche scriverli sia con lettere maiuscole che con lettere minuscole.

Ad esempio è accettabile il comando:

SeNSE:FunCti "vOLtage:Dc", infatti come si vedrà nei paragrafi successivi la prima operazione eseguita dal modulo software di traduzione è la conversione della stringa di comando in una stringa con caratteri tutti maiuscoli, cioè in questo caso nella stringa:

SENSE:FUNCTI "VOLTAGE:DC"

Viceversa verrebbe generato un errore l' invio della stringa di comando:

SENS:FUN "VOLT:DC" , infatti la lettera "C" di FUNC è obbligatoria.

Lo spazio nei comandi spediti, come nella sintassi del linguaggio SCPI, è riservato a separare l' ultima parola chiave del comando dalla lista di parametri. La lista di parametri dell' istruzione inviata è formata da valori separati da virgole. La lista di parametri del corrispondente comando nella tabella è costituita da opportuni elementi racchiusi in parentesi angolate per ogni differente tipo di parametro coinvolto. Se esistono diversi tipi di parametri nell' istruzione, questi sono separati da virgole.

Si può notare come ogni parola chiave di un comando implementato corrisponda nella tabella ad un record. La parola chiave nel record deve terminare con il carattere ":" se non è l' ultima foglia. In certi casi la parola chiave termina con ": < . . >" (es. ": <L0>" ) allora può essere considerata come ultima foglia con parametro o come parola chiave intermedia. Per esempio nei comandi: SENSe:CURRent:DC:RANGe INT e SENSe:CURRent:DC:RANGe:AUTO ON

si deve definire nella tabella il record: RANGe: <L0>

La forma interrogativa di un comando è valida se è aggiunta esplicitamente come comando nella tabella, in tal caso l' ultima foglia terminerà con il punto interrogativo.

Quando uno strumento ha parecchi canali di misura indipendenti (o altre funzionalità come ad esempio schermi e canali d’uscita), la scelta di quali usare è designata da un suffisso numerico attaccato a una parola chiave; se il suffisso è assente, il comando è trattato come se la capacità selezionata corrispondesse al suffisso "1", questa regola è conforme allo standard SCPI. Il nodo che contiene un suffisso numerico può essere presente a ogni livello dell’albero; per esempio INPut1:COUPling AC in uno oscilloscopio specifica l' accoppiamento in corrente alternata del primo canale.

La terza colonna della tabella, Parametri, ha un riga non vuota quando la parola chiave corrispondente contiene parametri. Essa specifica i valori dei parametri ammessi per un determinato comando.

Innanzitutto conviene classificare i tipi di parametri. Questi possono essere:

<Ln> Se il parametro appartiene ad una lista di elementi.

<Cn> Se il parametro può assumere un valore qualsiasi con l' unico vincolo specificato nella colonna Parametri di essere di tipo Integer, Long, Positivo, Negativo, Byte, Double.

<Rn> Se il parametro è di tipo Range, nella colonna Parametri dovrà essere specificato l' intervallo di valori e il tipo di parametro.

<Vn> Se i parametri di numero variabile appartengono ad una lista di elementi.

<Tn> Se i parametri di numero variabile ma con almeno due elementi appartengono ad una lista.

Le informazioni utili per il controllo dei valori dei parametri del comando inviato sono raccolte nella terza colonna della tabella, (con riferimento alla fig. 4.4 ) in posizioni definite dal valore n, numero di lista.

Per esempio l' istruzione SCPI:

MEASure:VOLTage:DC? <L0>,<L1>

avrà in corrispondenza nel campo Parametri due liste separate dal carattere ":", cioè

0.03,0.3,3,30,300,MAX,MIN:INT,MIN,MAX

La prima lista ( n=0 ) è : 0.03,0.3,3,30,300,MAX,MIN

La seconda lista ( n=1) è : INT,MIN,MAX

Potrà dunque essere accettato un comando del tipo: MEAS:VOLTAG:DC? 30,MAX

L' istruzione SCPI:

DISPlay:CONTrast <R0>

Avrà in corrispondenza nel campo Parametri: 0,1,Double che indica un range in cui il valore 1 può rappresentare il massimo contrasto, 0 il minimo e Double il tipo di parametro che si può introdurre: es. DISPL:CONT 0.4

L' istruzione SCPI:

SOURce:LIST:CURRent <T0>

Avrà in corrispondenza nel campo Parametri: 1,3,2,4,6,7 e i comandi accettabili saranno:

SOUR:LIST:CURR 1,4,7 o SOUR:LIST:CURR 1,6 . . . . . . .

L' istruzione SCPI:

SOURce:LIST:COUNt <C0>

Avrà in corrispondenza nel campo Parametri: Integer e i comandi accettabili saranno quelli in cui il valore del parametro ha un valore compreso tra -32.768 e 32.767.

Le ultime due colonne della tabella sono legate alla traduzione vera e propria.

La colonna Traduzione con parametri ha una riga vuota se la parola chiave relativa non è l' ultima foglia o se questa è l' ultima foglia e non ha parametri. Negli altri casi lo spazio sarà occupato da R, C, V, T ,o da una lista rispettivamente se la corrispondente riga della prima colonna terminerà con <R0>, <C0>, <V0>, <T0> o <L0>.

Si possono accettare anche comandi che specificano più tipi di parametri anzichè uno soltanto. Per esempio:

SENS:XX <L0>,<C1>,<R2>,<V3> (dove XX indica una ipotetica parola chiave)
con campo "Parametri": 20,10,40,60,70:Single:1,300,Integer:3,56,66,88,99
avrà come corrispondente riga della colonna Traduzioni con parametri ad esempio:

B,A,D,F,M:C:R:V Dove B,A,D,F,M è la lista associata al tipo di parametro <L0>, in cui al valore 10 del primo parametro corrisponde il carattere A, al valore 60 del primo parametro corrisponde il carattere F ecc.. C indica un parametro tipo single associato a <C1>, R indica che il parametro nella terza posizione del comando (si ricordi che i parametri nel comando sono separati dal carattere ",") deve assumere un valore compreso nell' intervallo definito nel campo Parametri, cioè nell' intervallo che ha per estremi i numeri 1 e 300 e deve essere di tipo intero. Infine <V3> indica una lista di parametri di numero variabile associato a V.

Si osservi che il carattere ":" separa le liste associate a ciascun tipo di parametro.

I tipi <Vn> e <Tn> nei comandi devono essere sempre inseriti come ultimo tipo nella lista dei tipi di parametri dell' ultima foglia del comando altrimenti si perde la corrispondenza nella posizione delle liste di parametri nelle colonna Parametri con la lista di valori di questi nel comando.

Qualora la traduzione di un comando corrisponde ad una successione di comandi e alcuni di questi non necessitano di parametri, la presenza di quest' ultimi sarà evidenziata all' inizio riga corrispondente della colonna Traduzioni con parametri con i caratteri ":".

Infine consideriamo la colonna Traduzione corpo istruzione. Essa avrà righe vuote se la parola chiave relativa è intermedia o nel caso particolare in cui i parametri del comando modificano il corpo del comando tradotto (si vedrà un esempio più avanti). Diversamente dovrà contenere i comandi tradotti e obbligatoriamente tutti i tipi di parametri definiti nella parola chiave in una successione il cui ordine potrà essere liberamente modificato.

I comandi tradotti sono separati da virgole e vengono inviati allo strumento seguiti dal carattere chr$(10) . (RC)

4.4 OPERAZIONI ESEGUITE DAL CODICE "TRADUTTORE".

Il progetto Traduttore sviluppato in linguaggio Visual Basic, mediate l' accesso ad una tabella di Database in ACCESS, traduce le istruzioni SCPI richieste in istruzioni specifiche dello strumento utilizzato. Ogni strumento come già accennato sarà associato in tal modo ad una tabella corrispondente del Database Traduttore. Ad esempio un volmetro HP3478A avrà come riferimento per la traduzione la tavola 4.5

Istruzione SCPI

Liv

Parametri

Traduzione corpo istruzione

Traduzioni con parametri

SCPI:

0

     
MEASure:

1

     
VOLTage:

2

     
DC? <L0>,<L1>

3

0.03,0.3,3,30,300,MAX,MIN:INT,MIN,MAX

F1,R<L0>,N<L1>

:-2,-1,0,1,2,2,-:4,3,5
AC? <L0>,<L1>

3

0.3,3,30,300,MAX,MIN:INT,MIN,MAX

F2,R<L0>,N<L1>

:-1,0,1,2,2,-1:4,3,5
CURRent:

2

     
DC? <L0>,<L1>

3

0.3,3,MAX,MIN:INT,MIN,MAX

F5,R<L0>,N<L1>

:-1,0,0,-1:4,3,5
AC? <L0>,<L1>

3

0.3,3,MAX,MIN:INT,MIN,MAX

F6,R<L0>,N<L1>

:-1,0,0,-1:4,3,5
TRIGger:

1

     
SOURce <L0>

2

IMM,EXT T<L0> 1,2
SENSe:

1

     
FUNCtion "

2

     
CURRent:

3

     
AC"

4

  F6  
VOLTage:

3

     
DC"

4

  F1  

Tavola 4.5 Alcuni records della tabella TradHP3478A del Database Traduttore.

In run-time viene creato se non è già presente, il campo Numero che effettua una numerazione dei record in ordine di creazione.

Vengono creati inoltre due indici; l' indice Ricerca del campo Livello e l' indice Ordina del campo Numero.

Per la ricerca nella tabella del Database di una determinata istruzione SCPI viene innanzitutto imposto come indice corrente l' indice Ricerca del campo Livello cioè si effettua un ordinamento dei comandi per livello.

La parte di tabella TradHP3478A precedente diventa come nella tavola 4.6

Con il metodo seek si cerca il comando del primo livello. A questo viene associato un puntatore (chiamato segnalibri(1)).

Si riportano poi i records all' ordinamento iniziale con l' indice Ordina del campo Numero. Si effettua la ricerca ad albero partendo dal segnalibro al livello 1.

Per esempio: SENSe:FUNCtion "VOLTage:DC"

Nella tavola 4.6 viene individuata la parola chiave SENSe: che corrisponde all' undicesimo record della tabella originaria. In tal modo nella ricerca per l' individuazione della parola chiave al primo livello si effettuano soltanto tre confronti anzichè i dieci richiesti nella prima tabella. Si ottimizza in tal modo il tempo di ricerca. (Nel codice tali operazioni sono svolte dalla routine RicercaLiv1).

Istruzione SCPI

Liv

Parametri

Traduzione corpo istruzione

Traduzione con parametri

Numero
SCPI:

0

1
MEASure:

1

2
TRIGger:

1

9
SENSe:

1

11
VOLTage:

2

3
CURRent:

2

6
SOURce <L0>

2

IMM,EXT T<L0> 1,2 10
FUNCtion "

2

12
DC? <L0>,<L1>

3

MAX,MIN:INT,MIN,MAX

F1,R<L0>,N<L1>

:-2,-1,0,1,2,2,-2:4,3,5 4
AC? <L0>,<L1>

3

MAX,MIN:INT,MIN,MAX

F2,R<L0>,N<L1>

:-1,0,1,2,2,-1:4,3,5 5
DC? <L0>,<L1>

3

MAX,MIN:INT,MIN,MAX

F5,R<L0>,N<L1>

:-1,0,0,-1:4,3,5 7
AC? <L0>,<L1>

3

.MAX,MIN:INT,MIN,MAX

F6,R<L0>,N<L1>

:-1,0,0,-1:4,3,5 8
CURRent:

3

13
VOLTage:

3

15
AC"

4

F6 14
DC"

4

F1 16

Tavola 4.6. Records della tabella TradHP3478A riordinati con l' indice Ricerca.

Le parti di istruzione dopo separazione dai parametri vengono memorizzate nel vettore VettCom( ), il cui indice rappresenta il livello dell' albero (operazioni eseguite dalla routine Scompatta.) Ad una variabile chiamata MaxLivel viene assegnato il valore di livello dell' ultima foglia. Nell' esempio precedente considerato:

VettCom(0) = "SENS" Livello 1
VettCom(1) = "FUNC "" Livello 2
VettCom(2) = "VOLT" Livello 3
VettCom(3) = "DC" Livello 4 MaxLivel = 4

Individuata la profondità del sottoalbero (MaxLivel), si passa alla seconda fase della ricerca: il puntatore corrente viene posto al record successivo alla prima parola chiave (nell' esempio SENS) e si scorrono i records successivi in sequenza individuando la seconda foglia (nell' esempio FUNC") , quindi si trova il terzo livello (nell' esempio VOLT ) saltando i comandi associati ai livelli superiori, nel caso invece si incontri un livello inferiore a quello richiesto viene segnalato un messaggio di istruzione SCPI non implementata. (le operazioni sono svolte dalla routine RicercaAlbero)

Traduzione del comando.

Nella traduzione del comando viene utilizzato un array chiamato ArrayTraduzione( ) il cui indice è in relazione con la corrispondente lista del campo Parametri.

I valori memorizzati in tale vettore sono stringhe che rappresentano la posizione nella lista del parametro nel caso di tipi di parametri <Ln> o il valore del parametro nel caso di tipi di parametri <Cn> e <Rn> o ancora liste di valori di parametri nel caso di tipi <Vn> o <Tn>.

Per esempio un comando:

SENS:XX <L0>,<C1>,<R2>,<V3> ( dove XX indica una ipotetica parola chiave)
con campo Parametri: 20,10,40,60,70:Single:1,300,Integer:3,56,66,88,99
e comando inviato: SENSe:XX 40,456565,299,66,3,99

Avrà come vettore:

ArrayTraduzione(0)="3" posizione corrispondente al valore del parametro nella prima lista.

ArrayTraduzione(1)="456565" valore del parametro associato alla seconda lista

ArrayTraduzione(2)="299" valore del parametro associato alla terza lista

ArrayTraduzione(3)="66,3,99" lista dei valori dei parametri della quarta lista

ArrayTraduzione(4)="" stringa vuota corrispondente a lista vuota

Esempio:

Per l’ istruzione SCPI: MEASure:VOLTage:DC? 30,MIN

Istruzione SCPI

Liv

Parametri

Traduzione corpo istruzione

Traduzioni con parametri

SCPI:

0

     
MEASure:

1

     
VOLTage:

2

     
DC? <L0>,<L1>

3

0.03,0.3,3,30,300,MAX,MIN:INT,MIN,MAX

F1,R<L0>,N<L1>

:-2,-1,0,1,2,2,-2:4,3,5
AC? <L0>,<L1>

3

0.3,3,30,300,MAX,MIN:INT,MIN,MAX

F2,R<L0>,N<L1>

:-1,0,1,2,2,-1:4,3,5
CURRent:

2

     
DC? <L0>,<L1>

3

0.3,3,MAX,MIN:INT,MIN,MAX

F5,R<L0>,N<L1>

:-1,0,0,-1:4,3,5
AC? <L0>,<L1>

3

0.3,3,MAX,MIN:INT,MIN,MAX

F6,R<L0>,N<L1>

:-1,0,0,-1:4,3,5
TRIGger:

1

     
SOURce <L0>

2

IMM,EXT T<L0> 1,2
SENSe:

1

     
FUNCtion "

2

     
CURRent:

3

     
AC"

4

  F6  
VOLTage:

3

     
DC"

4

  F1  

Tavola 4.7 Esempio di traduzione.

il vettore ArrayTraduzione corrispondente sara:

ArrayTraduzione = ("4" "2" )

e la stringa del campo Traduzioni con parametri associata all ’ istruzione : :-2,-1,0,1,2,2,-2:4,3,5

dove i caratteri ":" che compaiono all’ inizio della stringa indicano liste vuote che corrispondono nel campo Traduzione corpo istruzione all’invio del comando secco (nell’ esempio F1) seguito dal carattere Chr$(10) (CR). Le stringhe non vuote contengono elementi delimitati dai caratteri ",".

Nell’ esempio si prendera dalla lista L0 (-2,-1,0,1,2,2,-2 ) l’ elemento di posizione 4 (primo elemento del vettore) cioè 1.

Per la lista L1 (4,3,5) si prendera invece l’ elemento di posizione 2 cioe 3.

Individuati gli elementi nell’ ultimo campo della tabella, si sostituiranno nelle relative posizioni del campo Traduzione corpo istruzione.

Quindi per questo esempio l’ istruzione tradotta e inviata sarà:

F1\nR1\nN3\n

In altri casi, come nell’istruzione SENSe:FUNCtion "CURRent:AC",e in generale per istruzioni senza parametri il campo Traduzione con parametri è vuoto. La traduzione avviene semplicemente con accesso soltanto al penultimo campo.

In certi casi invece, il cambiamento del parametro nell’ istruzione SCPI comporta, il cambiamento del corpo istruzione per lo specifico strumento come già accennato. Un esempio è l’ istruzione SENSe:CURRent:DC:RANGe:AUTO ON e SENSe:CURRent:DC:RANGe:AUTO OFF che vengono tradotte (per lo strumento HP3478A) rispettivamente nei comandi RA e F2.

In questo caso il campo Traduzione corpo istruzione viene lasciato vuoto e l’ultimo campo invece sarà costituito dalla lista: RA,F2 .

4.5 STRUTTURA DEL "TRADUTTORE".

Il modulo software Instrument Command Translator è una DLL ActiveX.

Si tratta di una libreria a collegamento dinamico che espone un oggetto ActiveX da utilizzarsi in altri programmi ma che non ha funzionalità proprie.

Il termine ActiveX si riferisce a una vasta gamma di tecniche basate sul paradigma COM (Component Object Model, modello basato su componenti), grazie alle quali una porzione di software rende disponibili le proprie potenzialità a un' altra porzione di software, indipendentemente dal fatto che si trovino nello stesso computer, che siano connesse tramite una rete locale o tramite Internet. Nell' ambito del progetto Laboratorio remoto il sever ActiveX, cioè il software che fornisce il servizio, è il modulo Instrument Command Translator, mentre il client ActiveX che usufruisce del servizio è il Bench Command Translator.(fig. 4.8)

Bench Command Translator Client ActiveX

Instrument Command Translator Server ActiveX

Fig. 4.8 Scambio di dati tra i due moduli software.

Il modulo Instrument Command Translator si compone di un modulo di classe.

Il modulo di classe in Visual Basic è un elemento fondamentale per la creazione di nuovi oggetti. Soltanto in un progetto del tipo ActiveX, grazie all' interfaccia, ovvero alle proprietà e ai metodi che l' oggetto rende disponibili, è possibile esporre un oggetto in modo da potersene avvalere in altre applicazioni.

Le proprietà di un oggetto ActiveX sono definite dalle routine Property Let e Property Get del modello della classe. I metodi sono le routine pubbliche da collocarsi nel modulo di classe. Si possono illustrare le modalità di utilizzo delle routine Property Let e Property Get mendiante un esempio pratico. Si desidera che all' oggetto sia attribuita una proprietà denominata Total, definendo la seguente routine Property Get:

Property Get Total ( ) As Double
Total = X
End Property

Si suppone naturalmente che la variabile X sia Private e che sia stata dichiarata precedentemente nel modulo in modo da supportare il valore della proprietà.

Si procede a questo punto con l' introduzione della routine Property Let:

Property Let Total ( ByVal NewTotal As Double)
X = NewTotal
End Property

Il tipo di dati dell' argomento della routine Property Let deve essere lo stesso del valore restituito dalla routine Property Get. Inoltre, la variabile deve essere Private anche in questo secondo caso; è per questo che nell' esempio proposto X è una variabile del tipo Double. Per consentire al client ActiveX l ' accesso alla proprietà Total, si suppone che quest' ultimo abbia creato una copia della classe denominata Ob. Per impostare la proprità è necessario scrivere nel sever:

Ob.Total = QualsiasiValore

Mentre, per recuperare il valore della proprietà:

AltroValore = Ob.Total

Quando un nome di proprietà si trova a sinistra rispetto all' istruzione di assegnazione, la routine Property Let nel sever viene chiamata, mentre il valore che si trova a destra dell' istruzione di assegnazione passa all' argomento della routine. Similmente, quando un nome di proprietà è utilizzato nel lato destro dell' istruzione di assegnazione, la corrispondente routine Property Get viene chiamata e il valore restituito sarà quello assegnato nel codice della routine (utilizzando il solito metodo dell' assegnazione di un valore al nome della routine).

Ritornando al LIM, il modulo software Bench Command Translator in fase di inizializzazione dichiara dei vettori dinamici di oggetti:

Dim interfdll( ) as Object
Dim transdll( ) as Object

Mediante l' accesso a tabelle dinamiche vengono contati sia il numero di interfacce sia il numero di traduttori a disposizione. Si dimensionano quindi i vettori dinamici:

Redim interfdll (Tabelle.NumRecords_TabInterface) As Object
Redim transdll (Tabelle.NumRecords_TabTranslator) As Object

Dove la variabile Tabelle.NumRecords_TabInterface fornisce il numero di record della tabella TabInterface ( tabella delle interfacce), e analogamente per la variabile Tabelle.NumRecords_TabTranslator. Ogni record corrisponde ad una diversa interfaccia nel primo caso, o un diverso traduttore nel secondo caso.

Quindi si creano i corrispondenti oggetti con il codice:

For K=1 to Tabelle.NumRecords_TabInterface
Set interfdll(K) = CreateObject(Tabelle.Get_InterfDll(K))

Next K

e in modo analogo per gli oggetti traduttore

For J =1 to Tabelle.NumRecords_TabTranslator
Set Transdll(J) =CreateObject(Tabelle.Get_TransDll(J))

Next J

Dove la variabile Tabelle.Get_TransDll(J)) specifica sia il nome della DLL ActiveX sia il nome del Modulo di Classe di questa, separati dal carattere "." ( esempio NoTrad.clsTranslator)

Tra gli oggetti traduttore che possono essere utilizzati dal modulo Bench Command Translator si distingue in particolare il traduttore SCPI.

Il traduttore SCPI dichiara le seguenti funzioni pubbliche:

Public Function Path(per As String) As Boolean
Public Function Trad(Strcom As String, strum As String) As String
Public Function UntCmdList( ) As String
Public Function UntLanguage( )

La chiamata alla prima funzione, Path( ), da parte del Bench Command Translator deve precedere la chiamata alla seconda funzione, Trad ( ).

Infatti l' argomento passato alla funzione Path ( ) fornisce al sever ActiveX il percorso di file del Database contenente le tabelle di traduzione degli strumenti.

Tramite la funzione Trad( ) viene passato al sever ActiveX, l' istruzione SCPI da tradurre e il nome dello strumento a cui si riferisce. Il parametro restituito è una stringa che rappresenta:

il comando tradotto se l' istruzione SCPI passata come primo argomento è implementata nella tabella di traduzione del dispositivo indicato come secondo argomento.

un messaggio di errore, "ERROR", se non viene riconosciuta l' istruzione SCPI inviata tra i comandi elencati nella tabella di traduzione associata.

La funzione Trad ( ) richiama in ordine le seguenti funzioni e subroutine cosi dichiarate:

Private Sub ApriTabella(strumento As String)
Public Sub Maiuscolo(st As String)
Public Sub Scompatta(ByVal com As String)
Public Function RicercaLiv1( ) As Boolean
Public Function RicercaAlbero( ) As Boolean
Public Function RicercaParametri( ) As Boolean

Questo elenco suggerisce una suddivisione in blocchi delle operazioni eseguite
dalla funzione Trad( ) come schematizzato in fig. 4.9

false

strcom Maiuscolo str Scompatta RicercaLiv1 true RicercaAlbero true RicercaParametri true

Fig. 4.9 Operazioni eseguite dalla funzione Trad( ).

Inizialmente viene confrontato il nome della tabella di traduzione corrente aperta con il nome dello strumento passato come argomento dalla funzione. Se la tabella di traduzione non si riferisce a tale strumento, essa verrà chiusa (si chiama la funzione Chiuditabella( )) e verrà aperta la tabella di traduzione appropriata con la funzione ApriTabella( ).

La stringa comando, strcom, viene convertita in maiuscolo e separata dai parametri ottenendo la stringa str.

Conviene, a questo punto, riportare di seguito le dichiarazioni a livello di modulo di classe delle principali variabili, con i commenti, tabella 4.10

Dim Strcom As String Stringa comando.
Dim str As String Stringa maiuscola senza parametri.
Dim vettCom( ) As String Vettore campi del comando.
Dim MaxLivel As Integer Numero di livelli massimi.
Dim Segnalibri( ) As Variant Puntatori nell' albero.
Dim Parametri As String Lista parametri del comando.
Dim ListaTypeParam As String Lista dei tipi di parametri.

Dim ArrayTraduzione( ) As String Vettore che racchiude le informazioni per la traduzione con parametri.

Dim unit As String Nome dell' unità.

Dim strumento As String Stringa formata dal concatenamento tra "Trad" e il nome dello strumento.

 

Tabella 4.10 Dichiarazione a livello di modulo di classe delle principali variabili.

Il secondo blocco dello schema precedente esegue l' operazione Scompatta:

la stringa str viene suddivisa in sottostringhe, le quali rappresentano le parole chiavi del comando e memorizzate nel vettore vettCom( ) come è stato accennato nei paragrafi precedenti.

Le funzioni RicercaLiv1( ) e RicercaAlbero( ) ricercano rispettivamente la prima parola chiave e le successive del comando. Se il valore restituito dalle funzioni è false la stringa rinviata al client ActiveX sarà "ERROR".

La funzione UntCmdList( ) permette invece di elencare le istruzioni SCPI implementate per lo strumento desiderato ( i comandi vengono prelevati mediante l' accesso alla tabella corrente aperta ).

La funzione UntLanguage( ) fornisce all' utente l' informazione sul linguaggio in uso. (linguaggio SCPI).

4.6 SIMULATORE DI TRADUZIONE.

E' stato realizzato in VISUAL BASIC un progetto chiamato TesTraduttore con i seguenti obbiettivi:

verificare se le istruzioni SCPI vengono tradotte correttamente senza la necessità di inviarle ai relativi strumenti per verificare da questi gli effetti desiderati.

simulare i meccanismi di chiamata alla DLL ActiveX Translator.clstranslator propri del modulo Bench Command Translator.

determinare i tempi medi di traduzione dei comandi.

La realizzazione del primo obbiettivo ha un duplice vantaggio:

permette nell' operazione di ricezione dell' istruzione SCPI da parte del Server ed esecuzione del comando da parte del dispositivo, di analizzare la fase intermedia, la traduzione. In tal modo si possono isolare gli errori di traduzione dagli errori generici che possono essere dovuti sia alla traduzione sia ad un comando specifico dello strumento non adeguato alla presente configurazione o sintatticamente errato.

eliminare i tempi di esecuzione dei comandi da parte dello strumento e ignorare gli effetti, talvolta poco, o per niente evidenti sul pannello dello strumento dei comandi trasmessi.

A rigore sarebbe opportuno verificare, in seguito, se i comandi tradotti, cioè le istruzioni specifiche dello strumento siano sintatticamente corrette.

Per quanto concerne il secondo punto, il simulatore funge da client ActiveX disponendo della libreria dinamica Translator.clstranslator. (oggetto traduttore SCPI)

Viene dichiarata il vettore di oggetti traduttore:

Dim obj( ) As Object

e dimensionato in base al numero di traduttori disponibili:

ReDim obj(NumeroTraduttori)

For i = 0 To (NumeroTraduttori - 1)

Set obj(i) = CreateObject(Translator(i)) crea i riferimenti agli oggetti traduttore.

Next i

quindi la riga di codice seguente,

List2.List(i) = obj(indice).Trad(comando, strumento)

restituisce alla lista List2 nella posizione i, il comando tradotto dal traduttore obj(indice).

La lista List2 è etichettata con "Istruzioni tradotte" in figura 4.11.

Infine il terzo punto, serve per verificare l' efficienza del modulo Instrument Command Translator per quanto concerne i tempi di ricerca dei comandi. Si è utilizzato una strategia di ricerca ad albero nelle tabelle del Database e nel codice il metodo "Seek" del Visual Basic.

Come si vedrà i tempi trovati sono soddisfacenti con l' obbiettivi generali del progetto Laboratorio Remoto.

La finestra principale del "SIMULATORE" è rappresentata nella parte sottostante.

Fig 4.11 Finestra principale "Simulatore".

Dal MENU nella parte superiore si possono scegliere tre funzioni: FILE, EDIT e OPTION. Inizialmente cliccando su FILE si scarica dal file Istruzioni.txt l' elenco di istruzioni SCPI da tradurre sulla lista Istruzioni da tradurre. Ogni riga è costituita da due parti: il nome dello strumento (ad esempio OSC per oscilloscopio HP54615B, DMM per multimetro HP3478A) e il comando SCPI separati dal carattere "|".

Una possibile lista di comandi è data dalla tabella 4.12

OSC|DISP:MENU:NAME 2
OSC|INPUT1:COUP DC
OSC|MEAS:FREQ
OSC|*RST
OSC|SENS:VOLTage2:DC:RANGe:PTPeak?
OSC|SENS:VOLTage1:DC:ATT 10
OSC|DISPL:WINDOw:TRAce:Y:SCALe:AUTO
OSC|DISP:MENU:NAME?
OSC|TRIGger:SOURCe LINE
OSC|MEAS:DELAY
OSC|TRIGger:LEVel?
OSC|INPUT1:OFFSet?
OSC|SENSe:SWEep:TINTerval 2
OSC|TRIGger:SCOPe POS
OSC|SENSe:VOLTage2:DC:RANGe:PTPeak 2
OSC|TRIGGER:LEVel 4
OSC|SENSe:VOLTage2:DC:RANGE:PTPeak?
OSC|SENSe:VOLTage1:DC:ATT 100
OSC|DISP:MENU:NAME 2
OSC|INPUt1:ATTenuation 10
OSC|MEAS:PERiod
OSC|MEAS:PHASe
OSC|INPUT2:STATE OFF
OSC|INPut2:COUPling?
OSC|INPut2:ATT 100
OSC|INPut2:STATe ON
DMM|SENSe:FUNCtion "VOLTage:DC"
DMM|MEAS:CURRent:DC? 3,MAX
DMM|MEASure:RESIstance? 30000,INT
DMM|TRIGger:SOURce IMM
DMM|DISP:TEXT?
DMM|CALIBRAtion:ZERO:AUTO ON
DMM|SENSe:VOLTage:AC:RANGe 300
DMM|SENSe:CURRent:DC:RESolution MAX
DMM|TRIGger:COUNt MIN
DMM|MEAS:VOLTage:AC? 300,MAX
DMM|MEASure:FRESistance? 3000000,INT
DMM|SENSe:FRESistance:NPLCycles 10
DMM|CALIBRATE
DMM|SENSE:FUNCtion "RESIstance"
DMM|SENSe:FUNCtion "CURRent:DC"
DMM|TRIGger:DELay? MIN
DMM|SENSe:CURREnt:DC:RANGe MAX
DMM|MEASure:VOLTage:DC? 30,MIN
DMM|SENSe:FUNCtion "FRESIstance"
DMM|SENSe:CURRent:DC:NPLCycles 0.1
DMM|MEAS:RESistance? 30000,MIN
DMM|SENSe:RESistance:NPLCycles MAX
DMM|MEASure:CURREnt:AC? 0.3,MAX
DMM|TRIGger:SOURce EXT
DMM|SENSe:FUNCtion "CURRent:DC"
DMM|SENSe:AM:DEPT:RANGe:AUTO
DMM|MEASure:CURRent:AC? MAX,MIN
DMM|SENSe:CURRent:DC:NPLCycles 10
DMM|SENSe:VOLTage:AC:RESolution INT

Tabella 4.12 Elenco di istruzioni nel file Istruzioni.txt.

In esecuzione tale lista può essere modificata aggiungendo una riga in coda, cancellando righe in qualsiasi posizione o modificandone le parole chiavi o i parametri tramite i pulsanti Aggiungi e Modifica. Cliccando su FILE si potrà salvare la nuova lista di comandi sullo stesso file Istruzioni.txt.

E' possibile anche considerare soltanto la lista dei comandi associati allo strumento desiderato selezionando in Tabella strumenti aperta con l' opzione Istrument Table di OPTION dal MENU la riga dello strumento prescelto.

Il nome dello strumento e il tipo verranno visualizzati nelle finestre NOME e TIPO.

L' elenco degli strumenti selezionabili viene scaricato dal Database Db2.mdb aprendo la tabella TabUnit utilizzata per altre operazioni al livello del modulo Bench Command Translator.

Fig. 4.13 Tabella Strumenti.

Il pulsante EDIT del MENU permette di eseguire sulla lista tre operazioni: operazione di taglio CUT, copia COPY e incolla PASTE.

Una volta selezionato una delle due operazioni, CUT o COPY, comparrirà nella parte sottostante la lista la scritta in rosso CUT o COPY che indicano la possibilità da quell' istante di selezionare con il mouse le righe desiderate. Quest' ultime verranno ricopiate in ordine di selezione in una lista denominata BUFFER. Quando viene selezionato PASTE, l ' intero contenuto del BUFFER viene riversato in coda alla lista di istruzioni.

Si seleziona in Nome Database Strumenti il file Database contenente le tabelle degli strumenti, in particolare il traduttore Traduttore1. Si inserisce quindi in Nome del Traduttore il traduttore che si desidera utilizzare. Nella finestra Interazioni da compiere si deve specificare il numero di volte in cui verranno tradotte le istruzioni SCPI elencate qualora viene scelta come opzione il tasto "n" nella traduzione anzichè il tasto ">" di traduzione normale dell' elenco di comandi.

E' possibile effettuare anche una traduzione con l' opzione RAND che traduce le istruzioni SCPI dell' elenco di sinistra prelevandole in un ordine random.

Nella parte più a sinistra della form vengono visualizzati le informazioni sui tempi di traduzione. Dal MENU cliccando su OPZIONI si può creare un file denominato per default TRADTime o con altro nome desiderato, in cui vengono elencati per ciascuna istruzione i tempi di traduzione corrispondenti.

In EXCEL è stato creato anche un diagramma in cui in ascissa viene riportato il numero di istruzioni e in ordinata i tempi di traduzione. Si osserva che tenendo conto anche del tempo di chiamata della funzione Trad( ), il tempo medio di traduzione di una singola istruzione è di 15 msec. Dal diagramma si può osservare le oscillazioni dei tempi intorno al valore medio di ampiezza 5 msec (tempo peggiore di traduzione 20 msec).

Senza il tempo di chiamata della funzione Trad( ), il tempo medio sarebbe sceso a 10 msec.

Fig 4.14 Tempi di traduzione.

 

 

 

 

 

 

 

 

 

 

4.7 IL PROGETTO ProTrans17.

Come seconda versione del progetto precedente si è realizzato il simulatore ProTrans17. Questo si differenzia dal precedente per alcuni aspetti che verranno sottolineati nel seguito. Il form principale è rappresentato nella successiva pagina.

 

 

 

 

 

 

 

Fig. 4.15 ProTrans17.

Una volta selezionato il nome delle unità disponibili si possono elencare le istruzioni associate mediante il pulsante ELENCO ISTRUZIONI SCPI da questo si sceglie l' istruzione da inserire nella prima riga sotto l' etichetta Linguaggio SCPI:.

Il pulsante Traduci opera l' effettiva traduzione del comando.

Si possono misurare i tempi di traduzione della singola istruzione o il tempo medio di traduzione delle istruzioni con i comandi Tempo di ricerca:Stop e Start.

Il comando Random preleva istruzioni a caso dalla lista di comandi dello strumento HP3478A e li inserisce per la traduzione nella prima riga.

Capitolo 5

MANUALI SCPI DEGLI STRUMENTI

5.1 INTRODUZIONE

Il capitolo seguente considera come esempio la creazione di tre manuali SCPI per strumenti di laboratorio che non supportano lo standard e adoperati per la comunicazione in rete. Questi manuali saranno consultati dall' utente per l' invio di comandi nel sistema e sostituiranno i manuali originali delle varie case costruttrici dei dispositivi. Ad esempio la richiesta di misura di tensione continua effettuata da un multimetro o da un qualsiasi altro strumento potrà essere inoltrata nella rete con l' istruzione SENSe:FUNCtion "VOLTage:DC". I manuali di ciascun strumento descrivono un insieme di comandi e non tutti quelli che si potrebbero inviare in rete. Questi comunque permettono all' utente di eseguire le operazioni più importanti. L' organizzazione della struttura del manuale è tale da facilitare, in futuro, l' inserimento di nuovi comandi che si potrebbe in un secondo tempo constatare l' esigenza di utilizzazione. E' sufficiente difatti, individuare il sottoalbero di ciascuna nuova istruzione e inserire il comando nella corrispondente sezione del manuale .

 

MANUALE DI PROGRAMMAZIONE

5.2 STRUMENTO: OSCILLOSCOPIO HP54615B.

L’ HP54615B e’ un oscilloscopio a due canali con larghezza di banda di 500 Mhz e velocita’ di campionamento di 1Gsa/s, dotato di ingresso di trigger esterno.

PREMESSA:

In questo manuale vengono riportati i comandi seguendo l' organizzazione adottata nel libro del linguaggio SCPI (Standard Commands for Programmable Instruments). Per ogni radice viene costruita una tavola dei comandi divisa in tre colonne: KEYWORD, PARAMETER FORM, NOTES. Nella prima colonna le parole chiavi dei comandi sono riportate seguendo la nota struttura gerarchica ad albero; ogni riga corrisponde ad una parola chiave, uno spostamento della parola chiave verso sinistra indica l' accesso ad una foglia sottostante, parole chiavi perfettamente allineate verticalmente indicano foglie appartenenti allo stesso livello. I comandi rappresentati nella tavola sono quelli che sono stati implementati per lo strumento considerato. Altri comandi potranno in futuro essere inseriti arbitrariamente se si desidera ampliare le funzionalità in remoto per nuove operazioni. Le parole chiave elencate nella tavola sono riportate nella colonna "Istruzioni SCPI" della tabella dello strumento nel Database "Traduttore1". L' aggiunta di un nuovo comando comporta la necessaria modifica della tabella di traduzione associata

Nella seconda colonna sono specificati i tipi di parametri considerati nello standard SCPI. Per semplicità nella tabella dello strumento questi vengono sostituiti da una nomenclatura diversa che è di seguito riportata:

<Ln> Se il parametro appartiene ad una lista di elementi.

<Cn> Se il parametro può assumere un valore qualsiasi con l' unico vincolo specificato nella colonna Parametri di essere di tipo Integer, Long, Positivo, Negativo, Byte, Double.

<Rn> Se il parametro e’ di tipo Range, nella colonna Parametri dovra’ essere specificato l’ intervallo di valori e il tipo di parametro.

<Vn> Se i parametri di numero variabile appartengono ad una lista di elementi.

<Tn> Se i parametri di numero variabile ma con almeno due elementi appartengono ad una lista.

Nella colonna NOTES si specifica se un comando può essere inviato solo in forma interrogativa o se non esiste la forma interrogativa di un comando.

Nelle pagine di descrizione dei comandi a sinistra di ogni istruzione viene indicato il percorso dalla radice all' ultima foglia associando una numerazione alle parole chiavi che vengono elencate nella tavola comandi. La descrizione dei comandi è in certi casi suddivisa in due parti; nella prima parte si fa un riassunto sul significato generale dell' istruzione SCPI, nella seconda viene specificato quando non è chiaro il significato del comando per lo strumento particolare.

Si elencano di seguito i comandi implementati per l' oscilloscopio fornendo la relativa tabella 5.1

Istruzione SCPI

Livello

Parametri

Traduzione corpo istruzione

Traduzioni con parametri

Numero

SCPI:

0

1

DISPlay:

1

2

MENU:

2

3

NAME <R0>

3

1,16,Integer MENU <R0> R

4

NAME?

3

MENU?

5

WINDow:

2

6

TRAce:

3

7

Y:

4

8

SCALe:

5

9

AUTO <L0>

6

ON,OFF,ONCE AUTOSCALE,,

10

INPut1:

1

11

COUPling <L0>

2

AC,DC,GROund CHANnel1:COUP <L0> AC,DC,GND

12

COUPling?

2

CHANnel1:COUP?

13

ATTenuation <L0>

2

1,10,100 CHANnel1:PROBe <L0> X1,X10,X100

14

ATTenuation?

2

CHANnel1:PROBe?

15

OFFSet <C0>

2

Double CHANnel1:OFFSet <C0> C

16

OFFSet?

2

CHANnel1:OFFSet?

17

STATe <L0>

2

ON,OFF VIEW CHANnel1,BLANk CHANnel1

18

MEASure:

1

19

FREQuency

2

MEASure:FREQuency

20

FREQuency?

2

MEASure:FREQuency?

21

DELay

2

MEASure:DELay

22

DELay?

2

MEASure:DELay?

23

DUTYcycle

2

MEASure:DUTYcycle

24

DUTYcycle?

2

MEASure:DUTYcycle?

25

PERiod

2

MEASure:PERiod

26

PERiod?

2

MEASure:PERiod?

27

PHASe

2

MEASure:PHASe

28

PHASe?

2

MEASure:PHASe?

29

VAVerage

2

MEASure:VAVerage

30

VAVerage?

2

MEASure:VAVerage?

31

VMAX

2

MEASure:VMAX

32

VMAX?

2

MEASure:VMAX?

33

VMIN

2

MEASure:VMIN

34

VMIN?

2

MEASure:VMIN?

35

VPP

2

MEASure:VPP

36

VPP?

2

MEASure:VPP?

37

SOURce <L0>

2

1,2 MEASure:SOURce <L0> CHANnel1,CHANnel2

38

SOURce?

2

MEASure:SOURce?

39

SENSe:

1

40

VOLTage1:

2

41

DC:

3

42

RANGe:

4

43

PTPeak <C0>

5

Double CHANnel1:RANGe <C0> C

44

PTPeak?

5

CHANnel1:RANGe?

45

ATTenuation <L0>

4

1,10,100 CHANnel1:PROBe <L0> X1,X10,X100

46

ATTenuation?

4

CHANnel1:PROBe?

47

VOLTage2:

2

48

DC:

3

49

RANGe:

4

50

PTPeak <C0>

5

Double CHANnel2:RANGe <C0> C

51

PTPeak?

5

CHANnel2:RANGe?

52

ATTenuation <L0>

4

1,10,100 CHANnel2:PROBe <L0> X1,X10,X100

53

ATTenuation?

4

CHANnel2:PROBe?

54

SWEep:

2

55

TINTerval <R0>

3

10E-9,50,Double TIMebase:RANGe <R0> R

56

TINTerval?

3

TIMebase:RANGe?

57

DATA?

2

WAVeform:DATA?

58

FUNCtion:

2

59

ON "

3

60

XTIMe:

4

61

VOLTage1"

5

WAVeform:SOURce CHANnel1

62

VOLTage2"

5

WAVeform:SOURce CHANnel2

63

INPut2:

1

64

COUPling <L0>

2

AC,DC,GND CHANnel2:COUP <L0> AC,DC,GND

65

COUPling?

2

CHANnel2:COUP?

66

ATTenuation <L0>

2

1,10,100 CHANnel2:PROBe <L0> X1,X10,X100

67

ATTenuation?

2

CHANnel2:PROBe?

68

OFFSet <C0>

2

Double CHANnel2:OFFSet <C0> C

69

OFFSet?

2

CHANnel2:OFFSet?

70

STATe <L0>

2

ON,OFF VIEW CHANnel2,BLANk CHANnel2

71

TRIGger:

1

72

SOURce <L0>

2

EXT,LINE,AINT1,AINT2 TRIGger:SOURce <L0> EXT,LINE,CHANnel1,CHANnel2

73

SOURce?

2

TRIGger:SOURce?

74

LEVel <C0>

2

Double TRIGger:LEVel <C0> C

75

LEVel?

2

TRIGger:LEVel?

76

HOLDoff <C0>

2

Double TRIGger:HOLDoff <C0> C

77

SLOPe <L0>

2

POS,NEG TRIGger:SLOPe <L0> POSitive,NEGative

78

SLOPe?

2

TRIGger:SLOPe?

79

TYPE <L0>

2

1,2,3,4,5 TRIGger:MODE <L0> AUTLevel,AUTO,NORMal,SINGle,TV

80

*RST

1

*RST

81

ERASE

1

ERASE

82

*CLS

1

*CLS

83

FORMat:

1

84

DATA <L0>

2

ASC,BYTE,WORD WAVeform:FORMat <L0> ASC,BYTE,WORD

85

DATA?

2

WAVeform:DATA?

86

Tabella 5.1 Tabella di traduzione dell’ oscilloscopio HP54615B

DISPlay Sottosistema.
KEYWORD PARAMETER FORM NOTES

DISPlay
:MENU
:NAME <menu_name>
:WINDow
:TRAce
:Y
:SCALe
:AUTO <Boolean> | ONCE [no query]

1.1 :MENU <menu_name>
DISPlay:MENU

* Permette di selezionare predefiniti menu dello strumento. Un menu è fondamentalmente un aiuto alla selezione di opzioni che si caratterizzano per un fattore comune. Un menu può consistere di una sola voce o di informazioni più estese.
*  Il tipo di parametro <menu_ name> in questo caso è costituito dall' insieme dei numeri interi compresi tra uno e sedici.
* Vengono elencate di seguito le opzioni associate a ciascun menu identificato dal nome o dal numero e visualizzabili sul pannello dello strumento:

MENU NOME

1 Channel1 1 Couplng BWLIM Invert Vernier Probe
off on dc ac gnd off on off on off on 1 10 100

2 Channel2 2 Couplng BWLIM Invert Vernier Probe
off on dc ac gnd off on off on off on 1 10 100

3 External Trigger

5 Math Channel Math

off 1+2 1-2

DISPlay:MENU 1-1

6 Trigger source Trigger source

1 2 EXT Line

7 Trigger Mode AutoLvl Auto Normal Single Tv

8 Trigger slope Slope Couplng Reject Noise Rej
Dc Ac off LF HF off on

9 Main (delayed) Horizontal Mode Vernier Time Raf
Main Delayed XY Role off on Lft Cntr

10 Time measurements Source Time measurement Clear Next
1 2 Freq Period Duty Cy Meas Menu

11 Voltage measurements Source Voltage Meas Clear Next
1 2 Vp-p Vavg Vrms Meas Menu

Show Meas Voltage Meas Next
off on Vmax Vmin Vtop Vbase Menu

Voltage Meas Next
Vamp Vover Vpre Menu

Show Meas Time Meas Next
Off on +width -width risetime falltime Menu

Define Measure Next
Thresholds delay Delay Phase Menu

12 Cursors Source Active Cursor Clear

1 2 V1 V2 t1 t2 cursors

13 Trace Trace Trace Mem1 Save to Clear Recall

Mem1 Mem2 off on Mem1 Mem1 Setup1

14 Setup Setup Memory Mask Undo Default

1 Save Recall Test Autoscale Setup

15 Display display mode vectors grid

Normal PeakDat Average off on Full
None
Frame

Per scegliere una voce dal menu si utilizzano le istruzioni corrispondenti che sono descritte nelle pagine successive.

DISPlay:MENU 1-2

1.2.1.1.1.1 :AUTO <Boolean>|ONCE
DISPlay:WINDow:TRAce:Y:SCALe:AUTO

* Il comando AUTO mette sempre il display dello strumento in una configurazione tale da far visualizzare i dati nel modo migliore mediante un opportuno cambiamento della scala dell' asse Y. Quando AUTO è su ON il display viene riscalato dopo ciascuna misurazione o spazzata.
* L' operazione di cambiamento di scala può far variare i valori dei parametri sotto il nodo della scala. Il comando AUTO ONCE fa aggiustare l’ indicazione dell' asse per una misurazione , e come se fosse inviato AUTO ON per una spazzata. Prima di mandare un altro AUTO ONCE si può cambiare alcuni dei parametri che possono essere messi sotto il nodo della scala.
* Per lo strumento HP54615B l' unica istruzione implementata eseguibile è AUTO ON. Le altre due non provocano errori ma non producono nessuna operazione.

DISPlay:WINDow 1-3

FORMat Sottosistema.
KEYWORD PARAMETER FORM NOTES

FORMat

:DATA <Type>[,<length>] [no query]

2.1 :DATA <type>[,<length>]
FORMat:DATA

Questo comando seleziona la configurazione di dati impostata con il tipo <type> e la lunghezza <length>. I tipi di dati validi sono: ASCii, INTeger, UINTeger, REAL, HEXadecimal, OCTal, BINAry, e PACKed. Il parametro <length> è opzionale per tutti i tipi; il suo significato è dipendente dal tipo selezionato. Il <length> è un tipo <NRf>. Nella risposta il parametro <length> ritorna come <NR1>. Se il tipo INTeger, UINTeger, REAL o PACKed è selezionato i dati sono trasferiti in un blocco intermedio. Con gli altri tipi di dati il sottosistema FORMat è soltanto necessario per determinare il formato di dati di uscita. Con *RST il tipo selezionato per default è ASCii. La lunghezza dipende dallo strumento.

Descrizione dei parametri definiti:

ASCii I dati numerici sono trasferiti come byte ASCii nel formato
appropriato in <NR1>, <NR2> o <NR3> .

Il formato <NR1> indica valori interi, il formato <NR2> indica
valori con virgola ma senza esponenziale e il formato <NR3>
numeri con virgola con esponenziale.
I numeri sono separati da virgole come specificato in IEEE 488.2.

BINary I dati numerici sono codificati in base 2 preceduti dal simbolo #B
come specificato in IEEE 488.2.

HEXadecimal I dati numerici sono codificati in base 16 preceduti dal simbolo
#H come specificato in IEEE 488.2.

INTeger I dati numerici sono trasferiti in un blocco di lunghezza definita
come interi con segno della lunghezza specificata (16 bit per
default) FORMat:DATA 2-1

OCTal I dati numerici sono codificati in base 8 preceduti dal simbolo #Q
come specificato in IEEE 488.2.

PACKed I dati numerici sono trasferiti in un blocco di lunghezza definita nel
modo specificato nel manuale del dispositivo.
Il <length> parametro puo’ essere usato per formare informazioni
supplementari sul formato dipendente dal particolare dispositivo.

REAL I dati numerici sono trasferiti in un blocco di lunghezza definita
e come numeri con virgola di lunghezza specificata (64 bit per
default) secondo lo standard IEEE 754.

UINTeger I dati sono trasferiti in un blocco di lunghezza definita come
numeri senza segno di lunghezza specificata (16 bit per default).

BYTE Il formato BYTE associa solo sette bit per rappresentare il valore
di tensione con il primo bit di segno.

WORD Nel formato WORD il numero di byte di dati e’ doppio del numero
di WORDS (cioe’ di punti).

I parametri implementati per questo comando sono:

ASCii , BYTE, WORD per il primo tipo di parametro.

Il secondo tipo di parametro <lenght> non è utilizzato per tale strumento.

FORMat:DATA 2 -2

INPut Sottosistema.
KEYWORD PARAMETER FORM NOTES

:INPut1
:ATTenuation <numeric_value>
:COUPling AC|DC|GROund
:OFFSet <numeric_value>
:STATe <Boolean> [no query]
:INPut2
:ATTenuation <numeric_value>
:COUPling AC|DC

:OFFSet <numeric_value>
:STATe <Boolean> [no query]

3.1 :ATTenuation <numeric_value>
INPut1:ATTenuation

Attenuazione all’ ingresso.

* Le unità di default di attenuazione sono le unità correnti di ampiezza del segnale. Questo comando deve essere usato solo se l' effetto non viene annullato dal sistema. Ad esempio, il posizionamento dell' attenuazione d' ingresso a 10 dB causerà una diminuzione dell' ampiezza del segnale di 10 dB. Questo posizionamento non è accoppiato al guadagno
* (INPut:GAIN). Se attenuazione e guadagno sono poste a 10 dB il risultato della rete sarebbe un segnale avente la stessa ampiezza originale.

La lista di parametri è costituita da 3 valori:1,10,100.
Il comando può essere posto anche sotto forma interrogativa.

 

3.2 :COUPling AC|DC|GROund
INPut1:COUPling

* Seleziona AC (accoppiamento in alternata) o DC (accoppiamento in continua) per il segnale specificato.
* Il posizionamento in DC permette la misurazione del segnale mentre il posizionamento in AC soltanto della componente che passa dopo filtraggio. Se si seleziona GROund ( messa a terra ) non passa nessun segnale.
* Si è implementato anche la forma interrogativa del comando.

INPut1:ATTenuation 3-2

3.3 :OFFSet <numeric_value>
INPut1:OFFSet

* Serie o interrogazioni di offset del segnale di ingresso.
* Il valore di offset può essere negativo o positivo.
* Introdurre un offset nel segnale d' ingresso ha l' effetto di compensare il segnale prima della rivelazione di questo attraverso il blocco SENSe.
* Il comando *RST ha un offset che dipende dallo specifico strumento.
* I parametri implementati per questo comando sono rappresentati da tutti i valori del tipo Double. (tipo di dati a virgola mobile a precisione doppia costituito da 8 byte per valori da -1,79769313486232E308 a...
* -4,94065645841247E-324 per valori negativi; da 4,94065645841247E-324 a 1,79769313486232E308 per valori positivi).
* L' approssimazione sul valore introdotto dipenderà dallo strumento come pure il range di valori possibili.

3.4 :STATe <Boolean>
INPut1:STATe

* Lo stato del segnale d' ingresso permette la misurazione di questo quando il comando ha come parametro ON. Quando è messo in OFF permette l' isolamento massimo del segnale. Da notare che questo non vuol dire mettere a terra il segnale d’ ingresso.
* Con *RST lo stato ON viene selezionato.
* Il comando implementato per l' oscilloscopio quando è impostato su ON permette la visualizzazione della forma d' onda del segnale proveniente dal canale 1. Viceversa elimina dallo schermo la traccia di questo quando è impostato su OFF.
* La forma interrogativa del comando non è stata implementata.

Valgono le stesse considerazioni per il canale 2, i comandi associati differiscono da quelli considerati soltanto per la prima parola chiave: INPut2.

INPut1:OFFSet 3-3

MEASure Sottosistema.
KEYWORD PARAMETER FORM NOTES

:MEASure
:DELay
:DUTYcycle
:FREQuency
:PERiod
:PHASe
:SOURce <numeric_value>
:VAVerage
:VMAX
:VMIN
:VPP

4.1 :DELay
MEASure:DELay

Misura il ritardo temporale del segnale nel canale corrente dell' oscilloscopio. E' implementato anche la forma interrogativa del comando che permette di ricevere il valore del ritardo.

4.2 :DUTYcycle
MEASure:DUTYcycle

Misura il dutycycle del segnale nel canale corrente dell' oscilloscopio.
Anche in questo caso è implementata la forma interrogativa del comando.

4.3 :FREQuency
MEASure:FREQuency

Misura la frequenza del segnale nel canale corrente dell' oscilloscopio.
Il segnale nello strumento è visualizzabile come traccia, per conoscere la frequenza di questo si può far seguire al comando considerato l' istruzione: MEAsure:FREQuency?

MEASure:DELay 4-1

4.4 :PERiod
MEASure:PERiod

Misura il periodo temporale del segnale considerato.
Il valore di questo può essere conosciuto inviando la corrispondente richiesta.

4.5 :PHAse
MEASure:PHAse

Misura la fase del segnale che viene trasmessa all’ host computer inviando la forma interrogativa del comando.

4.6 :SOURce <numeric_value>
MEASure:SOURce

* Imposta la sorgente dalla quale verrà effettuata la misurazione del segnale.
Per l' oscilloscopio HP54615B con due canali il comando imposta il canale dell' oscilloscopio dal quale verranno estratte le informazioni sul segnale presente tramite i comandi precedenti.
* Per tale strumento i parametri del comando possono assumere due valori: il valore 1 per indicare la scelta sul primo canale e 2 per la scelta sul secondo.
* Si può richiedere allo strumento di specificare il canale corrente inviando la richiesta MEASure:SOURce?

4.7 :VAVerage
MEASure:VAVerage

* Determina il valore medio in volt del segnale considerato.
* Per l' oscilloscopio il valor medio è calcolato nell' intervallo temporale in cui il segnale è visualizzato sullo schermo. E' implementata la forma interrogativa del comando.

4.8 :VMAX
MEASure:VMAX
MEASure:PERiod 4-2

* Misura il valor massimo del segnale.
*L' intervallo di osservazione è quello visibile sullo schermo.
*E' implementato la forma interrogativa del comando.

4.9 :VMIN
MEASure:VMIN

* Misura il valor minimo del segnale.
* L' intervallo di osservazione è quello visibile sullo schermo.
* E' implementato la forma interrogativa del comando.

4.10 :VPP
MEASure:VPP

* Misura il valore del segnale in volt da picco a picco.
* L' intervallo di osservazione è quello visibile sullo schermo.
* E' implementato la forma interrogativa del comando.

MEASure:VMIN 4-3

SENSe Sottosistema.
KEYWORD PARAMETER FORM NOTES

:SENSe
:FUNCtion
:ON <sensor_function>[,<sensor_function>] [no query]
:SWEep
:TINTerval <numeric_value>
:VOLTage1
:DC
:RANGe
:PTPeak <numeric_value>
:ATTenuation <numeric_value>
:VOLTage2
:DC
:RANGe
:PTPeak <numeric_value>
:ATTenuation <numeric_value>
:DATA? [query only]

La lista di parametri <sensor_function> contiene una struttura gerarchica di parametri racchiusa tra virgolette.

5.1.1 :ON "XTIMe:VOLTage1" <sensor_function>[,<sensor_function>]

SENSe:FUNCtion:ON "XTIMe:VOLTage1"

Fissa il primo canale come canale di riferimento per l’acquisizione dei campioni di tensione della forma d’onda.

5.1.1 :ON "XTIMe:VOLTage2" <sensor_function>[,<sensor_function>]

SENSe:FUNCtion:ON "XTIMe:VOLTage2"

Fissa il secondo canale come canale di riferimento per l’acquisizione dei campioni di tensione della forma d’onda.

SENSe:ON 5-1
5.2.1 :TINterval <numeric_value>

SENSe:SWEep:TINterval

* Fissa la base dei tempi. Il valore del parametro espressa in secondi puo’ assumere valori compresi nell’intervallo tra 10E-9 e 50.
* E’ disponibile la forma interrogativa del comando.

5.3.1.1.1 :PTPeak <numeric_value>

SENSe:VOLTage1:DC:RANGe:PTPeak

* Fissa l ‘ampiezza dell’asse Y del primo canale espressa in Volts/div.
* E’ implementata la forma interrogativa del comando.

5.3.1.2 :ATTenuation <numeric_value>

SENSe:VOLTage1:DC:ATTenuation
* Introduce l’attenuazione per il segnale nel primo canale.
* I parametri esprimono i rapporti di divisione della sonda in modo che la scala verticale e le misure di tensione rispecchino gli effettivi livelli di tensione all’estremita’ della sonda.
* I valori che possono assumere i parametri sono:1,10,100.
* Ad esempio se viene scelto 10 il segnale espresso in volt presente nel primo canale sara’ diviso per un fattore 10.
* E’ implementata la forma interrogativa del comando.

5.4.1.1.1 :PTPeak <numeric_value>
SENSe:VOLTage2:DC:RANGe:PTPeak

* Fissa l’ampiezza dell’asse Y del secondo canale espressa in Volts/div.
* E’ implementata la forma interrogativa del comando.

5.4.1.2 :ATTenuation <numeric_ value>
SENSe:VOLTage2:DC:ATTenuation

* Introduce l’attenuazione per il segnale nel secondo canale.
* I valori che possono essere impostati sono:1,10,100.
* Ad esempio se viene scelto 10 il segnale espresso in volt presente nel secondo canale sara’ diviso per un fattore 10.
* E’ disponibile la forma interrogativa del comando

SENSe:SWEep 5-2
5.5 :DATA?

SENSe:DATA?

Acquisisce la forma d’ onda dal canale selezionato come sorgente .

 

SENSe:DATA? 5-3

TRIGger Sottosistema.

KEYWORD PARAMETER FORM NOTES

:TRIGger
:HOLDoff <numeric_value> [no query]
:LEVel <numeric_value>
:SOURce <numeric_value>
:SLOPe POSitive|NEGative
:TYPE <numeric_value>

6.1 :HOLDoff <numeric_value>
TRIGger:HOLDoff

* Fissa il ritardo rispetto l’evento di trigger.
* Il parametro introdotto puo’ essere un numero qualsiasi di tipo Double.

6.2 :LEVel <numeric_value>

TRIGger:LEVel

* Fissa il livello di aggancio del trigger.
* Il valore del livello in volt puo’ essere un qualsiasi valore di tipo Double.
* E’ implementata la forma domanda del comando.

6.3 :SOURce <numeric_value>

TRIGger:SOURce
: Permette la scelta della sorgente di trigger.
Si possono scegliere quattro parametri:

* EXT Sorgente di trigger esterna.
* LINE Sincronismo fornito dalla frequenza di rete della linea di alimentazione.
* AINT1 Sorgente di trigger interna, sincronismo sul primo canale.
* AINT2 Sorgente di trigger interna, sincronismo sul secondo canale.
* E’ impostata la richiesta della sorgente prescelta.

TRIGger:HOLDoff 6.1

6.4 :SLOPe POSitive|NEGative
TRIGger:SLOPe

* Seleziona il fianco di risalita o il fianco di discesa del segnale per eseguire il trigger dell’oscilloscopio.
* La pendenza e’ espressa dai parametri: POS,NEG.
* E’ implementata la forma interrogativa del comando.

6.5 :TYPE <numeric_value>
TRIGger:TYPE

* Comando usato per selezionare uno dei cinque modi di trigger dell’ oscilloscopio: AUTO level, AUTO, NORMal, SINGle e TV.
* La sequenza delle modalita’ di trigger menzionate corrisponde alla sequenza ordinata di parametri del comando:1,2,3,4,5.

TRIGger:SLOPe 6-2

Altri comandi implementati.

*CLS
Cancella il registro di stato e i registri di eventi.

ERASE
Svuota il contenuto dello schermo.

*RST
Riporta lo strumento nella configurazione iniziale.

 

MANUALE DI PROGRAMMAZIONE

5.3 STRUMENTO: MULTIMETRO HP3478A

Il multimetro 3478A è uno strumento digitale HP-IB completamente programmabile. In un test automatico o sul banco, il 3478A offre risoluzioni da tre cifre e mezzo a cinque cifre e mezzo per misurare tensioni continue, tensioni alternate, resistenze con due o quattro fili, e corrente continua o corrente alternata. Il multimetro 3478A offre una sensibilità di voltaggio in corrente continua da 100 nanovolt a 300 volt (intervallo completo), reale capacità RMS fino a 300 Khz , e misurazioni della resistenza con sensibilità da 100 microohm a 30 megaohm (intervallo completo). La sua capacità di misurazione di corrente continua e di corrente alternata RMS va da 1 uA fino a 3 A. La veloce capacità di autocollocamento del 3478A permette di fare misurazioni su un vasto intervallo dinamico senza sacrificare la velocità di uscita dei dati. Selezionando il numero di cifre mostrato e usando la caratteristica di autoazzeramento, il 3478A permette una flessibilità nella velocità di misurazione e precisione. Possono essere effettuate fino a 71 letture per secondo con il 3478A nella modalità 3 cifre e mezzo. Il 3478A ha una modalità ad interruttore di comando veloce che vi permette di bypassare il ritardo di tempo di stabilizzazione incorporato per fare veloci misurazioni di correnti alternate RMS in applicazioni di sistema. Il display a cristalli liquidi (LCD) alfanumerico vi dà le unità di misura come parte della lettura per una risposta non ambigua e facile da leggere.L' HP-IB trasmette, riceve, controlla a distanza e rende disponibili informazioni di stato SRQ con annunciatori LCD.

Il pulsante SRQ può essere usato per collegare o interrompere il computer dal pannello frontale del 3478A. Altre caratteristiche di sistema del 3478A includono il segnale di Voltmetro Completo e di Input Interruttore Esterno, entrambi disponibili sul pannello posteriore, per la sincronizzazione con scanner o con altre apparecchiature esterne.

PREMESSA:

In questo manuale vengono riportati i comandi seguendo l' organizzazione adottata nel libro del linguaggio SCPI (Standard Commands for Programmable Instruments). Per ogni radice viene costruita una tavola dei comandi divisa in tre colonne: KEYWORD, PARAMETER FORM, NOTES. Nella prima colonna le parole chiavi dei comandi sono riportate seguendo la nota struttura gerarchica ad albero; ogni riga corrisponde ad una parola chiave, uno spostamento della parola chiave verso sinistra indica l' accesso ad una foglia sottostante , parole chiavi perfettamente allineate verticalmente indicano foglie appartenenti allo stesso livello. I comandi rappresentati nella tavola sono quelli che sono stati implementati per lo strumento considerato. Altri comandi potranno in futuro essere inseriti arbitrariamente se si desidera ampliare le funzionalità in remoto per nuove operazioni. Le parole chiave elencate nella tavola sono riportate nella colonna Istruzioni SCPI della tabella dello strumento nel Database Traduttore1. L' aggiunta di un nuovo comando comporta la necessaria modifica della tabella di traduzione.

Nella seconda colonna sono specificati i tipi di parametri considerati nello standard SCPI. Per semplicità nella tabella dello strumento questi vengono sostituiti da una nomenclatura diversa che è di seguito riportata:

<Ln> Se il parametro appartiene ad una lista di elementi.

<Cn> Se il parametro può assumere un valore qualsiasi con l' unico vincolo specificato nella colonna Parametri di essere di tipo Integer, Long, Positivo, Negativo, Byte, Double.

<Rn> Se il parametro e’ di tipo Range, nella colonna Parametri dovra’ essere specificato l’ intervallo di valori e il tipo di parametro.

<Vn> Se i parametri di numero variabile appartengono ad una lista di elementi.

<Tn> Se i parametri di numero variabile ma con almeno due elementi appartengono ad una lista.

Nella colonna NOTES si specifica se un comando può essere inviato solo in forma interrogativa o se non esiste tale forma del comando.

Nelle pagine di descrizione dei comandi a sinistra di ogni istruzione viene indicato il percorso dalla radice all' ultima foglia associando una numerazione alle parole chiavi che vengono elencate nella tavola comandi. La descrizione dei comandi è suddivisa in due parti; nella prima parte si fa un riassunto sul significato generale dell' istruzione SCPI, nella seconda viene specificato quando non è chiaro il significato del comando per lo strumento particolare.

Si elencano di seguito i comandi implementati per il multimetro fornendo la relativa tabella 5.2

Istruzione SCPI

Liv.

Parametri

Traduzione corpo istruzione

Traduzioni con parametri

SCPI:

0

SENSe:

1

FUNCtion "

2

VOLTage:

3

DC"

4

F1
AC"

4

F2
RESistance"

3

F3
CURRent:

3

AC"

4

F6
DC"

4

F5
FRESistance"

3

F4
RESistance:

2

NPLCycles <L0>

3

0.1,1,10,MIN,MAX N<L0> 3,4,5,3,5
RANGe: <L0>

3

30,300,3000,30000,300000,3000000,30000000,MAX,MIN R<L0> 1,2,3,4,5,6,7,7,1
AUTO <L0>

4

ON,OFF RA,R3
RESolution <L0>

3

INT,MIN,MAX N<L0> 4,3,5
VOLTage:

2

DC:

3

NPLCycles <L0>

4

0.1,1,10,MIN,MAX N<L0> 3,4,5,3,5
RANGe: <L0>

4

0.03,0.3,3,30,300,MAX,MIN R<L0> -2,-1,0,1,2,2,-2
AUTO <L0>

5

ON,OFF RA,F1
RESolution <L0>

4

INT,MIN,MAX N<L0> 4,3,5
AC:

3

NPLCycles <L0>

4

0.1,1,10,MIN,MAX N<L0> 3,4,5,3,5
RANGe: <L0>

4

0.3,3,30,300,MAX,MIN R<L0> -1,0,1,2,2,-1
AUTO <L0>

5

ON,OFF RA,F2
RESolution <L0>

4

INT,MIN,MAX N<L0> 4,3,5
CURRent:

2

DC:

3

NPLCycles <L0>

4

0.1,1,10,MIN,MAX N<L0> 3,4,5,3,5
RANGe: <L0>

4

0.3,3,MAX,MIN R<L0> -1,0,0,-1
AUTO <L0>

5

ON,OFF RA,F5
RESolution <L0>

4

INT,MIN,MAX N<L0> 4,3,5
AC:

3

NPLCycles <L0>

4

0.1,1,10,MIN,MAX N<L0> 3,4,5,3,5
RANGe: <L0>

4

0.3,3,MAX,MIN R<L0> -1,0,0,-1
AUTO <L0>

5

ON,OFF RA,F6
RESolution <L0>

4

INT,MIN,MAX N<L0> 4,3,5
FRESistance:

2

NPLCycles <L0>

3

0.1,1,10,MIN,MAX N<L0> 3,4,5,3,5
RANGe: <L0>

3

30,300,3000,30000,300000,3000000,30000000,MAX,MIN R<L0> 1,2,3,4,5,6,7,7,1
AUTO <L0>

4

ON,OFF RA,F4
RESolution <L0>

3

INT,MIN,MAX N<L0> 4,3,5
AM:

2

DEPT:

3

RANGe:

4

AUTO

5

RA
MEASure:

1

VOLTage:

2

DC? <L0>,<L1>

3

0.03,0.3,3,30,300,MAX,MIN:INT,MIN,MAX F1,R<L0>,N<L1> :-2,-1,0,1,2,2,-2:4,3,5
AC? <L0>,<L1>

3

0.3,3,30,300,MAX,MIN:INT,MIN,MAX F2,R<L0>,N<L1> :-1,0,1,2,2,-1:4,3,5
CURRent:

2

DC? <L0>,<L1>

3

0.3,3,MAX,MIN:INT,MIN,MAX F5,R<L0>,N<L1> :-1,0,0,-1:4,3,5
AC? <L0>,<L1>

3

0.3,3,MAX,MIN:INT,MIN,MAX F6,R<L0>,N<L1> :-1,0,0,-1:4,3,5
RESistance? <L0>,<L1>

2

30,300,3000,30000,300000,3000000,30000000,MAX,MIN:INT,MIN,MAX F3,R<L0>,N<L1> :1,2,3,4,5,6,7,7,1:4,3,5
FRESistance? <L0>,<L1>

2

30,300,3000,30000,300000,3000000,30000000,MAX,MIN:INT,MIN,MAX F4,R<L0>,N<L1> :1,2,3,4,5,6,7,7,1:4,3,5
TRIGger:

1

DELay <L0>

2

MIN,MAX T<L0> 5,4
SOURce <L0>

2

IMM,EXT T<L0> 1,2
COUNt <L0>

2

1,MIN,MAX T<L0> 3,3,1
DISPlay:

1

TEXT?

2

D3
CALIBRATE

1

C
CALibration:

1

ZERO:

2

AUTO <L0>

3

ON,OFF Z<L0> 1,0
*RST

1

*RST

Fig 5.2 Tabella di traduzione del multimentro HP3478A

SENSe Sottosistema.
KEYWORD PARAMETER FORM NOTES

:SENSe
:FUNCtion <function_name> [ no query]
:RESistance
:NPLCycles <numeric_value> [ no query]
:RANGe <numeric_value> [ no query]
:AUTO <Boolean> [ no query]
:RESolution <numeric_value> [ no query]
:VOLTage
:DC
:NPLCycles <numeric_value> [ no query]
:RANGe <numeric_value> [ no query]
:AUTO <Boolean> [ no query]
:RESolution <numeric_value> [ no query]
:AC
:NPLCycles <numeric_value> [ no query]
:RANGe <numeric_value> [ no query]
:AUTO <Boolean> [ no query]
:RESolution <numeric_value> [ no query]
:CURRent
:DC
:NPLCycles <numeric_value> [ no query]
:RANGe <numeric_value> [ no query]
:AUTO <Boolean> [ no query]
:RESolution <numeric_value> [ no query]
:AC
:NPLCycles <numeric_value> [ no query]
:RANGe <numeric_value> [ no query]
:AUTO <Boolean> [ no query]
:RESolution <numeric_value> [ no query]
:FRESistance
:NPLCycles <numeric_value> [ no query]
:RANGe <numeric_value> [ no query]
:AUTO <Boolean> [ no query]
:RESolution <numeric_value> [ no query]
:AM
:DEPT SENSe 1.1
:RANGe
:AUTO <Boolean> [ no query]

La lista di parametri <function_name> contiene una struttura gerarchica di parametri racchiusa tra virgolette come di seguito riportata.

VOLTage
:DC
:AC
RESistance
CURRent
:AC
:DC
FRESistance

1.1.1 :FUNCtion "VOLTage:DC"

SENSe:FUNCtion "VOLTage:DC"
Predispone il multimetro nella funzionalita’ DC volts.

1.1.2 :FUNCtion "VOLTage:AC"

SENSe:FUNCtion "VOLTage:AC"

Predispone il multimentro nella funzionalita’ AC volts.

1.1.3 :FUNCtion "RESistance"

SENSe:FUNCtion "RESistance"

Imposta lo strumento per la misura di resistenza.

1.1.4 :FUNCtion "CURRent:AC"

* SENSe:FUNCtion "CURRent:AC"
* Predispone lo strumento nella misura di corrente AC.

1.1.5 :FUNCtion "CURRent:DC"

SENSe:FUNCtion

SENSe:FUNCtion 1.2

* Predispone lo strumento nella misura di corrente DC.

1.1.6 :FUNCtion "FRESistance"

SENSe:FUNCtion "FRESistance"

* Predispone lo strumento per la misura di resistenza a quattro fili.

1.2.1 :NPLCycles <numeric_value>

SENSe:RESistance:NPLCycles

* Imposta il PLC (Power Line Cycle integration) per lo strumento configurato per la misura di resistenza.
* L’ integrazione e’ un processo dove gli effetti del rumore di linea sono mediati a zero su un numero intero di cicli di potenza di linea durante la conversione A/D. Il tempo di integrazione non e’ lo stesso del tempo di misura. Il tempo di integrazione e’ un tempo multiplo di un periodo. Con il display impostato ad una precisione di 4 cifre e mezzo il tempo richiesto per un ciclo di integrazione e un PLC: 16,66 mS a 60 Hz di frequenza di linea, 20 mS per 50 Hz.
* Nel HP3478A la frequenza di linea e’ determinata dall’ impostazione dell’ interruttore posto dietro il panello dello strumento.
* Con il display impostato ad una precisione di 3 ½ il tempo di integrazione e’ di 0.1 PLC. Con l’ impostazione a 5 ½ il tempo di integrazione e’ di 10 PLC.
* I parametri impostabili per tale comando sono:0.1,1,10,MIN,MAX.
* Dove MIN e MAX indicano rispettivamente 0.1 PLC e 10 PLC.

 

1.2.2 :RANGe <numeric_value>

SENSe:RESistance:RANGe

Imposta il range nella misura di resistenza ad un filo.

I parametri selezionabili espressi in ohm sono: 30,300,3000,30000,300000,300000,3000000,30000000,MAX,MIN.

1.2.2.1 :AUTO <Boolean>

SENSe:RANGe:AUTO

* Seleziona se il parametro e’ ON l’ autorange.
* Se il parametro e’ OFF viene impostato il range piu’ basso, in particolare, nel funzionamento predisposto per la misura di resistenza .

SENSe:FUNCtion 1.3

1.2.3 :RESolution <numeric_value>

SENSe:RESistance:RESolution

* Seleziona la risoluzione del display nel funzionamento per la misura di resistenza.
* I parametri sono : MAX, INT, MIN.
* Il parametro MIN seleziona una risoluzione di 3 ½ cifre,.INT seleziona una risoluzione intermedia di 4 ½ , e MAX la risoluzione massima di 5 ½.

1.3.1.1 :NPLCycles <numeric_value>

SENSe:VOLTage:DC:NPLCycles

* Imposta il PLC (Power Line Cycle integration) per lo strumento configurato per la misura di tensione continua. I parametri sono:0.1,1,10,MIN,MAX.

1.3.1.2 :RANGe <numeric_value>

SENSe:VOLTage:DC:RANGe

* Imposta il range dello strumento per la misura di tensione in continua.

I parametri espressi in volts sono:0.03,0.3,3,30,300,MAX,MIN.

1.3.1.2.1 :AUTO <Boolean>

SENSe:VOLTage:DC:RANGe:AUTO

* Seleziona se il parametro e’ ON l’ autorange per la misura di tensione in continua.

* Se il parametro e’ OFF lo strumento rimane nella configurazione per la misura di tensione in continua.

1.3.1.3 :RESolution <numeric_value>

SENSe:VOLTage:DC:RESolution

* Seleziona la risoluzione del display nel funzionamento per la misura di tensione in continua.
* I parametri sono : MAX, INT, MIN.
* Il parametro MIN seleziona una risoluzione di 3 ½ cifre,.INT seleziona una risoluzione intermedia di 4 ½ , e MAX la risoluzione massima di 5 ½.

1.3.2.1 :NPLCycles <numeric_value>

SENSe:VOLTage:AC:NPLCycles

SENSe:RESistance 1.4

* Imposta il PLC (Power Line Cycle integration) per lo strumento configurato per la misura di tensione alternata. I parametri sono:0.1,1,10,MIN,MAX.

1.3.2.2 :RANGe <numeric_value>

SENSe:VOLTage:AC:RANGe

* Imposta il range per lo strumento nella misura di tensione alternata. I parametri espressi in volts sono: 0.3,3,30,300,MAX,MIN.

1.3.2.2.1 :AUTO <Boolean>

SENSe:VOLTage:AC:RANGe:AUTO

* Seleziona se il parametro e’ ON l’ autorange per la misura di tensione in alternata.
* Se il parametro e’ OFF lo strumento rimane nella configurazione per la misura di tensione in alternata.

1.3.2.3 :RESolution <numeric_value>

SENSe:VOLTage:AC:RESolution

* Seleziona la risoluzione del display nel funzionamento per la misura di tensione in alternata.
* I parametri sono : MAX, INT, MIN.
* Il parametro MIN seleziona una risoluzione di 3 ½ cifre,.INT seleziona una risoluzione intermedia di 4 ½ , e MAX la risoluzione massima di 5 ½.

1.4.1.1 :NPLCycles <numeric_value>

SENSe:CURRent:DC:NPLCycles

* Imposta il PLC (Power Line Cycle integration) per lo strumento configurato per la misura di corrente continua. I parametri sono:0.1,1,10,MIN,MAX.

1.4.1.2 :RANGe <numeric_value>

SENSe:CURRent:DC:RANGe

* Imposta il range per lo strumento nella misura di corrente continua. I parametri espressi in ampere sono: 0.3,3,30,300,MAX,MIN.

SENSe:VOLTage 1.5

1.4.1.2.1 :AUTO <Boolean>
SENSe:CURRent:DC:RANGe:AUTO

* Seleziona se il parametro e’ ON l’ autorange per la misura di corrente continua.
* Se il parametro e’ OFF lo strumento rimane nella configurazione per la misura di corrente continua.

1.4.1.3 :RESolution <numeric_value>
SENSe:CURRent:DC:RESolution

* Seleziona la risoluzione del display nel funzionamento per la misura di corrente in continua. I parametri sono : MAX, INT, MIN.
* Il parametro MIN seleziona una risoluzione di 3 ½ cifre,.INT seleziona una risoluzione intermedia di 4 ½ , e MAX la risoluzione massima di 5 ½.

1.4.2.1 :NPLCycles <numeric_value>
SENSe:CURRent:AC:NPLCycles

Imposta il PLC (Power Line Cycle integration) per lo strumento configurato per la misura di corrente alternata. I parametri sono:0.1,1,10,MIN,MAX.

1.4.2.2 :RANGe <numeric_value>

SENSe:CURRent:AC:RANGe

* Imposta il range per lo strumento nella misura di corrente alternata. I parametri espressi in ampere sono: 0.3,3,MAX,MIN.

1.4.2.2.1 :AUTO <Boolean>
SENSe:CURRent:AC:RANGe:AUTO

* Seleziona se il parametro e’ ON l’ autorange per la misura di corrente alternata. Se il parametro e’ OFF lo strumento rimane nella configurazione per la misura di corrente alternata.

1.4.2.3 :RESolution <numeric_value>
SENSe:CURRent:AC:RESolution

* Seleziona la risoluzione del display nel funzionamento per la misura di corrente in alternata. I parametri sono : MAX, INT, MIN.

SENSe:CURRent 1.6

Il parametro MIN seleziona una risoluzione di 3 ½ cifre,.INT seleziona una risoluzione intermedia di 4 ½ , e MAX la risoluzione massima di 5 ½.

1.5.1 :NPLCycles <numeric_value>
SENSe:FRESistance:NPLCycles

* Imposta il PLC (Power Line Cycle integration) per lo strumento configurato per la misura di resistenza a quattro fili. I parametri sono:0.1,1,10,MIN,MAX.

1.5.2 :RANGe <numeric_value>
SENSe:FRESistance:RANGe

* Imposta il range per lo strumento nella misura di resistenza a quattro fili. I parametri espressi in ohm sono: 30,300,3000,30000,3000000,30000000,MAX,MIN.

1.5.2.1 :AUTO <Boolean>
SENSe:FRESistance:RANGe:AUTO

* Seleziona se il parametro e’ ON l’ autorange per la misura di resistenza a quattro fili. Se il parametro e’ OFF lo strumento rimane nella configurazione per la misura di resistenza.

1.5.3 :RESolution <numeric_value>
SENSe:FRESistance:RESolution

* Seleziona la risoluzione del display nel funzionamento per la misura di resistenza a quattro fili. I parametri sono : MAX, INT, MIN.
* Il parametro MIN seleziona una risoluzione di 3 ½ cifre, INT seleziona una risoluzione intermedia di 4 ½ , e MAX la risoluzione massima di 5 ½.

1.6.1.1.1 :AUTO <Boolean>
SENSe:AM:DEPT:RANGe:AUTO

* Seleziona l’ autorange per qualsiasi funzione di misura dello strumento.

SENSe:FRESistance 1.7

MEASURE Sottosistema.
KEYWORD PARAMETER FORM NOTES

:MEASure
:VOLTage
:DC? <numeric_value> , <numeric_value> [no query]
:AC? <numeric_value> , <numeric_value> [no query]
:CURRent
:DC? <numeric_value> , <numeric_value> [no query]
:AC? <numeric_value> , <numeric_value> [no query]
:RESistance? <numeric_value> , <numeric_value> [no query]
:FRESistance? <numeric_value> , <numeric_value> [no query]

2.1.1 :DC? <numeric_value> , <numeric_value>
MEASure:VOLTage:DC?

* Predispone lo strumento per la misura di tensione continua.
* Il primo tipo di parametro definisce il range e puo’ assumere i seguenti valori: 0.03,0.3,3,30,300,MAX,MIN. Il secondo tipo di parametro definisce la risoluzione: MIN,INT,MAX.

2.1.2 :AC? <numeric_value> , <numeric_value>
MEASure:VOLTage:AC?

* Predispone lo strumento per la misura di tensione alternata.

Il primo tipo di parametro definisce il range e puo’ assumere i seguenti valori: 0.3,3,30,300,MAX,MIN. Il secondo tipo di parametro definisce la risoluzione: MIN,INT,MAX.

MEASure:VOLTage 2.1

2.2.1 :DC? <numeric_value> , <numeric_value>
MEASure:CURRent:DC?

* Predispone lo strumento per la misura di corrente continua.

Il primo tipo di parametro definisce il range e puo’ assumere i seguenti valori: 0.3,3,MAX,MIN. Il secondo tipo di parametro definisce la risoluzione: MIN,INT,MAX.

2.2.2 :AC? <numeric_value> , <numeric_value>
MEASure:CURRent:AC?

* Predispone lo strumento per la misura di corrente alternata.

Il primo tipo di parametro definisce il range e puo’ assumere i seguenti valori:0.3,3,MAX,MIN. Il secondo tipo di parametro definisce la risoluzione: MIN,INT,MAX.

2.3 :RESistance? <numeric_value> , <numeric_value>
MEASure:RESistance?

* Predispone lo strumento per la misura di resistenza.
* Il primo tipo di parametro definisce il range e puo’ assumere i seguenti valori: 30,300,3000,30000,300000,3000000,30000000,MAX,MIN. Il secondo tipo di parametro definisce la risoluzione: MIN,INT,MAX.

2.4 :AC? <numeric_value> , <numeric_value>
MEASure:FRESistance?

* Predispone lo strumento per la misura di resistenza a quattro fili.

* Il primo tipo di parametro definisce il range e puo’ assumere i seguenti valori: 30,300,3000,30000,300000,3000000,30000000,MAX,MIN. Il secondo tipo di parametro definisce la risoluzione: MIN,INT,MAX.

MEASure:CURRent 2.2

TRIGGER Sottosistema.
KEYWORD PARAMETER FORM NOTES

:TRIGger
:DELay <numeric_value>
:SOURce <numeric_value>
:COUNt <numeric_value>

3.1 :DELay <numeric_value>
TRIGger:DELay

I parametri implementati sono: MIN e MAX.

Il comando con il primo parametro seleziona il Fast Trigger, con il secondo il Trigger Hold.

3.2 :SOURce <numeric_value>
TRIGger:SOURce

* Seleziona la sorgente di trigger tramite i due parametri:IMM, EXT.
* Ogni lettura in esecuzione e’ bloccata e lo strumento attende l’ arrivo dell’ impulso di sincronizzazione. Il primo parametro, IMM si riferisce al trigger interno, il secondo parametro EXT al trigger esterno.

3.3 :COUNt <numeric_value>
TRIGger:COUNt

* I parametri impostabili sono: 1,MIN,MAX.
* I primi due selezionano il funzionamento a singolo trigger, vale a dire che viene mandato un singolo impulso di sincronizzazione per la misura in corso.
* Il parametro MAX seleziona il trigger esterno con un determinato numero di impulsi.

TRIGger:DELay 3.1

Altri comandi implementati.
DISPlay:TEXT?

Il comando situa il messaggio "testo" nel display del 3478A. Spegne anche tutti i segnalatori specifici e quindi interrompe l' aggiornarsi del display. Questo comando impiega 30 ms per essere completato, dopo di ciò il considerevole sovraccarico nell' aggiornamento del display e' bypassato (ciò significa una più rapida velocità di lettura). Ciò permette al 3478A di rispondere ai comandi più rapidamente in certe condizioni.

CALIBRATE

Una delle molte caratteristiche del 3478A è la calibrazione elettronica. Ciò rappresenta un concetto totalmente nuovo nei voltmetri Hewlett-Packard. Prima, i voltmetri dovevano essere rimossi dal loro supporto, avere le calotte di protezione rimovibili e dovevano essere fatti degli aggiustamenti meccanici. Poi i voltmetri dovevano essere riassemblati e installati. Ma ora, la calibratura può essere fatta premendo un pulsante sul pannello anteriore o inviando CALIBRATE e non necessitano di venire riassemblati.

Brevemente la calibrazione elettronica viene fatta applicando un voltaggio conosciuto (o resistenza o corrente) al voltmetro e dicendogli l' esatto valore di quel voltaggio. Il voltmetro esegue poi dieci letture e paragona la media di quelle letture al valore conosciuto. Una costante di calibrazione è calcolata per aggiornare la lettura al valore noto e poi memorizzarla nella memoria del voltmetro. Queste costanti di calibrazione sono generate per ciascun intervallo e funzioni del misuratore. Tutte le successive misurazioni vengono corrette dalle costanti. La memoria della costante di calibrazione è sostenuta da una batteria a lunga vita per mantenere le costanti quando la corrente viene staccata.

Per abilitare la calibratura sul pannello anteriore del 3478A c' è un piccolo interruttore rotante etichettato CAL. (l' utilizzo equivale all' invio del comando CALIBRATE) Questo interruttore, quando viene ruotato in modo che la fenditura sia verticale, abilita la procedura di calibrazione del 3478A. Il processo di calibrazione è molto delicato, attivare l' interruttore CAL può causare la perdita della calibrazione se non sono seguite attentamente le procedure adeguate.

CALibration:ZERO:AUTO ON/OFF

Quando si utilizza l’ autozero ON gli errori generati all’ interno dello strumento vengono annullati ad ogni lettura, questo consente una maggiore accuratezza delle misure. Quando si utilizza l’ autozero OFF la lettura avviene con velocita’ doppia.

*RST

Riporta lo strumento nella configurazione iniziale.

 

MANUALE DI PROGRAMMAZIONE
5.4 STRUMENTO: ANALIZZATORE DI SPETTRO HP35660A

PREMESSA:

In questo manuale vengono riportati i comandi seguendo l' organizzazione adottata nel libro del linguaggio SCPI (Standard Commands for Programmable Instruments). Per ogni radice viene costruita una tavola dei comandi divisa in tre colonne: KEYWORD, PARAMETER FORM, NOTES. Nella prima colonna le parole chiavi dei comandi sono riportate seguendo la nota struttura gerarchica ad albero; ogni riga corrisponde ad una parola chiave, uno spostamento della parola chiave verso sinistra indica l' accesso ad una foglia sottostante , parole chiavi perfettamente allineate verticalmente indicano foglie appartenenti allo stesso livello. I comandi rappresentati nella tavola sono quelli che sono stati implementati per lo strumento considerato. Altri comandi potranno in futuro essere inseriti arbitrariamente se si desidera ampliare le funzionalità in remoto per nuove operazioni. Le parole chiave elencate nella tavola sono riportate nella colonna Istruzioni SCPI della tabella dello strumento nel Database Traduttore1. L' aggiunta di un nuovo comando comporta la necessaria modifica della tabella di traduzione.

Nella seconda colonna sono specificati i tipi di parametri considerati nello standard SCPI. Per semplicità nella tabella dello strumento questi vengono sostituiti da una nomenclatura diversa che è di seguito riportata:

<Ln> Se il parametro appartiene ad una lista di elementi.

<Cn> Se il parametro può assumere un valore qualsiasi con l' unico vincolo specificato nella colonna Parametri di essere di tipo Integer, Long, Positivo, Negativo, Byte, Double.

<Rn> Se il parametro e’ di tipo Range, nella colonna Parametri dovra’ essere specificato l’ intervallo di valori e il tipo di parametro.

<Vn> Se i parametri di numero variabile appartengono ad una lista di elementi.

<Tn> Se i parametri di numero variabile ma con almeno due elementi appartengono ad una lista.

Nella colonna NOTES si specifica se un comando può essere inviato solo in forma interrogativa o se non esiste tale forma del comando.

Nelle pagine di descrizione dei comandi a sinistra di ogni istruzione viene indicato il percorso dalla radice all' ultima foglia associando una numerazione alle parole chiavi che vengono elencate nella tavola comandi. La descrizione dei comandi è suddivisa in due parti; nella prima parte si fa un riassunto sul significato generale dell' istruzione SCPI, nella seconda viene specificato quando non è chiaro il significato del comando per lo strumento particolare.

Si elencano di seguito i comandi implementati per l’ analizzatore di spettro fornendo la relativa tabella 5.3

Istruzione SCPI

Livello

Parametri

Traduzione corpo istruzione

Traduzioni con parametri

Numero

SCPI:

0

1

DISPlay1:

1

2

WINDow:

2

3

TRACe:

3

4

Y:

4

5

LABel <L0>

5

VRMS,V,DBVRMS,DBVPK,DBM DISP1:SCAL:UNIT <L0> VRMS,V,DBVRMS,DBVPK,DBM

6

SCALe:

5

7

BOTTom?

6

DISP1:SCAL:START?

8

TOP?

6

DISP1:SCAL:STOP?

9

AUTO

6

DISP1:SCAL:AUTO:SINGLE

10

PDIVision <C0>

6

Integer DISP1:SCAL:DIV <C0> C

11

DIVision <R0>

6

1,40,Integer DISP1:SCAL:DIV <R0> R

12

TEXT:

3

13

DATA?

4

DISP1:DATA?

14

DISPlay2:

1

15

WINDow:

2

16

TRACe:

3

17

Y:

4

18

LABel <L0>

5

VRMS,V,DBVRMS,DBVPK,DBM DISP2:SCAL:UNIT <L0> VRMS,V,DBVRMS,DBVPK,DBM

19

SCALe:

5

20

BOTTom?

6

DISP2:SCAL:START?

21

TOP?

6

DISP2:SCAL:STOP?

22

AUTO

6

DISP2:SCAL:AUTO:SINGLE

23

PDIVision <C0>

6

Integer DISP2:SCAL:DIV <C0> C

24

DIVision <R0>

6

1,40,Integer DISP2:SCAL:DIV <R0> R

25

TEXT:

3

26

DATA?

4

DISP2:DATA?

27

SOURce:

1

28

MARKer:

2

29

STATe <L0>

3

ON,OFF MARK:STAT <L0> ON,OFF

30

AMPLitude <L0>

3

ON,OFF MARK:AMAX,

31

AMPLitude?

3

MARK:AMPL?

32

FREQuency?

3

MARK:FREQ?

33

FREQuency:

3

34

DIStorsion

4

MARK:HARM:STAT ON

35

FUNCtion:

2

36

SHAPE <L0>

3

RAND,PCH,SIN SOUR:FREQ:MODE <L0> RAND,PCH,CW

37

FREQuency:

2

38

CW <R0>

3

1,102400,Double SOUR:FREQ:CW <R0>

39

TRIGger:

1

40

SEQuence:

2

41

DALay1 <R0>

3

-1000,1000,Double TRIG:DEL1 <R0> R

42

DALay2 <R0>

3

0,8191,Double TRIG:DEL2 <R0> R

43

LEVel <R0>

3

-1,1,Double TRIG:LEVel <R0> R

44

SLOPe <L0>

3

POS,NEG TRIG:SLOP <L0> POS,NEG

45

SOURce <L0>

3

BUS,TIMer,EXT,INT1,INT2,SOUR TRIG:SOUR <L0> BUS,FREE,EXT,INT1,INT2,SOUR

46

CALculate:

1

47

AVERage:

2

48

TYPE <L0>

3

RMS,SCAL AVER:TYPE <L0> RMS,VECT

49

COUNt <R0>

3

0,100,Integer AVER:COUNT <R0> R

50

STATe <L0>

3

ON,OFF AVER:STAT <L0> ON,OFF

51

WINDow <L0>

2

HANN,FLAT,UNIF,FORC,EXP WIND:TYPE <L0> HANN,FLAT,UNIF,FORC,EXP

52

SENSe:

1

53

FREQuency:

2

54

SPAN <R0>

3

0.2,102400,Double FREQ:SPAN <R0> R

55

SPAN?

3

FREQ:SPAN?

56

STARt <R0>

3

0,115000,Double FREQ:STAR <R0> R

57

CENTer <R0>

3

0,115000,Double FREQ:CENT <R0> R

58

*OPC?

1

*OPC?
*CLS

1

*CLS
*RST

1

*RST

Fig. 5.3 Tabella di traduzione dell’ analizzatore di spettro.

DISPlay Sottoalbero.
KEYWORD PARAMETER FORM NOTES

:DISPlay1
:WINDow
:TRACe
:Y
:LABel <numeric_value>
:SCALe
:BOTTom?
:TOP?
:AUTO
:PDIVision <numeric_value>
:DIVision <numeric_value>
:TEXT
:DATA?
:DISPlay2
:WINDow
:TRACe
:Y
:LABel <numeric_value>
:SCALe
:BOTTom?
:TOP?
:AUTO
:PDIVision <numeric_value>
:DIVision <numeric_value>
:TEXT
:DATA?

1.1.1.1.1 :LABel <numeric_value>

:DISPlay1:WINDow:TRACe:Y:LABel

DISplay1:WINDow 1.1

Imposta l’ unita’ di misura dell' asse Y nel display.

I parametri sono:VRMS, V, DBVRMS, DBVPK, DBM.

1.1.1.1.2.1 :BOTTom?

:DISPlay1:WINDow:TRACe:Y:SCALe:BOTTom?

Fornisce come risposta il valore del limite inferiore dell’ asse Y della traccia visualizzata sul display .

1.1.1.1.2.2 :TOP?

:DISPlay1:WINDow:TRACe:Y:SCALe:TOP?

Fornisce come risposta il valore del limite superiore dell’ asse Y della traccia visualizzata sul display .

1.1.1.1.2.3 :AUTO

:DISPlay1:WINDow:TRACe:Y:SCALe:AUTO

Effetua l’ autoscale della traccia visualizzata sul display.

1.1.1.1.2.4 :PDIVision <numeric_value>

:DISPlay1:WINDow:TRACe:Y:SCALe:PDIVision

Imposta le divisione dell’ asse Y, definite da un numero intero.

1.1.1.1.2.5 :DIVision <numeric_value>

:DISPlay1:WINDow:TRACe:Y:SCALe:DIVision

Imposta i db-divisioni dell’ asse y. Il parametro è di tipo range con intervallo da 1 a 40.

1.1.2.1 :DATA?

:DISPlay1:WINDow:TEXT:DATA?

Fornisce come risposta i dati numerici associati alla forma d’ onda visualizzata sul display.

1.2.1.1.1 :LABel <numeric_value>

:DISPlay2:WINDow:TRACe:Y:LABel

DISplay1:WINDow 1.2

Imposta l’ unita’ di misura del display. I parametri sono: VRMS, V, DBVRMS, DBVPK, DBM.

1.2.1.1.2.1 :BOTTom?

:DISPlay2:WINDow:TRACe:Y:SCALe:BOTTom?

Fornisce come risposta il valore del limite inferiore dell’ asse Y della traccia visualizzata sul display .

1.2.1.1.2.2 :TOP?

:DISPlay2:WINDow:TRACe:Y:SCALe:TOP?

Fornisce come risposta il valore del limite inferiore dell’ asse Y della traccia visualizzata sul display .

1.2.1.1.2.3 :AUTO

:DISPlay2:WINDow:TRACe:Y:SCALe:AUTO

. Effetua l’ autoscale della traccia visualizzata sul display.

1.2.1.1.2.4 :PDIVision <numeric_value>

:DISPlay2:WINDow:TRACe:Y:SCALe:PDIVision

Imposta le divisioni dell’ asse y definite da un numero

intero.

 

1.2.1.1.2.5 :DIVision <numeric_value>

:DISPlay2:WINDow:TRACe:Y:SCALe:DIVision

Imposta i db-divisioni dell’ asse y. Il parametro è di tipo range con intervallo da 1 a 40.

1.2.2.1 :DATA?

:DISPlay2:WINDow:TEXT:DATA?

Fornisce come risposta i dati numerici associati alla forma d’ onda visualizzata sul display.

DISplay1:WINDow 1.3

SOURce Sottoalbero.
KEYWORD PARAMETER FORM NOTES

:SOURce
:MARKer
:STATe <numeric_value>
:AMPLitude <numeric_value>
:
AMPLitude?
:
FREQuency?
:FREQuency
:DIStorsion
:FUNCtion
:SHAPE <numeric_value>
:FREQuency
:CW <numeric_value>

2.1.1 :STATe <numeric_value>

:SOURce:MARKer:STATe

Aziona il marker di picco. I parametri sono: ON, OFF.

2.1.2 :AMPLitude <numeric_value>

:SOURce:MARKer:AMPLitude

Posiziona il marker principale sul picco dell’ onda se è imposto

il parametro ON. I parametri:ON,OFF

2.1.3 :AMPLitude?

:SOURce:MARKer:AMPLitude?

Restituisce l’ampiezza del marker principale.

SOURce:MARKer 2.1

2.1.4 :FREQuency?

:SOURce:MARKer:FREQuency?

Restituisce la frequenza del marker principale.

2.1.5.1 :DIStorsion

:SOURce:MARKer:FREQuency:DIStorsion

Aziona i marker relativi alla distorsione armonica.

Lo strumento associa un marker ad ogni picco della forma d’ onda visualizzata sul display.

2.2.1 :SHAPE <numeric_value>

:SOURce:FUNCtion:SHAPE

Imposta il tipo di forma d’ onda generata dalla sorgente interna di segnale dello strumento tramite i parametri: RAND, PCH, SIN. Selezionando il parametro RAND viene generato rumore bianco. Il parametro PCH genera un periodic chirp. L’ ultimo parametro, SIN, genera un’ onda sinusoidale.

2.3.1 :CW <numeric_value>

:SOURce:FREQuency:CW

Imposta la frequenza della sinusoide fornita dal generatore interno di segnale tramite un parametro di tipo range espresso in Hz. I valori sono compresi tra:1 e 102400.

SOURce:MARKer 2.2

TRIGger Sottoalbero.
KEYWORD PARAMETER FORM NOTES

:TRIGger
:SEQuence
:DALay1 <numeric_value>
:DALay2 <numeric_value>
:LEVel <numeric_value>
:SLOPe <numeric_value>
:SOURce <numeric_value>

3.1.1 :DALay1 <numeric_value>

TRIGger:SEQuence:DALay1

Imposta il pre-delay per il trigger. Il parametro e’ di tipo range con valori compresi tra –1000 e 1000 espressi in ms.

3.1.2 :DALay2 <numeric_value>

TRIGger:SEQuence:DALay2

Imposta il post-delay per il trigger. I parametro e’ di tipo range con valori compresi tra 0 e 8191 espressi in sec.

3.1.3 :LEVel <numeric_value>

TRIGger:SEQuence:LEVel

Imposta il livello del trigger. Il parametro e’ compreso tra –1 e 1, con risoluzione 0,01 pari all’ 1% dell’ ampiezza della forma d’ onda.

3.1.4 :SLOPe <numeric_value>

TRIGger:SEQuence:SLOPe

Imposta la pendenza del segnale di trigger. Il parametro puo’ assumere il valore POS o NEG.

TRIGger:SEQuence 3.1

3.1.5 :SOURce <numeric_value>

TRIGger:SEQuence:SOURce

Imposta la sorgente di trigger. I parametri assumono i valori:

BUS, FREE, EXT, INT1, INT2, SOUR.

 

TRIGger:SEQuence 3.2

CALculate Sottoalbero.
KEYWORD PARAMETER FORM NOTES

:CALculate
:AVERage
:TYPE <numeric_value>
:COUNt <numeric_value>
:STATe <numeric_value>
:
WINDow <numeric_value>

4.1.1 :TYPE <numeric_value>

:CALculate:AVERage:TYPE

Imposta l' operazione di media nella modalita’ averaging. I parametri sono: RMS, VECT, rispettivamente indicanti la media sui valori efficaci e la media vettoriale.

4.1.2 :COUNt <numeric_value>

:CALculate:AVERage:COUNt

Imposta il numero di medie. Il parametro e’ un intero compreso tra 0 e 100.

4.1.3 :STATe <numeric_value>

CALculate:AVERage:STATe

Attiva o disattiva la modalita’ averaging. Il parametro e’ ON o OFF.

4.2 :WINDow <numeric_value>

:CALculate:WINDow

Seleziona il tipo di finestra. I parametri definiti sono:

HANN,FLAT,UNIF,FORC,EXP.

CALculate:AVERage 4.1

SENSe Sottoalbero.
KEYWORD PARAMETER FORM NOTES

:SENSe
:FREQuency
:SPAN <numeric_value>
:SPAN?
:STARt <numeric_value>
:CENTer <numeric_value>

 

5.1.1 :SPAN <numeric_value>

SENSe:FREQuency:SPAN

Imposta l’ ampiezza del range di frequenza dell’ asse x, lo span.

Il parametro assume valori tra 0,2 e 102400, espressi in Hz

5.1.2 :SPAN?

SENSe:FREQuency:SPAN?

Legge lo span.

 

5.1.3 :STARt <numeric_value>

SENSe:FREQuency:STARt

Imposta il valore della frequenza iniziale dell’ asse x.

Il parametro di tipo range assume valori tra 0 e 115000, espresso in Hz.

5.1.4 :CENTer <numeric_value>

SENSe:FREQuency:CENTer

Imposta il valore della frequenza centrale dell’ asse x .

Il parametro di tipo range assume valori compresi tra 0 e 115000, espresso in Hz

SENSe:FREQuency 5.1

Altri comandi implementati

*OPC?
Richiede lo stato del bit operation complete.

*CLS
Cancella lo schermo.

*RST
Riporta lo strumento nella configurazione iniziale.

CONCLUSIONI

In questo lavoro di tesi si è voluto dare un contributo, non indifferente, all' unificazione del linguaggio di comunicazione tra i svariati dispositivi che la rete Internet permette di collegare. I vantaggi offerti dall' utilizzo di uno standard di comunicazione sono evidenti e sono già stati sottolineati. Tuttavia l' obbiettivo di unificazione del linguaggio è assai arduo, e si complica notevolmente non appena si passa da strumenti con caratteristiche hardware semplici, (come ad esempio i multimetri) a dispositivi costituiti da una circuiteria più complessa, (si pensi ad esempio ad un Analizzatore di Spettro) i quali avranno un set di istruzioni più ampio. Per quest' ultimi strumenti si può procedere in due modi differenti, ognuno dei quali presenta vantaggi e svantaggi:

1) mettere a disposizione dell' utente solamente un numero ristretto di istruzioni SCPI, le più semplici o più ragionevolmente le più importanti. Come conseguenza di tale approccio si sfrutterebbe poco le potenzialità funzionali del dispositivo stesso.

2) definire istruzioni SCPI complesse costituite da una successione di molte parole chiavi o parole chiavi poco usuali, le quali richiedono una notevole conoscenza dello standard . Spesso anzi la traduzione di particolari comandi specifici dello strumento non esiste e si può solamente individuare un comando SCPI avente funzionalità simile e qundi che si presta a delle interpretazioni.

Altro problema non irrilevante nella traduzione sono i parametri del comando.

I parametri di un comando sono fortemente dipendenti dalle caratteristiche elettriche e meccaniche dello strumento, e dalle specifiche del progettista. ( ad esempio due multimetri possono condividere gli stessi comandi ma avere dei fondo scala differenti, di conseguenza i parametri di certi comandi assumeranno un range di valori diversi )

Saranno implementati, per risolvere questa seconda problematica, dei comandi SCPI, in forma di richiesta, che forniranno all' utente le caratteristiche e i parametri utilizzabili.

BIBIOGRAFIA

[1] Peter Aitken, Visual Basic 5, Edizioni Tecniche Nuove, Milano,I Edizione 1997.
[2] SCPI 1997, SCPI Consortium, may 1997 Edition
[3] Manual HP 3478A Digital Multimeter, Hewlett-Packard, September 1987 Editon 2.
[4] Multimetro HP 34401A, Hewlett Packard, 2 Edizione Ottobre 1992
[5] Programmer’ s Guide HP 54600-Series Oscilloscopes, Hewlett Packard, July 1996 Edition 1.
[6] Manual HP 35660A, Hewlett Packard, July 1988 Edition 1
[7] Tutorial Description of the Wewlett-Packard Interface Bus, Hewlett Packard, November 1987

FINE

CURRICULUM ING. MARCELLO GONZATO