基于QT和Visa的安捷倫(keysight)34970A溫度采集

在以前的文章中,描述了如何在labview開發讀取34970A儀器采集的溫度。

也描述了如何安裝keysight IO Libraries Suits.

那么本文更進一步,描述QT平臺c++語言開發軟件,讀取34970A儀器采集的溫度。

以下是c++代碼,因為采集耗費時間長,所以用線程的方式。

本文代碼在qt6.2.4 MSVC2019調試成功,穩定運行。

1.頭文件,文件名:sampletemp_thread.h

#ifndef SAMPLETEMP_THREAD_H
#define SAMPLETEMP_THREAD_H
#include ? ?<QThread>
#include <QDebug>
#include "..\visa\visamanager.h"
#include <QCoreApplication>
#include <QString>
?

class SampleTemp_Thread: public QThread
{
? ? Q_OBJECT
private:
? ? int ? ? m_seq=0; ? ? ? ?//擲骰子次數序號
? ? QString m_string; ? ? ? //讀到的字符
? ? bool ? ?m_paused=true; ?//暫停次骰子
? ? bool ? ?m_stop=false; ? //停止線程run()
? ? QString * Temp_str=nullptr;

protected:
? ? void ? ?run(); ? ? ?//線程的事件循環
public:
? ? void ? ?Begin(); ? ?//開始
? ? void ? ?Pause(); ? ?//暫停
? ? void ? ?stopThread(); ? //結束線程run()
? ? explicit SampleTemp_Thread(QObject *parent = nullptr);

? ? ?~SampleTemp_Thread();
signals:
? ? void ?SendTempNewValue(int seq,QString str); ? ?//產生新值的信號
? ??
private slots:
? ? void ChangeState(QString cmd);
};

#endif // SAMPLETEMP_THREAD_H

2.cpp文件,文件名:sampletemp_thread.cpp

#include "sampletemp_thread.h"

SampleTemp_Thread::SampleTemp_Thread(QObject *parent)
? ? : QThread{parent}
{

}
void SampleTemp_Thread::Begin()
{ //開始
? ? m_paused=false;
}
SampleTemp_Thread::~SampleTemp_Thread()
{
? ? vmanger->close();
}
void SampleTemp_Thread::Pause()
{//暫停
? ? m_paused=true;
}

void SampleTemp_Thread::stopThread()
{//停止線程
? ? m_stop=true;
}
void SampleTemp_Thread::run()
{//線程的事件循環

? ? m_stop=false; ? ? ? //啟動線程時令m_stop=false
? ? //m_paused=true;
? ? m_seq=0; ? ? ? ? ? ?//次數
? ? VisaManager vmanger1("ASRL7::INSTR");//初始化,設定visa地址,安裝keysight IO Libraries Suits后可以得到
? ? vmanger1.openDevice();
? ? vmanger1.write("*IDN?\n");//這行必須要,否則軟件可能崩潰,詢問示波器的產品信息,可以得到廠家、型號、序列號、固件版本等
? ? QThread::msleep(2000);
? ? QString str;
? ? vmanger1.read(str);
? ? qDebug()<<str;
? ? vmanger1.write("CONF:TEMP TC,DEF, (@201:215)\n");//寫配置

//接著上一行,SCPI命令,TC表示熱電偶,J表示J型,@201:215通道的起始和結束編號

? ? ? ? ? ?//接上行,注意包含兩個空格,“TC” 字符前有一個,"("前有一個

? ? QThread::msleep(1000);
? ? while(!m_stop) ? ? ?//循環主體
? ? {

? ? ? ? if (!m_paused)
? ? ? ? {
? ? ? ? ? ? qDebug()<< Q_FUNC_INFO ;
? ? ? ? ? ? vmanger1.write("MEAS:TEMP? TC,J, (@201:215)\n");//寫多通道采集溫度命令

? ? ? ? ? ? //接著上一行,SCPI命令,TC表示熱電偶,J表示J型,@201:215通道的起始和結束編號

? ? ? ? ? ?//接上行,注意包含兩個空格,“TC” 字符前有一個,"("前有一個
? ? ? ? ? ? QThread::msleep(500);
? ? ? ? ? ? Temp_str=new QString();
? ? ? ? ? ? vmanger1.read(*Temp_str);//讀多通道溫度
? ? ? ? ? ? m_seq++;
? ? ? ? ? ? QString str2=*Temp_str;
? ? ? ? ? ? delete Temp_str;
? ? ? ? ? ? Temp_str=nullptr;
? ? ? ? ? ? QThread::msleep(1000);
? ? ? ? ? ? //qDebug()<<str2;
? ? ? ? ? ? emit SendTempNewValue(m_seq,str2); ?//發射信號
? ? ? ? ? ??
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? qDebug()<< Q_FUNC_INFO <<"void SampleTemp_Thread::run() in pause";
? ? ? ? }
? ? ? ? msleep(3500); ? ?//線程休眠500ms
? ? }

? ? // ?在 ?m_stop==true時結束線程任務
? ? vmanger1.close();
? ? quit(); ? ? //相當于exit(0), 退出線程的事件循環
}
void SampleTemp_Thread::ChangeState(QString cmd)
{
? ? if(cmd=="begin")
? ? {
? ? ? ? Begin();
? ? }
? ? else if(cmd=="pause")
? ? {
? ? ? ? Pause();
? ? }

}
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715468.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715468.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715468.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++虛函數調用規則

