HPIB vodič-SCPI baziran  HPIB instrument-34401 DMM

Ovo poglavlje ilustrira implementaciju SCPI-a i pokazuje kako se on implementira u praktični instrument, popularni  34401 digitalni multimetar (DMM),znan neslužbeno kao "Alf".

Zbog svoje jednostavnosti i široke funkcionalnosti, Alf je odličan primjer prezentacije SCPI-baziranog instrumenta. Ovo poglavlje prikazuje funkcionalnost DMM-a, i opisuje set SCPI instrukcija, te daje par programskih primjera za praktičnu uporabu.

 

 

34401 pregled

 

34401 DMM ima sljedeće mogućnosti mjerenja:

§  Mjerenje AC i DC napona, u rasponu od 0.1V do 1000V(750 V AC)

§  Mjerenje otpora u rasponu od 100 W do 100 MW

§  Mjerenje AC i DC struja, u rasponu od 10mA(samo DC) do 3A

§  Mjerenje frekvencije i perioda, u rasponu od 3Hz do 300kHZ

§  Ispitivanje ispravnosti dioda

§  Rezolucija prikaza u rasponu od 4.5 do 6.5 znamenki

§  Nekoliko matematičkih funkcija i mogućnost spremanja do 512 očitanja

§  Meni za upravljanje i vakuumski fluorescentni displej

 

 

HPIB i RS-232 sučelja predstavljaju standarde za daljinsku regulaciju i za izravni izlaz na pisač. Izlaz RS-232 se može modificirati tako da  se osigura digitalni izlaz.

Svojstvo Alf-a je SCPI-baziran set instrukcija(sa nekim proširenjima za mogućnosti koja nisu bila uključena u  SCPI standard u vrijeme kad je konstruiran DMM),uz mogućnost da se emulira HP 3478A DMM ili FLUKE 8840A/8842A DMM.

 

34401 se opisuje kao relativno jednostavan,ali s obzirom na širinu svojih mogućnosti treba razmotriti još dosta detalja kao što su:

 

§  Unutarnji ugrađeni sklopovi

§  Matematičke funkcije

§  Okidanje

§  Sistemski povezane operacije

§  Daljinsko konfiguriranje sučelja

§  Kalibracija

§  Uljučivanje i stanje reseta

 

DMM sadrži sljedeće ugrađene sklopove:

§  AC filtar.Možemo izabrati jedan od tri ulazna AC filtra da se optimizira brzina očitanja i točnost na niskim frekvencijama.Sporim filtrima treba 7 sekundi da izvrši očitanje,srednjem filtru treba 1 sekundi,dok brzom filtru  treba 1/10 sekunde da napravi očitanje.

 

Vrsta izabranog filtra sprema se u memoriju.Ako se drugačije ne izabere koristi se srednji filtar sa power-on na *RST(nakon isključenja sadržaj memorije se izgubi).

 

§  Uređaj za mjerenje prekida:kad se vrši to mjerenje,DMM emitira kontinuiran ton ako je izmjereni otpor manji od neke donje granice.Ta granica može zadana u rasponu od 1 do 1000W.Ta vrijednost može biti zadana samo sa upravljačkog panela  .Ne može biti zadana programski

§  Ulazni istosmjerni otpor:tvornički,taj otpor je namješten na 10MW naponska područja da se minimizira šum.Da se smanji utjecaja pogrešaka pri mjerenju,može se taj ulazni otpor namjestiti većim od 10MW  za naponska područja 100mV DC,1V DC i 10V DC

§  Rezolucija:ona se iskazuje u brojevima znamenaka u kojima DMM mjeri ili ih ispisuje.Ona se može namjestiti na 4.5, 5.5 i 6.5 znamenki.Podešavanje DMM na prikaz od 6.5 znamenki osigurava se velika točnost,dok mjerenje na 4.5 znamenki predstavlja najmanju točnost.Tvornički je podešena na točnost od 5.5 znamenki

 

