☰
Qt+TiePieHS3开发笔记(二):HS3发送器发出内置波形、直连示波器,示波器检测内置波形Demo
2026/10/13 12:59:57 网站建设 项目流程

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/167589503

长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…

Qt开发专栏:三方库开发技术

上一篇:《Qt+TieQPieHS3开发笔记(一):TiePie HS3介绍、下载sdk和基础开发环境Demo》
下一篇:敬请期待…


前言

波形数据是算法模型数据,通过设备环能将其当作信号换发射出去。


Demo


TiePie Handyscope HS3的基本开发流程

概述

使用 libtiepie-hw 库控制仪器、执行测量,需要遵循以下步骤:

  • 步骤一:Initialize the library — 初始化库
  • 步骤二:Update the device list — 更新设备列表
  • 步骤三:Open the required device(s) — 打开所需设备
  • 步骤四:Setup the Oscilloscope — 配置示波器
    – Setup the oscilloscope channels — 配置示波器通道
    – Setup the oscilloscope timebase — 配置示波器时基
    – Setup the trigger (channels and device) — 配置触发(通道与设备)
  • 步骤五:Setup the Generator — 配置信号发生器
  • 步骤六:Start a measurement — 启动一次测量
  • 步骤七:Wait for the measurement to be ready — 等待测量就绪
  • 步骤八:Retrieve the measured data — 获取测量数据
  • 步骤九:Close the device(s) — 关闭设备
  • 步骤十:Exit the library — 退出库

Demo实现步骤

步骤一:初始化库

用于初始化和退出库以及从库本身检索信息的函数。
加载库后,必须先对其进行初始化,然后才能使用库中的函数。在关闭库之前,当使用库的应用程序不再需要它时,必须调用tiepie_hw_fini()来清除和释放库使用的资源。

步骤二:更新设备列表

步骤三:打开所需设备


步骤四:配置示波器

步骤五·:配置信号发生器

步骤六:启动信号发生器,再启动测量

步骤七:循环检测测量,获取测量数据

步骤八:先停止使能输出

步骤九:发生器关闭输出驱动

步骤十:关闭设备

步骤十一:退出库


Demo运行结果


相关函数原型

在每个库函数调用时,都会设置一个状态标志,指示函数是如何执行的。当函数调用的行为与预期不同时,请检查状态以查找可能的原因。

  • TiePie::Hardware::DeviceListItem::canOpen():以某功能打开
  • TiePie::Hardware::DeviceListItem::openOscilloscope():打开示波器
  • TiePie::Hardware::Oscilloscope::setMeasureMode():设置测量模式
  • TiePie::Hardware::Oscilloscope::setSampleRate():设置采样率
  • TiePie::Hardware::Oscilloscope::setRecordLength():设置记录长度
  • TiePie::Hardware::OscilloscopeChannel::setEnabled():通道使能
  • TiePie::Hardware::OscilloscopeChannel::setRange():通道测量范围
  • TiePie::Hardware::OscilloscopeChannel::setCoupling():测量类型
  • TiePie::Hardware::OscilloscopeChannel::start():开始测量
  • TiePie::Hardware::OscilloscopeChannel::recordLength():数据长度
  • TiePie::Hardware::OscilloscopeChannel::getData():获取数据
  • TiePie::Hardware::DeviceListItem::openGenerator():打开发生器
  • TiePie::Hardware::Generator::setSignalType():设置信号类型
  • TiePie::Hardware::Generator::setFrequency():设置频率
  • TiePie::Hardware::Generator::setAmplitude():设置幅值
  • TiePie::Hardware::Generator::setOffset():设置偏移
  • TiePie::Hardware::Generator::setOutputEnable():设置输出使能
  • TiePie::Hardware::Generator::start():开始输出

Demo源码