C虛函數調用規則 基類、派生類結構&#xff1a; class Foo { public:virtual void print() {cout << "Foo" << endl;} }; class Bar : public Foo { public:virtual void print() {cout << "Bar" << endl;} };1.通過對象直接調用…

AcWing 895. 最長上升子序列(線性dp)

問題描述 給定一個長度為N NN的數列&#xff0c;求數值嚴格單調遞增的子序列的長度最長是多少。 輸入格式&#xff1a; 第一行包含整數N NN。 第二行包含N NN個整數&#xff0c;表示完整序列。 輸出格式&#xff1a; 輸出一個整數&#xff0c;表示最大長度。 數據范圍 1 ≤…

【C++提高編程】

C提高編程 C提高編程1 模板1.1 模板的概念1.2 函數模板1.2.1 函數模板語法1.2.2 函數模板注意事項1.2.3 函數模板案例1.2.4 普通函數與函數模板的區別1.2.5 普通函數與函數模板的調用規則1.2.6 模板的局限性 1.3 類模板1.3.1 類模板語法1.3.2 類模板與函數模板區別1.3.3 類模板…

備戰藍橋杯---動態規劃的一些思想1

話不多說&#xff0c;直接看題&#xff1a; 目錄 1.雙線程DP 2.正難則反多組DP 3.換個方向思考&#xff1a; 1.雙線程DP 可能有人會說直接貪心&#xff1a;先選第1條的最優路徑&#xff0c;再選第2條最優路徑。 其實我們再選第1條時&#xff0c;我們怎么選會對第2條的路徑…

FastJson中“$ref 循環引用檢測”的問題

今天在測試時&#xff0c;錯誤停留在了以下的代碼行 Object object new ObjectMapper().readValue(JSON.toJSONString(procInst.getForm()), Object.class); 報錯信息&#xff1a;com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field &quo…

linux命令行與shell腳本大全——學習筆記(1-4章)

第一章、第二章 查看運行層級 runlevel 目前有7個層級&#xff0c;3是有聯網的多用戶模式&#xff0c;5是配有GUI的多用戶模式&#xff0c;等等 第三章 啟動shell 查看/etc/passwd文件&#xff0c;可以看到每個用戶的默認shell程序&#xff0c;如: christine:x:1001:1001:…

面條機水箱低液位提醒功能如何實現

光電液位傳感器在面條機水箱低液位功能的實現中發揮著重要作用。該技術通過光學原理和分離式設計&#xff0c;實現了面條機水箱液位的精準檢測和智能控制&#xff0c;為面條生產提供了穩定的保障。 采用分離式液位傳感器&#xff0c;將菱鏡部分設計直接置于面條機水箱上&#…

nvidia a100-pcie-40gb環境安裝

1.conda create --name torch_li python3.8 2. conda install pytorch1.7.1 torchvision0.8.2 torchaudio0.7.2 cudatoolkit11.0 -c pytorch 環境測試&#xff1a;torch.cuda.is_available() 3.conda remove -n torch_li --all 4.pip install opencv-python-headless 5.pip ins…

SOCKS55代理與Http代理有何區別?如何選擇?

在使用IPFoxy全球代理時&#xff0c;選擇 SOCKS55代理還是HTTP代理&#xff1f;IPFoxy代理可以SOCKS55、Http協議自主切換&#xff0c;但要怎么選擇&#xff1f;為解決這個問題&#xff0c;得充分了解兩種代理的工作原理和配置情況。 在這篇文章中&#xff0c;我們會簡要介紹 …