Za mjerenje prekida koristi se rezolucija prikaza od 4.5 znamenki, te također za testiranje ispravnosti dioda.Za AC mjerenja,rezolucija je podešena na 6.5 znamenki,ali će to biti maskirano sa odgovarajućim namještenjem rezolucije

 

Za DC mjerenja i za mjerenje otpora,mjenjanje rezolucije prikaza također se mijenja i vrijeme integracije,tj.vrijeme za koje DMM uzima uzorke signala.Što se viši prikaz koristi potrebno je i više povratnih veza (PLC) da se mjerenje ustabili.Integracijsko vrijeme može biti podešeno programski

 

§  Mogućnost priključenja terminalnih uređaja sa obje strane uređaja tako da se može izvršiti bilo koji set mjerenja.

Mjenjanje aktivnih terminalnih uređaja može biti obavljeno samo sa prednje strane uređaja.To se ne može učiniti programski

 

§  Automatsko namještanje nultog položaja:kad je ono uključeno ,DMM automatski isključuje ulazni signal kod svakog mjernja i vrši podešavanje "nule".Tad ubacuje očitanje nule od prethodnog očitanja.On obavlja uvijek novo očitanje nule čim se promijeni neka funkcija na samom uređaju

 

§  Namještanje mjernog područja:možemo pustiti da DMM automatski odabere mjerno područje ili to možemo učiniti ručno.Mjerni opseg je fiksan za mjerenje kontinuiteta i za mjerenje ispravnosti dioda.Za ostala mjerenja ,rang se prilagođava signalu na ulaznim priključnicama,i autoranging se automatski bira za referntna naponska mjerenja na SENSE terminalima.

 

§  Imamo 5 matematičkih funkcija,od kojih samo jedna može biti aktivna istovremeno.svaka osigurava neku matematičku operaciju nad svakim očitanjem,i zatim se spremaju serije očitanja.Matematičke operacije koriste jedan ili višđe registara,dok ostali registri čuvaju međurezultate tih matematičkih operacija.

 

§  Donja tablica prikazuje dozvoljene kombinacije matematičkih funkcija i mjernih funkcija

 

 

   ___________________________________________________

 

             Null    Min-Max    dB       dBm     Limit  

   ___________________________________________________

 

   DC V        X        X        X        X        X    

   AC V        X        X        X        X        X    

   DC I        X        X                          X    

   AC I        X        X                          X    

   OHMS 2W     X        X                          X    

   OHMS 4W     X        X                          X    

   FREQ        X        X                          X    

   PER         X        X                          X    

   CONT                                                 

   DIODE                                                

   RATIO                X                          X    

   ___________________________________________________

 

 

Samo jedna matematička funkcija može biti aktivna u isto vrijeme,namještanje nove operacije briše staru.Slijedi objašnjenje operacija:

 

§  Min-max operacija sprema minimume i maksimume očitanja uza vrijeme serije mjerenja.DMM tada izračunava srednju vrijednost svih očitanja i sprema broj očitanja od vremena kad je min-max funkcija bila uključena

 

§ U nul ili relativnim mjernjima,svako očitanje je razlika između spremljenje nul vrijednosti i ulaznog signala.Nul vrijednost može biti namještena na bilo koju vrijednost između 0 i +/-120% najvišeg područja za aktivnu funkciju.Može se nul vrijednost auomatski namjestiti sa kontrolne ploče,ili preko SCPI komande,i može biti očitana

 

§  DMM AC mjerenja mogu se izražavati i u dB i biti referencirana na neku staru vrijednost.ta vrijednost  je definirana u dBm,i može biti bilo koja vrijednost između 0 i +/-200dbm.Također može biti zadana sa upravljačkog panela ite programski i biti očitana sa ekrana

 

Ova mjerenja u dBm izračunavaju snagu razvijenu AC signalom na otporu,,referencirano na 1 mW.Može se izabrati 17 različitih vrijednosti otpora,od 50 do 8000 W,tvornički podešeno na 600W

 

