visa怎麼調用dll控制儀器
① 關於可編程儀器的VISA和SCPI
SCPI是程式控制儀器來標准命令,它是對器源件的消息進行了標准化,也就是,只要做儀器器件,你就得用SCPI,相當於匯編語言命令(不一定恰當),VISA提供一些可以直接操作硬體的函數,它是以DLL或Lib形式提供,在編程時必須包括visa.h和visa32.h,你直接使用的是VISA庫中的函數,SCPI命令又是通過VISA函數Viprintf函數發送出去的,書上講的太抽象了,不理解。
② 如何在VC編譯環境下利用VISA庫函數實現動態設置GPIB埠號和檢索所連接儀器的埠號
ViRsrc rsrcName,這是第二個參數的格式,可以開辟一個buf來儲存這個數據,然後當參數進行傳遞
③ 如何使用VS2010調用visa進行程式控制
一、首先在計算機上安裝NI提供的驅動庫,然後在計算機上找到相應的庫文件和頭文件
文件目錄:C:Program Files (x86)IVI FoundationVISAWinNT
其中lib文件在: libmscvisa32.lib 和ivi.lib
頭文件在: include
二、添加庫到工程
博主是直接將庫文件和對應的頭文件復制到了工程目錄下,然後在工程中添加了對lib庫的引用,vs2010中引用visa庫操作如下,
1 菜單 項目—> 屬性—>配置屬性–>鏈接器—->輸入—附加依賴項, 加入庫名,如: visa32.lib;
或是在cpp源文件中用代碼#pragma comment(lib,」visa32.lib」)代替. 此時再編譯會提示錯誤:fatal
error LNK1104: 無法打開文件「my_API.lib」 , 原因應該是編譯器不知道去哪裡找我們的這個庫,下面就來解決
2 然後給項目添加庫文件路徑,添加附加庫路徑:
「項目—>屬性—>配置屬性—>連接器–>常規–>附加庫目錄」 點右邊的向下箭頭,這里添加 我們的庫所在的路徑.
F:my_programmeiyongPPPP_Decode_ETIM;或 ../../PPPP_Decode_ETIM,
而且經試驗測試是以項目文件.vcxproj 所在目錄為當前目錄,當前以當前目錄這個方式設置更好了.這樣就好了.
三、在工程中使用visa庫
下面的代碼中是在VS2010中通過調用visa庫發送*IDN?來查詢儀器的ID
#include"visa/include/visa.h"
#include"visa/include/ivi.h"
#pragmacomment(lib,"visa32.lib")
#pragmacomment(lib,"ivi.lib")
/*----------------------------------------------------------------------------*/
/*宏定義聲明*/
/*----------------------------------------------------------------------------*/
#defineMAX_SCPI_LENGTH255//最大的SCPI命令
#defineDEFAULT_TIMEOUT5000//超時:5000ms
intmain(void)
{
ViStatusnReturnStatus=0;//保存返回數值
ViSessionrmSession=0,pnInstrHandle;
ViUInt32retCnt=0;
ViBytewrtBuf[MAX_SCPI_LENGTH];//寫緩沖區
ViByterdBuf[MAX_SCPI_LENGTH];//讀緩沖區
intReturn_Count;
nReturnStatus=viOpenDefaultRM(&rmSession);
nReturnStatus=viOpen(rmSession,"TCPIP0::172.141.114.6::5001::SOCKET",VI_NULL,VI_NULL,&pnInstrHandle);
/*-ConfigureVISAFormattedI/O----------------------------------------*/
nReturnStatus=viSetAttribute(pnInstrHandle,VI_ATTR_TMO_VALUE,DEFAULT_TIMEOUT);//設置超時
nReturnStatus=viSetAttribute(pnInstrHandle,VI_ATTR_SUPPRESS_END_EN,VI_FALSE);//不發送終止符
nReturnStatus=viSetAttribute(pnInstrHandle,VI_ATTR_SEND_END_EN,VI_FALSE);//不接收終止符
nReturnStatus=viQueryf(pnInstrHandle,"*IDN? ","%s",rdBuf);
viClose(pnInstrHandle);
viClose(rmSession);
return0;
}
④ 怎麼使用VS2010調用visa進行程式控制
環境配置
系 統 :win8.1 with update
開發環境: VS2010
編程語言: C++
相關知識
SCPI指令
Standard Commands for Programmable Instruments的縮寫,即程式控制儀器(可編程儀器)標准命令集。SCPI 是一種建立在現有標准IEEE488.1 和 IEEE 488.2 基礎上,並遵循了IEEE754 標准中浮點運算規則、ISO646 信息交換7 位編碼符號(相當於ASCll編程)等多種標準的標准化儀器編程語言。它採用一套樹狀分層結構的命令集,提出了一個具有普遍性的通用儀器模型,採用面向信號的測量;它的助記符產生規則簡單、明確,且易於記憶。
VISA編程介面
NI-VISA(Virtual Instrument Software Architec-ture,以下簡稱為「VISA」)是美國國家儀器NI(NationalInstrument)公司開發的一種用來與各種儀器匯流排進行通信的高級應用編程介面。VISA匯流排I/O軟體是一個綜合軟體包,不受平台、匯流排和環境的限制,可用來對USB、GPIB、串口、VXI、PXI和乙太網系統進行配置、編程和調試。VISA是虛擬儀器系統I/ O介面軟體。基於自底向上結構模型的VISA創造了一個統一形式的I/ O控制函數集。一方面,對初學者或是簡單任務的設計者來說,VISA提供了簡單易用的控制函數集,在應用形式上相當簡單;另一方面,對復雜系統的組建者來說,VISA提供了非常強大的儀器控制功能與資源管理。
如何在VS2010中使用visa庫
一、首先在計算機上安裝NI提供的驅動庫,然後在計算機上找到相應的庫文件和頭文件
文件目錄:C:\Program Files (x86)\IVI Foundation\VISA\WinNT
其中lib文件在: lib\msc\visa32.lib 和ivi.lib
頭文件在: include
二、添加庫到工程
博主是直接將庫文件和對應的頭文件復制到了工程目錄下,然後在工程中添加了對lib庫的引用,vs2010中引用visa庫操作如下,
1 菜單 項目—> 屬性—>配置屬性–>鏈接器—->輸入—附加依賴項, 加入庫名,如: visa32.lib;
或是在cpp源文件中用代碼#pragma comment(lib,」visa32.lib」)代替. 此時再編譯會提示錯誤:fatal error LNK1104: 無法打開文件「my_API.lib」 , 原因應該是編譯器不知道去哪裡找我們的這個庫,下面就來解決
2 然後給項目添加庫文件路徑,添加附加庫路徑:
「項目—>屬性—>配置屬性—>連接器–>常規–>附加庫目錄」 點右邊的向下箭頭,這里添加 我們的庫所在的路徑. F:\my_program\meiyong\PPPP_Decode_ETIM;或 ../../PPPP_Decode_ETIM, 而且經試驗測試是以項目文件.vcxproj 所在目錄為當前目錄,當前以當前目錄這個方式設置更好了.這樣就好了.
三、在工程中使用visa庫
下面的代碼中是在VS2010中通過調用visa庫發送*IDN?來查詢儀器的ID
#include "visa/include/visa.h"
#include "visa/include/ivi.h"
#pragma comment(lib,"visa32.lib")
#pragma comment(lib,"ivi.lib")
/*----------------------------------------------------------------------------*/
/* 宏定義聲明 */
/*----------------------------------------------------------------------------*/
#define MAX_SCPI_LENGTH 255 // 最大的SCPI命令
#define DEFAULT_TIMEOUT 5000 // 超時:5000ms
int main(void)
{
ViStatus nReturnStatus = 0; // 保存返回數值
ViSession rmSession = 0,pnInstrHandle;
ViUInt32 retCnt = 0;
ViByte wrtBuf[MAX_SCPI_LENGTH]; // 寫緩沖區
ViByte rdBuf[MAX_SCPI_LENGTH]; // 讀緩沖區
int Return_Count;
nReturnStatus = viOpenDefaultRM (&rmSession);
nReturnStatus = viOpen (rmSession, "TCPIP0::172.141.114.6::5001::SOCKET", VI_NULL, VI_NULL, &pnInstrHandle);
/*- Configure VISA Formatted I/O ----------------------------------------*/
nReturnStatus = viSetAttribute (pnInstrHandle, VI_ATTR_TMO_VALUE, DEFAULT_TIMEOUT); // 設置超時
nReturnStatus = viSetAttribute (pnInstrHandle, VI_ATTR_SUPPRESS_END_EN, VI_FALSE); // 不發送終止符
nReturnStatus = viSetAttribute (pnInstrHandle, VI_ATTR_SEND_END_EN, VI_FALSE); // 不接收終止符
nReturnStatus = viQueryf (pnInstrHandle, "*IDN?\n", "%s", rdBuf);
viClose (pnInstrHandle);
viClose (rmSession);
return 0;
}
⑤ 有沒有人用delphi調用過Visa32.dll動態鏈接庫里的函數
試著把visa32.dll與編譯完的程序放在一起一起發布試試
⑥ labview8.6 下載了NI visa後怎麼設置它控制電腦的某個USB
這個圖能看明白否?
詳細點說……開始菜單-->NationalInstruments-->labview-->file-->newvi-->然後就是這個圖的內容了。專直接用範例查找屬器查找usb就能找到對應的範例了。
⑦ 請問vs2012 c++如何調用或添加ni visa,也就是使用visa函數庫的C函數。
首先你需要下載ni visa的驅動和編程庫,這個可以到美國國家儀器VISA官網下載。回
VISA的實質就是一個標准答的I/O函數庫及其相關規范的總稱,一般稱這個I/O函數庫為VISA庫。這些庫函數用於編寫儀器的驅動程序,完成計算機與儀器間的命令和數據傳輸,以實現對儀器的程式控制。
對VISA函數的調用一般可分為聲明、開啟、器件I/O和關閉4部分,
#include 「visa.h」
選定編程環境後,首先安裝VISA庫, 對於32位應用程序,用到的主要文件是visa.dll,visa32.lib,visa.h以及visatype.h等。對於C或C+ +程序,應在程序的開始包含頭文件visa.h。visa.h包含VISA庫中所有的函數原型及所用常量、錯誤代碼的定義。visa.h中還包含另一頭文件visatype.h,visatype.h頭文件定義了VISA數據類型,如例中的ViSession、ViUInt32等。
ni新的東西不怎麼熟,老的是LIB/dll鏈接庫模式,據說新的有組件模式,這些在VS上面和其它外接庫、外接組件使用沒有什麼不同,鏈接庫就是包含、引用;組件就是注冊、導入。
⑧ vc6.0用visa庫函數通過網口控制頻譜儀和信號源,因為不是安捷倫儀器,需要改變埠號,儀器的
比如你抄用的socket叫襲Winsock1,那你用:
Winsock1.RemotePort = 5001 『對方的埠
Winsock1.LocalPort = 5001 』本地埠
⑨ 怎麼用visa提供的函數,比如viScanf,viRead讀儀器的測量數據並存入數組
ViSession vi;ViSession defaultRM;
ViString strWRBUF;
double ScanData[6];
long lngRTN;
lngRTN=viOpenDefaultRM(&defaultRM);
if (lngRTN<VI_SUCCESS) {
MessageBox("打開默認資源管理器失敗!");
return;
}
lngRTN=viOpen(defaultRM,"AutoTestSystem",0,0,&vi);
if (lngRTN<VI_SUCCESS) {
MessageBox("打開VI出現錯誤!");
return;
}
strWRBUF="CONF:RES 1000000,(@101:106);:RES:NPLC 2,(@101:106)\n";
viPrintf(vi,strWRBUF);
strWRBUF="ROUT:SCAN (@101:106)\n";
viPrintf(vi,strWRBUF);
strWRBUF="INIT\n"; viPrintf(vi,strWRBUF);
strWRBUF="FETC?\n";
viPrintf(vi,strWRBUF);
viScanf(vi,"%,10lf",ScanData);
ScanData就是你想要的結果了。
⑩ labview里使用外部開發的dll連接一台儀器,由於dll是.net開發的,儀器欄里需要設置儀器的visa字元串名
問你的dll作者,需要用什麼樣的字元串。
如果他也是用的NI的VISA體系,那就方便了,你在前面板內放置一個「VISA資源名容稱」控制項並連線即可。該控制項位於「新式>>I/O>>VISA資源名稱」,「經典」和「銀色」的控制項裡面也有相應的這個控制項。
你連接好VISA的設備(通過串口、USB等)之後,控制項下拉列表裡面點刷新就有了。
該控制項可以顯示哪些設備存在,並且是否被佔用。如果不需要這樣的功能,直接連接「COM1」這樣的字元串常量也行。當然,串口是自動設置好了別名了的,如果是USB等,就需要按照VISA的格式寫,或者去MAX裡面設置好別名。