QT程序通过GPIB-USB-HS转接线控制数字万用表

1、硬件准备

1.1、数字万用表

型号 :Agilent 34401A

前面图示:

在这里插入图片描述

后面图示:有GPIB接口

在这里插入图片描述

1.2、GPIB-USB-HS转接线

在这里插入图片描述

2、GPIB协议基础了解

2.1、引脚

8条数据线:DIO1 ~ DIO8
5条管理线:IFC、ATN、REN、EOI、SRQ
3条交握线:DAV、NRFD、NDAC

感兴趣的话,可以研究这些线是如何控制传输的,Qt程序有封装好的接口,直接用就行。

2.2、特性

  • (1)、GPIB数据传输,并行以BIN(1个BIN为8个bytes)传输数据、串行以byte传输数据,双向异步传输,即发送一条命令,再接收一条命令,不能同时收发。
  • (2)、命令和数据用ASCII表示,可转成ASCLL对应的十六进制。
  • (3)、用双引号(“”)括起来的字符是ASCII字符。
    例如某个机器使用的命令“B CR LF” , 表示ASCII中的值(B,CR,LF),转成十六进制为(0x42,0x0D,0x0A)。
  • (4)、有些机器,"CR LF"表示协议结束符,收发的数据都有,方便解析。

注意:每一种机器使用的命令字段各不相同,需要查看数据手册,但原理是一样的。

2.3、数据解析

例如发送结果和测试数据给某个机器:
“C”命令,
"PF"为的低4位为4个通道的测试结果,0表示PASS,1表示FAIL,当前仅测试1个通道,
byte1 ~ byte8的低4位为测试的32位数据,如下图。

在这里插入图片描述

2.4、数字万用表使用的SCPI协议

用于控制可编程测试测量仪器的标准语法和命令,例如:
1、*IDN?
2、MEAS:VOLT:DC? 10, 0.003

第1条命令得到数字万用表的型号信息
第2条命令量取DC电压

更多的需要查看Agilent 34401A手册

3、软件安装

3.1、安装NI VISA

点 NI官网下载安装包ni-visa_xx.0_online.exe,全部下一步即可,安装好后重启电脑。

可能不会生成桌面快捷方式,去开始菜单可以找到图标

在这里插入图片描述

安装此软件,可得到QT编程需要的外部库,还能初步测试命令的有效性

3.2、安装QT

我使用的版本
在这里插入图片描述

4、NI VISA软件操控数字万用表

4.1、设置数字万用表

GPIB-USB-HS转接线连到电脑,接上数字万用表,通电后打开Power On开关。

如果数字万用表为GPIB模式,设备地址ADDR 22会一闪而过。

在这里插入图片描述

我的数字万用表默认为 RS-232模式,可通过下图的顺序改成GPIB模式。

在这里插入图片描述
用到下图红框中的几个按键,按上图1至5的步骤,设置GPIB模式。

在这里插入图片描述

4.2、NI MAX软件控制

打开NI MAX软件,扫描到了GPIB-USB-HS设备,和数字万用表

在这里插入图片描述

点“与仪器通信”,写入“*IDN?”命令,点查询,得到数字万用表信息

在这里插入图片描述

写入“MEAS:VOLT:DC? 10, 0.003”命令,点查询,得到DC电压0.02

在这里插入图片描述

5、QT编程控制数字万用表

5.1、新建QT工程

新建项目

在这里插入图片描述

下一步选择64-bit的调试配置

在这里插入图片描述

找到NI VISA安装位置的库文件

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

放入工程

在这里插入图片描述
修改工程配置,加入外部库,打开gpib_test.pro文件夹,末尾加入代码

在这里插入图片描述

这样就可以使用vi接口、或ni488接口编程了,2种接口按需求自己选。

5.2、vi接口介绍

引用vi接口需要的头文件

#include "visatype.h"
#include "visa.h"

常用函数如下:

函数功能
viOpenDefault打开VISA资源管理器
viFindRsrc查找VISA设备获得ID
viOpen打开VISA设备
viClose关闭VISA设备
viWrite发送命令或数据
viRead接收数据
viReadSTB读设备状态

5.3、ni488接口介绍

引用ni488接口需要的头文件

#include "ni488.h"
#include "ni4882.h"

常用函数如下:

函数功能
ibdev获取设备符
ibwrt发送命令或数据
ibrd接收数据
ibwait延时
ibrsp读设备状态

5.4、应用代码

我使用的是vi接口

