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

MFC工控项目实例二十四模拟量校正值输入

承接专栏《MFC工控项目实例二十三模拟量输入设置界面》
对模拟量输入的零点校正值及满量程对应的电压值进行输入。
1、在SenSet.h文件中添加代码

#include "BtnST.h"
#include "ShadeButtonST.h"/
// SenSet dialogclass SenSet : public CDialog
{
// Construction
public:SenSet(CWnd* pParent = NULL);   // standard constructorCFont m_font;CString	m_Path;CString strFilePath;int nSel;CString nSel_str;// Dialog Data//{{AFX_DATA(SenSet)enum { IDD = IDD_DIALOG_SEN_TEST };CListCtrl	m_IDC_LIST2;CListBox	m_IDC_LIST1;CShadeButtonST	m_bAdd_2;CShadeButtonST	m_bDel_2;CShadeButtonST	m_bParameter_2;CShadeButtonST	m_bReturn_2;//}}AFX_DATA// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(SenSet)protected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support//}}AFX_VIRTUAL// Implementation
protected:// Generated message map functions//{{AFX_MSG(SenSet)virtual BOOL OnInitDialog();afx_msg void OnButton7();afx_msg void OnSelchangeList1();afx_msg void OnClickList2(NMHDR* pNMHDR, LRESULT* pResult);afx_msg void OnButton1();//}}AFX_MSGDECLARE_MESSAGE_MAP()
};

2、在SenSet.cpp文件中添加代码

