日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信

發布時間:2023/12/20 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在工控測試系統中,經常需要使用到各類程控儀器,這些程控儀器通常具有GPIB、LAN、USB等硬件接口,計算機通過這些接口能夠與其通信,從而實現自動測量、數據采集、數據分析和數據處理等操作。本文主要介紹如何與程控儀器通過GPIB接口進行通信。

?

1.GPIB簡介

  GPIB是通用總線(General?Purpose?Interface?Bus)的簡稱。

  GPIB一共由24根線組成,其中8根數據線DB0-DB7,3根握手線(NRFD、DAV、NDAC),5根總線控制線(ATN、SRQ、IFC、REN、EOI),8根地線。

  GPIB是異步數據傳輸方式的雙向總線,總線上的信息按位(bit)并行、字節(byte)串行的方式進行傳送。

  詳細的GPIB硬件接口介紹請查閱相關資料,這里就不詳述了。

?

2.SCPI簡介

  SCPI是可編程儀器標準命令(Standard?Commands?for?Programmable?Instruments)的簡稱。

  SCPI規定了在控制器到儀器和儀器到控制器之間的信息交換層消息的構造和內容,因而使得在垂直層面上,同一類型的儀器命令集相似;在水平層面上,不同類型儀器之間,同種功能的SCPI命令也一致。

  SCPI命令分為儀器公用命令和儀器特定控制命令兩部分。公用命令用于控制儀器的某些基本功能操作,其句法和語義遵循IEEE488.2規定。儀器特定控制命令是指每個程控儀器完成自身命令操作的特定命令。

  詳細的SCPI命令語法請查閱相關資料,這里就不詳述了。

?

3.VISA簡介

  VISA是虛擬儀器軟件架構(Virtual?Instrument?Software)的簡稱。

  VISA提供了用于儀器編程的標準I/O函數庫,稱為VISA庫。VISA庫提供了統一的設備資源管理、操作和使用機制,它獨立于硬件設備、接口、操作系統和編程語言,具有與硬件結構無關的特點。它將用于每個儀器硬件總線類型的更低層次的驅動程序抽象化,并提供一個單一的API實現與儀器的通信,而不必考慮具體的總線接口。

  常用的VISA?API有如下一些:

  (1)ViStatus?viOpenDefaultRM(ViPSession?vi);   //打開缺省資源管理器資源對話通道

  (2)ViStatus?viOpen(ViSession?sesn,?ViRsrc?name,?ViAccessMode?mode,?ViUInt32?timeout,?ViPSession?vi); //打開特定資源的對話通道

  (3)ViStatus?viClose(ViObject?vi);         //關閉特定資源的對話通道

  (4)ViStatus?viPrintf(ViSession?vi,?ViString?writeFmt,?...);   //按設定格式向儀器寫數據

  (5)ViStatus?viScanf(ViSession?vi,?ViString?readFmt,?...);   //按設定格式從儀器讀取數據

  (6)ViStatus?viRead(ViSession?vi,?ViPBuf?buf,?ViUInt32?cnt,?ViPUInt32?retCnt);  //從儀器同步讀取數據

  (7)ViStatus?viWrite(ViSession?vi,?ViBuf??buf,?ViUInt32?cnt,?ViPUInt32?retCnt);  //向儀器同步寫入數據

  (8)ViStatus?viClear(ViSession?vi);         //清除數據

?

4.編程示例

  下面的代碼示例了如何通過GPIB接口對2220G-30-1型號的雙通道直流電源進行控制。程序運行效果如圖1所示。

圖1?GPIB示例運行效果

4.1加載VISA庫的頭文件和庫文件

  為了在工程項目中使用VISA?API函數對程控儀器進行控制,需要加載VISA庫的頭文件visa.h和庫文件visa32.lib。這兩個文件可以在安裝GPIB驅動后,在“C:\Program?Files\IVI?Foundation\VISA\WinNT”目錄下的include和lib目錄下找到。

  加載這兩個文件的具體方法如下:

1 #include "include//visa.h" //包含VISA頭文件和庫文件 2 #pragma comment(lib, "lib//msc//visa32.lib")

4.2連接設備

  點擊圖1中的“連接設備”按鈕,將調用viOpen()函數打開特定資源的對話通道。若對話通道打開成功,則向儀器發送“*IDN?”命令讀取設備信息。具體實現代碼如下:

1 /* 2 * 函數功能 : 點擊"連接設備"按鈕時,該函數被調用 3 * 備 注 : 4 * 作 者 : 博客園 依舊淡然 5 */ 6 void CGPIBDemoDlg::OnButtonOpenDevice() 7 { 8 viOpenDefaultRM(&m_ViSessionRM); 9 if(VI_SUCCESS == viOpen(m_ViSessionRM, "GPIB0::1::INSTR", VI_NULL, VI_NULL, &m_ViSession)) 10 { 11 char receiveBufferArrary[256] = {0}; 12 viPrintf(m_ViSession, "*RST\n"); //發送復位命令 13 viPrintf(m_ViSession, "*IDN?\n");   //發送讀取設備信息命令 14 viScanf(m_ViSession, "%t", &receiveBufferArrary); 15 m_IsConnected = true; 16 m_StaticDeviceState.Format("設備狀態:已連接!"); 17 m_StaticDeviceInfo.Format("設備信息:%s \n", receiveBufferArrary); 18 UpdateData(FALSE); 19 } 20 else 21 { 22 m_IsConnected = false; 23 MessageBox("連接設備失敗!", "提示", MB_OK|MB_ICONWARNING); 24 } 25 }

  由圖1可以看到,連接設備成功之后,獲取的設備信息為“Keithley?instruments,?2220G-30-1,?9010179,?1.16-1.04”。這四個字段分別代表制造商、產品標號、產品序列號以及軟件版本號。

4.3設置電壓電流

  2220G-30-1型號的雙通道直流電源可以設置輸出0-30V的直流電壓以及0-1.5A的電流。下面的代碼給出了設置通道1的電壓和電流的方法:

1 /* 2 * 函數功能 : 點擊"通道1設置"按鈕時,該函數被調用 3 * 備 注 : 4 * 作 者 : 博客園 依舊淡然 5 */ 6 void CGPIBDemoDlg::OnButtonChannel1Setting() 7 { 8 UpdateData(TRUE); 9 10 if(!m_IsConnected) 11 { 12 MessageBox("請先連接設備!", "提示", MB_OK|MB_ICONWARNING); 13 return; 14 } 15 16 if(m_EditChannel1Voltage.IsEmpty()) 17 { 18 MessageBox("輸入電壓不能為空!", "提示", MB_OK|MB_ICONWARNING); 19 return; 20 } 21 22 if(m_EditChannel1Current.IsEmpty()) 23 { 24 MessageBox("輸入電流不能為空", "提示", MB_OK|MB_ICONWARNING); 25 return; 26 } 27 28 viPrintf(m_ViSession, "INST:SEL CH1\n");               //選擇通道1 29 viPrintf(m_ViSession, "SOURCE:OUTP:ENAB ON\n");             //使能輸出 30 viPrintf(m_ViSession, "SOURCE:VOLT %sV\n", m_EditChannel1Voltage);  //設置輸出電壓 31 viPrintf(m_ViSession, "SOURCE:CURR %sA\n", m_EditChannel1Current); //設置輸出電流 32 viPrintf(m_ViSession, "SOURCE:OUTP ON\n");              //輸出 33 }

總結

以上是生活随笔為你收集整理的【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。