//set up byte swap function for readings transferred from

//E8491A shared memory to the PC

#define SWAP_FLOAT64(rdgs)

\

 

{ unsigned char src[8];

 

\

*((double *)src) =

*((double *)rdgs);

\

((unsigned char *)

(rdgs))[0] = ((unsigned char*) (src))[7]; \

((unsigned char *)

(rdgs))[1] = ((unsigned char*) (src))[6]; \

((unsigned char *)

(rdgs))[2] = ((unsigned char*) (src))[5]; \

((unsigned char *)

(rdgs))[3] = ((unsigned char*) (src))[4]; \

((unsigned char *)

(rdgs))[4] = ((unsigned char*) (src))[3]; \

((unsigned char *)

(rdgs))[5] = ((unsigned char*) (src))[2]; \

((unsigned char *)

(rdgs))[6] = ((unsigned char*) (src))[1]; \

((unsigned char *)

(rdgs))[7] = ((unsigned char*) (src))[0]; \

}

 

 

 

// prototypes

void check(ViSession vi, ViStatus error); void err_handler(ViSession vi, ViStatus err);

void main(void)

{

ViSession vi, defaultRM, fw; ViStatus errStatus, err;

unsigned long start_addr;// starting address of shared memory ViReal64 rdgs[8000];// array for readings from shared memory int i;

ViChar err_message[256];

//open a VXIplug&play device session and reset the multimeter errStatus = hpe1410_init(E1410,0,1,&vi);

if( VI_SUCCESS > errStatus)

{

hpe1410_error_message( vi, errStatus, err_message); printf("Unable to open %s\n", E1410);

printf("hpe1410_init() returned error message %s\n", err_message); return;

}

//open a VISA session to the E8491A

viOpenDefaultRM(&defaultRM); viOpen(defaultRM,E8491, VI_NULL, VI_NULL, &fw);

//get E8491A shared memory base address viGetAttribute(fw, VI_ATTR_MEM_BASE, &start_addr);

//enable multimeter error detection

hpe1410_errorQueryDetect(vi, 1);

//set a 5s timeout period to allow functions to complete errStatus = hpe1410_timeOut(vi, 5000);

check(vi, errStatus);

//configure the multimeter for DCV measurements errStatus = hpe1410_confVoltDc(vi);

check(vi, errStatus);

Chapter 3

VXI Programming Using the IEEE 1394 Serial Bus 51