C++與 Fluke5500A設備通過GPIB-USB-B通信的經驗積累

C++與 Fluke5500A設備通過GPIB-USB-B通信的經驗積累

===========以下內容來自:C++與 Fluke5500A設備通過GPIB-USB-B通信的經驗積累 - J·Marcus - 博客園 (cnblogs.com)=======START============

1.需要安裝NI-488.2.281,安裝好了之后,GPIB-USB-B的驅動就自動安裝好了

注意版本問題,之前安裝了NI-488更高的版本,結果驅動安不上。

2.在C:\Program Files\IVI Foundation\VISA目錄下,搜索visa32.lib和visa.h、visatype.h

將庫和頭文件拷貝到程序目錄就可以引用了

#include "visa.h"? ? ?#pragma comment(lib, "visa32.lib")

3.常用的庫函數:

/*- Resource Manager Functions and Operations -------------------------------*/ViStatus _VI_FUNC  viOpenDefaultRM (ViPSession vi);
ViStatus _VI_FUNC  viFindRsrc      (ViSession sesn, ViConstString expr, ViPFindList vi,ViPUInt32 retCnt, ViChar _VI_FAR desc[]);
ViStatus _VI_FUNC  viFindNext      (ViFindList vi, ViChar _VI_FAR desc[]);
ViStatus _VI_FUNC  viParseRsrc     (ViSession rmSesn, ViConstRsrc rsrcName,ViPUInt16 intfType, ViPUInt16 intfNum);
ViStatus _VI_FUNC  viParseRsrcEx   (ViSession rmSesn, ViConstRsrc rsrcName, ViPUInt16 intfType,ViPUInt16 intfNum, ViChar _VI_FAR rsrcClass[],ViChar _VI_FAR expandedUnaliasedName[],ViChar _VI_FAR aliasIfExists[]);
ViStatus _VI_FUNC  viOpen          (ViSession sesn, ViConstRsrc name, ViAccessMode mode,ViUInt32 timeout, ViPSession vi);/*- Resource Template Operations --------------------------------------------*/ViStatus _VI_FUNC  viClose         (ViObject vi);
ViStatus _VI_FUNC  viSetAttribute  (ViObject vi, ViAttr attrName, ViAttrState attrValue);
ViStatus _VI_FUNC  viGetAttribute  (ViObject vi, ViAttr attrName, void _VI_PTR attrValue);
ViStatus _VI_FUNC  viStatusDesc    (ViObject vi, ViStatus status, ViChar _VI_FAR desc[]);
ViStatus _VI_FUNC  viTerminate     (ViObject vi, ViUInt16 degree, ViJobId jobId);ViStatus _VI_FUNC  viLock          (ViSession vi, ViAccessMode lockType, ViUInt32 timeout,ViConstKeyId requestedKey, ViChar _VI_FAR accessKey[]);
ViStatus _VI_FUNC  viUnlock        (ViSession vi);
ViStatus _VI_FUNC  viEnableEvent   (ViSession vi, ViEventType eventType, ViUInt16 mechanism,ViEventFilter context);
ViStatus _VI_FUNC  viDisableEvent  (ViSession vi, ViEventType eventType, ViUInt16 mechanism);
ViStatus _VI_FUNC  viDiscardEvents (ViSession vi, ViEventType eventType, ViUInt16 mechanism);
ViStatus _VI_FUNC  viWaitOnEvent   (ViSession vi, ViEventType inEventType, ViUInt32 timeout,ViPEventType outEventType, ViPEvent outContext);
ViStatus _VI_FUNC  viInstallHandler(ViSession vi, ViEventType eventType, ViHndlr handler,ViAddr userHandle);
ViStatus _VI_FUNC  viUninstallHandler(ViSession vi, ViEventType eventType, ViHndlr handler,ViAddr userHandle);/*- Basic I/O Operations ----------------------------------------------------*/ViStatus _VI_FUNC  viRead          (ViSession vi, ViPBuf buf, ViUInt32 cnt, ViPUInt32 retCnt);
ViStatus _VI_FUNC  viReadAsync     (ViSession vi, ViPBuf buf, ViUInt32 cnt, ViPJobId  jobId);
ViStatus _VI_FUNC  viReadToFile    (ViSession vi, ViConstString filename, ViUInt32 cnt,ViPUInt32 retCnt);
ViStatus _VI_FUNC  viWrite         (ViSession vi, ViConstBuf  buf, ViUInt32 cnt, ViPUInt32 retCnt);
ViStatus _VI_FUNC  viWriteAsync    (ViSession vi, ViConstBuf  buf, ViUInt32 cnt, ViPJobId  jobId);
ViStatus _VI_FUNC  viWriteFromFile (ViSession vi, ViConstString filename, ViUInt32 cnt,ViPUInt32 retCnt);
ViStatus _VI_FUNC  viAssertTrigger (ViSession vi, ViUInt16 protocol);
ViStatus _VI_FUNC  viReadSTB       (ViSession vi, ViPUInt16 status);
ViStatus _VI_FUNC  viClear         (ViSession vi);/*- Formatted and Buffered I/O Operations -----------------------------------*/ViStatus _VI_FUNC  viSetBuf        (ViSession vi, ViUInt16 mask, ViUInt32 size);
ViStatus _VI_FUNC  viFlush         (ViSession vi, ViUInt16 mask);ViStatus _VI_FUNC  viBufWrite      (ViSession vi, ViConstBuf  buf, ViUInt32 cnt, ViPUInt32 retCnt);
ViStatus _VI_FUNC  viBufRead       (ViSession vi, ViPBuf buf, ViUInt32 cnt, ViPUInt32 retCnt);ViStatus _VI_FUNCC viPrintf        (ViSession vi, ViConstString writeFmt, ...);
ViStatus _VI_FUNC  viVPrintf       (ViSession vi, ViConstString writeFmt, ViVAList params);
ViStatus _VI_FUNCC viSPrintf       (ViSession vi, ViBuf buf, ViConstString writeFmt, ...);
ViStatus _VI_FUNC  viVSPrintf      (ViSession vi, ViBuf buf, ViConstString writeFmt,ViVAList parms);ViStatus _VI_FUNCC viScanf         (ViSession vi, ViConstString readFmt, ...);
ViStatus _VI_FUNC  viVScanf        (ViSession vi, ViConstString readFmt, ViVAList params);
ViStatus _VI_FUNCC viSScanf        (ViSession vi, ViConstBuf buf, ViConstString readFmt, ...);
ViStatus _VI_FUNC  viVSScanf       (ViSession vi, ViConstBuf buf, ViConstString readFmt,ViVAList parms);ViStatus _VI_FUNCC viQueryf        (ViSession vi, ViConstString writeFmt, ViConstString readFmt, ...);
ViStatus _VI_FUNC  viVQueryf       (ViSession vi, ViConstString writeFmt, ViConstString readFmt, ...);