overleaf上傳到arxiv 參考文獻無法引用(?)

記一下overleaf上傳到arxiv的bug 參考文獻無法引用&#xff08;&#xff1f;&#xff09; 因為需要上傳bbl文件而不是bib 用overleaf生成bbl 另外需要將bbl和txt的文件名設置成一樣的

Linux筆記--解壓縮

一、tar指令 Linux打包文件通常以.tar結尾&#xff0c;壓縮文件以.gz(.bz2)結尾。通常壓縮和打包是一起進行的&#xff0c;打包壓縮后文件后綴名一般為.tar.gz。 z∶使用gzip進行解壓縮 j:使用bzip2進行解壓縮 c: create&#xff0c;創建文件 x : extract&#xff0c;解壓 v:…

RocketMQ消息積壓如何處理

在高并發的場景下&#xff0c;由于消息產生速度超過消費速度&#xff0c;可能會導致消息積壓的問題。本文將介紹 RocketMQ 消息積壓的原因和如何處理積壓問題。 什么是消息積壓 消息積壓是使用 MQ 消息隊列系統中&#xff0c;最常見的一種性能問題。如下圖所示&#xff0c;當生…

2、Redis-Hash【常用】

目錄 一、Hash和String的區別 二、常用命令與演示 三、Redis中Hash類型應用場景 一、Hash和String的區別 這是String, keyvaluenameTrxcx 這是Hash&#xff0c; keyvaluestudentTrxcxnameTrxcxage21sexmale 可以明顯的看出&#xff0c;String的value就是一條數據&#…

手動實現一個簡單的 HTTP 請求

本文我們通過 Socket&#xff0c;寫一個 HTTP 協議&#xff0c;直觀的感受一下上篇文章中的請求和響應。 定義 socket server 通過上篇文章&#xff0c;我們知道 HTTP 協議底層是通過 Socket 實現的&#xff0c;所以我們先通過 socket 定義一個 server import socket#初始化 …

復試PAT乙級day34

1111~1115 1113 很難&#xff0c;看了題解 人類習慣用 10 進制&#xff0c;可能因為大多數人類有 10 根手指頭&#xff0c;可以用于計數。這個世界上有一種叫“錢串子”&#xff08;學名“蚰蜒”&#xff09;的生物&#xff0c;有 30 只細長的手/腳&#xff0c;在它們的世界里…

【探索AI】十六 深度學習之第2周:深度神經網絡(五)實踐與應用

實踐與應用 實現步驟 當您想要使用深度學習框架構建簡單的深度神經網絡并進行訓練與評估時&#xff0c;您可以按照以下步驟進行操作&#xff1a; 步驟一&#xff1a;選擇深度學習框架 選擇您熟悉或希望學習的深度學習框架&#xff0c;比如TensorFlow、PyTorch、Keras等。 …

算法題目跟連系列之“手把手刷鏈表”

第一道 題目&#xff1a;https://leetcode.cn/problems/partition-list/description/ 86 Partition List 這個題解決的時候&#xff0c;無非就是把鏈表中小于X的元素摘出來形成一個鏈表&#xff0c;同時也把大于等于X的元素摘出來形成另外一個鏈表。最后把這兩個鏈表合并。這個…

卷積神經網絡介紹

卷積神經網絡(Convolutional Neural Networks&#xff0c;CNN) 網絡的組件&#xff1a;卷積層&#xff0c;池化層&#xff0c;激活層和全連接層。 CNN主要由以下層構造而成&#xff1a; 卷積層&#xff1a;Convolutional layer&#xff08;CONV&#xff09;池化層&#xff1a…

docker報錯 fatal error: runtim: out of memory

fatal error: runtim: out of memory 真無語了 系統內存也夠用 原來是虛擬機的不夠用了 &#xff08;原本1g已經加到2g還是會報錯&#xff09; 直接3臺虛擬機都加到4g

多線程(進階四:線程安全的集合類)

目錄 一、多線程環境使用ArrayList 二、多線程環境使用隊列 三、多線程環境使用哈希表 1、HashMap 2、Hashtable 3、ConcurrentHashMap (1)縮小了鎖的粒度 (2)充分使用了CAS原子操作&#xff0c;減少一些加鎖 (3)針對擴容操作的一些優化&#xff08;化整為零&#xff…