#include <QDebug>
#include "visatype.h"
#include "visa.h"ViSession defaultRM;  //VISA资源管理器描述符
ViSession vi; //GPIB设备描述符
char instrDescriptor[VI_FIND_BUFLEN]; //GPIB设备ID名
ViUInt32 numInstrs; //GPIB设备个数
ViFindList findList; int MainWindow::gpib_test()
{if(viOpenDefaultRM(&defaultRM) != VI_SUCCESS) {qDebug() << "打开VISA资源管理器失败.";return -1;}qDebug() << "打开VISA资源管理器成功.";if(viFindRsrc (defaultRM, "GPIB?*INSTR", &findList, &numInstrs, instrDescriptor) < VI_SUCCESS){qDebug() << "无可用VISA资源,请检查设备连接";viClose (defaultRM);return -1;}else{qDebug() << "可用VISA资源数量:" << numInstrs;qDebug() << "GPIB设备描述符:" << instrDescriptor;}if(viOpen(defaultRM, instrDescriptor, VI_NULL, VI_NULL, &vi) != VI_SUCCESS) {viClose(defaultRM);return -1;}qDebug() << "GPIB设备成功连接设备";//向数字万用表发送读信息命令char command[256] = "*IDN?";char response[256] = "";qDebug() << "发送读信息命令:" << command;if(VI_SUCCESS == viWrite(vi, (ViBuf)command, strlen(command), NULL)) {if(VI_SUCCESS == viRead(vi, (ViBuf)response, sizeof(response), NULL)) {qDebug() << "接收数据:" << response;}}//向数字万用表发送读信息命令char command1[256] = "MEAS:VOLT:DC? 10, 0.003";char response1[256] = "";qDebug() << "发送读DC电压命令:" << command1;if(VI_SUCCESS == viWrite(vi, (ViBuf)command1, strlen(command1), NULL)) {if(VI_SUCCESS == viRead(vi, (ViBuf)response1, sizeof(response1), NULL)) {qDebug() << "接收数据:" << response1;}}// 关闭GPIB设备viClose(vi);viClose(defaultRM);
}

5.5、带界面示例

上述应用代码上加入界面设计,可得到下图的结果
在这里插入图片描述

5.6、NI I/O Trace软件的使用

可打开NI I/O Trace软件抓协议,会把发送和接收的数据罗列出来,如图:

在这里插入图片描述
右击每条协议,可以查看函数说明,还能解析数据的十六进制值,例如第8条

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/320384.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拆单算法交易(Algorithmic Trading)

TWAP TWAP交易时间加权平均价格Time Weighted Average Price 模型&#xff0c;是把一个母单的数量平均地分配到一个交易时段上。该模型将交易时间进行均匀分割&#xff0c;并在每个分割节点上将拆分的订单进行提交。例如&#xff0c;可以将某个交易日的交易时间平均分为N 段&am…

【云原生】Pod 的生命周期(一)

【云原生】Pod 的生命周期&#xff08;一&#xff09;【云原生】Pod 的生命周期&#xff08;二&#xff09; Pod 的生命周期&#xff08;一&#xff09; 1.Pod 生命期2.Pod 阶段3.容器状态3.1 Waiting &#xff08;等待&#xff09;3.2 Running&#xff08;运行中&#xff09;3…

鸿蒙内核源码分析(消息队列篇) | 进程间如何异步传递大数据

基本概念 队列又称消息队列&#xff0c;是一种常用于任务间通信的数据结构。队列接收来自任务或中断的不固定长度消息&#xff0c;并根据不同的接口确定传递的消息是否存放在队列空间中。 任务能够从队列里面读取消息&#xff0c;当队列中的消息为空时&#xff0c;挂起读取任务…

Discourse 清理存储空间的方法

Discourse 使用一段时间以后会发现硬盘空间占用非常多。 主要是因为 Docker Image 的问题&#xff0c;如果升级次数越多&#xff0c;空间占用越多。 运行下面的命令&#xff1a; ./launcher cleanup 能够帮助你清理 Discourse 占用的空间。 如下面代码所示&#xff1a; […

牛客热题:单链表排序

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;单链表排序题目链接方法一&…

Windows php 安装 Memcached扩展、php缺失 Memcached扩展、Class ‘Memcached‘ not found

在Windows系统下如何安装 php Memcached 扩展 下载dll文件 pecl地址&#xff1a;https://pecl.php.net/package/memcached 根据版本进行选择 &#xff1a; 解压下载的文件后得到了这么样的文件结构&#xff1a; 配置 移动dll文件到相应文件位置 重点&#xff1a; libme…

jdk环境安装

jdk安装 创建软件安装的目录 mkdir -p /bigdata/{soft,server} /bigdata/soft 安装文件的存放目录 /bigdata/server 软件安装的目录 把安装的软件上传到/bigdata/soft 目录 解压到指定目录 -C :指定解压到指定目录 tar -zxvf /bigdata/soft/jdk-8u241-linux-x64.tar.gz -C /b…

【Osek网络管理测试】[TG3_TC3]tSleepRequestMin_L

