📄 hp3478a.c
字号:
/*****************************************************************************/
/* Copyright 1993 National Instruments Corporatation. All rights reserved. */
/*****************************************************************************/
#include <utility.h>
#include <gpib.h>
#include <formatio.h>
#include "hp3478a.h"
/* = INTERNAL FUNCTIONS ==================================================== */
int hp3478a_read_data (char *, int);
int hp3478a_write_data (char *, int);
int hp3478a_device_closed (void);
int hp3478a_invalid_integer_range (int, int, int, int);
/* = HP3478A Multimeter ==================================================== */
/* LabWindows 1.2 Instrument Driver */
/* Original Release: June 1988 */
/* By: Ash Razdan */
/* Originally written in C */
/* */
/* Modification History: Changed the GPIB Library calls so that they check */
/* for the error bit being set to indicate an error */
/* (& 0x8000) instead of checking for a negative */
/* return value. */
/* */
/* Modification Date: April 20, 1994 */
/* */
/* Modified by: JRO, National Instruments, Austin, Texas */
/* Phone (800) 433-3488 Fax (512) 794-5678 */
/* */
/* June 1996: Modified for MDLL compatibility. */
/* Modified by: TKN, National Instruments */
/* */
/* */
/* ========================================================================= */
/* = INTERNAL DATA ========================================================= */
static int bd;
static int trig_mode;
static char cmd[50];
int hp3478a_err = 0;
/* ========================================================================= */
void hp3478a_init (int addr)
{
if (hp3478a_invalid_integer_range (addr, 0, 30, -1) != 0)
return;
if (bd <= 0) {
bd = OpenDev ("", "hp3478a");
if (bd <= 0) {
hp3478a_err = 220;
return;
}
}
if (ibpad (bd, addr) & 0x8000) {
hp3478a_err = 233;
return;
}
if (ibclr (bd) & 0x8000) {
hp3478a_err = 235;
return;
}
if (hp3478a_write_data ("F1RAT1", 6) != 0)
return;
trig_mode = 0;
hp3478a_err = 0;
}
/* ========================================================================= */
void hp3478a_close (void)
{
if (hp3478a_device_closed () != 0)
return;
if (CloseDev (bd) < 0)
hp3478a_err = 221;
else
hp3478a_err = 0;
bd = 0;
}
/* ========================================================================= */
void hp3478a_config (int fun, int range, int trigger)
{
if (hp3478a_device_closed () != 0)
return;
if (hp3478a_invalid_integer_range (fun, 0, 7, -1) != 0)
return;
if (hp3478a_invalid_integer_range (range, -3, 7, -2) != 0)
return;
if (hp3478a_invalid_integer_range (trigger, 1, 5, -3) != 0)
return;
if (trigger == 1)
trig_mode = 0;
else
trig_mode = 1;
if (range == -3)
Fmt (cmd, "%s<F%d[b4]RAT%d[b4]", fun, trigger);
else
Fmt (cmd, "%s<F%d[b4]R%d[b4]T%d[b4]", fun, range, trigger);
if (hp3478a_write_data (cmd, NumFmtdBytes ()) != 0)
return;
hp3478a_err = 0;
}
/* ========================================================================= */
void hp3478a_measure (double *reading)
{
if (hp3478a_device_closed () != 0)
return;
if (trig_mode == 1)
if (ibtrg (bd) & 0x8000) {
hp3478a_err = 235;
return;
}
if (hp3478a_read_data (cmd, 13) != 0)
return;
Scan (cmd, "%s>%f", reading);
hp3478a_err = 0;
}
/* ========================= HP 3478A Multimeter =========================== */
/* ========================================================================= */
void hp3478a_config_and_measure (int fun, int range, int trigger, double *reading)
{
hp3478a_config (fun, range, trigger);
if (!hp3478a_err)
hp3478a_measure (reading);
}
/* ========================================================================= */
void hp3478a_setup (int autozero, int display_fun, char message[])
{
if (hp3478a_device_closed () != 0)
return;
if (hp3478a_invalid_integer_range (autozero, 0, 1, -1) != 0)
return;
if (hp3478a_invalid_integer_range (display_fun, 1, 2, -2) != 0)
return;
switch (display_fun) {
case 1:
Fmt (cmd, "%s<Z%d[b4]D1", autozero);
break;
case 2:
Fmt (cmd, "Z%d[b4]D2%s", autozero, message);
Fmt (cmd, "%s<%s\n", cmd);
break;
}
if (hp3478a_write_data (cmd, NumFmtdBytes ()) != 0)
return;
hp3478a_err = 0;
}
/* ========================================================================= */
int hp3478a_read_data (char *cmd, int cnt)
{
if (ibrd (bd, cmd, (long)cnt) & 0x8000)
hp3478a_err = 231;
else
hp3478a_err = 0;
return hp3478a_err;
}
/* ========================================================================= */
int hp3478a_write_data (char *cmd, int cnt)
{
if (ibwrt (bd, cmd, (long)cnt) & 0x8000)
hp3478a_err = 230;
else
hp3478a_err = 0;
return hp3478a_err;
}
/* ========================================================================= */
int hp3478a_device_closed (void)
{
if (bd <= 0) {
hp3478a_err = 232;
return 1;
}
return 0;
}
/* ========================================================================= */
int hp3478a_invalid_integer_range (int n, int min, int max, int err_code)
{
if (n < min || n > max) {
hp3478a_err = err_code;
return 1;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -