当前位置: 首页 > news >正文

MFC工控项目实例二十八模拟量信号每秒采集100次

用两个多媒体定时器,一个定时0.1秒计时,另一个定时0.01秒用来对模拟量信号采集每秒100次。
1、在SEAL_PRESSUREDlg.h中添加代码

class CSEAL_PRESSUREDlg : public CDialo
{
public:CSEAL_PRESSUREDlg(CWnd* pParent = NULL);	// standard constructor...UINT timerID;//自己添加的定时器ID变量	void DestroyTimer();//自己声明的销毁定时器函数UINT CreateTimer();//自己声明的创建定时器函数void OnTimer_1(UINT nIDEvent_1);static void CALLBACK TimeProc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2);//定时器回调函数int t_time;UINT timerID_2;//自己添加的定时器ID变量	void DestroyTimer_2();//自己声明的销毁定时器函数UINT CreateTimer_2();//自己声明的创建定时器函数void OnTimer_2(UINT nIDEvent_2);static void CALLBACK TimeProc_2(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2);//定时器回调函数double  t_time_2;...}

2、在SEAL_PRESSUREDlg.cpp中添加代码

void CSEAL_PRESSUREDlg::OnTesStart() 
{if (m_isStop){m_TES_START.SetIcon(IDI_TES_START); m_TES_START.SetAlign(CButtonST::ST_ALIGN_VERT);((CButton *)GetDlgItem(IDC_TES_START))->SetWindowText(m_isStop ? "结束测试" : "开始测试");			DestroyTimer();DestroyTimer_2();m_isStop=0;}else{ t_time=0;t_time_2=0.0;m_TES_START.SetIcon(IDI_TES_STOP); m_TES_START.SetAlign(CButtonST::ST_ALIGN_VERT);((CButton *)GetDlgItem(IDC_TES_START))->SetWindowText(m_isStop ? "结束测试" : "开始测试");//	CTime m_time; 		//   m_time=CTime::GetCurrentTime();             //获取当前时间日期//   CString   m_strDateTime=m_time.Format(_T("%Y-%m-%d %H:%M:%S %A"));   //格式化日期时间//  CString   str=m_time.Format("%Y_%m_%d ");   //格式化日期时间//	theApp.time_name=theApp.typ_name+"\\"+str+"\\";         SYSTEMTIME SystemTime;::GetLocalTime(&SystemTime);CString str1="",Date="";str1.Format("%02d",SystemTime.wYear);Date = Date + str1;str1.Format("_%02d",SystemTime.wMonth);Date = Date + str1;str1.Format("_%02d",SystemTime.wDay);Date = Date + str1;
//	str1.Format("_%02d",SystemTime.wHour);
//	Date = Date + str1;
//	str.Format("_%02d",SystemTime.wMinute);
//	Date = Date + str1;
//	str.Format("_%02d",SystemTime.wSecond);
//	Date = Date + str1;     theApp.time_name=theApp.typ_name+Date+"\\";if (!PathIsDirectory(theApp.time_name)) //目录不存在{ //	MessageBox("文件不存在");CreateDirectory(theApp.time_name, FALSE);//不存在则创建cre_data();}else //目录存在{//	MessageBox("文件存在");cre_data();}SetDlgItemText(IDC_STATIC99,theApp.time_name);CreateTimer();	  CreateTimer_2();	  m_isStop=1;}}UINT CSEAL_PRESSUREDlg::CreateTimer()
{timeBeginPeriod(1);//设置定时器设备的最小时间分辨率timerID = timeSetEvent(100, 1, TimeProc, (DWORD)this, TIME_PERIODIC);return timerID;//返回定时器ID// timeSetEvent(UINT uDelay, UINT uResolution, LPTIMECALLBACK IP TimeProc, DWORD_PTR dwUser, UINT fuEvent);
//创建并初始化定时器事件,定时器回调函数入口地址
//uDelay:定时器触发时间间隔,以毫秒为单位
//uResolution:定时器设备精度,以毫秒为单位,,默认为1ms
//LpTimeProc:定时器出发时间的回调函数的地址
//dwUser:传递给回调函数的数据
//fuEvent:定时类型,TIME_ONSHOT表示uDelay毫秒后只产生一次事件,TIME_PERIOFIC表示每隔uDelay毫秒周期性的产生事件}void CALLBACK CSEAL_PRESSUREDlg::TimeProc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{CSEAL_PRESSUREDlg* time_dlg = (CSEAL_PRESSUREDlg*)dwUser;time_dlg->OnTimer_1(1);//uID:多媒体定时器的ID,ID值由timeSetEvent创建定时器事件时返回//uMsg:保留 不使用//dwUser:由timeSetEvent传递的用户数据//dw1,dw2:保留 不使用
}void CSEAL_PRESSUREDlg::OnTimer_1(UINT nIDEvent_1)
{if (nIDEvent_1==1 && t_time<=theApp.m_sys_data.m_fMaxTime*10){t_time++;CString str_t2_6,str_t2_5,str_t2_4,str_t2_3,str_t2_2,str_t2_1;int	 t2=t_time;		   	   str_t2_5.Format("%d",t2%10);str_t2_4.Format("%d",(t2/10)%10);str_t2_3.Format("%d",(t2/100)%10);str_t2_2.Format("%d",(t2/1000)%10);str_t2_1.Format("%d",(t2/10000)%10);		  SetDlgItemText(IDC_STATIC4,str_t2_5);SetDlgItemText(IDC_STATIC3,".");SetDlgItemText(IDC_STATIC2,str_t2_4);		 SetDlgItemText(IDC_STATIC1,str_t2_3);SetDlgItemText(IDC_STATIC0,str_t2_2);}}void CSEAL_PRESSUREDlg::DestroyTimer()
{timeKillEvent(timerID);//销毁定时器timeEndPeriod(1);//清除上次调用 timeBeginPeriod 函数时指定的最小计时器分辨率
}UINT CSEAL_PRESSUREDlg::CreateTimer_2()
{timeBeginPeriod(1);//设置定时器设备的最小时间分辨率timerID_2 = timeSetEvent(10, 1, TimeProc_2, (DWORD)this, TIME_PERIODIC);return timerID_2;//返回定时器ID}void CALLBACK CSEAL_PRESSUREDlg::TimeProc_2(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{CSEAL_PRESSUREDlg* time_dlg_2 = (CSEAL_PRESSUREDlg*)dwUser;time_dlg_2->OnTimer_2(2);}void CSEAL_PRESSUREDlg::OnTimer_2(UINT nIDEvent_2)
{           if (nIDEvent_2==2 && t_time<=theApp.m_sys_data.m_fMaxTime*10){t_time_2++;double YRandom;//随机数YRandom = rand()%5; // Generate Random data  m_ctrlPlot_1.GetChannel(0).AddXY(t_time_2/100, YRandom );}          }void CSEAL_PRESSUREDlg::DestroyTimer_2()
{timeKillEvent(timerID_2);//销毁定时器timeEndPeriod(1);//清除上次调用 timeBeginPeriod 函数时指定的最小计时器分辨率
}

运行程序点击开始试验
在这里插入图片描述

相关文章:

MFC工控项目实例二十八模拟量信号每秒采集100次

用两个多媒体定时器&#xff0c;一个定时0.1秒计时&#xff0c;另一个定时0.01秒用来对模拟量信号采集每秒100次。 1、在SEAL_PRESSUREDlg.h中添加代码 class CSEAL_PRESSUREDlg : public CDialo { public:CSEAL_PRESSUREDlg(CWnd* pParent NULL); // standard constructor&a…...

安装scrcpy-client模块av模块异常,环境问题解决方案

背景 使用 pip install scrcpy-client命令出现以下报错 performance hint: av\logging.pyx:232:5: Exception check on log_callback will always require the GIL to be acquired. Possible solutions: 1. Declare log_callback as noexcept if you control the definition …...

硅谷甄选(11)角色管理

角色管理模块 10.1 角色管理模块静态搭建 还是熟悉的组件&#xff1a;el-card、el-table 、el-pagination、el-form <template><el-card><el-form :inline"true" class"form"><el-form-item label"职位搜索"><el-…...

C语言结构体 变量对齐原理

以32位Linux为例&#xff0c;默认对齐值是4. 对齐原则通常有以下几种&#xff1a; 第一个成员在与结构体变量偏移量为0的地址处。其他成员变量要对齐到某个数字&#xff08;对齐参数&#xff09;的整数倍的地址上。结构体总大小为最大对齐参数的整数倍。嵌套结构体要对齐到…...

【oracle】正则表达式

文章目录 1.介绍1.1 什么是正则表达式1.2 什么是Oracle正则表达式 2. Oracle正则表达式的基础知识2.1 常用的元字符2.2 常用的转义序列2.3 常用的量词 3. Oracle正则表达式的函数3.1 REGEXP_LIKE3.2 REGEXP_SUBSTR3.3 REGEXP_REPLACE3.4 REGEXP_INSTR3.5 REGEXP_COUNT 4. Oracl…...

如何找到网上爆款内容,快速复制扩大品牌声量

社媒内容爆款复制是现代营销中的一个重要策略&#xff0c;它对于提升品牌声量、曝光度和知名度具有显著效果。 首先什么是爆款&#xff1f; 爆款内容指的是在社交媒体或其他在线平台上迅速获得大量关注、分享和讨论的内容。 准确、及时找到这部分品牌相关的爆款内容&#xf…...

补齐:相交链表:扣160

梦重新开始的地方 – 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。图示两个链表在节点 c1 开始相交&#xff1a; 示例&#xff1a; 何解&#xff1f; 暴力&…...

Java项目实战II基于Java+Spring Boot+MySQL的智能推荐的卫生健康系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 基于Java、…...

NET Core的AOP实施方法1 DispatchProxy

NET Core的AOP实施方法1 DispatchProxy NET Framework的AOP实施方法1 ContextBoundObject NET Framework的AOP实施方法2 RealProxy 源码见Github DispatchProxy NET Core DispatchProxy 是一个在 .NET 框架中引入的概念&#xff0c;特别是在 C# 语言中。它是一种特殊类型的代…...

AIGC生成式人工智能——泼天的富贵(三)

人工智能作为第四次工业革命的标志性技术&#xff0c;正在深刻地改变着全球经济、社会结构和人类生活方式。 今天的人工智能&#xff0c;就像当年的房地产经济&#xff0c;未来至少会有十年的红利期。 一、人工智能&#xff0c;给我带来了第二桶金 你永远赚不到你认知以外的…...

GetX的一些高级API

目录 前言 一、一些常用的API 二、局部状态组件 1.可选的全局设置和手动配置 2.局部状态组件 1.ValueBuilder 1.特点 2.基本用法 2.ObxValue 1.特点 2.基本用法 前言 这篇文章主要讲解GetX的一些高级API和一些有用的小组件。 一、一些常用的API GetX提供了一些高级…...

【笔面试常见题:三门问题】用条件概率、全概率和贝叶斯推导

1. 问题介绍 三门问题&#xff0c;又叫蒙提霍尔问题&#xff08;Monty Hall problem&#xff09;&#xff0c;以下是蒙提霍尔问题的一个著名的叙述&#xff0c;来自Craig F. Whitaker于1990年寄给《展示杂志》&#xff08;Parade Magazine&#xff09;玛丽莲沃斯莎凡特&#x…...

刘艳兵-DBA011-应用使用Oracle数据库,必须启动哪些服务?

应用使用Oracle数据库&#xff0c;必须启动哪些服务&#xff08; &#xff09; A OracleServiceSID B OracleJobSchedulerSID C OracleMTSRecoveryService D OracleHOME_NAMETNSListener 答&#xff1a; A OracleServiceSID D OracleHOME_NAMETNSListener…...

注释多行代码的vim插件

编写vim 插件代码 add_comments.vim function! AddComment()let l:comment #if &filetype cpplet l:comment //elseif &filetype clet l:comment //endiflet [l:start, l:end][ line("<"), line(">") ]let l:commented_lines []for …...

Docker 安装HomeAssistant智能家居系统

HomeAssistant 介绍 简介 Home Assistant是一个自由开源的智能家居自动化平台&#xff0c;它可以控制并监测各种智能家居设备、传感器和其他物联网设备。Home Assistant可以运行在树莓派、NVIDIA Jetson Nano等低功耗设备上&#xff0c;使用户可以快速搭建自己的智能家居系统。…...

21 Docker容器集群网络架构:四、Docker集群网络验证

文章目录 Docker容器集群网络架构:四、Docker集群网络验证4.1 创建网络4.2 查看创建的网络4.2.1 查看节点1创建的网络4.2.2 查看节点2创建的网络4.2.3 查看节点3创建的网络4.3 运行容器并查看4.3.1 运行容器4.3.2 节点1查看4.3.3 节点2查看4.3.4 节点3查看Docker容器集群网络架…...

【Kaggle | Pandas】练习5:数据类型和缺失值

文章目录 1. 获取列数据类型.dtype / .dypes2. 转换数据类型.astype()3. 获取数据为空的列 .isnull()4. 将缺少值替换并且排序.fillna()&#xff0c;.sort_values() 1. 获取列数据类型.dtype / .dypes 数据集中points列的数据类型是什么&#xff1f; # Your code here dtype …...

《YOLO 目标检测》—— YOLO v4 详细介绍

文章目录 一、整体网络结构1. YOLO v4 网络结构图2.对之前版本改进创新的概括 二、对改进创新部分的具体介绍1. 输入端创新2. Backbone主干网络创新CSPDarknet53Mish激活函数Dropblock正则化 3. 特征融合创新SPP模块PAN结构 4. Prediction输出层创新&#xff08;未写完&#xf…...

Ubuntu:通过ssh链接另外一台Ubuntu

本文将介绍通过ssh链接另外一台Ubuntu的方法。 一、安装openssh-server sudo apt update sudo apt install openssh-server二、查看SSH是否运行 sudo systemctl status ssh三、链接 ssh usernameremote_ip_address四、复制A电脑的文件到本地 scp usernameremote_ip_addres…...

黄山谷捷提交创业板IPO注册,募资扩产提升综合竞争力

近日&#xff0c;黄山谷捷股份有限公司&#xff08;下文称“黄山谷捷”&#xff09;申请深交所创业板IPO审核状态变更为“提交注册”。据悉&#xff0c;本次IPO黄山谷捷拟募资50,201.19万元&#xff0c;分别用于功率半导体模块散热基板智能制造及产能提升项目&#xff0c;研发中…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...