&#x1f64b;‍♂️ 【Osek网络管理测试】系列&#x1f481;‍♂️点击跳转 文章目录 1.环境搭建2.测试目的3.测试步骤4.预期结果5.测试结果 1.环境搭建 硬件&#xff1a;VN1630 软件&#xff1a;CANoe 2.测试目的 验证DUT进入NMLimpHome状态后请求睡眠的最短时间是否正确…

Android --- 消息机制与异步任务

在Android中&#xff0c;只有在UIThread(主线程)中才能直接更新界面&#xff0c; 在Android中&#xff0c;长时间的工作联网都需要在workThread(分线程)中执行 在分线程中获取服务器数据后&#xff0c;需要立即到主线程中去更新UI来显示数据&#xff0c; 所以&#xff0c;如…

NI CRIO 9045 LABVIEW2020

1.labview工程如果要访问CRIO&#xff0c;需要设置以下&#xff0c;否则在项目中连接失败。 2.项目中如果要传文件&#xff0c;需要安装WebDEV 3.使用WebDAV将文件传输到实时(RT)目标 https://knowledge.ni.com/KnowledgeArticleDetails?idkA03q000000YGytCAG&lzh-CN

Mars3d实现用一个button控制一个map.control的显示与隐藏

原生js,想做一个button,控制比如compass的显示与隐藏 点一下显示 再次单击的时候就隐藏掉 写了一个function控制显示隐藏 function addCompass(){ if(compass.showtrue) { compass.showfalse; } else{ compass.showtrue; } } 功能示例(Vue版) | Mars3D三维可视化平台 | 火星…

深入了解C/C++的内存区域划分

&#x1f525;个人主页&#xff1a;北辰水墨 &#x1f525;专栏&#xff1a;C学习仓 本节我们来讲解C/C的内存区域划分&#xff0c;文末会附加一道题目来检验成果&#xff08;有参考答案&#xff09; 一、大体有哪些区域&#xff1f;分别存放什么变量开辟的空间&#xff1f; …

【微服务】网关(详细知识以及登录验证)

微服务网关 网关网关路由快速入门路由属性 路由断言网关登录校验自定义过滤器实现登录校验网关传递用户OpenFeign传递用户 网关 网络的关口&#xff0c;负责请求的路由&#xff0c;转发&#xff0c;身份校验 当我们把一个单体项目分成多个微服务并部署在多台服务器中&#xff…

Redis__数据类型

文章目录 &#x1f60a; 作者&#xff1a;Lion J &#x1f496; 主页&#xff1a; https://blog.csdn.net/weixin_69252724 &#x1f389; 主题&#xff1a;Redis__数据类型 ⏱️ 创作时间&#xff1a;2024年04月28日 ———————————————— 这里写目录标题 文…

大模型争霸的下一站:不仅是超越GPT-4,更是寻求模型之间的平衡应用

文 | 智能相对论 作者 | 沈浪 知名科学杂志《Nature》发表了一篇关于大模型规模参数大小争议的文章《In Al, is bigger always better?》——AI大模型&#xff0c;越大越好吗&#xff1f;随着大模型应用走向实践&#xff0c;这一问题不可避免地成为了当前AI行业发展的焦点与…

迅雷永久破解

链接&#xff1a;https://pan.baidu.com/s/1ZGb1ljTPPG3NFsI8ghhWbA?pwdok7s 下载后解压 以管理员身份运行绿化.bat&#xff0c;会自动生成快捷方式&#xff0c;如果没有可以在program中运行Thunder.exe

【python】条件语句与循环语句

目录 一.条件语句 1.定义 2.条件语句格式 &#xff08;1&#xff09;if &#xff08;2&#xff09;if-else &#xff08;3&#xff09;elif功能 &#xff08;4&#xff09;if嵌套使用 3.猜拳游戏 二.循环语句 1. while循环 2.while嵌套 3.for循环 4.break和conti…

AI图书推荐:AI在语言学习教育领域的应用和挑战

这本书《AI在语言学习教育领域的应用和挑战》&#xff08;AI in Language Teaching, Learning, and Assessment&#xff09;由Fang Pan编辑&#xff0c;出版于IGI Global&#xff0c;主要探讨了人工智能&#xff08;AI&#xff09;在语言教育领域的应用、挑战以及潜在的益处。 …

JS基础:JS语法规范详解(最全!)

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端基础路线”&#xff0c;可获取完整web基础…

C++:自增运算符(++)重载

自增运算符&#xff08;&#xff09;分为前置自增和后置自增&#xff0c;它们两者主要的区别是&#xff1a;返回的值不同&#xff0c;以及执行自增操作的顺序不同。 前置自增运算符 &#xff1a; 前置自增运算符首先将操作数加1&#xff0c;然后返回自增后的值。 这意味着如果…