一、 背景
暗室测试通过PC 软件直接控制信号源(信号发生器),不用手动操作。像这种标准控制仪器都有提供有PC接口,要完成信号源的控制我们需要了解两方面的知识:SPCI和VISA。

SPCI:SCPI(可编程仪器的标准命令)是一种基于 ASCII 的仪器命令语言,供测试和测量仪器使用,简单来说就是你发送给一个设备一串SCPI格式的字符串,它就能完成相应操作,这就是它们的通用语言。SCPI分为标准SCPI和扩展的SCPI,前者是各种设备通用的,如重置命令RST,后者是各个厂家各种设备自己扩展的命令。如果相应设备支持SCPI,在其操作手册中会对SCPI详细说明,一个简单的参考在这里,最好是查看需要控制的设备说明文档。
VISA:VISA(Virtual Instrument Software Architecture,简称为"Visa"),即虚拟仪器软件结构,是VXI plug&play联盟制定的I/O接口软件标准及其规范的总称。VISA提供用于仪器编程的标准I/O函数库,称为VISA库,计算机通过它来控制仪器。
VISA的适用和各种仪器接口通信,无论仪器使用的串口还是其他任何一种总线,诸如USB、GPIB、VXI、PXI和LXI等,都具有相同的操作函数,从而实现了控制操作上的统一。
这里我们使用Agilent的visa库。
二、 关于库文件和测试工具
1、我们可以去是德科技官网下载Agilent IO Library 或 是德科技仪器控制捆绑套件。
官网地址:https://www.keysight.com/cn/zh/home.html
捆绑套件下载:
https://www.keysight.com/cn/zh/lib/software-detail/computer-software/keysight-instrument-control-bundle-download-1184883.html

IO程序库套件:用于检测和链接仪器
Command Expert:用于构建仪器控制应用软件
BenchVue:无需编程即可用于查看和捕获仪器数据
2、仪器控制捆绑套件如下图所示

3、安装完毕后我们可以打开Keysight IO Librarise Suite测试设备通信是否正常,通信测试后在开始编程控制,如下图所示:
① 选择网口
② 填写仪器ip地址,点击OK即可
③ 连接成功后,会显示如下图信息(这里我没有连接)
三、 开始编程,使用visa编程控制信号发生器(这里只实现了控制频率)
① 库文件
因为我之前已经安装了捆绑套件,所以visa库可以去安装目录下找,我这里的库文件路径是:
头文件:C:\Program Files\IVI Foundation\VISA\Win64\Include

库文件:C:\Program Files\IVI Foundation\VISA\Win64\Lib_x64\msc

② 关于visa接口
仪器控制,主要使用到的接口有:viOpen()、viWrite()、viRead()、viClose()。
③代码如下(我这里使用的信号源是:安捷伦 ESG E4438C)
.h文件

#pragma once#include <QObject>
#include "visatype.h"
#include "visa.h"class SGControl
{public:SGControl();~SGControl();public:/*连接设备*/bool connectDev();/*关闭设备*/bool closeDev();/*设置频率*/bool setFreq(int freqMHz);/*获取设备信息*/void getDevInfo(QString &text);private:ViSession m_defaultRM;ViSession m_cmdSession;
};

.cpp文件

#include "SGControl.h"
#include <QByteArray>
#include <QDebug>
#include <QString>SGControl::SGControl()
{}SGControl::~SGControl()
{}bool SGControl::connectDev()
{ViUInt32 retCount;//打开资源管理器viOpenDefaultRM(&m_defaultRM);//打开信号发生器if (VI_SUCCESS == viOpen(m_defaultRM, "TCPIP0::192.168.18.12::inst0::INSTR", VI_NULL, VI_NULL, &m_cmdSession)){return VI_TRUE;}else {return VI_FALSE;}/*初始化设备*/viWrite(m_cmdSession, (ViConstBuf)"*RST\n", 6, &retCount);return true;
}void  SGControl::getDevInfo(QString &text)
{ViUInt32 retCount;char buf[256] = { 0 };if (!connectDev()){return;}/*发送*IDN?命令,读取设备信息*/viWrite(m_cmdSession, (ViConstBuf)"*IDN?\n", 6, &retCount);/* 读取结果*/viRead(m_cmdSession, (ViBuf)buf, 200, &retCount);text = QString(buf);//qDebug() << buf;closeDev();
}bool SGControl::closeDev()
{ViStatus status;status = viClose(m_defaultRM);if (status){return VI_FALSE;}status = viClose(m_cmdSession);if (status){return VI_FALSE;}return VI_TRUE;
}bool SGControl::setFreq(int freqMHz)
{ViUInt32 retCount;ViStatus status;QString str = QString("FREQ:FIX %1MHz\n").arg(freqMHz);QByteArray byte = str.toLatin1();char *piostr = byte.data();status = viWrite(m_cmdSession,(ViConstBuf)piostr,strlen(piostr)+1, &retCount );if (status){qDebug() << "viWrite: failed!";return false;}return true;
}

主界面.h文件

#pragma once#include <QtWidgets/QMainWindow>
#include "ui_MainWindow.h"
#include "SGControl.h"class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = Q_NULLPTR);~MainWindow();void logger(const QString &log);public Q_SLOTS:/*获取信号源参数*/void onGetSGParam();private:Ui::MainWindowClass ui;SGControl m_signalCtl;
};

主界面cpp文件

