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

2024-04-30 16:52

本文主要是介绍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条

在这里插入图片描述

这篇关于QT程序通过GPIB-USB-HS转接线控制数字万用表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949403

相关文章

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

Qt 中 isHidden 和 isVisible 的区别与使用小结

《Qt中isHidden和isVisible的区别与使用小结》Qt中的isHidden()和isVisible()方法都用于查询组件显示或隐藏状态,然而,它们有很大的区别,了解它们对于正确操... 目录1. 基础概念2. 区别清见3. 实际案例4. 注意事项5. 总结1. 基础概念Qt 中的 isHidd