基於VISA標準的儀器驅動器設計

 

一、VISA儀器編程的簡介

基於NI-VISA/VISA32(Virtual Instrument Software Architecture)的儀器編程,支持RS232、USB、GPIB及LAN通信的SCPI儀器編程

  1. RS232

支持常見的RS232串口編程,一般地址爲“ASRL1::INSTR”

  1. USB

支持常見的USB接口編程,一般地址類似爲“USB0::0x2A8D::0x0101::MY57501899::INSTR”

  1. GPIB

支持常見的USB接口編程

一般地址類似爲“GPIB0::0x2A8D::0x0101::MY57501899::INSTR”

  1. LAN

      支持常見的USB接口編程,一般地址類似爲“TCPIP0::34465A-01899::inst0::INSTR”或“TCPIP0::192.168.0.26::INSTR”

 

二、相關概念介紹

  1. SCPI指令

Standard Commands for Programmable Instruments的縮寫,即程控儀器(可編程儀器)標準命令集。SCPI 是一種建立在現有標準IEEE488.1 和 IEEE 488.2 基礎上,並遵循了IEEE754 標準中浮點運算規則、ISO646 信息交換7 位編碼符號(相當於ASCll編程)等多種標準的標準化儀器編程語言。它採用一套樹狀分層結構的命令集,提出了一個具有普遍性的通用儀器模型,採用面向信號的測量;它的助記符產生規則簡單、明確,且易於記憶。

  1. 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提供了非常強大的儀器控制功能與資源管理。

  1. SCPI與VISA區別

SCPI是程控儀器標準命令,它是對器件的消息進行了標準化,也就是,只要做儀器器件,你就得用SCPI,相當於彙編語言命令(不一定恰當),VISA提供一些可以直接操作硬件的函數,它是以DLL或Lib形式提供,在編程時必須包括visa.h和visa32.h,你直接使用的是VISA庫中的函數,SCPI命令又是通過VISA函數Viprintf函數發送出去的,書上講的太抽象了,不理解。

三、VISA儀器編程驅動模型

 

 

四、VISA編程舉例

如何在VS2010中使用visa庫

1、首先在計算機上安裝NI提供的驅動庫,然後在計算機上找到相應的庫文件和頭文件。

文件目錄:C:\Program Files (x86)\IVI Foundation\VISA\WinNT

其中lib文件在: lib\msc\visa32.lib 和ivi.lib

頭文件在: include

 

2、添加庫到工程

直接將庫文件和對應的頭文件複製到了工程目錄下,然後在工程中添加了對lib庫的引用,vs2010中引用visa庫操作如下:

A、 菜單 項目—> 屬性—>配置屬性–>鏈接器—->輸入—附加依賴項, 加入庫名,如: visa32.lib;

或是在cpp源文件中用代碼#pragma comment(lib,”visa32.lib”)代替. 此時再編譯會提示錯誤:fatal error LNK1104: 無法打開文件“my_API.lib” , 原因應該是編譯器不知道去哪裏找我們的這個庫,下面就來解決。

 

B、 然後給項目添加庫文件路徑,添加附加庫路徑:

“項目—>屬性—>配置屬性—>連接器–>常規–>附加庫目錄” 點右邊的向下箭頭,這裏添加 我們的庫所在的路徑. F:\my_program\meiyong\PPPP_Decode_ETIM;或 ../../PPPP_Decode_ETIM, 而且經試驗測試是以項目文件.vcxproj 所在目錄爲當前目錄,當前以當前目錄這個方式設置更好了.這樣就好了。

3、在工程中使用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;

}

五、VISA編程接口的測試,以串口RS232舉例,其他接口類似。

1、硬件連接 將一臺PC模擬成RS232標準設備,另一臺PC使用VISA庫封裝進行通信訪問

 

 

 

 

 

生成的軟件如下(源碼上傳的github和SVN),測試界面

 

 

RS232標準設備接收到的指令如下:

 

參考鏈接

https://en.wikipedia.org/wiki/Virtual_instrument_software_architecture

https://blog.csdn.net/rl529014/article/details/79586993

https://blog.csdn.net/u013472106/article/details/52924033?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2

http://www.ni.com/tutorial/4713/en/

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