#include "MainWindow.h"
#include <QPushButton>
#include <QDateTime>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);QString devStr;m_signalCtl.getDevInfo(devStr);logger(devStr);connect(ui.send_Btn, &QPushButton::clicked, this, &MainWindow::onGetSGParam);
}MainWindow::~MainWindow()
{m_signalCtl.closeDev();
}void MainWindow::onGetSGParam()
{bool ret;QString freqStr = ui.freq_lineEdit->text();ret = m_signalCtl.connectDev();if (!ret){logger(QString::fromLocal8Bit("设备连接失败!"));}ret = m_signalCtl.setFreq(freqStr.toInt());if (ret){logger(QString::fromLocal8Bit("频率设置成功!"));}else{logger(QString::fromLocal8Bit("频率设置失败!"));}m_signalCtl.closeDev();
}void MainWindow::logger(const QString &log)
{QString dateStr = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");ui.textEdit->append(dateStr + " " + log);
}

界面呈现如下图所示,已经成功连接信号源:

完整代码CSDN地址:
https://download.csdn.net/download/jiangCsion/18837155

上述就是对信号源的控制软件的编写,已经调试通过,可以完全控制信号源。

基于vs2017 Qt编写软件控制安捷伦信号源相关推荐

  1. 基于VS2010下利用MFC编写软件控制安捷伦频谱仪

    所用频谱仪N90XXA 需求: (1)能够实现设置中心频率 (2)能够实现设置带宽 (3)能够实现设置参考电平 (4)能够实现设置参考电平补偿 (5)能够实现最大保持 (6)能够实现清除最大保持 (7 ...

  2. 利用C#Winform串口通信安捷伦信号源

    前言 主要利用C#通过串口通信控制步进电机和安捷伦信号源. 一.串口通信 第一步通过串口RS232控制步进电机,CSDN上很多串口通信示例,下面直接上代码 private void Form1_Loa ...

  3. c#GPIB控制安捷伦矢网和频谱仪

    1.第一步,硬件准备. 一台安捷伦8753ES矢网,一台E4440A频谱仪,GPIB448连接线一条,安捷伦GPIB转usb连接器一条,win7计算机一台. 2.第二步,软件准备. Agilent i ...

  4. C# 控制安捷伦频谱仪N9320A (1)

    必装软件:IO Libraries Suite 连接方式: 将频谱仪和电脑通过方口的USB数据线连接,打开IO Libraries Suite软件,如果频谱仪未显示出来,则将频谱仪重启(通过关闭电源的 ...

  5. 安捷伦or是德信号源+频谱仪操作:从程控到自动测试(附A)信源播放的程控实现

    ** 安捷伦/是德信号源+频谱仪操作:从程控到自动测试(附A)信源播放的程控实现 ** 一.概述 目前,对于射频模块的调试与测试,国内大多数的厂商(特别是中小型企业)均是通过最原始的手工调测方式,需要 ...

  6. Agilent安捷伦34401A|34461A|3458a数字万用表软件NS-Multimeter

    1.软件概述 ◆NS-Multimeter 数字万用表程控软件实现对绝大多数数字万用表的控制,通过此系统软件您不仅能够在独自一人的情况下方便快捷地实现数字万用表所有的常用功能,还可以实现测试数据的图表 ...

  7. 安捷伦34970、53220、特尔斯特FSH4、普源DSA800常用采集测量仪器介绍与控制

    安捷伦34970-数据采集 / 数据记录仪开关单元 安捷伦Agilent34970A是一种高性能.低价位的数据采集和开关主机,十分适于数据记录.数据采集和一般的开关与控制应用. class Agile ...

  8. QT 与日置、安捷伦测试仪 通讯 232串口 GPIB

    记录一下经验 一.232串口通讯 日置仪表 232串口通讯比较简单,自带的QSerialPort就可以识别. 1.包含头文件. #include <QtSerialPort/QSerialPor ...

  9. 安捷伦自动测试软件,安捷伦精干的测试工具

    [导读] 工欲善其事,必先利其器 从线缆到整个网络,您需要精干的测试工具! 在楼于建设.企业网.城域网领域,安装及维护人员会面临诸多的测试挑战:线缆/光缆的性能验证及故障排除,网络性能验证及故障诊断, ...

最新文章

  1. java ide编辑器 idea 配置 与 插件
  2. mysql timeout知多少
  3. 任意进制转化 函数 模板(一)
  4. 物联网入门学什么开发板_物联网入门:如何构建DIY Blynk板
  5. caused by: java.lang.outofmemory_Caused by: java.lang.OutOfMemoryError: PermGen space
  6. IOS 学习笔记(2) 视图UINavigationController
  7. 为label或者textView添加placeHolder
  8. Express框架学习笔记-模板引擎
  9. 墨刀产品设计大赛获奖名单出炉了!作品都太强了,速来围观
  10. 软件项目工程中应该编写的十三类文档
  11. 什么是TensorFlow
  12. Java调用用户芝麻信用分
  13. 我的免费版mbti职业性格测试
  14. 世人谓我太疯癫,我笑世人看不穿
  15. Android studio adb 不是内部或外部指令,也不是可运行的程序
  16. vue 微信html,vue 实现微信端网页分享
  17. 《Excel 数据之美--科学图表与商业图表的绘制》
  18. Eclipse插件开发GEF
  19. 动手组装一台 macbook pro 15寸(a1398模具,rmbp mjlq2/mjlt2)
  20. org.springframework.hateoas.config.HateoasConfiguration required a single bean, but 15 were found:

热门文章

  1. FPGA AD_TLC549 芯片开发 学习笔记
  2. Salesforce CPQ:如何实现复杂产品配置和报价?
  3. 专访筷云李小军:创新是企业持续保持活力的源泉
  4. C语言课设——酒店预订管理系统
  5. windows10 win10官方iso镜像下载
  6. 使用kotlin一些问题总结
  7. 地理信息系统考研浅析
  8. 最小二乘法实现C++
  9. python爬取加密qq空间_python3爬虫爬取QQ好友空间说说
  10. 云创大数据承办清华大学南京校友会校友经济企业沙龙