§  Testiranje minimuma i maksimuma signala,da se osigura testiranje prolaza ili pada signala.Može se namjestiti donja i gornja granica u bilo kojoj vrijednosti u rasponu od 0 do +/-1205 vrijednosti najvećeg opsega trenutnog područja.Gornja granica mora biti pozitivnija od donje,podešene vrijednosti su 0.DMM može biti programiran da generira zahtjev za  ponovnim mjerenjem u slučaju neuspjelog očitanja.Kratko spojnici unutar DMM-a dopuštaju uporabu serijskog porta da se osigura izlaz pass-fail indikacijskog signala;pin 1 osigurava  "niski" impuls(od 5V DC do 0V,za 2 ms) za uspješan test,dok pin 9 osigurava  "niski" signal za neuspješan test (primjetiti da ova konfiguracija znači da RS-232 se više ne može koristiti za serijsku komunikaciju ).Granice se mogu postaviti sa upravljačkog panela ili programski.

 

§  DMM sustav za okidanje dopušta  da se signali za okidanje generiraju automatski ili ručno,da se izvrši više očitanja tokom jednog okidanja,ili da se ubaci kašnjenje među pojedina očitanja.Normalno DMM vrši jedno očitanje po okidanju,ali se mogu namjestiti i višestruka očitanja po jednom okidanju,čak do 50000.

 

DMM se može okidati sa prednjeg panela koristeći jedno okidanje,vanjsko okidanje ili automatsko okidanje.Jedno okidanje izvršava jedno očitanje svaki put na pritisak tipke "Single" .vanjsko okidanje je kao i pojedinačno okidanje,ali DMM čeka na impuls na ulaz EXTERNAL TRIGGER BNC na stražnjem panelu prije izvršavanja očitanja.Auto okidanje izvršava kontinuirana očitanja što je brže moguće za postojeću konfiguraciju.

Namještanje okidanja podrazumijeva sljedeće korake :

§  DMM se mora namjestiti za mjerenje

§  Izvor triggera mora biti izabran:ili softwerski(HPIB),ili hardwerski iz EXTERNAL TRIGGER terminala ,ili iz unutarnjeg izvora signala za okidanje

§ Na kraju,DMM mora biti stavljen u stanje čekanja za okidanje dok ne dođe signal za okidanje

 

Trebaju se izvršiti sljedeći koraci:

§  Moguće je namjestiti vrstu okidanja sa prednjeg panela.Normalno je podešenje na automatskom okidanju.Ako je aktivno vanjsko okidanje, i ako je u toku mjerenje nadolazeći impuls će utjecati na sljedeće mjerenje

 

Programsko okidanje je dano naredbama *TRG ili sa GET naredbom

§  Normalno DMM uzima jedno očitanje po jednom okiddanju no ono može biti i višestruko od 1 do 50000 po jednom signalu za okidanje,namjestivo sa prednjeg panela ili programski

 

§  Može se ubaciti i kašnjenje  između pojedinih signala za okidanje u rasponu od 0 do 3600 sekundi,namjestivo programski ili sa prednjeg panela

 

Vrijeme namješteno tvornički ovisi o području mjerenja,funkciji,vremenu integracije itd.

 

 

§  Moguće je zadržavanje trenutnog očitanja i prikazivanje te vrijednosti na displeju.to je korisno tamo gdje nismo u mogućnosti postavljanja probe elektroda i da se vidi očitanje u istom trenutku.

 

§  Sustav za okidanje ima sučelje prema van preko dva BNC konektorana stražnjem panelu.EXTERNAL TRIGGER konektor okida očitanje kad je prisutan niski signal(5VDC do 0V) na ulazu.VOLTMETER COMPLETE terminal generira impuls kad je slični "niski signal" prisutan po završenom očitanju

 

Sistemski povezane operacije uključuju sljedeće funkcije

 

§  Isčitavanje memorije:DMM može spremiti do 512 očitanja u internu memoriju.Ta očitanja se mogu pozvati na ekran ili isčitavati programski

§  Također je moguće spremanje do 20 grešaka u memoriju.Najstarija greška se prva isčitava.Ako se javi više od 20 grešaka,javlja se poruka 350,i one se više ne spremaju dok ne obrišemo neke od njih iz memorije.Red grešaka se briše uz visoko stanje na *RST.

 

§  DMM osigurava i samotestiranje gdje se osigurava ispravnost minimalnog seta funkcija.Ono briše samo memoriju sa očitanjima

 

§  Mogućnost isključivanja displeja,sa panela ili programski

 

§  Zvučno upozorenje preko zvučnika

 

§  Odvajanje zarezom,podesivo samo na prednjem panelu,može se također ispitati i programska podrška u sklopovskoj izvedbi

 

§  Može se ispitati i stupanj SCPI revizije

 

Može se napraviti i konfiguracijski set za daljinski DMM  programibilno sučelje.To je nemoguće napraviti programski .

 

Sve ove postavke spremljene su u stalnoj memoriji

 

§  Sučelja za daljinski rad se mogu izabrati između HPIB ili RS-232 porta na prednjem panelu

§  HPIB konfiguracija:DMM adresa može biti između 0 i 31.Tvornički je namještena na 22.Za vrijednost 31 DMM će biti samo u modeu da govori,tj.da šalje podatke na printer

§  RS-232 konfiguracija.mogu se izabrati standardne baud vrijednosti od 300 do 9600 bauda.paritet se može namjestiti na "None"(8 bitni podaci),"Even"(7 bitni podaci),ili "Odd"(6 bitni podaci),tvornička namještenja su 9600 baud-a i even paritet.

§  Izbor programskog jezika:izbor tri seta komandi-SCPI(default),HP3478A,ili FLUKE 8840A.Preko RS-232 možemop operirati samo sa SCPI ,dok ostali podržavaju samo HPIB

 

DMM dopušta da spriječimo neovlaštenja kalibriranja,ili da saznamo broj jedinica vremena otkako je uređaj bio kalibriran :

§  Moguć je unos šifre protiv neovlaštena pristupa.Kalibracijski kod je HP033401

§  Security kod moguće je postaviti programski ili automatski

§  Broj kalibracija moguće je očitati

§  Moguća je pohrana stringa do 40 znakova o samoj kalibraciji,kao datum i ostalo

 

 

 

Programiranje 34401

 

Najlakši način da se pokaže kako se vrši očitanje je preko MEASure? komande.Nema mnogo fleksibilnosti jer DMM daje namještenja za koja misli da su najbolja.Možemo mijenjati samo raspon,funkcije i rezoluciju.Npr. NULL operacija neće raditi.

 

 

   MEASure:<function> <range>, <resolution>

 

Relevantne funkcije uključuju:

 

   VOLTage:DC?               DC voltage.

   VOLTage:DC:RATio?         DC voltage ratio.

   VOLTage:AC?               AC voltage.

   CURRent:DC?               DC current.

   CURRent:AC?               AC current.

   RESistance?               Ohms.

   FRESistance?              4-wire ohms.

   FREQuency?                Frequency count.

   PERiod?                   Period.

   CONTinuity?               Continuity.

   DIODe?                    Diode test.

 

Na primjer:

 

   100 OUTPUT @Dmm;"MEAS:VOLT:DC? 10,0.003" ! DC, 10 V range, 3 mV resolution.

   110 ENTER @Dmm;Volts

 

 

 

Za veću fleksibilnost korist se komanda CONFigure.I tu DMM predlaže najbolje rješenje ali neće izvršiti očitanje,ukoliko želimo promijeniti neke stavke.Očitanje vršimo READ? komandom.Ova komanda stavlja DMM u stanje za okidanje i na taj signal se vrši očitanje i sprema u vanjski međuspremnnik.Ona neće biti spremljena u internoj memoriji Učitanja se unose redom kako stižu,inače se gube.

 

 

