【QT5-程序控制电源-[GPIB-USB-HS]-SCPI协议-上位机-基础样例【2】】

32 篇文章 13 订阅

1、前言

比起使用RS232进行程序控制电源,更常见或许是GPIB硬件进行控制,不过随着时代反正,貌似都逐渐抛弃了这种大口硬件,毕竟要占很大地方,在一些科院或者科研单位的测试仪器上,或许都有这样GPIB的口。

但是随着科技发展,可能这样的口不常见了,当然自己调试过的仪器不是很多,这只是个人意见。

本次实验就是使用【GPIB-USB-HS】进行程序电源控制,因为之前实验,我们其实已经熟悉SCPI的协议了,这里可以直接跳过,所有本文章会以有一部分合一下相互重合。

参考链接:【QT5-程序控制电源-RS232-SCPI协议-上位机-基础样例【1】】

2、实验环境

实验环境还是挺重要的,因为有时候,在你电脑上能运行的东西,在别人的电脑就不一定能运行,这一部分的原因就可能是实验版本不一样。
系统环境:window环境
QT软件版本:qt 5.14.2
在这里插入图片描述
硬件设备:GPIB-USB-HS
在这里插入图片描述

程控电源:IT6723

在这里插入图片描述

3、自我总结

1、基础了解仪器控制-熟悉仪器

在进行程控电源前,一定要对电源本身有一定熟悉,给到一个电源,至少能通过上边按键进行控制,选择出自己需要的电压或者电流,另外就需要查找这个仪器的说明书,看看都可以进行什么样的控制,支持不支持程序控制。
如上图,搜索到,这是艾德克斯的IT6723,一般在网上搜索,就能找到官网,需要注册号。
在这里插入图片描述

官网链接:https://cdn.itechate.com/cn/product.html

然后我们找到这个一起说明书,如下图。
在这里插入图片描述
一般不出意外的话,你应该看到如下说明,就是这个电源的说明了。

链接:https://www.itechate.com/uploadfiles/%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/user%20manual/it6700h/IT6700%20Programming%20Guide-CN.pdf
在这里插入图片描述

2、连接SCPI协议

(1)为了更好的控制电源,我们需要了解SCPI协议,并且这个电源文档也有简绍,打个比方,就像学习英语一样,与电源沟通的“语言”或者指令。
在这里插入图片描述
上述,也对这个SCPI,进行说明了,更为详细可以去网上搜索,你只要知道它是一种沟通方式就可以了,并不依赖RS232这一种通信硬件

3、了解GPIB-USB-HS

GPIB-USB-HS是一种硬件适配器,用于连接计算机与GPIB(General Purpose Interface Bus)设备之间的通信。GPIB是一种常用于仪器控制和数据采集的标准总线接口。

GPIB-USB-HS适配器是由National Instruments(国家仪器)公司推出的产品,它提供了一个便捷的方式,使计算机能够与使用GPIB接口的各种仪器进行通信。适配器通过USB接口连接到计算机,而GPIB接口则与需要控制的仪器相连。

使用GPIB-USB-HS适配器,你可以通过计算机发送命令和接收数据,实现对GPIB设备的控制和通信。这种适配器通常用于实验室、测试和测量领域,用于控制各种仪器设备,如示波器、信号发生器、频谱分析仪、多用途仪表等。

GPIB-USB-HS适配器通常伴随着相关的软件驱动程序和开发工具,以便在计算机上进行编程和控制。这允许用户通过编写脚本或使用编程语言(如LabVIEW、Python等)与GPIB设备进行交互。

总而言之,GPIB-USB-HS适配器是一种用于连接计算机与GPIB设备进行通信的硬件设备,提供了方便而可靠的接口,使计算机能够控制和与各种GPIB设备进行数据交换。

如果你想要在网上,搜索相关设备,一般会有相关说明的。
在这里插入图片描述

在这里插入图片描述
关于GPIB-USB-HS如下

4、软件调试-代码编写

不同于RS232,因为RS232本质是调试串口,所以使用串口软件就很方便,但是GPIB-USB-HS,可以理解为熟悉另一款硬件设备,并且需要熟悉其软件,自己在使用时,遇到很多问题,这其中大部分都是对这款硬件不了解造成的,还有以前确实没使用过。

大部时间,都用在熟悉GPIB设备上,并且搜索网上,也好像毕竟少的资料关于qt调试GPIB设备的,所以自己遇到很大困难。

所以自己将熟悉GPIB设备分为一节,将qt代码分为另一节。

4、熟悉协议-SCPI协议

简单了解下协议,上网搜索,还是挺多的,这里只是列举,更多大家可以自己查找,简单说,它是一条通信方式,一条指令集,专门音高测量仪器上的。
参考链接:https://blog.csdn.net/weixin_45692672/article/details/113832043
在这里插入图片描述
参考链接:https://zhuanlan.zhihu.com/p/565512748
在这里插入图片描述
具体到文档里,本次实验,参照说明书,如下为其中一个指令
在这里插入图片描述

5、实验过程-熟悉软件

在正式编写QT代码前,我们需要作测试,就是使用本身的GPIB相关软件进行控制,可惜自己的电脑已经没有光盘驱动器了,所以硬件包带的光盘没办法使用,还好有官网网站,另外就是硬件包里的说明书也有点老了。

网站连接:https://www.ni.com/zh-cn/search.html?q=GPIB-USB-HS

(1)去官网NI,下载软件安装

如下图,是官方网站下载软件位置,自己下载并安装完后,一度以为下错软件了,因为和硬件包里的说明书相差太远了,导致自己有些懵逼了,这里可以选择放下纸质说明书了,说明书可能太老了,都不更新了。

网站链接:https://www.ni.com/zh-cn/support/downloads/drivers/download.ni-488-2.html#484357
在这里插入图片描述
这里参照网上的一个安装教程,不过教程也有些老了,但是可以说明很多问题,如下图,是自己更新软件过程截图,基本一路向下就可以了。
在这里插入图片描述

参考链接:https://www.cnblogs.com/ybqjymy/p/13385261.html
在这里插入图片描述
在这里插入图片描述

因为安装完了后,发现图标是如下这个样子的。
在这里插入图片描述

(2)了解熟悉软件-连接GPIB硬件

安装完了软件后,我们就可以使用软件了,
我们需要先连接好硬件,才能调试,将USB插到PC上,然后打开软件“NI MAX”…

我们在设备管理器下可以查看到设备。
在这里插入图片描述
这款软件有点屏幕适配问题,在自己4K屏幕下,显示是有些问题的,将就看吧。
在这里插入图片描述
自己调整屏幕分辨率后,可以较好展示了。
在这里插入图片描述

(3)手动设置IT6723-软件调试

(1)我们需要先设置下程控电源IT6723的通信方式,之前是RS232,我们需要改为GPIB,并且设置ID为1。如果没有问题的话,那么在软件中,就能送搜到了。
在这里插入图片描述
并且软件上自己就写好相关指令,我们直接发送就可以了。

(2)当然,也可以使用测试面板,如下图。
在这里插入图片描述

(3)更多测试。
在这里插入图片描述
对于GPIB设备,有很多设置,我们使用它,去扫描其他设备。
在这里插入图片描述

6、QT实验-编写QT代码

如果上边指令测试差不多了,基本就可以进行qt相关编写了。
代码这里也多一些困难,因为自己之前不知道怎么样调用外部口,其实主要是在文件.pro一些写法,自己是不知道。

这其实很像之前can相关实验,调用外部库,融合在一起,qt只是负责调用这些外部库。

自己开始也不是很懂,绕了很多弯路,可以说是自己一点点试出来的吧。

(1)新建模版

搭建空白模版,这块不是很懂的话可以参考其他qt文章。

文章链接:https://blog.csdn.net/qq_22146161/article/details/130330695#comments_28672901

(2)*加入文件-引入文件

(1)加入文件
文件是在“NI MAX”安装软件的目录下找到,如下几个文件,直接放在目标工程下,要不要引用,非常麻烦,另外注意 32位或者64位,这里时64位的。
在这里插入图片描述
(2)工程引入文件
如下图,可以在.pro文件下,加入文件,在第一版里,自己当时做了很多尝试。
其实当时是直接找到文件,想要引用的,后来总是碰到问题。

