⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hp3478a.c

📁 用于惠普3478a万用表的编程驱动
💻 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 + -