Na primjer:

 

   100 OUTPUT @Dmm;"CONF:VOLT:DC 10,0.003" ! DC, 10 V range, 3 mV resolution.

   110 OUTPUT @Dmm;"TRIG:SOUR EXT"         ! Trigger on external source.

   120 OUTPUT @Dmm;"READ?"                 ! Wait for trigger and get value.

   130 ENTER @Dmm;Volts

 

INITiate i FETCH ? komande daju najnižu razinu kontrole.Da se DMM očita ,moramo ga konfigurirati,i staviti u stanje čekanja za okidanje.Kad je DMM okinut i obavi očitanje tada ga sa FETCH? komandom povratimo,i očitanja su spremljena u internoj memoriji.

 

   100 OUTPUT @Dmm;"CONF:VOLT:DC 10,0.003" ! DC, 10 V range, 3 mV resolution.

   110 OUTPUT @Dmm;"TRIG:SOUR EXT"         ! Trigger on external source.

   120 OUTPUT @Dmm;"INIT"                  ! Wait for trigger.

   130 OUTPUT @Dmm;"FETC?"                 ! Get value.

   140 ENTER @Dmm;Volts

 

Ovdje se koristi CONF komanda da se postavi DMM.Također možemo koristit FUNCtion,RANGe,RESolution za komande niske razine da se osigura sljedeći setup:

 

   100 OUTPUT @Dmm;"FUNC:VOLT:DC"          ! DC volts.

   110 OUTPUT @Dmm;"RANG 10"               ! 10 V range.

   120 OUTPUT @Dmm;"RES 0.003"             ! 3 mV resolution.

   130 OUTPUT @Dmm;"TRIG:SOUR EXT"         ! Trigger on external source.

   140 OUTPUT @Dmm;"INIT"                  ! Wait for trigger.

   150 OUTPUT @Dmm;"FETC?"                 ! Get value.

   160 ENTER @Dmm;Volts

 

 

Još ima širok raspon ovakvih funkcija:

 

 

 

   NPLCycles             Postavlja broj PLCa za mjerenje

   FREQuency:APERture    Postavlja širinu vremenskih vrata kod mjerenja perioda     

   PERiod:APERture       Postavlja širinu vremenskih vrata kod mjerenja perioda     

   DETector:BANDwidth    Postavlja frekvenciju filtra za ulazne signale 

   ZERO:AUTO              Omogućava ili onemogućava autozero mod

   INPut:IMPedance:AUTO   Omogućava ili onemogućava mod namještanja ulazne impendancije

 

Ovo su ispitne komande.Postoji još i ROUTe:TERMinals naredba koja ispituje koje su ulazne priključnice teminala slobodne 

 

Ovdje je prikazano pet matematičkih operacija:

 

   CALCulate:FUNCtion NULL (default)

   CALCulate:FUNCtion DB

   CALCulate:FUNCtion DBM

   CALCulate:FUNCtion AVERage

   CALCulate:FUNCtion LIMit

 

 

Možemo ispitati postavke funkcijom CALCulate;FUNCtion?.Postavimo ju aktivnom.

 

 

   CALCulate:STATe ON

 

Matematičke funkcije postavimo neaktivnim sa OFF naredbom,tj. sa CALCulate:STATe?.

Parametri matematičkih funkcija postavimo ovako:

 

 

  CALCulate:NULL:OFFSet

  CALCulate:DB:REFerence   

    CALCulate:DBM:REFerence 

    CALCulate:LIMit:LOWer

    CALCulate:LIMit:UPPer

 

 

Funkcije vraćaju sljedeće vrijednosti:

 

 

 

   CALCulate:AVERage:MINimum?   Gives minimum of min-max operation.

   CALCulate:AVERage:MAXimum?   Gives maximum of min-max operation.

   CALCulate:AVERage:AVERage?   Gives average of min-max operation.

   CALCulate:AVERage:COUNt?     Gives number of values in min-max operation.

 

