仪器编程VISA

 

extern "C"
{
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "visa.h"
 
 ViSession vi2;
 
 //这两个函数由示波器和万用表公用
 /******************************************************************************
 打开资源管理器,在VISA仪器控制标准中,资源管理器是用来管理仪器的通道,每次控制仪器都需要打开资源管理器,
 一个资源管理器可以控制多台不同的仪器设备,调用成功返回true,不成功返回false。
 ******************************************************************************/
 bool open_RM()
 {
  ViStatus err_msg;
  err_msg=viOpenDefaultRM(&defaultRM);
  if(err_msg!=0)
  {//AfxMessageBox("Unable to Open Resource Manager;!");
   return false;
  }
  return true;
 }
 /******************************************************************************
 关闭打开的资源管理器,与open_RM成对使用,无参数,调用成功返回true,不成功返回false。
 ******************************************************************************/
 bool close_RM()
 {
  ViStatus err_msg;
  err_msg=viClose(defaultRM);
  if(err_msg!=0)
  {//AfxMessageBox("Unable to Open Resource Manager;!");
   return false;
  }
  return true;
 }
 
 /******************************************************************************
 打开仪器,参数为字符串数组,指定设备地址。调用成功返回true,不成功返回false。
 ******************************************************************************/
 bool open_INST_Multi(char addr[])
 {
  ViStatus err_msg;
  err_msg=viOpen(defaultRM, addr, VI_NULL,VI_NULL, &vi2);
  if(err_msg!=0)
  {//AfxMessageBox("Unable to Open device;!");
   return false;
  }
  return true;
 }
 
 /******************************************************************************
 关闭打开的仪器,与open_INST成对使用,无参数,调用成功返回true,不成功返回false。
 ******************************************************************************/
 bool close_INST_Multi()
 {
  ViStatus err_msg;
  err_msg=viClose(vi2);
  if(err_msg!=0)
  {//AfxMessageBox("Unable to Open device;!");
   return false;
  }
  return true;
 }

 /***********************************[ measure_dc_voltage]*************************
 # * Description : 万用表测直流电压
 # * Arguments   : 输出电压值voltage。
 # * Returns     : 返回错误ID号err_msg。0表示成功,其他表示错误。
 # * Notes       :
 # * Example     :
 #*****************************************************************************/
 ViStatus measure_dc_voltage(double *voltage)
 {
  ViStatus err_msg;
  err_msg=viPrintf(vi2, ":CONF:VOLT:DC 100,0.00002\n");   //MODIFY: 设置量程,避免万用表自动模式继电器不断切换,设置2PLC,提高测试精度
     err_msg=viQueryf(vi2, ":READ?\n","%lf",voltage);
  *voltage = fabs(*voltage);
  //double  dVoltage;   //与上面等价
  //err_msg=viQueryf(vi2, ":READ?\n","%lf",&dVoltage); 
  //*voltage = fabs(dVoltage);
  return err_msg;
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值