儀器編程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;
 }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章