Sljedeći program pokazuje korištenje komande CONFigure u dBm operacijama:

 

 

 

   10  DIM Ohms(1:5)

   20  ASSIGN @Dmm TO 722

   30  CLEAR 7                            ! Clear HPIB and DMM.

   40  OUTPUT @Dmm;"*RST;*CLS"            ! Reset DMM.

   60  OUTPUT @Dmm;"CALC:DBM:REF 5.0"     ! 50 ohm reference resistance.

   70  OUTPUT @Dmm;"CONF:VOLT:AC 1,0.001" ! Set DMM to 1 amp AC range.

   80  OUTPUT @Dmm;"DET:BAND 200"         ! Select 200 Hz (fast) AC filter.

   90  OUTPUT @Dmm;"TRIG:COUN 5"          ! DMM will accept 5 triggers.

   100 OUTPUT @Dmm;"TRIG:SOUR IMM"        ! Trigger source is IMMediate.

   110 OUTPUT @Dmm;"CALC:FUNC DBM"        ! Select dBm function.

   120 OUTPUT @Dmm;"CALC:STAT ON"         ! Enable math.

   130 OUTPUT @Dmm;"READ?"                ! Get readings, put in output buffer.

   140 ENTER @Dmm; Ohms(*)

   150 PRINT USING "K,1"; Ohms(*)

   160 END

 

 

 

 

Prije su opisani koraci pripreme DMM-a kod okidanja.Sljedeći programski odsječak pokazuje način kontrole sustava za okidanje:

 

 

   INITiate              Set DMM to wait-for-trigger state.

   FETCh?                Get reading from DMM.

   READ?                 Set DMM to wait-for-trigger state, get readings.

   TRIGger:SOURce        Set trigger source.

   TRIGger:DELay         Set trigger delay.

   TRIGger:DELay:AUTO    Enable or disable automatic trigger delay.

   SAMPLe:COUNt          Set number of readings per trigger.

   TRIGger:COUNt         Set number of triggers per reading.

 

 

Sljedeće naredbe su za kontrolu displeja,zvučnih dojava i ispitivanja(query-a):

 

 

   DISPlay               Turn the DMM display on or off.

   DISPlay?              Query the display state.

   DISPlay:TEXT          Display up to 12 characters on the DMM display.

   DISPlay:TEXT?         Query the display text.

   DISPlay:TEXT:CLEar    Clear the message displayed on the front panel.

   SYSTem:BEEPer         Issue a single beep immediately.

   SYSTem:BEEPer:STATe   Disable or enable a front-panel beeper.

   SYSTem:BEEPer:STATe?  Query beeper state.

   SYSTem:ERRor?         Query the DMM's error queue.

   SYSTem:VERsion?       Query the DMM for SCPI version.

   DATA:POINts?          Query the number of readings in the DMM.

   *RST                  Reset the DMM.

   *TST?                 Self-test the DMM.

   *IDN?                 Get DMM ID.

 

 

DMM sadrži i 488.2StatusByte i StandardEvent registre,uz SCPI podatkovni registar

STATUS BYTE implementira 4 status bita: 

§ BIT 3(8)-indicira set bitova u Questionable data registru

§ BIT 4(16)- indicira set bitova u izlaznom redu

§ BIT 5(32)- indicira set bitova u Standard Event registru

§ BIT 6(64)- indicira da DMM ima mogućnost obrade prekida

Ako je aktivan SRQ,tada se čisti SRQ i bit 6

 

Standar Event registar sadrži 6 bitova:

·   BIT 0 (1) --sve naredbe su izvršene,također i *OPC komanda.

·   BIT 2 (4) -- indicira da DMM pokušava pročitati prazni izlazni međuspremnik,da je nova komanda poslana prije nego što je stari upit bio obrađen,ili da su oba međuspremnika,izlazni i ulazni puni

·   BIT 3 (8) -- greška na uređaju

·   BIT 4 (16) -- izvršavana naredba je izazvala grešku

·   BIT 5 (32) --greška u sintaksi naredbe je poslana u DMM

·   BIT 7 (128) -- uključenje uređaja a da još nije event registar očišćen ili pročitan

Event registar čitamo sa *ESR? Naredbom.U njega upisujemo sa *ESE komandom

Questionable registar sadrži 5 bitova:

