QT(19)-VISA控制仪器

1.安装VISA库

下载NI-VISA - NI

或者去KEYSIGHT官网找文件(KEYSIGHT文件优先,仪器都是这个公司的)

安装完之后,确认是否正常有库文件

2.应用程序

test.pro,在最后添加库文件

复制代码
QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

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

mainwindow.cpp实现频率控制

复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <visa.h>

#define MAX_SCPI_LEN 1024
#define DEFAULT_TMO 2000
#define N9010A_INSTR "TCPIP0::192.168.1.200::hislip0::INSTR"
#define TEST_CMD ":FREQ:CENT 50 MHz"

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

    // 初始化 VISA 会话
    ViSession defaultRM, instr;
    ViStatus status = viOpenDefaultRM(&defaultRM);
    if (status != VI_SUCCESS) {
        //qDebug() << "Failed to open default resource manager.";
    }

    // 打开仪器
    status = viOpen(defaultRM, N9010A_INSTR, VI_NULL, VI_NULL, &instr);
    if (status != VI_SUCCESS) {
        //qDebug() << "Failed to open instrument.";
        viClose(defaultRM);
    }

    // 设置中心频率为 80 MHz
    char freqCmd[] = ":FREQ:CENT 100 MHz";
    status = viWrite(instr, (ViByte*)freqCmd, strlen(freqCmd), VI_NULL);
    if (status == VI_SUCCESS) {
        //qDebug() << "Center frequency set to 80 MHz.";
    } else {
        //qDebug() << "Failed to set center frequency.";
    }

    // 读取仪器响应
    char buffer[100];
    status = viRead(instr, (ViByte*)buffer, sizeof(buffer) - 1, VI_NULL);
    if (status == VI_SUCCESS) {
        buffer[status] = '\0';
        //qDebug() << "Instrument response:" << buffer;
    } else {
        //qDebug() << "Failed to read instrument response.";
    }

    // 关闭 VISA 会话
    viClose(instr);
    viClose(defaultRM);
}

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

如果设备在同一个局域网,将会设置频谱仪的中心频率

相关推荐
雨晨源码(同名B站)几秒前
基于Python的网易云音乐评论数据情感化分析系统 音乐爬虫信息可视化 |SnowNLP评论情感分析
开发语言·hadoop·爬虫·python·信息可视化·毕业设计
我不是疯子是傻子15 分钟前
串口通信数据帧粘包拆包再进化:基于 Qt 的滑动窗口与 CRC 校验实战
开发语言·qt
程序员老陆24 分钟前
Qt中实现窗口真全屏(覆盖Windows任务栏)
开发语言·windows·qt
霸道流氓气质1 小时前
Java中信号量(Semaphore):从本地到分布式
java·开发语言·分布式
Patrick在香港1 小时前
Python正则表达式实战:解析和验证香港身份证、车牌、电话格式
开发语言·python·正则表达式
路溪非溪1 小时前
Python语言的执行流程总结
开发语言·python
民乐团扒谱机1 小时前
【超详解】量子克拉美罗下界QCRB:时延估计精度极限推导+MATLAB多场景绘图实战
开发语言·机器学习·matlab·量子力学·qcrb
乐观勇敢坚强的老彭2 小时前
C++ 竞赛常用算法模板速查表
开发语言·c++·算法
离陌在学C#2 小时前
C# 泛型:从基础到高级应用
开发语言·c#
ly76892 小时前
Java 设计模式详解:从原则到 23 种经典模式
java·开发语言·设计模式