组态王|以一定的时间间隔查询某个时间段内的历史数据

雅轩聊科技 2024-09-02 18:22:49

哈喽,你好啊,我是雷工!

前两天用组态王实现了《》的功能;

但是由于现场可能数据变化并非太过频繁,想要实现记录频率不变,还是以1分钟一次的频率进行存储,但是报表查询的时候想要只显示整点的数据。

上次实现的是用ReportSetHistData4函数,是查询某个时间段内所有的存储数据。

现如今不需要查询展示所有数据,要求按一定的间隔展示数据。

以下为实 现 笔记。

01 效果演示

①通过开始日期和结束日期选择时间段;

②通过文本输入框设置间隔时间;

③查询结果显示所选时间段内以设定的时间间隔展示所设定变量的历史数据。

④优化内容,为了使名称和时间一直显示,将前两行和第一列冻结;

02 实现思路

2.1、ReportSetHistData2()

首先想到的使用ReportSetHistData2()函数,使用该函数,不需要任何参数,系统会自动弹出历史数据查询对话框。

使用该函数其他都可以满足,唯一问题是变量的选择,当切换站点后查询历史数据时,所选的变量依然是上次站点查询时所选择的变量,每当更换站点查询时都需要重新选择变量,这一点太繁琐,是用户和操作者无法忍受的。所以无法使用该函数。

2.2、ReportSetHistData()

ReportSetHistData()函数是按照用户给定的参数查询历史数据,配合ReportSetTime()函数填充时间,实现按一定的间隔查询历史数据。

03 实现步骤

其中日历控件的设置与之前的历史数据查询是一样的,报表的抬头设置都是不用变的,此处不再赘述,有兴趣的可以。

主要的功能修改在按钮事件中。

查询脚本:

long StartTime;long EndTime;long StartYear;long StartMonth;long StartDay;long endYear;long endMonth;long endDay;long n;string strContentA;string strContentB;string strContentC;string strContentD;string strContentE;string strContentF;string strContentG;string strContentH;string strContentI;string strContentJ;StartYear=Ctrl0.GetYear();StartMonth=Ctrl0.GetMonth();StartDay=Ctrl0.GetDay();endYear=Ctrl0002.GetYear();endMonth=Ctrl0002.GetMonth();endDay=Ctrl0002.GetDay();StartTime=HTConvertTime(StartYear, StartMonth, StartDay, 0, 0, 0);EndTime =HTConvertTime(endYear,endMonth, endDay, 23, 59, 59);long JGTime;JGTime=StrToInt (\\local\间隔时间)*60;n=(EndTime-StartTime)/JGTime+3;strContentA="a3:a"+StrFromInt(n, 10);strContentB="b3:b"+StrFromInt(n, 10);strContentC="c3:c"+StrFromInt(n, 10);strContentD="d3:d"+StrFromInt(n, 10);strContentE="e3:e"+StrFromInt(n, 10);strContentF="f3:f"+StrFromInt(n, 10);strContentG="g3:g"+StrFromInt(n, 10);strContentH="h3:h"+StrFromInt(n, 10);strContentI="i3:i"+StrFromInt(n, 10);strContentJ="j3:j"+StrFromInt(n, 10);ReportSetLock("Roadcod1",0,2,1);ReportSetTime ("Roadcod1", StartTime, JGTime,strContentA);ReportSetHistData ("Roadcod1", "\\local\雷工笔记泵站F_1#机组出口压力",StartTime, JGTime, strContentB);ReportSetHistData ("Roadcod1", "\\local\雷工笔记泵站F_1#机组累计流量",StartTime, JGTime, strContentC);ReportSetHistData ("Roadcod1", "\\local\雷工笔记泵站F_1#机组瞬时流量",StartTime, JGTime, strContentD);ReportSetHistData ("Roadcod1", "\\local\雷工笔记泵站F_2#机组出口压力",StartTime, JGTime, strContentE);ReportSetHistData ("Roadcod1", "\\local\雷工笔记泵站F_2#机组累计流量",StartTime, JGTime, strContentF);ReportSetHistData ("Roadcod1", "\\local\雷工笔记泵站F_2#机组瞬时流量",StartTime, JGTime, strContentG);ReportSetHistData ("Roadcod1", "\\local\雷工笔记泵站F_3#机组出口压力",StartTime, JGTime, strContentH);ReportSetHistData ("Roadcod1", "\\local\雷工笔记泵站F_3#机组累计流量",StartTime, JGTime, strContentI);ReportSetHistData ("Roadcod1", "\\local\雷工笔记泵站F_3#机组瞬时流量",StartTime, JGTime, strContentJ);ReportSetLock("Roadcod1",1,2,1);

04 后记

以上为组态王中以一定的时间间隔查询某个时间段内的历史数据的实现过程。

随时记录,防止忘记,再有类似需求不用一点点测试,可以直接查笔记,照着复现就行。

你在项目中遇到过哪些报表要求?

有什么难以解决的问题?欢迎在评论区讨论。

也可以在交流群中探讨,共同提高。

0 阅读:0

雅轩聊科技

简介:感谢大家的关注