·   BIT 0 (1) --prekoračenje naponskog područja.

·   BIT 1 (2) -- prekoračenje strujnog područja

·   BIT 9 (512) -- prekoračenje područja za mjerenje otpora

·   BIT 11 (2048) -- čitanje je prešlo donju granicu.

·   BIT 12 (4096) -- čitanje je prešlo gornju granicu.

 

Ovaj registar postavljamo sa  STATus:QUEStionable: EVENT?, a čitamo sa STATus:QUESTionable:ENABle?  .

 

Kalibracija :koliko je puta izvršena,postavljanje kalibracijskog koda ,i informacije o kalibraciji

 

 

   CALibration?                Perform a calibration.   

CALibration:COUNt?          Get number of calibrations.   

CALibration:SECure:CODE     Set calibration security code.   

CALibration:SECure:STATe    Unsecure or secure for calibration.   

CALibration:SECure:STATe?   Query security state.   CALibration:STRing          

Store calibration data.   CALibration:STRing?         Read calibration data.   

CALibration:VALue           Set value of calibration reference.   

CALibration:VALue?          Read value of calibration reference.

 

 

Ovdje su još dane samo RS-232 naredbe,koje HPIB ne podržava:

 

   SYSTem:LOCal                Put DMM into local state.

   SYSTem:REMote               Put DMM into remote operation.

   SYSTem:RWLock               Put DMM into local lockout.

 

RS-232 komunikacija neće radit ako naredbu SYSTem:REMote pošaljemo poslije reset-a.

 

 