voidHs3Manager::testGeneratorAndMeasurement(){// sdk版本LOG<<QSTRING("Library version: %1.%2.%3").arg(TIEPIE_HW_VERSION_MAJOR).arg(TIEPIE_HW_VERSION_MINOR).arg(TIEPIE_HW_VERSION_PATCH);// 步骤一: 初始化sdkTiePie::Hardware::Library::init();// 步骤二: 允许探测开启,刷新列表TiePie::Hardware::Network::setAutoDetectEnabled(true);// 步骤三: 刷新设备列表(探测刷新)TiePie::Hardware::DeviceList::update();// 步骤四: 打开第一个设备if(TiePie::Hardware::DeviceList::count()==0){LOG<<"if(TiePie::Hardware::DeviceList::count() == 0)";TiePie::Hardware::Library::fini();return;}// 步骤五:获取项目智能指针(默认返回就是智能指针)std::unique_ptr<TiePie::Hardware::DeviceListItem>pItemPtr=TiePie::Hardware::DeviceList::getItemByIndex(0);if(!pItemPtr){LOG<<"if(!pItemPtr)";TiePie::Hardware::Library::fini();return;}// 步骤六:打印设备基础信息TiePie::Hardware::DeviceListItem*pItem=pItemPtr.get();LOG<<QString("===== 设备信息 =====");LOG<<QString("设备名称:%1").arg(QString::fromStdString(pItem->name()));LOG<<QString("序列号:%1").arg(pItem->serialNumber());QStringList strList;{if(pItem->types()&TIEPIE_HW_DEVICETYPE_OSCILLOSCOPE){strList<<QSTRING("Oscilloscope(示波器)");}if(pItem->types()&TIEPIE_HW_DEVICETYPE_GENERATOR){strList<<QSTRING("Generator(信号源)");}if(strList.size()==0){strList<<QSTRING("Unknow");}}LOG<<QString("有效类型:%1").arg(strList.join(","));/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 示波器 配置部分 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/// 步骤七: 打开信号发生器std::unique_ptr<TiePie::Hardware::Oscilloscope>oscPtr;if(!pItem->canOpen(TIEPIE_HW_DEVICETYPE_OSCILLOSCOPE)){LOG<<"if(!pItem->canOpen(TIEPIE_HW_DEVICETYPE_OSCILLOSCOPE))";TiePie::Hardware::Library::fini();return;}oscPtr=pItem->openOscilloscope();if(!oscPtr){LOG<<"Failed to openOscilloscope()";TiePie::Hardware::Library::fini();return;}// 步骤八: 设置 示波器 参数TiePie::Hardware::Oscilloscope*pOsc=oscPtr.get();{LOG<<pOsc;// 设置采集模型: 块采集模式 示波器在块采集时,会持续循环往片上缓存写采样点;当触发条件满足,就停止采集pOsc->setMeasureMode(TIEPIE_HW_MM_STREAM);// 设置采样率 1MHzpOsc->setSampleRate(100);// 设置记录长度pOsc->setRecordLength(100);// 设置预触发采样比例(仅TIEPIE_HW_MMB_BLOCK块采集摸生效, 0: 触发到来那一刻,才开始采集, 50: 触发到来那一刻,总记录一半是出发前的,一半是触发后的)// pOsc->setPreSampleRatio(0);// 设置通道1constTiePie::Hardware::Oscilloscope::Channels&channels=pOsc->channels;TiePie::Hardware::OscilloscopeChannel*pChannel1=channels[0].get();{pChannel1->setEnabled(true);pChannel1->setRange(4.0);pChannel1->setCoupling(TIEPIE_HW_CK_DCV);}}/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 示波器 配置部分 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*//*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 信号发生器 配置部分 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/// 步骤七: 打开信号发生器std::unique_ptr<TiePie::Hardware::Generator>genPtr;if(!pItem->canOpen(TIEPIE_HW_DEVICETYPE_GENERATOR)){LOG<<"if(!pItem->canOpen(TIEPIE_HW_DEVICETYPE_GENERATOR))";TiePie::Hardware::Library::fini();return;}genPtr=pItem->openGenerator();if(!genPtr){LOG<<"Failed to openGenerator()";TiePie::Hardware::Library::fini();return;}// 步骤八: 设置 发生器 参数TiePie::Hardware::Generator*pGen=genPtr.get();{// 设置信号类型pGen->setSignalType(TIEPIE_HW_ST_TRIANGLE);// 设置信号频率pGen->setFrequency(100);// 100 Hz(为了让打印看到效果,可以判断数据)// 设置输出幅值pGen->setAmplitude(2);// 2 V// 设置峰值偏移pGen->setOffset(0);// 0 V// 打开硬件输出通道pGen->setOutputEnable(true);}/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 信号发生器 配置部分 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/// 步骤九: 开始发生器,开始示波器(必须要先开启发生器,否则先开启示波器会崩溃)// pGen->start();pOsc->start();// 步骤十:等待60sQElapsedTimer elapsedTimer;elapsedTimer.start();while(elapsedTimer.elapsed()<60*1000){qApp->processEvents(QEventLoop::AllEvents,1000);// LOG << elapsedTimer.elapsed() << pOsc->isDataReady();// 读取数据if(pOsc->isDataReady()){quint64 size=pOsc->recordLength();std::vector<float>buf(size);float*pBuf=&buf[0];pOsc->getData(&pBuf,1,0,size);QString str;for(intindex=0;index<size;index++){if(index==0){str+=QSTRING("%1").arg(buf[index]);}else{str+=QSTRING(",%1").arg(buf[index]);}}LOG<<"==============================================================";LOG<<size<<str;}}// 步骤十一: 停止输出波形,,但硬件输出缓冲/输出驱动仍然保持导通,输出引脚依然有电平;pGen->stop();// 步骤十二: 关断输出驱动, 等于将BNC输出断开pGen->setOutputEnable(false);// 步骤是三: 释放sdkTiePie::Hardware::Library::fini();}

工程模板v1.1.0


上一篇:《Qt+TieQPieHS3开发笔记(一):TiePie HS3介绍、下载sdk和基础开发环境Demo》
下一篇:敬请期待…


本文章博客地址:https://hpzwl.blog.csdn.net/article/details/167589503

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询