但是这里其实也是告诉我们,相关文件在软件NI MAX下哪里去找,当然这要求你在默认目录下。

INCLUDEPATH += “C:\Program Files (x86)\IVI Foundation\VISA\WinNT\Include”
LIBS += “C:\Program Files (x86)\IVI Foundation\VISA\WinNT\Lib_x64\msc\visa64.lib”

在这里插入图片描述

(3)编写代码

在.pro文件下添加完后,我们做个简单布局,然后编写相应代码。
在这里插入图片描述
代码片段直接放在下面了。

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDebug>
#include "visa.h"
#include "visatype.h"


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //fnGPIB_usb_hs();

}

MainWindow::~MainWindow()
{
    delete ui;
}


int  MainWindow::fnGPIB_usb_hs(int control)
{
    // 打开GPIB设备
    ViSession defaultRM, vi;
    ViStatus status;
    status = viOpenDefaultRM(&defaultRM);
    if (status != VI_SUCCESS) {
        qDebug() << "Failed to open the default resource manager.";
        return -1;
    }

    // 打开GPIB设备的地址为1的设备
    status = viOpen(defaultRM, "GPIB0::1::INSTR", VI_NULL, VI_NULL, &vi);
    if (status != VI_SUCCESS) {
        qDebug() << "Failed to open the GPIB device.";
        viClose(defaultRM);
        return -1;
    }

    // 发送命令并读取响应
    char command[256] = "*IDN?";
    char response[256] = "";
    ui->textEdit->clear();
    status = viWrite(vi, (ViBuf)command, strlen(command), NULL);
    if (status == VI_SUCCESS) {
        status = viRead(vi, (ViBuf)response, sizeof(response), NULL);
        if (status == VI_SUCCESS) {
            qDebug() << "Response: " << response;
            QString str_response=response;
            ui->textEdit->setText(str_response);
        }
    }


    if(control==1)
    {
        // 发送命令并读取响应
        char command1[256] = "OUTPut ON";
        char response1[256] = "";
        status = viWrite(vi, (ViBuf)command1, strlen(command1), NULL);
        if (status == VI_SUCCESS) {
            qDebug() << "恭喜你,成功打开电源" << response1;
            ui->label->setText("恭喜你,成功打开电源");

//            status = viRead(vi, (ViBuf)response1, sizeof(response1), NULL);
//            if (status == VI_SUCCESS) {
//                qDebug() << "恭喜你,成功打开电源" << response1;
//                ui->label->setText("恭喜你,成功打开电源");
//            }

        }
    }else{
        // 发送命令并读取响应
        char command1[256] = "OUTPut OFF";
        char response1[256] = "";
        status = viWrite(vi, (ViBuf)command1, strlen(command1), NULL);
        if (status == VI_SUCCESS) {
                qDebug() << "恭喜你,成功关闭电源" << response1;
                ui->label->setText("恭喜你,成功关闭电源");
//            status = viRead(vi, (ViBuf)response1, sizeof(response1), NULL);
//            if (status == VI_SUCCESS) {
//                qDebug() << "恭喜你,成功关闭电源" << response1;
//                ui->label->setText("恭喜你,成功关闭电源");
//            }

        }
    }




    // 关闭GPIB设备
    viClose(vi);
    viClose(defaultRM);

}

void MainWindow::on_pushButton_clicked()
{
    int open=1;
    fnGPIB_usb_hs(open);
}

void MainWindow::on_pushButton_2_clicked()
{
    int close=2;
    fnGPIB_usb_hs(close);
}

(4)实验过程

在这里插入图片描述

(5)实验结果

在这里插入图片描述

7、实验代码

实验代码:https://download.csdn.net/download/qq_22146161/88399635

8、细节部分

(1)终端指令控制

在软件中,有个交互控制,是可以使用终端进行控制的。
在这里插入图片描述
但是指令使用方式,要根据帮助文档内相关指令来。
在这里插入图片描述
另外选择仪器设备不对或者指令错误,都会报错。
在这里插入图片描述

(2)下载安装的软件包