Sljedeći HP BASIC program prezentira elementarno programiranje za 34401.Koristi jednostavan tekst-input meni da se pročitaju vrijednosti napona i struja,otpora,frekvencije,izvrši neki test,očisti displej i  izađe iz programa.

 

        

   10    DIM S$[100],P$[100],M$[5],R$[5] ! String, prompt, mode, reply vars.

   20    REAL T                          ! Used for timeout tracking.

   30    INTEGER Sts                     ! Stores serial poll result.

   40    CLEAR SCREEN

   50    !

   60    ON TIMEOUT 7,3 GOSUB Timetrap   ! Set up timeout trap.

   70    ASSIGN @Dmm TO 722              ! Open path to DMM.

   80    ON ERROR GOSUB Errtrap          ! Set up error trap.

   90    !

   100   M$="DC"                         ! Define DC or AC operations.

   110   LOOP

   120     P$="COMMAND:  (M)ode="&M$& / (V)olts / (A)mps"

   130     DISP P$&" / (O)hms / (F)req / (C)ls / (S)ystem / (Q)uit";

   140     INPUT R$                      ! Get reply to prompt.

   150     IF R$="" THEN R$="Z"          ! Check for empty input.

   160     R$=UPC$(R$[1,1])              ! Get first character as uppercase.

   170   ! 

   180     SELECT R$                     ! Test character:

   190   ! 

   200     CASE "M"                      ! Mode:  Toggle mode between DC & AC.

   210       IF M$="DC" THEN

   220         M$="AC"

   230       ELSE

   240         M$="DC"

   250       END IF

   260   !   

   270     CASE "V"                      ! Volts:  Get AC or DC volts.

   280       DISP "Getting volts ... "

   290       IF M$="DC" THEN

   300         OUTPUT @Dmm;"MEAS:VOLT:DC?"

   310       ELSE

   320         OUTPUT @Dmm;"MEAS:VOLT:AC?"

   330       END IF

   340       ENTER @Dmm;S$

   350       PRINT "Voltage value:    ";S$

   360   !   

   370     CASE "A"                      ! Amps:  Get AC or DC amps.

   380       DISP "Getting amps ... "

   390       IF M$="DC" THEN

   400         OUTPUT @Dmm;"MEAS:CURR:DC?"

   410       ELSE

   420         OUTPUT @Dmm;"MEAS:CURR:AC?"

   430       END IF

   440       ENTER @Dmm;S$

   450       PRINT "Current value:    ";S$

   460   !   

   470     CASE "O"                      ! Ohms:  Get 2-wire resistance.

   480       DISP "Getting resistance ... "

   490       OUTPUT @Dmm;"MEAS:RES?"

   500       ENTER @Dmm;S$

   510       PRINT "Ohms value:       ";S$

   520   !   

   530     CASE "F"                      ! Freq:  Get frequency.

   540       DISP "Getting frequency ... "

   550       OUTPUT @Dmm;"MEAS:FREQ?"

   560       ENTER @Dmm;S$

   570       PRINT "Frequency value:  ";S$

   580   !

   590     CASE "C"                      ! Cls:  Clear display.

   600       CLEAR SCREEN

   610   !

   620     CASE "S"                      ! System:  Do system functions.

   630       GOSUB System

   640   !

   650     CASE "Q"                      ! Quit program.

   660       DISP "Done!"

   670       STOP

   680   !

   690     CASE ELSE                     ! Bogus input.

   700       INPUT "ERROR:  Bad command.  Press enter to continue.",R$

   710   !

   720     END SELECT

   730   END LOOP

   740   !

   750 System: !                           Perform system commands.

   760   LOOP

   770     INPUT "COMMAND:  (C)lear / (I)d / (T)est / (E)rror / (R)eturn",R$

   780     IF R$="" THEN R$="Z"          ! Test for empty input.

   790     R$=UPC$(R$[1,1])              ! Get first character as uppercase.

   800   !

   810     SELECT R$                     ! Test character:

   820   !

   830     CASE "C"                      ! Clear DMM.

   840       DISP "Clearing DMM ... "

   850       CLEAR @Dmm

   860       OUTPUT @Dmm;"*RST;*CLS"

   870       PRINT "Reset complete!"

   880   !  

   890     CASE "I"                      ! Get ID string.

   900       DISP "Getting ID ... "

   910       OUTPUT @Dmm;"*IDN?"

   920       ENTER @Dmm;S$

   930       PRINT "Dmm ID string: ";S$

   940   !  

   950     CASE "T"                      ! Self-test DMM.

   960       DISP "Testing ... "

   970       OUTPUT @Dmm;"*CLS;*ESE 1;*OPC?" ! Flag OPC when test over.

   980       ENTER @Dmm;S$

   990       OUTPUT @Dmm;"*TST?;*OPC"    ! Test, flag OPC.

   1000      T=TIMEDATE                  ! Get initial time.

   1010      LOOP

   1020        Sts=SPOLL(@Dmm)           ! Spoll for ESB (=OPC) bit.

   1030      EXIT IF BIT(Sts,5)=1

   1040      EXIT IF TIMEDATE-T>30       ! Keep checking for 30 seconds.

   1050      END LOOP

   1060      IF BIT(Sts,5)=1 THEN     

   1070        ENTER @Dmm;S$

   1080        PRINT "Test status: ";S$

   1090      ELSE

   1100        PRINT "Test timed out!"

   1110      END IF

   1120  !  

   1130    CASE "E"                      ! Get error status.

   1140      DISP "Getting error status ... "

   1150      OUTPUT @Dmm;"SYST:ERR?"

   1160      ENTER @Dmm;S$

   1170      PRINT "Error status: ";S$

   1180  !

   1190    CASE "R"                      ! Return to main.

   1200      RETURN

   1210  !  

   1220    CASE ELSE                     ! Bogus input.

   1230      INPUT "ERROR:  Bad command.  Press enter to continue.",R$

   1240  !  

   1250    END SELECT

   1260  !

   1270  END LOOP

   1280  RETURN

   1290  !

   1300 Timetrap: !                        Trap timeout error.

   1310  INPUT "ERROR:  Timeout -- press Enter to continue.",R$

   1320  ERROR RETURN

   1330  !

   1340 Errtrap: !                         Trap error.

   1350  PRINT ERRM$                     ! Print error string.

   1360  INPUT "ERROR:  Press Enter to continue.",R$

   1370  ERROR RETURN

   1380  !

   1390  END