若该文为原创文章,转载请注明原文出处
本文章博客地址: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源码
cpp
void Hs3Manager::testGeneratorAndMeasurement()
{
// sdk版本
LOG << QSTRING("Library version: %1.%2.%3")
.arg(TIEPIE_HW_VERSION_MAJOR)
.arg(TIEPIE_HW_VERSION_MINOR)
.arg(TIEPIE_HW_VERSION_PATCH);
// 步骤一: 初始化sdk
TiePie::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);
// 设置采样率 1MHz
pOsc->setSampleRate(100);
// 设置记录长度
pOsc->setRecordLength(100);
// 设置预触发采样比例(仅TIEPIE_HW_MMB_BLOCK块采集摸生效, 0: 触发到来那一刻,才开始采集, 50: 触发到来那一刻,总记录一半是出发前的,一半是触发后的)
// pOsc->setPreSampleRatio(0);
// 设置通道1
const TiePie::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();
// 步骤十:等待60s
QElapsedTimer 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(int index = 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);
// 步骤是三: 释放sdk
TiePie::Hardware::Library::fini();
}
工程模板v1.1.0

上一篇:《Qt+TieQPieHS3开发笔记(一):TiePie HS3介绍、下载sdk和基础开发环境Demo》
下一篇:敬请期待...
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/167589503