网站首页 > 技术文章 正文
哈喽,你好啊,我是雷工!
前两天有个哥们儿让帮忙在组态王软件 中实现历史报表的查询。
现将实现过程记录下来,防止忘记。
以下为实 现笔记。
01 效果演示
实现内容,通过两个日历控件选择开始日期和结束日期,然后点击【历史数据查询】按钮,在报表中显示对应时间段的数据集。
02 实现步骤
2.1、组态界面
在界面上添加标签,标示【开始日期】和【结束日期】;
添加两个日历控件,用于选择开始日期和结束日期;
添加一个文本按钮,用于实现查询的动作;
添加一个报表控件,用于展示查询结果;
2.2、Calendar控件
①单击工具箱中的【插入通用控件】按钮
②在弹出的【插入通用控件】对话框选择【Calender Control】控件,然后点击【确定】按钮,关闭对话框,然后在画面上适当的位置按住鼠标左键并拖动,绘制出一个矩形框,放开鼠标,就完成了控件的绘制。
2.3、报表控件
①添加报表
同样的方式,先在工具箱中找到报表窗口控件,然后在合适的位置绘制报表。
②配置报表
组态 王软件中每个报表都要定义一个唯一的标识名,
用鼠标双击报表窗口的灰色部分,弹出【报表设计】对话框;
该对话框主要用于设置报表的名称、报表格式的行数、列数以及选择套用表格的样式。
接着就可以使用报表工具箱中的工具对表表进行设置。
2.4、查询按钮
①添加按钮
这里使用文本作为按钮,文本的字符串显示设置为:历史数据查询;
②弹起时
这里动作由弹起时触发,因此勾选【弹起时】,并点击在其中编写弹起时要执行的脚本。
③HTConvertTime函数
此函数将指定的时间格式(年,月,日,时,分,秒)转换为以秒为单位的长整型数,转换的时间基准是UTC(格林尼治)1970年1月1日00:00:00。
HTConvertTime(Year,Month,Day,Hour,Minute,Second);
参数:
Year: 年,整型,此值必须介于1970和2038之间
Month: 月,整型,此值必须介于1和12之间
Day: 日,整型,此值必须介于1和31之间
Hour: 小时,整型,此值必须介于0和23之间
Minute: 分钟,整型,此值必须介于0和59之间
Second: 秒,整型,此值必须介于0和59之间
返回值:整型
注意:
调用此函数将用年、月、日、时、分、秒表示的时间转换成自1970年1月1日00:00:00即UCT起到该时刻所经过的秒数。在定义返回值变量时,应注意将其最大值置为整型数的最大范围,如2×109,否则可能会因为返回数据超出范围导致转换的时间不正确。
④ReportSetHistData4函数
此函数用于从历史库中,查询某变量(TagName)一段时间范围内(StartTime-- EndTime)的所有值,在报表(ReportName)中显示出来;如果bTimeVisible=1,从(StartRow,StartCol)开始显示2列, 左列显示时间,右列显示值;如果bTimeVisible=0,从(StartRow,StartCol)开始显示1列,只显示数值。语法格式使用如下:
ReportSetHistData4("ReportName","TagName",StartTime,EndTime,StartRow,StartCol,bTimeVisible);
参数:
ReportName --string 报表名称
TagName --string 变量名称
StartTime --long 数据查询的开始时间
EndTime --long 数据查询的结束时间
该时间是通过组态王HTConvertTime函数转换的以1970年1月1日8:00:00(东八区)为基准的长整型数,所以用户在使用本函数查询历史数据之前,应先将查询起始时间转换为长整型数值
StartRow --long 查询的数据在报表中填充的起始行,小于20000。
StartCol --long查询的数据在报表中填充的起始列,小于128。
bTimeVisible --bool查询的数据在报表中是否显示时间列。0,不显示时间列;1,显示时间列。
返回值:
0,查询失败;
1,查询成功;
2,参数超限;
3,报表名错误;
4,变量名错误;
⑤弹起时脚本
long StartTime;
long EndTime;
long StartYear;
long StartMonth;
long StartDay;
long endYear;
long endMonth;
long endDay;
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);
ReportSetHistData4("Roadcod1", "1#机组出口压力", StartTime, EndTime, 3,1,1);
ReportSetHistData4("Roadcod1", "1#机组累计流量", StartTime, EndTime, 3,3,0);
ReportSetHistData4("Roadcod1", "1#机组瞬时流量", StartTime, EndTime, 3,4,0);
ReportSetHistData4("Roadcod1", "2#机组出口压力", StartTime, EndTime, 3,5,0);
ReportSetHistData4("Roadcod1", "2#机组累计流量", StartTime, EndTime, 3,6,0);
ReportSetHistData4("Roadcod1", "2#机组瞬时流量", StartTime, EndTime, 3,7,0);
ReportSetHistData4("Roadcod1", "3#机组出口压力", StartTime, EndTime, 3,8,0);
ReportSetHistData4("Roadcod1", "3#机组累计流量", StartTime, EndTime, 3,9,0);
ReportSetHistData4("Roadcod1", "3#机组瞬时流量", StartTime, EndTime, 3,10,0);
03 后记
以上为在组态王中查询历史数据的过程,有用到的同学可以借鉴。
当然第一次用也可能有让你见笑的地方,也欢迎评论指出。
另外你用过哪些组态软件?觉得哪款最好用?欢迎在交流群畅所欲言,交流经验。
猜你喜欢
- 2025-08-03 隐式等待、显示等待和强制等待
- 2025-08-03 零基础C#上位机框架项目实例(完结篇)
- 2025-08-03 一文搞懂构建Web内容的技术
- 2025-08-03 西门子WINCC中的VBScript(VBS)常用于自动化脚本开发
- 2025-08-03 力控和sql2000之间的数据转储
- 2025-08-03 组态王|通过日历控件选择时间段查询历史报警
- 2025-08-03 怎样添加、移除、移动、复制、创建和查找节点?
- 2025-08-03 常见的10种WEB页面元素定位方法及其特点
- 2025-08-03 Vue3 前端监控神器!3000 字实战指南教你秒级定位 Web 性能问题
- 2025-08-03 [汇川PLC] 威纶通宏指令设置当前时间到汇川AM523
- 08-06中等生如何学好初二数学函数篇
- 08-06C#构造函数
- 08-06初中数学:一次函数学习要点和方法
- 08-06仓颉编程语言基础-数据类型—结构类型
- 08-06C++实现委托机制
- 08-06初中VS高中三角函数:从"固定镜头"到"360°全景",数学视野升级
- 08-06一文讲透PLC中Static和Temp变量的区别
- 08-06类三剑客:一招修改所有对象!类方法与静态方法的核心区别!
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (70)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)