在自己安装时,发现有两种名字的安装包软件,都是一样的,选择一个安装。
在这里插入图片描述
如果发现那个软件没装,也可以再次更新下载的。
在这里插入图片描述

(3)信息展现形式-字符串或者十六进制

如下,在调试过程中,可以选择字符串不同展示形式,根据自己需要选择。
(1)带着“\s”等
在这里插入图片描述
(2)十六进制显示
在这里插入图片描述

(4)自己的努力-试错经历

(1)自己开始也不懂,网上说啥,自己就照着做啥,比如,要引入文件,你要确定你自己文件是32位还是64位,其实主要是引入不知道对不对。
如下图所示,是自己第一版代码,按照自己习惯,都放在工程目录下。
在这里插入图片描述
在这里插入图片描述

后来发现其实不用那么多,在第二版简化了。
在这里插入图片描述
(2)第二个就是在.pro内写法,开始也是不知道,以为要指定到目录,其实时不太好的,最后全放在工程目录下,直接引用就好了。
在这里插入图片描述
如下图,自己不会链接外部库,结果各种报错,告诉你找不到文件。
在这里插入图片描述

(5)错误信息等

我们在使用指令,进行测试后过程中,由于不熟悉,肯定会犯错误,输入错误指令,这款电源,会默认储存10条错误,看说明上有写,通过询问,会依次打印一条错误信息。

对于错误信息,后面会有个对照表,告诉你是因为啥错误的。
在这里插入图片描述

(6)文件目录

相关文件.h文件
在这里插入图片描述
在这里插入图片描述
其他样例
在这里插入图片描述

(7)qt 如何引入外部库

自己开始不知道如何引入外部库,看下边博文,写的挺好的。

文章链接:https://blog.51cto.com/u_15950551/6032171
在这里插入图片描述

(8)资源光盘内容

后来讲光盘里的内容拿了出来,如下图,有手册啥的,有需要的,自取吧。

连接:https://download.csdn.net/download/qq_22146161/88411745
在这里插入图片描述

9、总结