具體怎么調用百度可以搜到例程。

安裝NI-488以后也會安裝例程。

我的代碼:

void c_gbip_demo_dlg::on_bn_clicked_conn()
{ViStatus error = viOpenDefaultRM(&m_vi_session_rm);if (error != VI_SUCCESS) {return;}error == viOpen(m_vi_session_rm, "GPIB0::4::INSTR", VI_EXCLUSIVE_LOCK, VI_NULL, &m_vi_session);if (error== VI_SUCCESS){char receiveBufferArrary[256] = { 0 };viPrintf(m_vi_session, "*RST\n");                        //發送復位命令error = viPrintf(m_vi_session, "*IDN?\n");               //發送讀取設備信息命令viScanf(m_vi_session, "%t", &receiveBufferArrary);UpdateData(FALSE);}else{//MessageBox("連接設備失敗!", "提示", MB_OK | MB_ICONWARNING);}return ;
}

注意,viOpen的第二個參數我寫的GPIB0::4::INSTR。這個參數,可以打開VISA Interactive Control查看到:

viOpen調用成功后,就連接成功了,之后就是命令發送、接收的問題了。

4.具體命令的寫法,要依據具體設備的程序員手冊來確定。

===========以上內容來自:C++與 Fluke5500A設備通過GPIB-USB-B通信的經驗積累 - J·Marcus - 博客園 (cnblogs.com)=========END============

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712526.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712526.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712526.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

動態規劃(算法競賽、藍橋杯)--單調隊列滑動窗口與連續子序列的最大和

1、B站視頻鏈接&#xff1a;E11【模板】單調隊列 滑動窗口最值_嗶哩嗶哩_bilibili 題目鏈接&#xff1a;滑動窗口 /【模板】單調隊列 - 洛谷 #include <bits/stdc.h> using namespace std; const int N1000010; int a[N],q[N];//q存的是元素的下標 int main(){int n,k;…

unity學習(41)——創建(create)角色腳本(panel)——UserHandler(收)+CreateClick(發)——創建發包!

1.客戶端的程序結構被我精簡過&#xff0c;現在去MessageManager.cs中增加一個UserHandler函數&#xff0c;根據收到的包做對應的GameInfo賦值。 2.在Model文件夾下新增一個協議文件UserProtocol&#xff0c;內容很簡單。 using System;public class UserProtocol {public co…

金融短信群發平臺具有那些特點

金融短信群發平臺的特點主要包括以下幾個方面&#xff1a; 1.高效性&#xff1a;金融短信群發平臺能夠快速地發送大量的短信&#xff0c;使得金融信息能夠迅速傳達給目標客戶&#xff0c;保證了信息的及時性和有效性。 2.安全性&#xff1a;金融短信群發平臺對于信息的安全性非…

藍橋杯練習系統(算法訓練)ALGO-995 24點

資源限制 內存限制&#xff1a;256.0MB C/C時間限制&#xff1a;1.0s Java時間限制&#xff1a;3.0s Python時間限制&#xff1a;5.0s 問題描述 24點游戲是一個非常有意思的游戲&#xff0c;很流行&#xff0c;玩法很簡單&#xff1a;給你4張牌&#xff0c;每張牌上有數…

【JS】sort方法的基本使用與雙重、多重排序:對象數組按照多個對象屬性進行排序

【JS】對象數組按照多個對象屬性進行排序&#xff08;sort方法&#xff09; 一、sort():用于對數組的元素進行排序,并返回數組&#xff0c;arr.sort()默認為升序排列二、sort()用法三、雙重、多重排序&#xff1a;對象數組按照多個對象屬性進行排序&#xff08;sort方法&#x…

設備樹學習(DOING)

我的理解本質上還是復用。尤其是嵌入式領域&#xff0c;設備多種多樣&#xff0c;但是很多設備接口都是標準的&#xff0c;或者大同小異。以前驅動開發可能每個設備商都去抄別家的搞進內核&#xff0c;這樣造成了大量的垃圾代碼。后面linux內核就把這些做成公共庫抽象出來&…

SpringBoot整合Kafka

SpringBoot整合Kafka的步驟如下&#xff1a; 添加依賴&#xff1a;在SpringBoot項目的pom.xml文件中添加Kafka的依賴。 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>版本號…

常見的遞歸Java實現

形如 public static void test(int n) {if (n > 2) {test(n - 1);}System.out.println("n" n); }重要規則 執行一個方法時&#xff0c;就創建一個新的受保護的獨立空間&#xff08;棧空間&#xff09;方法的局部變量是獨立的&#xff0c;不會相互影響如果方法中…

【教程】移動互聯網時代的APP上架流程和要點

目錄 摘要 引言 正文 一、應用商店注冊 二、準備APP材料 三、打包上傳App 摘要 本文將介紹移動應用程序上架的基本流程和要點&#xff0c;包括應用商店注冊、APP材料準備、打包上傳App、APP審核以及發布APP的詳細步驟。此外&#xff0c;還會提到利用appuploder工具簡化i…

Gradio學習(五)—————學習一下布局Column的使用

今天學一下布局 非常簡單row就是行column就是列 如下就是兩行兩列 scale就是縮放比例&#xff0c;如下按鈕類scale4&#xff0c;而文本框類scale1&#xff0c;按鈕類顯示寬度就是文本框類寬度的四倍 import gradio as gr with gr.Blocks() as demo:with gr.Row():with gr.Colu…

Spring Cloud 實戰系列之 Zuul 微服務網關搭建及配置

一、創建SpringBoot項目 用mavan搭建也可以。&#xff08;重要的是后面pom里應該引入那些依賴&#xff0c;application.yml怎么配置&#xff09; 由于開始構建項目時選擇了Eureka Server&#xff0c;所以pom.xml中不需要手動添加依賴了 首先在啟動類SpringcloudApplicatio…

SpringBoot項目連接Redis報錯:Connection refused: no further information

今天在使用SpringBoot連接Redis時發生了報錯 明明Jedis能夠連接成功為什么StringRedisTemplate就不行? 然后在網上找了一下說是關閉防火墻或者修改配置文件但是都不管用 最后發現是Redis在SpringBoot3之后yml的配置方式發生了改變 相較于之前多了一個前綴, 由于我剛開始沒有…

項目風險管理的前提是對風險的認知

大家好&#xff0c;我是不會魔法的兔子&#xff0c; 一枚北京執業律師&#xff0c;創建[項目管理者的法小院兒]&#xff0c;持續從法律的角度分享項目管理中的風險問題及預防&#xff0c;讓項目管理者能夠提早發現與解決項目執行過程中的風險&#xff0c;同時歡迎大家一起交流…

論文解讀--Mutual Interference Mitigation in PMCW Automotive Radar

PMCW汽車雷達的相互干擾抑制 摘要 針對相位調制連續波(PMCW)毫米波(mmWave)汽車雷達系統中存在的相互干擾問題進行了研究。對先進駕駛輔助系統(ADAS)的需求日益增長&#xff0c;導致配備在同一頻段工作的毫米波雷達系統的車輛激增&#xff0c;導致相互干擾&#xff0c;可能會降…

WPF 滑動條樣式

效果圖&#xff1a; 淺色&#xff1a; 深色&#xff1a; 滑動條部分代碼&#xff1a; <Style x:Key"RepeatButtonTransparent" TargetType"{x:Type RepeatButton}"><Setter Property"OverridesDefaultStyle" Value"true"/&g…

【Oracle】Oracle清理日志空間

&#xff08;一&#xff09;通過adrci清理日志空間 1.通過find命令查詢大數據文件 find / -type f -size 100M 2.登錄oracle數據庫服務器用戶 su - oracle 3.執行故障診斷命令 adrci 4.查詢ADR目錄 show home 5.切換到對應目錄 set homepath diag/rdbms/orcl 6.執行日志清理命令…

枚舉類、泛型、API

枚舉類 枚舉類可以實現單例設計模式。 枚舉的常見應用場景&#xff1a;用來表示一組信息&#xff0c;然后作為參數進行傳輸。 泛型 API

Qt 中Qwidget相關屬性

文章目錄 1. QWidget 核心屬性1.1 enabled1.2 geometry1.2.1 window frame 的影響 1.3 windowTitle1.4 windowIcon1.4.1 qrc的使用 1.5 windowOpacity1.6 cursor1.7 focusPolicy1.8 styleSheet 1. QWidget 核心屬性 在 Qt 中, 使? QWidget 類表? “控件”. 像按鈕, 視圖, 輸…

今年Android面試必問的這些技術面,2024Android常見面試題

都說程序員是在吃青春飯&#xff0c;這一點的確有一點對的成分&#xff0c;以前我不這么認為&#xff0c;但隨著年齡的增長&#xff0c;事實告訴我的確是這樣的&#xff0c;過了30以后&#xff0c;就會發現身體各方面指標下降&#xff0c;體力和身心上都多少有點跟不上了&#…

Node.js中的緩存策略和緩存技巧

在Node.js中&#xff0c;緩存策略和緩存技巧是提升應用性能和用戶體驗的關鍵因素。通過有效地利用緩存&#xff0c;我們可以顯著減少系統資源的消耗&#xff0c;加快數據訪問速度&#xff0c;從而提升整體的網站性能。本文將針對Node.js中的緩存策略和緩存技巧展開深入探討&…