Hi,
I'm an electronics student working for a electronic filters company over the summer programming.
I'm currently trying to writing a program in C for the PNA-L N5230C; that will set the start & stop frequency, set the number of sweep points, perform a single sweep and then get the result of sweep.
Everything is going well until I want to get the data from the Analyzer, as the text file made that should have the sweep data in doesn't have any.
I've looked Google to try and find a solution but not had much luck. I'm connecting to the analyzer via a USB B.
Any help would be much appreciated. Thanks.
#include <math.h> #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <visa.h> #define PROG "AgilentTest.c\0" #define V "0.02\0" char pna[26][6] = { "pna1", "pna2", "pna3", "pna4", "pna5", "pna6", "pna7", "pna8", "pna9", "pna10", "pna11", "pna12", "pna13", "pna14", "pna15", "pna16", "pna17", "pna18", "pna19", "pna20", "pna21", "pna22", "pna23", "pna24", "pna25" }; int main( void ) { int h1 = 0; ViSession defaultRM, vi; ViStatus viStatus = 0; char buff[256] = {0}; ViChar _VI_FAR cResult[2000] = {0}; FILE *fTraceFile; static ViChar *cToken; int iNum = 0, lCount = 0; int iSwpPnts = 401; int addr = 0; double startF = 1e9, stopF = 5.2e9; int count1 = 0; /*Welcome statements*/ printf("\n\nAgilent PNA test program %s %s \n\n", PROG, V); printf("----------------------------------------------------\n"); printf("Do not use for actual measurements\nThis program is for testing\n\n"); printf("Press any key to connect to an analyzer\n"); h1 = getch(); /*Special Skip Statement*/ if(h1 == 104) { printf("Please enter an address:\n"); scanf ("%d",&addr); viStatus = viOpenDefaultRM(&defaultRM); viStatus = viOpen(defaultRM, pna[addr] ,VI_NULL,VI_NULL, &vi); if(viStatus) { system("CLS"); printf("Could not make a conection at this addr\n"); getch(); exit(1); } printf("\n\n\n\tSkipping search Connection as addr %d => %s \n\n\n\n",addr, pna[addr]); goto exit1; } /*Loop through ID strings to conect the analyzer*/ for(addr = 0; addr < 25; addr++) { printf("addr = %d\n", addr ); printf("Pna = %s\n", pna[addr] ); /*Attempt to connect to analyzer*/ viStatus = viOpenDefaultRM(&defaultRM); viStatus = viOpen(defaultRM, pna[addr] ,VI_NULL,VI_NULL, &vi); /*check opening session sucess*/ if(viStatus) { /*If there are still more ID strings to check reset viStatus*/ if( addr < 24) viStatus = 0; /*If all ID strings have been checked*/ else { system("CLS"); printf("Could not open a session to the device at any location, last check was at:\n\n\t%s\n\n", pna[addr]); printf("Press any key to exit program\n"); getch(); viClose(vi); viClose(defaultRM); /*exit 1 => failure*/ exit(1); } } else goto exit1; } exit1: system("CLS"); /*Turn off automatic sweeps*/ printf("continuous sweeps are off\n"); viPrintf(vi, "INIT:CONT OFF \n"); /*Set up the analyser with values*/ printf("Setting strat frequancy\n"); viPrintf(vi, "SENS:FREQ:START %f\n", startF); printf("Setting stop frequancy\n"); viPrintf(vi, "SENS:FREQ:STOP %f\n", stopF); printf("Setting the number of points in a sweep\n"); viPrintf(vi,"SENSe1:SWEep:POIN %d\n", iSwpPnts); /*Display Off*/ /*Should help increase time it takes to complete sweep*/ viPrintf(vi, "DISP:ENAB OFF\n"); /*Set analyzer trace data format to ASCII Format*/ viPrintf(vi,"FORM:DATA ASC \n"); /*Preform one sweep*/ printf("Running a single sweep\n"); viPrintf(vi, "SENS:SWE:MODE SINGle\n*OPC?\n"); /*Get the data frome trace1*/ viQueryf(vi,"%s\n", "%#t","TRAC:DATA? TRACE1" , &iNum , cResult); cToken = strtok(cResult,","); fTraceFile=fopen("SweepReadings.txt","w"); while (cToken != NULL) { lCount++; cToken =strtok(NULL,","); if (lCount != iSwpPnts) fprintf(fTraceFile,"\tAmplitude of point[%d] = %s dBm\n",lCount+1, cToken); } fprintf(fTraceFile,"\nThe Total trace data points of the spectrum are :[%d] \n\n",lCount); fclose(fTraceFile); printf("Get data finished, press any key to disconnect from the analyzer\n"); getch(); /*Turn the display on, reset the analyzer and close the session*/ viPrintf(vi, "DISP:ENAB ON\n"); viPrintf(vi, "INIT:CONT ON\n"); viPrintf(vi, "*RST\n"); viPrintf(vi, "HCOPY:FILE PNATempImage.png \n"); printf("Closing the session\n"); viClose(vi); viClose(defaultRM); return 0; }