你需要使用一些简单的命令语言,就可以能控制起来了。

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
GPIB-232的转换制作讲解 488标准规定是协议,而对其实现的方法并没有规定,那么如何制作实现一个GPIB的模块呢?主要的实现方法有三种:一、用分立逻辑器件搭建,早期的GPIB实现方法,成本高,而且可靠性不好;二、用集成专用GPIB芯片,使用方便,易于集成,比如ISA、PCI的GPIB卡都是这种方法,但价格比较贵,不易DIY,网上有很多的二手GPIB卡,主要分为两种类型:ISA总线、PCI总线的。如果是ISA则必须是老式的电脑主板有ISA总线插槽才能用,这类电脑基本已被淘汰;而PCI的GPIB卡基本在600元以上,不同品牌价格有点差别,这就限制了GPIB卡的普及;三、用MCU纯软件完成,由于GPIB逻辑复杂,所以做起来有点麻烦,而且不容易完全符合GPIB的标准,但成本低,容易DIY。 为了实现本人手中几个有GPIB设备的自动测试功能,本人参考了相关资料,用MCU实现了软件的GPIB采集卡。如下图: 当然,光有这个GPIB卡还不行,还要有相关的采集软件,这个卡实现的是GPIB转232,所以上位机的软件主要功能是发送、接收和存储232接口的信号。软件界面如下图: 主要可实现如下功能: 一、 可以发送GPIB的命令,控制仪器的工作,不同仪器的命令有点不同,不过也大同小异。如图上所示的_?6,F1R16STG是发送给HP3456A六位半万用表的命令,实现以下功能:设置成DCV(F1),自动量程(R1),六位半显示(6STG),6是3456A的地址代表十进制的22。 二、 实时显示万用表发送的测量数据,并可保存成TXT格式的文件,当文件的大小达到一定时,可自动保存到指定目录的指定文件,并加上保存时间,方便日后分析。 三、 其它的辅助功能:悬浮显示、接收数量、暂停/继续、通信格式、串口选择等。 四、 支持同时多任务采集(多个卡连接到多个仪器),支持232转USB与计算机相连。 更多设计说明,详见附件原文出处。
### 回答1: SCPI(标准命令编程语言)是一种常用于仪器仪表控制的通信协议。而TDK-Lambda电源是一家专注于开发和生产高质量电源电源系统的公司。 SCPI控制TDK-Lambda电源可以通过以下步骤实现。首先,使用适当的通信接口(例如,RS-232、GPIBUSB)将计算机与TDK-Lambda电源连接起来。然后,创建一个SCPI命令序列,包含所需的指令和参数,以实现特定的功能。这些指令可以包括设置电压、电流或功率值,以及查询电源的状态和测量数据。 一旦SCPI命令序列创建完毕,就可以将其发送给TDK-Lambda电源电源将解析并执行这些指令,并相应地调整输出电压、电流或功率。在执行过程中,可以使用相关的查询命令获取电源的状态信息,例如输出电压和当前限制值。 需要注意的是,SCPI命令的具体格式和语法可能因不同的TDK-Lambda电源型号而有所不同。因此,在编写命令序列之前,应该仔细阅读该型号的用户手册,以了解其支持的指令和参数。另外,还可以使用一些常见的SCPI命令库或示例代码作为参考,以简化和加速开发过程。 总结来说,SCPI控制TDK-Lambda电源是一种通过发送特定的SCPI命令序列来实现对电源功能的控制和监测的方法。这种方法可以通过与计算机连接,编写适当的命令序列,并将其发送给电源来实现。 ### 回答2: SCPI(Standard Commands for Programmable Instruments)是一种通用的命令语言,用于与各种仪器设备进行通信和控制。TDK-Lambda电源是一种可编程电源,通过SCPI命令可以对其进行控制。 使用SCPI控制TDK-Lambda电源可以实现以下功能: 1. 设置电源输出电压和电流:可以通过发送特定的SCPI命令来设置电源的输出电压和电流,以满足特定的工作需求。比如,发送"VOLT 5.0"可以将输出电压设置为5V。 2. 查询电源状态:可以使用SCPI命令查询电源的当前状态,包括输出电压、输出电流、输入电压等。比如,发送"MEAS? VOLT"可以查询当前的输出电压值。 3. 设置保护参数:可以使用SCPI命令设置电源的保护参数,以防止过压、过流等情况的发生。比如,发送"PROT:VOLT 6.0"可以将过压保护电压设置为6V。 4. 控制开关机:可以使用SCPI命令控制电源的开关机状态。比如,发送"OUTP ON"可以将电源的输出打开,发送"OUTP OFF"可以将电源的输出关闭。 总之,通过使用SCPI命令控制TDK-Lambda电源,可以实现对电源的精确控制和监测,以满足各种应用场景的需求。 ### 回答3: SCPI是Standard Commands for Programmable Instruments的缩写,是一种用于控制仪器和设备的通信协议。而TDK-Lambda则是一家专业生产电源设备的公司。因此,在使用SCPI控制TDK-Lambda电源时,需要通过正确的命令和语法来与电源进行通信和控制。 首先,需要确保计算机或控制器与TDK-Lambda电源之间通过适当的通信接口(例如串口、GPIB或以太网)连接。然后,在编写SCPI命令之前,需要查阅电源的用户手册或相关文档,了解电源支持的命令和指令集。 接下来,可以使用SCPI的命令和语法来控制TDK-Lambda电源的各种功能和参数。例如,可以使用"OUTPut"命令来开关电源的输出,使用"VOLTage"和"CURRent"命令来设置电压和电流的输出值,使用"ON"和"OFF"命令来打开和关闭电源等。 此外,可以使用查询命令从电源中获取相关的状态和测量值。例如,可以使用"VOLTage?"和"CURRent?"命令来查询电源当前输出的电压和电流值,使用"STATus?"命令来查询电源的工作状态等。 需要注意的是,SCPI命令的具体格式和参数会根据电源型号和功能的不同而有所差异。因此,在使用SCPI控制TDK-Lambda电源之前,建议仔细研究相关的用户手册和文档,以确保正确理解和使用命令。 总之,通过使用SCPI协议,可以方便地控制TDK-Lambda电源的各项功能和参数,从而满足实际应用的要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好奇龙猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值