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.mzph.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中的缓存策略和缓存技巧展开深入探讨&…