Fluke user manual 2620A/2625A, Figure E-3. Example

Models: 2625A 2620A

1 197
Download 197 pages 4.31 Kb
Page 186
Image 186

2620A/2625A

Users Manual

/* Globals

convert() uses for destination

*/

int timestamp[6];

/* Scan timestamp

*/

int misc[3];

/* Temperature units, measurement rate, digital I/O */

float values[22];

/* Measurement values */

extern int

isnan();

/* Floating point

value is NaN (not a number) */

extern int

isinf();

/* Floating point

value is Inf (infinity) */

/*

-* main(): LOG_BIN? query response example program

**

**Converts a hard-coded LOG_BIN? response string into usable data.

*/

main()

 

 

 

{

 

 

 

extern int decode();

/* ASCII to binary decoding */

 

extern void convert();

/* Convert Hydra binary to usable types */

 

/*

Canned response for three channels: channel 1 is OTC, channel 5 is */

/*

OL and channel 10 is 1.0; remaining encoded data described below

*/

/*

(note that you can not determine the channel number, measurement

*/

/*

units, or measurement range, from this string; you must keep track */

/*

of that elsewhere)

 

*/

char *log_bin_response = "42@Y40BA00oo000007o0001oP000?h000";

/* Place to temporarily store raw data; 100 bytes is more than enough */

/* for any LOG_BIN? response string*/ unsigned char raw_data[100];

/* Decode string into raw data, then convert raw data into usable data */ convert(raw_data, decode(raw_data, log_bin_response));

/* Above global variables now usable; check example LOG_BIN? data */

 

/* against expected values

 

 

*/

 

if ((timestamp[0]

==

10) &&

/*

Hours

*/

 

(timestamp[1]

==

24) &&

/*

Minutes

*/

 

(timestamp[2]

==

29) &&

/*

Seconds

*/

 

(timestamp[3]

==

10) &&

/*

Month

*/

 

(timestamp[4]

==

4) &&

/*

Day

*/

 

(timestamp[5]

==

91) &&

/*

Year

*/

 

(misc[0]

==

0) &&

/*

Temp units and rate

*/

 

(misc[1]

==

15) &&

/*

Alarm outputs

*/

 

(misc[2]

==

255) &&

/*

Digital I/O

*/

 

(values[0]

== 0.0) &&

/*

Totalizer

*/

 

isnan(values[1])

&&

/*

Channel 1 data

*/

 

isinf(values[2])

&&

/*

Channel 5 data

*/

 

(values[3]

==

1.0)) {

/*

Channel 10 data

*/

 

printf("Conversion worked\n");

 

 

 

 

}

 

 

 

 

 

 

else {

 

 

 

 

 

 

printf("ERROR: conversion did not succeed!\n");

 

 

}

 

 

 

 

 

 

exit(0);

 

 

 

 

 

 

}

 

 

 

 

 

 

/* If your math library supplies alternatives to isnan() or isinf(), */

 

/* use them instead!

 

 

 

 

*/

 

int

 

 

 

 

 

 

isnan(f)

 

 

 

 

 

 

float f;

 

 

 

 

 

 

{

 

 

 

 

 

 

/* This is not portable, or completely

accurate (since NaN

mantissa

*/

/* must only be non-zero, and the sign

bit can be set), but this works */

/* for NaN values

returned by Hydra

 

 

 

*/

/* Compiler was free to promote to double */ float ff = f;

return ((*(unsigned long *)&ff) == 0x7fc00000L);

}

int isinf(f)

float f;

{

/* Again, this is not portable, but this time it is accurate */

/* Compiler was free to promote to double */ float ff = f;

return ((*(unsigned long *)&ff) == 0x7f800000L) ((*(unsigned long *)&ff) == 0xff800000L);

}

Figure E-3. Example

E-6

Page 186
Image 186
Fluke user manual 2620A/2625A, Figure E-3. Example