//******************************************************************* //* * //* Rutiny riadiacich prikazov pre analyzator * //* (c) 2004, MPsoft * //* Measrue.cpp * //* 25. novembra 2004 * //* * //* Ukážka plne komentovaného zdrojového textu * //* * //******************************************************************* #include #include "CmnHdr.H" #include #include "resource.h" #include "ccerr.h" #include "ismerr.h" #include "ism.h" #include #include #include #include #include #include "animbox.h" #include "x76f.h" #include #include "protpoi.h" #include "ccard.h" #include "audit.h" #define FD_CC_SHELL // vylucenie chybovych hlaseni ISM modulu #include "classapi.h" #include "ni488.h" #include "chamel.h" #define LAYOUT_CHECK_TIME 2000 // perioda dalsieho testu zostavy extern GetToOffline(); extern BOOL AnalyzerWrite(LPSTR SendBuffer); extern BOOL AnalyzerRead(LPSTR ReadBuffer); BOOL AnalyzerSetupStatusReg(); BOOL AnalyzerSetupInstrument(); BOOL AnalyzerMarkerSearch(); //*** Test komplexneho programovania analyzatora *** BOOL TestMeasure4(HWND hwndDlg) { BOOL suc; KillTimer((HWND)hwndDlg, TIMER1); // zrusenie casovaca suc = AnalyzerWrite("*CLS"); // reset status registrov suc = AnalyzerWrite("*RST"); // reset zariadeni (prozor, nastavuje frekvenciu na 20 GHz s span 40 GHz) suc = AnalyzerMarkerSearch(); GetToOffline(); SetTimer((HWND)hwndDlg, TIMER1, LAYOUT_CHECK_TIME, NULL); // nastavenie casovaca return TRUE; } //*** Nastavenia IEC/IEEE Bus Status Registra *** BOOL AnalyzerSetupStatusReg() { BOOL suc; // --------- IEEE 488.2 status register ------------------------------------------- suc = AnalyzerWrite("*CLS"); // Reset Status Registra if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("*SRE 168"); // Enable service requestu // pre STAT:OPER-,STAT:QUES- a ESR registrov if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("*ESE 61"); // nastavenie Event Enable bitu pre: // Operation Complete // Command-, Execution-,Device // Dependent- and Query Error if(!suc) // ak je chyba return suc; // --------- SCPI status register ------------------------------------------------- suc = AnalyzerWrite("STAT:OPER:ENAB 0"); // Disable OPERation Status Registra if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("STAT:QUES:ENAB 0"); // Disable Questionable Status Registra return suc; } //*** Default nastavenia pre merania *** BOOL AnalyzerSetupInstrument() { BOOL suc; // -------------------- FSP default nastavenia ------------------------------------- suc = AnalyzerSetupStatusReg(); // nastavenie status registrov if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("*RST"); // reset pristroja if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("SYST:DISP:UPD ON"); // ON: display zapnuty, OFF: vypnuty(vyssi vykon) if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("DISP:FORM SINGle"); // plna obrazovka if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("DISP:WIND1:SEL"); // aktivna obrazovka A if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("INIT:CONT OFF"); // single sweep operacie if(!suc) // ak je chyba return suc; // --------- Nastavenie frekvencie ------------------------------------------------- suc = AnalyzerWrite("FREQUENCY:CENTER 100MHz"); // stredna frekvencia if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("FREQ:SPAN 1 MHz"); // meraci rozsah if(!suc) // ak je chyba return suc; // --------- nastavenie urovne ----------------------------------------------------- suc = AnalyzerWrite("DISP:WIND:TRAC:Y:RLEV -20dBm"); // referencna uroven if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("INP:ATT 10dB"); // vstupny delic (*) if(!suc) // ak je chyba return suc; // --------- skala Y suradnice------------------------------------------------------ suc = AnalyzerWrite("DISP:WIND:TRAC:Y:SPAC LOG"); // Log uroven suradnic if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("DISP:WIND:TRAC:Y:SCAL 100dB"); // rozsah urovne if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("DISP:WIND:TRAC:Y:SCAL:MODE ABS"); // absolutne skalovanie if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("CALC:UNIT:POW DBM"); // jednotka Y suradnice if(!suc) // ak je chyba return suc; // --------- nastavenia trasovania a detektora ------------------------------------- suc = AnalyzerWrite("DISP:WIND:TRAC1:MODE AVER"); // Trace1 priemer if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("AVER:TYPE VID"); // Average video mod; "LIN" pre linear if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("SWE:COUN 10"); // pocet rozmietani if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("DISP:WIND:TRAC2:STAT OFF"); // Trace2 blank if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("DISP:WIND:TRAC3:STAT OFF"); // Trace3 blank if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("CALC:MATH:STAT OFF"); // trasovacia matematika vypnuta if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("DETECTOR1 RMS"); // detektor Trace1 (*) if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("DET2:AUTO ON"); // detektor Trace2 (*) if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("DET3:AUTO ON"); // detektor Trace3 (*) if(!suc) // ak je chyba return suc; // --------- sirka pasma a rozmietaci cas ------------------------------------------ suc = AnalyzerWrite("BAND:RES 100KHz"); // rozlisenie BW (*) if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("BAND:VID 1MHz"); // sirka videa (*) if(!suc) // ak je chyba return suc; suc = AnalyzerWrite("SWE:TIM 100ms"); // rozmietaci cas (*) return suc; } //*** Pouzitie markera a delta markera *** // Marker Search funkcie, limitacia hladania rozsahu // Tato ukazka je zalozena na AM-modulovanom signali 100 MHz s nasledujucou charakteristikou: // uroven nosneho signalu: -30 dBm // AF frekvincia: 100 kHz // hlbka modulacie: 50 % // Marker 1 a delta marker 2 su nastavene jeden po druhom na najvyssie maximum // meracej krivky a potom su citane frekvencia a uroven. Default nastavenia // FSP su pouzite v rutine (SetupInstrument). BOOL AnalyzerMarkerSearch() { BOOL suc; char result[100]; suc = AnalyzerSetupInstrument(); // default nastavenia // --------- Hladanie spicky bez hladacieho limitu -------------------------------- suc = AnalyzerWrite("INIT:CONT OFF"); // prepnutie na single sweep suc = AnalyzerWrite("CALC:MARK:PEXC 0DB"); // definicia hladania spicky suc = AnalyzerWrite("CALC:MARK:STAT ON"); // zapnutie markera 1 suc = AnalyzerWrite("CALC:MARK:TRAC 1"); // oznacenie markera 1 na stopu 1 suc = AnalyzerWrite("INIT;*WAI"); // vykonanie sweep operacie so synchronizaciou suc = AnalyzerWrite("CALC:MARK:MAX;X?;Y?"); // citanie hodnot markera suc = AnalyzerRead(result); // frekvencia a uroven return suc; }