#include "stdafx.h"
#include "seal_pressure.h"
#include "SenSet.h"
#include "Data_2.h"
#include "PC60002K.H"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/
// SenSet dialogSenSet::SenSet(CWnd* pParent /*=NULL*/): CDialog(SenSet::IDD, pParent)
{
m_font.CreateFont(-28,0,0,0,700,FALSE,FALSE,0,134,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_SWISS,"楷体_GB2312");TCHAR exeFullPath[MAX_PATH];GetModuleFileName(NULL,exeFullPath,MAX_PATH);m_Path = exeFullPath;for(int i = m_Path.GetLength() - 1; i > 0 ; i --){if(m_Path.GetAt(i) == '\\')break;}SetCurrentDirectory(m_Path);m_Path = m_Path.Left(i);strFilePath= m_Path + "\\Test.ini";nAddr_AD_2=0x110;	COMB_Data_AD_Number_2=(sizeof(COMB_Data_AD_2) / sizeof(COMB_Data_AD_2[1]));
}void SenSet::DoDataExchange(CDataExchange* pDX)
{CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(SenSet)DDX_Control(pDX, IDC_LIST2, m_IDC_LIST2);DDX_Control(pDX, IDC_LIST1, m_IDC_LIST1);DDX_Control(pDX, IDC_BUTTON1, m_bAdd_2);DDX_Control(pDX, IDC_BUTTON2, m_bDel_2);DDX_Control(pDX, IDC_BUTTON6, m_bParameter_2);DDX_Control(pDX, IDC_BUTTON7, m_bReturn_2);//}}AFX_DATA_MAP
}BEGIN_MESSAGE_MAP(SenSet, CDialog)//{{AFX_MSG_MAP(SenSet)ON_BN_CLICKED(IDC_BUTTON7, OnButton7)ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1)ON_NOTIFY(NM_CLICK, IDC_LIST2, OnClickList2)ON_BN_CLICKED(IDC_BUTTON1, OnButton1)//}}AFX_MSG_MAP
END_MESSAGE_MAP()/
// SenSet message handlersBOOL SenSet::OnInitDialog() 
{CDialog::OnInitDialog();m_bAdd_2.SetShade(CShadeButtonST::SHS_HARDBUMP);m_bDel_2.SetShade(CShadeButtonST::SHS_HARDBUMP);m_bParameter_2.SetShade(CShadeButtonST::SHS_HARDBUMP);m_bReturn_2.SetShade(CShadeButtonST::SHS_HARDBUMP);DWORD dwExStyles = m_IDC_LIST2.GetExtendedStyle();m_IDC_LIST2.SetExtendedStyle(dwExStyles |LVS_EX_GRIDLINES |LVS_EX_FULLROWSELECT | LVS_EX_FLATSB |LVS_EX_ONECLICKACTIVATE);LVCOLUMN cloumn;int i;cloumn.mask = LVCF_TEXT|LVCF_WIDTH;cloumn.pszText = "序号";cloumn.cx =50;i = m_IDC_LIST2.InsertColumn(0,&cloumn);cloumn.mask = LVCF_TEXT|LVCF_WIDTH;cloumn.pszText = "电压";cloumn.cx =120;i =m_IDC_LIST2.InsertColumn(1,&cloumn);cloumn.pszText = "对应值";cloumn.cx =120;i = m_IDC_LIST2.InsertColumn(2,&cloumn);for( i=0;i<COMB_Data_AD_Number_2;i++){GetPrivateProfileString("AD输入",COMB_Data_AD_2[i],NULL,b_str_AD_2[i].GetBuffer(20),20,strFilePath);if (b_str_AD_2[i]!="-1" ){//  AD_2[i]=_ttoi(b_str_AD_2[i]);m_IDC_LIST1.AddString(COMB_Data_AD_2[i]);}}if( OpenDevice6K() != TRUE )
AfxMessageBox("Open device failed!");return TRUE;  // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE
}void SenSet::OnButton7() 
{EndDialog(IDD_DIALOG_BOA_TEST);}void SenSet::OnSelchangeList1() 
{m_bAdd_2.EnableWindow(true);m_bParameter_2.EnableWindow(true);nSel =m_IDC_LIST1.GetCurSel();m_IDC_LIST1.GetText(nSel,nSel_str);Sleep(500);CString str;str.Format("%d",nSel);CString str6[16],str7[16],str8[16],str9[16];GetPrivateProfileString("A/D设置",nSel_str+"零点电压",NULL,str6[16].GetBuffer(20),20,strFilePath);GetPrivateProfileString("A/D设置",nSel_str+"零点数值",NULL,str7[16].GetBuffer(20),20,strFilePath);GetPrivateProfileString("A/D设置",nSel_str+"量程电压",NULL,str8[16].GetBuffer(20),20,strFilePath);GetPrivateProfileString("A/D设置",nSel_str+"量程数值",NULL,str9[16].GetBuffer(20),20,strFilePath);m_IDC_LIST2.DeleteAllItems();m_IDC_LIST2.InsertItem(0, _T("1"));   m_IDC_LIST2.SetItemText(0, 1,_T(str6[16]));  m_IDC_LIST2.SetItemText(0, 2,str7[16]);m_IDC_LIST2.InsertItem(1, _T("2"));   m_IDC_LIST2.SetItemText(1, 1,str8[16]);  m_IDC_LIST2.SetItemText(1, 2,str9[16]);//	SetDlgItemText(IDC_STATIC99,str);  
}void SenSet::OnClickList2(NMHDR* pNMHDR, LRESULT* pResult) 
{m_bDel_2.EnableWindow(true);	*pResult = 0;
}void SenSet::OnButton1() 
{CString str1,str2,str4,str5;CString str6[16],str7[16],str8[16],str9[16];GetDlgItemText(IDC_EDIT1,str1);GetDlgItemText(IDC_EDIT2,str2);GetDlgItemText(IDC_EDIT4,str4);GetDlgItemText(IDC_EDIT5,str5);WritePrivateProfileString("A/D设置",nSel_str+"零点电压",str1,strFilePath);WritePrivateProfileString("A/D设置",nSel_str+"零点数值",str2,strFilePath);WritePrivateProfileString("A/D设置",nSel_str+"量程电压",str4,strFilePath);WritePrivateProfileString("A/D设置",nSel_str+"量程数值",str5,strFilePath);Sleep(500);GetPrivateProfileString("A/D设置",nSel_str+"零点电压",NULL,str6[16].GetBuffer(20),20,strFilePath);GetPrivateProfileString("A/D设置",nSel_str+"零点数值",NULL,str7[16].GetBuffer(20),20,strFilePath);GetPrivateProfileString("A/D设置",nSel_str+"量程电压",NULL,str8[16].GetBuffer(20),20,strFilePath);GetPrivateProfileString("A/D设置",nSel_str+"量程数值",NULL,str9[16].GetBuffer(20),20,strFilePath);Sleep(500);m_IDC_LIST2.DeleteAllItems();m_IDC_LIST2.InsertItem(0, _T("1"));   m_IDC_LIST2.SetItemText(0, 1,_T(str6[16]));  m_IDC_LIST2.SetItemText(0, 2,str7[16]); 
//	m_IDC_LIST2.DeleteAllItems();m_IDC_LIST2.InsertItem(1, _T("2"));   m_IDC_LIST2.SetItemText(1, 1,str8[16]);  m_IDC_LIST2.SetItemText(1, 2,str9[16]);    }

运行程序
在这里插入图片描述

相关文章:

MFC工控项目实例二十四模拟量校正值输入

承接专栏《MFC工控项目实例二十三模拟量输入设置界面》 对模拟量输入的零点校正值及满量程对应的电压值进行输入。 1、在SenSet.h文件中添加代码 #include "BtnST.h" #include "ShadeButtonST.h"/ // SenSet dialogclass SenSet : public CDialog { // Co…...

analysis-ik分词器

analysis-ik分词器 1、安装离线在线 2、使用配置拓展词典 3、测试ik_smartik_max_word 1、安装 离线 使用离线安装下载地址https://release.infinilabs.com/analysis-ik/stable/找到对应es版本的ik分词器、下载zip后放到/elasticsearch/plugins/ik文件夹下。重启es即可生效 …...

开源的、基于内存的键值存储数据库redis详细介绍

目录 一、Redis的概述 1、概述 2、特点 &#xff08;1&#xff09;基本特性 &#xff08;2&#xff09;数据结构 &#xff08;3&#xff09;运行环境 二、Redis的重要作用 1、缓存 2、会话存储 3、消息队列 4、计数器 5、分布式锁 6、排行榜 7、实时数据处理 三、…...

三种容器 std::vector、std::map、std::unordered_set 的对比分析

目录 1.添加元素 1.1 std::vector 1.2 std::map 1.3 std::unordered_set 2. 查找元素 2.1 std::vector 2.2 std::map 2.3 std::unordered_set 3. 遍历容器 3.1 std::vector 使用范围基for循环(range-based for loop) 使用迭代器: 3.2 std::map 3.3 std::unord…...

Nuxt3 SSR 服务端渲染部署 PM2 全流程(Nest.js 同理)

项目打包 我们以 Nuxt3 项目为例子&#xff1a; 项目打包 执行 npm run build &#xff0c; 生成的 .output 文件夹就是部署产物&#xff08;目前不支持中文路径&#xff09;执行 npm run preview 可以本地预览效果 方式一&#xff1a;使用 Node 部署 需要服务器安装 Nod…...

如何轻松使用pip安装Git仓库中的私有Python模块(使用pip和Git仓库发布和安装私有Python模块)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Git模块 📒📝 Git仓库要求🔖 项目目录结构🔖 文件说明📝 编写setup.py📝 配置MANIFEST.in📝 推送代码到Git仓库📝 使用pip安装模块🔖 使用用户名和密码🔖 使用Personal Access Token (PAT)🔖 示例📝 更…...

写 R 包教程

R R 包开发 | 保姆级教程-CSDN博客 https://www.prestevez.com/post/r-package-tutorial/ 1、加载开发所需 R 包 library(usethis) library(devtools) library(roxygen2) 2、在当前工作路径创建 R 包 usethis::create_package("myRpkg") # 在当前路径创建 my…...

【java】数组(超详细总结)

目录 一.一维数组的定义 1.创建数组 2.初始化数组 二.数组的使用 1.访问数组 2.遍历数组 3.修改数据内容 三.有关数组方法的使用 1.toString 2. copyOf 四.查找数组中的元素 1.顺序查找 2.二分查找binarySearch 五.数组排序 1.冒泡排序 2.排序方法sort 六.数组逆置…...

@KafkaListener注解

KafkaListener(topics "${xxxx}", containerFactory "xxx") public void consume(String message) {service.save(xx); }在 Spring Boot 中&#xff0c;使用 KafkaListener 注解消费 Kafka 消息时&#xff0c;如果 service.save(cleanWikiSource) 抛出异…...

2025年计算机视觉研究进展与应用国际学术会议 (ACVRA 2025)

2025年计算机视觉研究进展与应用国际学术会议 (ACVRA 2025) 2025 International Conference on Advances in Computer Vision Research and Applications 重要信息 2025年3月28-30日 南京 一轮截稿日期&#xff1a;2024年11月30日 EI检索稳定 早投稿&#xff0c;早审稿&a…...

第二代GPT-SoVITS V2:让声音克隆变得简单

随着人工智能技术的飞速发展&#xff0c;AI声音克隆已经成为一种趋势&#xff0c;广泛应用于各个领域。为了满足更多用户的需求&#xff0c;第二代GPT-SoVITS V2应运而生&#xff0c;它由RVC变声器创始人“花儿不哭”与AI音色转换技术Sovits开发者Rcell联合开发&#xff0c;是一…...

基于x86_64汇编语言简单教程6: 变量,常量,与运算

目录 变量 为未初始化的数据分配存储空间 多重初始化 常量 equ指令 &#xff05;assign 指令 &#xff05;define指令 算数指令 inc 自增指令 dec指令 ADD和SUB指令 imul/mul和idiv/div 实践&#xff1a;我们来写一个简单的一位数加法器 NASM逻辑指令 AND 指令 …...

Vue-router 路由守卫执行流程图

vue-router 路由守卫执行的流程图&#xff08;个人理解&#xff09; 图1 - 图2...

ES6 中函数参数的默认值

概述&#xff1a; ES 允许给函数的参数赋初始值&#xff1b; 代码示例及相关说明&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>函数参数默认值</title> </head> <body> <script&g…...

Redis知识应用索引指南

Redis&#xff0c;全称为Remote Dictionary Server&#xff0c;是一个开源的高性能键值对数据库。它以其卓越的性能、丰富的数据结构和灵活的持久化机制&#xff0c;在现代应用中扮演着至关重要的角色 1 什么是redis Redis是一个使用ANSI C语言编写的开源、跨平台的键值存储系…...

ES6扩展运算符

1.介绍&#xff1a; ... 扩展运算符能将数组转换为逗号分隔的参数序列&#xff1b; 扩展运算符&#xff08;spread&#xff09;也是三个点&#xff08;...&#xff09;。它好比 rest 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的 参数序列&#xff0c;对数组进…...

【树莓派 5B】Python 版本切换

【树莓派 5B】Python 版本切换 前言整体思路具体步骤常见问题Python 无法建立与 Python3 的软连接 前言 本文基于树莓派5B 32-bit 树莓派OS&#xff0c;以 Python-3.11.2 降级到 3.9.2 为例&#xff0c;总结了在树莓派上切换 Python 版本的步骤&#xff0c;帮助大家轻松完成 P…...

windows C++-有效使用PPL(五)

如果可能&#xff0c;避免错误共享 当在不同处理器上运行的多个并发任务写入位于同一高速缓存行上的变量时&#xff0c;会发生错误共享。 当一个任务写入一个变量时&#xff0c;这两个变量的缓存行将会失效。 每当缓存行失效时&#xff0c;每个处理器必须重新加载缓存行。 因此…...

【排序】——1.冒泡排序法(含优化)

冒泡排序 1.原理 左边大于右边交换一趟排下来最大的交换到右边来(接下来所以文章用升序举例) 从左到右&#xff0c;相邻元素进行比较。 每次比较一轮&#xff0c;就会找到序列中最大的一个&#xff08;最小的一个——降序&#xff09;。这个数就会从序列的最右边冒出来。 以…...

在MySQL中创建数据库和表

在MySQL中&#xff0c;创建数据库和表是数据库管理的基础操作。下面我将详细解释如何先创建一个数据库&#xff0c;然后在该数据库中创建一个或多个表。 ### 1. 创建数据库 首先&#xff0c;你需要登录到MySQL服务器。然后&#xff0c;使用CREATE DATABASE语句来创建一个新的…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...