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、特点 (1)基本特性 (2)数据结构 (3)运行环境 二、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 项目为例子: 项目打包 执行 npm run build , 生成的 .output 文件夹就是部署产物(目前不支持中文路径)执行 npm run preview 可以本地预览效果 方式一:使用 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 中,使用 KafkaListener 注解消费 Kafka 消息时,如果 service.save(cleanWikiSource) 抛出异…...

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

第二代GPT-SoVITS V2:让声音克隆变得简单
随着人工智能技术的飞速发展,AI声音克隆已经成为一种趋势,广泛应用于各个领域。为了满足更多用户的需求,第二代GPT-SoVITS V2应运而生,它由RVC变声器创始人“花儿不哭”与AI音色转换技术Sovits开发者Rcell联合开发,是一…...
基于x86_64汇编语言简单教程6: 变量,常量,与运算
目录 变量 为未初始化的数据分配存储空间 多重初始化 常量 equ指令 %assign 指令 %define指令 算数指令 inc 自增指令 dec指令 ADD和SUB指令 imul/mul和idiv/div 实践:我们来写一个简单的一位数加法器 NASM逻辑指令 AND 指令 …...

Vue-router 路由守卫执行流程图
vue-router 路由守卫执行的流程图(个人理解) 图1 - 图2...
ES6 中函数参数的默认值
概述: ES 允许给函数的参数赋初始值; 代码示例及相关说明: <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>函数参数默认值</title> </head> <body> <script&g…...
Redis知识应用索引指南
Redis,全称为Remote Dictionary Server,是一个开源的高性能键值对数据库。它以其卓越的性能、丰富的数据结构和灵活的持久化机制,在现代应用中扮演着至关重要的角色 1 什么是redis Redis是一个使用ANSI C语言编写的开源、跨平台的键值存储系…...

ES6扩展运算符
1.介绍: ... 扩展运算符能将数组转换为逗号分隔的参数序列; 扩展运算符(spread)也是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的 参数序列,对数组进…...
【树莓派 5B】Python 版本切换
【树莓派 5B】Python 版本切换 前言整体思路具体步骤常见问题Python 无法建立与 Python3 的软连接 前言 本文基于树莓派5B 32-bit 树莓派OS,以 Python-3.11.2 降级到 3.9.2 为例,总结了在树莓派上切换 Python 版本的步骤,帮助大家轻松完成 P…...
windows C++-有效使用PPL(五)
如果可能,避免错误共享 当在不同处理器上运行的多个并发任务写入位于同一高速缓存行上的变量时,会发生错误共享。 当一个任务写入一个变量时,这两个变量的缓存行将会失效。 每当缓存行失效时,每个处理器必须重新加载缓存行。 因此…...

【排序】——1.冒泡排序法(含优化)
冒泡排序 1.原理 左边大于右边交换一趟排下来最大的交换到右边来(接下来所以文章用升序举例) 从左到右,相邻元素进行比较。 每次比较一轮,就会找到序列中最大的一个(最小的一个——降序)。这个数就会从序列的最右边冒出来。 以…...
在MySQL中创建数据库和表
在MySQL中,创建数据库和表是数据库管理的基础操作。下面我将详细解释如何先创建一个数据库,然后在该数据库中创建一个或多个表。 ### 1. 创建数据库 首先,你需要登录到MySQL服务器。然后,使用CREATE DATABASE语句来创建一个新的…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...