组态王历史报表、
组态王教学-历史数据查询例程
组态王历史数据查询例程配置参考文档北京亚控科技发展有限公司技术部目录一、功能概述 (3)一、功能概述 (3)二、工程实例 (3)三、操作步骤: (3)1、定义设备: (3)2、定义变量: (3)3.制作画面: (4)3.1) 创建报表: (4)3.2) 命令语言: (5)4.进入运行系统: (10)四、注意事项 (14)图表图一报表 (4)图二报表设计 (5)图三历史数据报表 (5)图四快捷菜单 (6)图五按钮属性 (6)图六按钮属性 (6)图七动画连接 (7)图八选择函数 (8)图九命令语言 (8)图十打印报表 (9)图十一历史数据查询画面 (10)图十二报表属性 (11)图十三时间属性 (11)图十四变量属性 (12)图十五变量顺序设置 (12)图十六历史数据查询 (13)图十七报表打印 (14)一、功能概述常规需求:很多工业现场会存储数据并对存储的历史数据进行查询、打印输出。
历史数据查询一般为起始时间、结束时间、间隔时间都不固定,最终用户根据实际需要进行查询。
组态王中的实现方法:利用组态王内置报表以及报表的函数来实现对历史数据的查询。
组态王内置报表的操作类似excel,操作简单、方便,并且组态王提供了大量的报表函数来实现各种复杂功能。
二、工程实例我们举一个例子来说明日报表的实现方法。
在此例程中我们定义五个变量,分别为“压力”、“温度”、“密度”、“电流”、“电压”,运行系统运行后记录历史数据,查询日报表数据时自动从历史数据中查询整点数据生成报表,并可以保存、打印报表。
下面就以此为例来演示完成这一要求的具体步骤。
三、操作步骤:1、定义设备:根据工程中实际使用得设备进行定义,本例程使用亚控的仿真PLC设备,使用“PLC-亚控-仿真PLC-串口”驱动,定义设备名称为”PLC”。
2、定义变量:在组态王中定义三个变量:压力(IO实数类型)、温度(IO实数类型)、密度(IO实数类型)。
压力变量:最小值0,最大值100,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。
用组态王做日历查询数据报表说明
组态王简单报表组态王目前我们应用的主要有两个版本:6.55和7.5.在2021年后基本应用7.5版本。
下面以先做一个日历控件日报制作简单说明。
准备工作:历史数据报表是从组态王的历史库中查询相关变量的历史数据,并在历史数据报表内显示,因此对历史数据报表要查询的数据必须设置历史记录属性。
在组态王中,离散型、整型和实型变量支持历史记录,字符串型变量不支持历史记录。
组态王的历史记录形式可以分为数据变化记录、定时记录(最小单位为1分钟)和备份记录。
记录形式的定义通过变量属性对话框中提供的选项完成,需要查询到报表的变量都要进行记录设置,完成设置之后在数据词典中定义字符串变量“选择日期”用于日历控件的查询。
准备工作完成后开始设计报表。
一.因为组态王6.55版本自带HTconvertTime的函数,最大时间支持到2019,查函数手册如下所以组态王6.55版本的项目,2020年以后的报表数据无法通过日历控件查询,必须先更新HTconvertTime的函数。
组态王7.5版本的项目,不需要做此工作,6.55版本的项目更新方法如下:1、在命令语言里面,自定义函数命令里面新建一个函数。
2、函数声明里面选择LONG,后面的填NewHTconvertTime(long years,long months,long days,long hours,long minites,long seconds)。
(此名字随便起),填完名字把脚本拷贝粘贴进去。
(看不懂也没关系,粘进去就能用)脚本填写内容为:long rest;rest = 0;long yearsofdays; long monthsofdays; long ofdays;long ofminites; long utcyear;long utcmonth; long leapyears; long leapzt; yearsofdays = 0; monthsofdays = 0;utcyear = 1970;utcmonth = 1;leapyears = 0;while(utcyear < years){ if(utcyear % 4 ==0 && utcyear % 100 !=0 || utcyear % 400 ==0) leapyears = leapyears + 1;utcyear = utcyear + 1;}yearsofdays = (years - 1970) * 365 + leapyears;if (months == 1)if (months == 2)monthsofdays = 31;if (months == 3)monthsofdays = 59;if (months == 4)monthsofdays = 90;if (months == 5)monthsofdays = 120;if (months == 6)monthsofdays = 151;if (months == 7)monthsofdays = 181;if (months == 8)monthsofdays = 212;if (months == 9)monthsofdays = 243;if (months == 10)monthsofdays = 273;if (months == 11)monthsofdays = 304;if (months == 12)monthsofdays = 334;if (years % 4 ==0 && years % 100 !=0 || years % 400 ==0 && months >=3)ofdays = yearsofdays + monthsofdays + days;elseofdays = yearsofdays + monthsofdays + days - 1;if (hours >= 8)ofminites = ofdays * 24 * 60 + (hours - 8) * 60 + minites;if (hours < 8)ofminites = (ofdays - 1) * 24 * 60 + (hours + 16) * 60 + minites;//calculate resultszx;rest = ofminites * 60 + seconds;return rest;3、新建完成之后对于原来2020以前的项目,将以前用到的HTconvertTime函数替换成NewHTconvertTime不要漏掉(组态王7.5版本的项目,不需要做此工作),6.55版本新项目就直接用此函数。
组态王报表演示说明
报表演示说明1、本演示分为日报、月报、年报2、日报的生成:对于日报可以每小时输入一个数据,然后进行统计后每天生成一个报表日报生成的命令语言见事件命令语言的条件为:$分==0 && $秒==0,消失时注意:a、报表函数命令执行时报表控件所在的画面必须打开,因此对于画面不多的情况下可以在工程运行时将后台处理画面打开并隐含起来,同时所有其它的画面属性都应为覆盖式。
如果画面较多无法全部将画面属性设为覆盖式则可以在报表命令语言执行前执行打开画面的命令b、在新的一天开始时需要使用新的报表文件,因此需要在调用前需要判断当天的报表文件是否已经创建,如果没有创建则需要进行创建c、对于日报的统计主要针对每天持续运行的情况,对于不能保证持续运行的现场可以参照月报的统计方式b、报表的查询在日报查询页,可以对报表文件进行读取、删除等操作{string ()+"日报\"+ StrFromReal( \\本站点\$年, 0,"f" )+"y"+StrFromReal(\\本站点\$月, 0, "f" )+"m"+StrFromReal(\\本站点\$日, 0, "f" )+".rtl";//自定义变量long return01=InfoFile( , 1, \\本站点\$分 );//判断日报目录下是否已经有当天的报表文件了if (return01==0){string ()+"报表\日报.rtl";ReportLoad("Report5",);()+"日报\"+StrFromReal( \\本站点\$年, 0, "f" )+"y"+StrFromReal( $月, 0, "f" )+"m"+StrFromReal( $日, 0, "f" )+".rtl";ReportSaveAs("Report5",);}//如果没有报表文件则从报表目录下调取模板创建报表文件ReportLoad("Report5",);ReportSetCellString("report5", 3,10, \\本站点\$日期);long hang=\\本站点\$时+6;string timestr=time(\\本站点\$时,0,0);ReportSetCellString("report5", hang,1, timestr);ReportSetCellValue("report5", hang,2,\\本站点\颗粒物); ReportSetCellValue("report5", hang,3,\\本站点\颗粒物折算); ReportSetCellValue("report5", hang,4, \\本站点\SO2); ReportSetCellValue("report5", hang,5, \\本站点\SO2折算); ReportSetCellValue("report5", hang,6, \\本站点\NO2);ReportSetCellValue("report5", hang,7, \\本站点\NO2折算); ReportSetCellValue("report5", hang,8, \\本站点\流量); ReportSetCellValue("report5", hang,9, \\本站点\O2); ReportSetCellValue("report5", hang,10, \\本站点\温度); ReportSetCellValue("report5", hang,11, \\本站点\水分); ReportSaveAs("Report5",);}3、月报的生成月报中需要每天的统计数据,该数据为每天的平均值,如果需要其它的统计数据也可照此方法进行处理。
组态王软件详细教程第七讲报表系统
组态王软件详细教程第七讲报表系统(总9页)-CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除第七讲报表系统第一节组态王内嵌数据报表数据报表的用途数据报表是反应生产过程中的数据、状态等,并对数据进行记录的一种重要形式。
是生产过程必不可少的一个部分。
它即能反应系统实时的生产情况,也能对长期的生产过程进行统计、分析,使管理人员能够实时掌握和分析生产情况。
组态王提供内嵌式报表系统,工程人员可以任意设置报表格式,对报表进行组态。
组态王为工程人员提供了丰富的报表函数,实现各种运算、数据转换、统计分析、报表打印等。
即可以制作实时报表,也可以制作历史报表。
另外,工程人员还可以制作各种报表模板,实现多次使用,以免重复工作。
制作实时数据报表在组态王工具箱内选择“报表窗口”工具,在报表画面上绘制报表。
如下图所示:双击报表窗口的灰色部分(表格单元格区域外没有单元格的部分),弹出“报表设计”对话框,对话框定义如下图所示:在“报表控件名”对话框中输入报表控件名称:实时数据报表,这个控件名会在报表函数中引用。
在行数对话框中输入所要制作的报表的大致行数15本讲介绍报表系统的创建和格式设置介绍报表函数介绍报表系统的组态介绍报表模板在列数对话框中输入所要制作的报表的大致列数6单击对话框的“确认”按钮。
则组态王报表画面如下图所示:设置表头格式设计表头:选中“b1”到“e2”的单元格区域,从报表工具箱上单击“合并单元格”按钮,在报表工具箱的编辑框里输入文本“实时数据报表”,单击“输入”按钮;或双击合并的单元格,使输入光标位于该单元格中,然后输入上述文本。
单击报表工具箱中的“设置单元格格式”按钮,设置单元格格式如下:数字—常规;字体—隶书、规则、一号、红色;对齐方式:水平—居中,垂直—居中;图案—设置单元格底纹颜色为灰色。
如下图所示。
设计报表时间在单元格“d3”中显示当前日期,双击该单元格,然后输入函数“=Date($年,$月,$日)”。
组态王用sql存储历史数据的方法
近年来,随着信息技术的飞速发展,数据量的增加和数据存储的需求也变得越来越重要。
对于工业自动化领域来说,历史数据的存储和管理尤为重要。
而在自动化系统中,组态王是一款功能强大的软件评台,广泛应用于工业控制领域。
在组态王中,使用SQL数据库存储历史数据是一种常见的做法。
本文将介绍组态王使用SQL存储历史数据的方法,并探讨其优势和应用场景。
一、组态王简介组态王是一款由国内知名的自动化公司研发的工业自动化软件评台。
它具有丰富的功能和灵活的界面设计,能够满足工业控制系统的各种需求。
组态王支持多种数据源接入,包括传感器、PLC、DCS等设备,可以实现数据的采集、监控和控制。
组态王还提供了历史数据存储和查询功能,为用户提供了强大的数据管理能力。
二、SQL数据库在组态王中的应用在组态王中,使用SQL数据库存储历史数据是非常常见的做法。
SQL数据库是一种关系型数据库管理系统,能够提供可靠的数据存储和高效的数据查询能力。
在组态王中,可以通过与SQL数据库的接口进行数据交互,实现历史数据的存储和管理。
具体来说,组态王通过SQL语句向数据库写入历史数据,并且可以通过SQL语句进行数据的查询和分析。
三、组态王使用SQL存储历史数据的方法1. 创建数据库表结构在使用SQL数据库存储历史数据时,首先需要创建数据库表结构。
表结构的设计需要根据具体的数据类型和存储需求进行规划,一般包括时间戳、数据类型、数值等字段。
在组态王中,可以通过SQL语句创建数据库表,并定义表的字段和属性。
2. 编写SQL语句在组态王中,可以通过SQL语句向数据库写入历史数据。
编写SQL语句时,需要考虑到数据的实时性和准确性。
一般来说,可以使用INSERT INTO语句向数据库插入新的历史数据,同时还可以使用UPDATE语句对已有的数据进行更新。
还可以通过DELETE语句删除过期或无效的数据,保持数据库的整洁和高效。
3. 数据查询与分析除了数据的存储,组态王还可以通过SQL语句对历史数据进行查询和分析。
组态王7.5SP1版本第7章报表系统
第八讲报表系统第一节概述数据报表的用途数据报表是反应生产过程中的过程数据、运行状态等,并对数据进行记录、统计的一种重要工具,是生产过程必不可少的一个重要环节。
它既能反应系统实时的生产情况又能对长期的生产过程数据进行统计、分析,使管理人员能够掌握和分析生产过程情况。
组态王提供内嵌式报表系统,工程人员可以任意设置报表格式,对报表进行组态。
组态王为工程人员提供了丰富的报表函数,实现各种运算、数据转换、统计分析、报表打印等。
既可以制作实时报表又可以制作历史报表。
另外,工程人员还可以制作各种报表模板,实现多次使用,以免重复工作。
组态王7.5 SP1的报表向导工具可以以组态王的历史库或KingHistorian为数据源,快速建立所需的班报表、日报表、周报表、月报表、季报表和年报表。
此外,还可以实现值的行列统计功能。
大大减少了工程人员制作报表时的命令语言的编写。
第二节实时数据报表创建实时数据报表实时数据报表创建过程如下:1、新建一画面,名称为:实时数据报表画面。
2、选择工具箱中的工具,在画面上输入文字:实时数据报表。
3、选择工具箱中的工具,在画面上绘制一实时数据报表窗口,如图8-1所示。
图8-1单击报表窗口,“报表工具箱”会自动显示出来。
双击窗口的灰色部分,弹出“报表设计”对话框,如图8-2所示。
图8-2对话框设置如下:报表控件名:Report1行数:6列数:104、输入静态文字:选中A1到J1的单元格区域,执行“报表工具箱”中的“合并单元格”命令并在合并完成的单元格中输入:实时报表演示。
利用同样方法输入其它静态文字,如图8-3所示。
图8-35、插入动态变量:在B2单元格中输入:=\\local\$Date。
(变量的输入可以利用“报表工具箱”中的“插入变量”按钮实现)利用同样方法输入其它动态变量,如图8-4所示。
图8-4注:如果变量名前没有添加“=”符号的话此变量被当作静态文字来处理。
6、单击“文件”菜单中的“全部存”命令,保存您所作的设置。
组态王教学-历史数据查询例程
组态王历史数据查询例程配置参考文档北京亚控科技发展有限公司技术部目录一、功能概述 (3)一、功能概述 (3)二、工程实例 (3)三、操作步骤: (3)1、定义设备: (3)2、定义变量: (3)3.制作画面: (4)3.1) 创建报表: (4)3.2) 命令语言: (5)4.进入运行系统: (10)四、注意事项 (14)图表图一报表 (4)图二报表设计 (5)图三历史数据报表 (5)图四快捷菜单 (6)图五按钮属性 (6)图六按钮属性 (6)图七动画连接 (7)图八选择函数 (8)图九命令语言 (8)图十打印报表 (9)图十一历史数据查询画面 (10)图十二报表属性 (11)图十三时间属性 (11)图十四变量属性 (12)图十五变量顺序设置 (12)图十六历史数据查询 (13)图十七报表打印 (14)一、功能概述常规需求:很多工业现场会存储数据并对存储的历史数据进行查询、打印输出。
历史数据查询一般为起始时间、结束时间、间隔时间都不固定,最终用户根据实际需要进行查询。
组态王中的实现方法:利用组态王内置报表以及报表的函数来实现对历史数据的查询。
组态王内置报表的操作类似excel,操作简单、方便,并且组态王提供了大量的报表函数来实现各种复杂功能。
二、工程实例我们举一个例子来说明日报表的实现方法。
在此例程中我们定义五个变量,分别为“压力”、“温度”、“密度”、“电流”、“电压”,运行系统运行后记录历史数据,查询日报表数据时自动从历史数据中查询整点数据生成报表,并可以保存、打印报表。
下面就以此为例来演示完成这一要求的具体步骤。
三、操作步骤:1、定义设备:根据工程中实际使用得设备进行定义,本例程使用亚控的仿真PLC设备,使用“PLC-亚控-仿真PLC-串口”驱动,定义设备名称为”PLC”。
2、定义变量:在组态王中定义三个变量:压力(IO实数类型)、温度(IO实数类型)、密度(IO实数类型)。
压力变量:最小值0,最大值100,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。
组态王历史数据查询(DOC)
错误!未找到引用源。
1. 功能概述常规需求:很多工业现场会存储数据并对存储的历史数据进行查询、打印输出。
历史数据查询一般为起始时间、结束时间、间隔时间都不固定,最终用户根据实际需要进行查询。
组态王中的实现方法:利用组态王内置报表以及报表的函数来实现对历史数据的查询。
组态王内置报表的操作类似excel,操作简单、方便,并且组态王提供了大量的报表函数来实现各种复杂功能。
2. 工程实例我们举一个例子来说明实现方法。
在此例程中我们定义五个变量,分别为“压力”、“温度”、“密度”、“电流”、“电压”,运行系统运行后记录历史数据,下面就以此为例来演示完成这一要求的具体步骤。
3. 操作步骤3.1定义设备根据工程中实际使用得设备进行定义,本例程使用亚控的仿真PLC设备,使用“PLC-亚控-仿真PLC-串口”驱动,定义设备名称为“PLC”。
3.2定义变量在组态王中定义五个变量:压力(IO实数类型)、温度(IO实数类型)、密度(IO实数类型)、电压(IO实数类型)、电流(IO实数类型)。
压力变量:最小值0,最大值100,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
温度变量:最小值0,最大值50,最小原始值0,最大原始值100,连接设备PLC,寄存器DECREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
密度变量:最小值0,最大值1,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
电流变量:最小值30,最大值50,最小原始值0,最大原始值100,初始值为30,连接设备PLC,寄存器DECREA100,数据类型short,读写属性为只读,采集频率1000。
组态王历史数据导出EXCEL表格的方法
组态王历史数据导出到EXCEL表格1、新建画面,在画面里添加“报表窗口”.如图所示:2、添加按钮,命名“查询”,双击按钮,在“弹起时”编写命令语言ReportSetHistData2(1,1)3、添加按钮,命名“保存”,双击按钮,在“弹起时”编写命令语言ReportSaveAs("Report2","D:/12.xls");注意"Report2"与新建的报表窗口控件名一致。
"D:/12.xls"为数据导出至D盘文件名12的EXCEL文件,该文件是自动生成的,无需单独新建。
4、添加关闭画面按钮,同时在其他画面需要添加打开报表按钮(不详细介绍)。
5、画面编辑完毕,运行画面。
点击“查询”按钮,如图所示:“报表属性“可以设置报表的显示方式(不具体介绍)6、““时间属性”里设置查询的时间段和时间间隔,注意报表最多可一次查询20000条数据。
例如:时间间隔1S,最多一次可查询5.5小时时间段内的数据。
如果想查询下一时段的数据,需重新设置查询时间段,依次查询数据。
6、“变量选择”添加历史库变量,将所需要导出的变量添加到表格内,前提是这些变量在定义时,已做了变量记录。
如图所示:7、完成以上设置后,变量就会在报表内显示,点击“保存”,查询出来的数据就会保存进指定的EXCEL。
但是如果下次更改查询的时间段,保存后,该EXCEL数据表内的文件会被覆盖掉,因此每次保存完数据后需要将导出的EXCEL数据拷贝出来。
如果想避免每次导出EXCEL文件,有如下解决方法:1)在“数据词典”里,新建“内存字符串”变量,名为“存盘文件名“,变量的初始值为:D:/2)打开“报表画面”,保存按钮的命令语言改为ReportSaveAs("Report2",\\本站点\存盘文件名);3)添加文本变量“存盘文件名”,字符串输入输出分别连接新建的内存字符串变量,如图所示:4)运行后,如图所示:可以通过更改文本变量D:/11.XLS,将每次查询完保存的数据表名称更改,每次保存的数据就会形成一个EXCEL表格。
组态王中的数据报表制作与保存教学提纲
组态王中的数据报表制作与保存组态王中的数据报表制作与保存摘要:本文主要介绍如果使用组态王来构建数据报表,并以EXCEL的格式在指定的文件路径保存。
关键字:组态王历史库数据报表制作保存一、引言数据报表是反应生产过程中的数据、状态等,并对数据进行记录的一种重要形式。
它既能反映系统实时的生产情况,也能对长期的生产过程进行统计、分析,使管理人员能够实时掌握和分析生产情况。
组态王提供内嵌式报表系统,工程人员可以任意设置报表格式,对报表进行组态。
组态王为工程人员提供了丰富的报表函数,实现各种运算、数据转换、统计分析、报表打印等。
既可以制作实时报表,也可以制作历史报表。
组态王还支持运行状态下单元格的输入操作,在运行状态下通过鼠标拖动改变行高、列宽。
另外,工程人员还可以制作各种报表模板,实现多次使用,以免重复工作。
二、数据报表的制作数据报表分为实时数据报表和历史数据报表2类。
报表的构建方法如下:在画面内,使用工具箱中的报表窗口按钮创建一个报表窗口,如图1所示。
图1 创建后的报表窗口用鼠标双击报表窗口的灰色部分,弹出“报表设计”对话框,该对话框主要设置报表的名称、报表表格的行列数目以及选择套用表格的样式。
1、制作实时数据报表实时数据报表是实时显示相关变量的数据值,在报表窗口的单元格中直接引用变量来实现。
在报表的单元格中直接输入“=变量名”,既可在运行时在该单元格中显示该变量的数值,当变量的数据发生变化时,单元格中显示的数值也会被实时刷新。
2、制作历史数据报表历史数据报表是从组态王的历史库中查询相关变量的历史数据,并在历史数据报表内显示,因此对历史数据报表要查询的数据必须设置历史记录属性。
在组态王中,离散型、整型和实型变量支持历史记录,字符串型变量不支持历史记录。
组态王的历史记录形式可以分为数据变化记录、定时记录(最小单位为1分钟)和备份记录。
记录形式的定义通过变量属性对话框中提供的选项完成。
如图2所示。
图 2 记录属性设置在查询时,希望弹出一个对话框,可以在对话框上随机选择不同的变量和时间段来查询数据,可使用函数ReportSetHistData2(StartRow,StartCol)。
组态王6报表)
历史报表制作步骤 新建一个画面,起名:历史数据报表; 单击工具箱中4排第1个工具,用鼠标拖放一个矩形区; 双击矩形区中的灰色部分,弹出报表设计窗口; 起报表控件名,如:lish,回答几行几列,单击确认; 将最上面一行拉宽后,扫选中最上一行,单击报表工具箱中的合并工具;
单击工具箱中的工具:T ,输入表头文字,如:历史数据报表;
此时,实际上已将,
选中的文件名赋给了刚 定义的字符串变量“查 询” 了。
单击确认。
存盘后,运行时先单击下拉列表,选中一个 .rtl文件,再单击
报表查询
还有一种方法是,只要一单击下拉列表中的一个 .rtl文件,就自动查询,制作步骤
为:
在工程目录树的命令语言处,选数据改变命令语言; 右窗口中双击新建图标; 在变量处填上:\\本站点\查询 在程序窗口中写上:这段语句 单击确认。
必须有赋值号 “=”
下面是确定输出哪些变量的值: 在A3单元格中起行名,右击B3单元格,选插入变量,双击数据词典中对应的变量名; 在A4单元格中起行名,右击B4单元格,选插入变量,双击数据词典中对应的变量名; 在A5单元格中起行名,右击B5单元格,选插入变量,双击数据词典中对应的变量名;
…… 加边框 全选中表格(即单击最左上角的单元格),单击右键,选设置单元格格式:
2.制作实时报表的步骤 新建一个画面起名:实时数据报表;
(此时会弹出一个报表工具箱,见上图)
单击工具箱中4排第1个工具 ,用鼠标拖放出一个矩形区,即表;
双击矩形区中的灰色部分,弹出报表设计窗口;
起报表控件名,如:biao1,回答几行几列,单击确认;
将最上面一行拉高后,扫选中最上一行,单击报表工具箱中的合并工具;
使用ODBC数据源时,可显 示通用数据库中的数据, 但要提前配置好数据源。
组态王 SCADA3.0报表例程
北京亚控科技发展有限公司
4
“报表系统应用例程”说明文档
图 7 日期时间控件属性 再添加文本“Text3”,模拟值输入和模拟值输出动画链接关联变量\\local\StepTime, 如图 8 所示。图 8 动画连接北京亚控科技发展有限公司
5
“报表系统应用例程”说明文档
第三步:添加、设置按钮 1)查询按钮: 打开图库精灵,在画面上添加一按钮,在按钮上再添加文本为:查询,该按钮按下 命令语言如下: long year1; long month1; long day1; long hour1; long minute1; long second1; long year2; long month2; long day2; long hour2; long minute2; long second2; long StartTime; long EndTime; year1=UIDateTime1.Year; month1=UIDateTime1.Month; day1=UIDateTime1.Day; hour1=UIDateTime1.Hour; minute1=UIDateTime1.Minute; second1=UIDateTime1.Second; year2=UIDateTime2.Year; month2=UIDateTime2.Month; day2=UIDateTime2.Day; hour2=UIDateTime2.Hour; minute2=UIDateTime2.Minute; second2=UIDateTime2.Second; string str=InfoAppDir()+"Report\model.rtl"; Report0.ReportLoad(str); Report0.SetCellString(2,4,\\local\$Date); //填写日期 StartTime=ConvertTimeToSecond(year1,month1,day1,hour1,minute1,second1,0); EndTime=ConvertTimeToSecond(year2,month2,day2,hour2,minute2,second2,0); Report0.SetTime(StartTime,EndTime,\\local\StepTime); Report0.SetHistData("\\local\temperature",2); Report0.SetHistData("\\local\pressure",3); Report0.SetHistData("\\local\flow",4); Report0.Query();
组态王历史报表、
创建历史数据报表历史数据报表创建过程如下:1、新建一価面,名押为:历史数据报表iffli面.2、选择工具箱中的工1工具,在颅而上输入文字:历史数据报表。
3、选择工具箱中的悟1工具,在岡面上绘制一历史数据报表窗口,控件名称为:Reports,并设计表格,如图8・17所 _______________________________________________A i「1 肋史2 09 瑕料输覆桂3456图8-17历史数据报表查询利用组态王提供的ReportSetHistData?的数町从组态王记录的历史库中按折定的赴始时间和时间间隔査询指定变虽的数据,设置过程如下:1、在価面中添加一按饥,按伍文本为:历史数据报表査询.2、在按粗的弹起爭件中输入如下命令ifi言.如图8JS所示:3.设置完毕后单击“文件"菜单中的“全部存”命令.保存您所作的设置。
4、单击“文件”菜单中的“切换到XTEW”命令,运厅此紳面・笊击“历史数据报表査询”按钮.弹出报表历史査询对话框.如图&19所示,报表历史査询对话框分二个履性页:报表属性页、时何属性页.变虽属性页.报表属性页:在报表属性页中您可以设置报表査询的显示恪式,此属性页设置如图8-19 所示。
时间属性页:在时间屈性页中您町以设置査询的起止时间以及査询的时间间隔.如图所示:图8・19图8-20变量属性页:在变虽叫性页中您可以选择欲査询历史数据的变忙.如图8・21所示:5. 设置完毕后单击•确定”按钮.原料油液位变虽的历史数据即可显示在历史数摇报 表控件中.从而达到了历史数据吉询的目的.如图8-22所示:图 8-22历史数据报表的其它应用一、1分钟数据报表演示利用报表窗口丁具结合组态王提供的命令语育可实现一个1分钟的数据报表•设置过程 如下:0*06/11/12 06/11/12 06/11/12 06/1142 06/1212 06/11/12柿16:24:44 15:25:44 15:26:44 15:27:44 15:28:44 15:29:44历史效抿报表用 S-211、新建一fli面.名松为:1分钟数据报表画面・2、选择工具箱中的工1工具,在曲而上输入文字:1分钟数据报表。
组态王报表()解析
ReportSetCellValue("一分钟数据报表", row, 4, \\本站点\成品油液位1);
参数说明: ReportName:报表名称; StartRow:要设置数值的报表的开始行号; StartCol:要设置数值的报表的开始列号; StartRow:要设置数值的报表的开始行号; StartCol:要设置数值的报表的开始列号; Value:要设置的文本 。
二、1 分钟数据查询报表
定时自动查询历史数据,并获取1 分钟数据的平均值。 设置过程如下: 在画面上输入文字:1 分钟数据查询报表。 绘制一报表窗口(33 行5 列),控件名称为:一分钟查询, 并设计表格如下,
在画面中添加一按钮,按钮文本为:报表查询。 在按钮的弹起事件中输入如下命令语言:
string filename1; string filename2; filename1=InfoAppDir()+"\实时数据文件夹\"+\\本站点\报表查 询变量; ReportLoad("Report2",filename1); filename2=InfoAppDir()+"\实时数据文件夹\*.rtl"; listClear("List1"); ListLoadFileName( "List1", filename2); 上述命令语言的作用是将下拉式组合框中选中的报表文件的数 据显示在Report2 报表窗口中,其中\\本站点\报表查询变量保 存了下拉式组合框中选中的报表文件名。
组态王的年月报表
组态王的年⽉报表(1)建⽴报表的步骤将《实时数据》插⼊到《⽇报表后台数据的累计量》插⼊到《⽉报表后台累计量》插⼊到《年报表后台》//........................................................................................................................................................................................................................................................................................................................................... //每⼩时将repot7的实时数据插⼊到report 6中,long hang;hang= \\本站点\$时+3;//定位long Value;Value=ReportGetCellValue("Report7", 4, 2);//获取指定报表单元格的数值ReportSetCellValue("Report6", hang, 2, Value);//将指定报表的指定单元格设定为指定值Value=ReportGetCellValue("Report7", 4, 3);ReportSetCellValue("Report6", hang, 3, Value);Value=ReportGetCellValue("Report7", 4, 4);ReportSetCellValue("Report6", hang, 4, Value);Value=ReportGetCellValue("Report7", 4, 5);ReportSetCellValue("Report6", hang, 5, Value);Value=ReportGetCellValue("Report7", 4, 6);ReportSetCellValue("Report6", hang, 6, Value);Value=ReportGetCellValue("Report7", 4, 7);ReportSetCellValue("Report6", hang, 7, Value);Value=ReportGetCellValue("Report7", 4, 8);ReportSetCellValue("Report6", hang, 8, Value);Value=ReportGetCellValue("Report7", 4, 9);ReportSetCellValue("Report6", hang, 9, Value);Value=ReportGetCellValue("Report7", 4, 10);ReportSetCellValue("Report6", hang, 10, Value);Value=ReportGetCellValue("Report7", 4, 11);ReportSetCellValue("Report6", hang, 11, Value);Value=ReportGetCellValue("Report7", 4, 12);ReportSetCellValue("Report6", hang, 12, Value);Value=ReportGetCellValue("Report7", 4, 13);ReportSetCellValue("Report6", hang, 13, Value);Value=ReportGetCellValue("Report7", 4, 14);ReportSetCellValue("Report6", hang, 14, Value);Value=ReportGetCellValue("Report7", 4, 15);ReportSetCellValue("Report6", hang, 15, Value);//将实时报表report 7中的统计数据输⼊到⽇报表后台中//填写时间string temp;long StartTime;long y;StartTime=cyl_HTConvertTime(\\本站点\$年,\\本站点\$⽉,\\本站点\$⽇,0,0,0);//获取选着时间的长整形单位y=StartTime+\\本站点\$时*3600;temp=StrFromTime( y, 2 );ReportSetCellString("Report6", hang, 1, temp);ReportSetCellString("Report6", 28, 1, "当天累积");//填充ReportSetCellString("Report6", 29, 1, "备注");//填充//............................................................................................................................................................................................................................................................................................................................................ ReportSetCellString2("Report6", 4, 1, 27, 8, " "); //清空单元格//............................................................................................................................................................................................................................................................................................................................................(1)查询⽉报string FileName;FileName=InfoAppDir()+"⽉报\"+\\本站点\报表名;ReportLoad("⽉报",FileName);//............................................................................................................................................................................................................................................................................................................................................(2)删除⽉报string FileName;FileName=InfoAppDir()+"⽉报\"+\\本站点\报表名;FileDelete( Filename );string FileName1;FileName1=InfoAppDir()+"⽉报\*.rtl";listClear("⽉报查询");ListLoadFileName( "⽉报查询", FileName1 );//............................................................................................................................................................................................................................................................................................................................................(3)刷新⽉报string FileName;FileName=InfoAppDir()+"⽉报\"+"*.rtl";listClear("⽉报查询");ListLoadFileName( "⽉报查询", FileName );//............................................................................................................................................................................................................................................................................................................................................//每天定时将⽇报后台reprot 6中的累积量插⼊到⽉报表reprot5后台中string reportname2=StrFromReal( \\本站点\$年, 0, "f" )+StrFromReal( \\本站点\$⽉, 0, "f")+".rtl";//把年⽉转化为字符串⽤来命名//====================string FileName;//⾃定义变量FileName=InfoAppDir()+"⽉报\"+reportname2;long return02=InfoFile( Filename, 1, \\本站点\$分 );//查找⽂件是否存在,找不到返回0 ShowPicture("⽉报后台");//HidePicture("⽉报后台");//判断⽉报⽬录下是否已经有当⽉的报表⽂件了if (return02==0)//当前⽬录下没有相应⽉报表报表{FileName=InfoAppDir()+"报表\⽉报.rtl";ReportLoad("Roport5",FileName);//把filename名称⽂件中数据填⼊到report中FileName=InfoAppDir()+"⽉报\"+ reportname2;Reportsaveas("Roport5",FileName);//报存⽉报后台//\\本站点\⽇计数=0;}//如果当⽉的⽉报⽂件还没有产⽣则调⼊⽉报.rtl⽂件并按规定格式保存报表⽂件FileName=InfoAppDir()+"⽉报\"+StrFromReal( \\本站点\$年, 0, "f" )+StrFromReal(\\本站点\$⽉, 0, "f" )+".rtl";ReportLoad("Report5",FileName);//读取指定路径下的报表到当前控件报表long hang;hang= \\本站点\$⽇+3;//定位//\\本站点\⽇计数=\\本站点\⽇计数+1;string str;long Value;long Value1;long Value2;str=ReportGetCellString("Report6", 2, 5);//获取指定报表单元格的⽂本ReportSetCellString("Report5", hang, 1, str);//将指定报表单元格设定为指定字符串//以上为在⽉报第⼀列添加⽇期Value=ReportGetCellValue("Report6", 28, 2);//获取指定报表单元格的数值ReportSetCellValue("Report5", hang, 2, Value);//将指定报表的指定单元格设定为指定值Value=ReportGetCellValue("Report6", 28, 3);ReportSetCellValue("Report5", hang, 3, Value);Value=ReportGetCellValue("Report6", 28, 4);ReportSetCellValue("Report5", hang, 4, Value);Value=ReportGetCellValue("Report6", 28, 5);ReportSetCellValue("Report5", hang, 5, Value);Value=ReportGetCellValue("Report6", 28, 6);ReportSetCellValue("Report5", hang, 6, Value);Value=ReportGetCellValue("Report6", 28, 7);ReportSetCellValue("Report5", hang, 7, Value);Value=ReportGetCellValue("Report6", 28, 8);ReportSetCellValue("Report5", hang, 8, Value);Value=ReportGetCellValue("Report6", 28, 9);ReportSetCellValue("Report5", hang, 9, Value);Value=ReportGetCellValue("Report6", 28, 10);ReportSetCellValue("Report5", hang, 10, Value);Value=ReportGetCellValue("Report6", 28, 11);ReportSetCellValue("Report5", hang, 11, Value);Value=ReportGetCellValue("Report6", 28, 12);ReportSetCellValue("Report5", hang, 12, Value);Value=ReportGetCellValue("Report6", 28, 13);ReportSetCellValue("Report5", hang, 13, Value);Value=ReportGetCellValue("Report6", 28, 14);ReportSetCellValue("Report5", hang, 14, Value);Value=ReportGetCellValue("Report6", 28, 15);ReportSetCellValue("Report5", hang, 15, Value);//将⽇报表中的统计数据当天累积值输⼊到⽉报表中//以下为计算累积值Value1=ReportGetCellValue("Report5", 4, 2);//获取⽉报后台起始值Value2=ReportGetCellValue("Report5", hang, 2);//获取⽉报后台末尾值Value=Value2-Value1;ReportSetCellValue("Report5", 35, 2, Value);Value1=ReportGetCellValue("Report5", 4, 2);//获取⽉报后台起始值Value2=ReportGetCellValue("Report5", hang, 2);//获取⽉报后台末尾值Value=Value2-Value1;ReportSetCellValue("Report5", 35, 2, Value);Value1=ReportGetCellValue("Report5", 4, 3);//获取⽉报后台起始值Value2=ReportGetCellValue("Report5", hang, 3);//获取⽉报后台末尾值Value=Value2-Value1;ReportSetCellValue("Report5", 35, 3, Value);Value1=ReportGetCellValue("Report5", 4, 4);//获取⽉报后台起始值Value2=ReportGetCellValue("Report5", hang, 4);//获取⽉报后台末尾值Value=Value2-Value1;ReportSetCellValue("Report5", 35, 4, Value);Value1=ReportGetCellValue("Report5", 4, 5);//获取⽉报后台起始值Value2=ReportGetCellValue("Report5", hang, 5);//获取⽉报后台末尾值Value=Value2-Value1;ReportSetCellValue("Report5", 35, 5, Value);Value1=ReportGetCellValue("Report5", 4, 6);//获取⽉报后台起始值Value2=ReportGetCellValue("Report5", hang, 6);//获取⽉报后台末尾值Value=Value2-Value1;ReportSetCellValue("Report5", 35, 6, Value);Value1=ReportGetCellValue("Report5", 4, 7);//获取⽉报后台起始值Value2=ReportGetCellValue("Report5", hang, 7);//获取⽉报后台末尾值Value=Value2-Value1;ReportSetCellValue("Report5", 35, 7, Value);Value1=ReportGetCellValue("Report5", 4, 8);//获取⽉报后台起始值Value2=ReportGetCellValue("Report5", hang, 8);//获取⽉报后台末尾值Value=Value2-Value1;ReportSetCellValue("Report5", 35, 8, Value);Value1=ReportGetCellValue("Report5", 4, 9);//获取⽉报后台起始值Value2=ReportGetCellValue("Report5", hang, 9);//获取⽉报后台末尾值Value=Value2-Value1;ReportSetCellValue("Report5", 35, 9, Value);Value1=ReportGetCellValue("Report5", 4, 10);//获取⽉报后台起始值Value2=ReportGetCellValue("Report5", hang, 10);//获取⽉报后台末尾值Value=Value2-Value1;ReportSetCellValue("Report5", 35, 10, Value);Value1=ReportGetCellValue("Report5", 4, 11);//获取⽉报后台起始值Value2=ReportGetCellValue("Report5", hang, 11);//获取⽉报后台末尾值Value=Value2-Value1;ReportSetCellValue("Report5", 35, 11, Value);Value1=ReportGetCellValue("Report5", 4, 12);//获取⽉报后台起始值Value2=ReportGetCellValue("Report5", hang, 12);//获取⽉报后台末尾值Value=Value2-Value1;ReportSetCellValue("Report5", 35, 12, Value);Value1=ReportGetCellValue("Report5", 4, 13);//获取⽉报后台起始值Value2=ReportGetCellValue("Report5", hang, 13);//获取⽉报后台末尾值Value=Value2-Value1;ReportSetCellValue("Report5", 35, 13, Value);Value1=ReportGetCellValue("Report5", 4, 14);//获取⽉报后台起始值Value2=ReportGetCellValue("Report5", hang, 14);//获取⽉报后台末尾值Value=Value2-Value1;ReportSetCellValue("Report5", 35, 14, Value);Value1=ReportGetCellValue("Report5", 4, 15);//获取⽉报后台起始值Value2=ReportGetCellValue("Report5", hang, 15);//获取⽉报后台末尾值Value=Value2-Value1;ReportSetCellValue("Report5", 35, 15, Value);Reportsaveas("Report5",FileName);//HidePicture("⽉报后台");//..........................................................................................................................................................................................................................................................................................................................................//每天定时将⽉报后台reprot 5中的累积量插⼊到年报表后台report 8中string reportname2=StrFromReal( \\本站点\$年, 0, "f" )+".rtl";//把年转化为字符串⽤来命名//====================string FileName;//⾃定义变量FileName=InfoAppDir()+"年报\"+reportname2;long return02=InfoFile( Filename, 1, \\本站点\$分 );//查找⽂件是否存在,找不到返回0ShowPicture("年报后台");//HidePicture("年报后台");//判断年报⽬录下是否已经有当年的报表⽂件了if (return02==0)//当前⽬录下没有相应年报表报表{FileName=InfoAppDir()+"报表\年报.rtl";ReportLoad("Roport8",FileName);//把filename名称⽂件中数据填⼊到report中FileName=InfoAppDir()+"年报\"+ reportname2;Reportsaveas("Roport8",FileName);//报存⽉报后台}//如果当⽉的⽉报⽂件还没有产⽣则调⼊⽉报.rtl⽂件并按规定格式保存报表⽂件FileName=InfoAppDir()+"年报\"+StrFromReal( \\本站点\$年, 0, "f" )+".rtl";ReportLoad("Report8",FileName);//读取指定路径下的报表到当前控件报表long hang;hang= \\本站点\$⽉+3;//定位string str;long Value;long Value1;long Value2;str=ReportGetCellString("Report5", 2, 5);//获取指定报表单元格的⽂本str=StrLeft(str, 7);//裁剪str,只获取⽉ReportSetCellString("Report8", hang, 1, str);//将指定报表单元格设定为指定字符串//以上为在⽉报第⼀列添加⽇期Value=ReportGetCellValue("Report5", 35, 2);//获取指定报表单元格的数值ReportSetCellValue("Report8", hang, 2, Value);//将指定报表的指定单元格设定为指定值Value=ReportGetCellValue("Report5", 35, 3);ReportSetCellValue("Report8", hang, 3, Value);Value=ReportGetCellValue("Report5", 35, 4);ReportSetCellValue("Report8", hang, 4, Value);Value=ReportGetCellValue("Report5", 35, 5);ReportSetCellValue("Report8", hang, 5, Value);Value=ReportGetCellValue("Report5", 35, 6);ReportSetCellValue("Report8", hang, 6, Value);Value=ReportGetCellValue("Report5", 35, 7);ReportSetCellValue("Report8", hang, 7, Value);Value=ReportGetCellValue("Report5", 35, 8);ReportSetCellValue("Report8", hang, 8, Value);Value=ReportGetCellValue("Report5", 35, 9);ReportSetCellValue("Report8", hang, 9, Value);Value=ReportGetCellValue("Report5", 35, 10);ReportSetCellValue("Report8", hang, 10, Value);Value=ReportGetCellValue("Report5", 35, 11);ReportSetCellValue("Report8", hang, 11, Value);Value=ReportGetCellValue("Report5", 35, 12);ReportSetCellValue("Report8", hang, 12, Value);Value=ReportGetCellValue("Report5", 35, 13);ReportSetCellValue("Report8", hang, 13, Value);Value=ReportGetCellValue("Report5", 35, 14);ReportSetCellValue("Report8", hang, 14, Value);Value=ReportGetCellValue("Report5", 35, 15);ReportSetCellValue("Report8", hang, 15, Value);//将⽉报表后台report 5中的统计数据当天累积值输⼊到年报表后台report 8中;Value1=ReportGetCellValue("Report8", 4, 2);//起始值Value2=ReportGetCellValue("Report8", hang, 2);//结束值Value=Value2-Value1;ReportSetCellValue("Report8", 16, 2, Value);Value1=ReportGetCellValue("Report8", 4, 3);//起始值Value2=ReportGetCellValue("Report8", hang, 3);//结束值Value=Value2-Value1;ReportSetCellValue("Report8", 16, 3, Value);Value1=ReportGetCellValue("Report8", 4, 4);//起始值Value2=ReportGetCellValue("Report8", hang, 4);//结束值Value=Value2-Value1;ReportSetCellValue("Report8", 16, 4, Value);Value1=ReportGetCellValue("Report8", 4, 5);//起始值Value2=ReportGetCellValue("Report8", hang, 5);//结束值Value=Value2-Value1;ReportSetCellValue("Report8", 16, 5, Value);Value1=ReportGetCellValue("Report8", 4, 6);//起始值Value2=ReportGetCellValue("Report8", hang, 6);//结束值Value=Value2-Value1;ReportSetCellValue("Report8", 16, 6, Value);Value1=ReportGetCellValue("Report8", 4, 7);//起始值Value2=ReportGetCellValue("Report8", hang, 7);//结束值Value=Value2-Value1;ReportSetCellValue("Report8", 16, 7, Value);Value1=ReportGetCellValue("Report8", 4, 8);//起始值Value2=ReportGetCellValue("Report8", hang, 8);//结束值Value=Value2-Value1;ReportSetCellValue("Report8", 16, 8, Value);Value1=ReportGetCellValue("Report8", 4, 9);//起始值Value2=ReportGetCellValue("Report8", hang, 9);//结束值Value=Value2-Value1;ReportSetCellValue("Report8", 16, 9, Value);Value1=ReportGetCellValue("Report8", 4, 10);//起始值Value2=ReportGetCellValue("Report8", hang, 10);//结束值Value=Value2-Value1;ReportSetCellValue("Report8", 16, 10, Value);Value1=ReportGetCellValue("Report8", 4, 11);//起始值Value2=ReportGetCellValue("Report8", hang, 11);//结束值Value=Value2-Value1;ReportSetCellValue("Report8", 16, 11, Value);Value1=ReportGetCellValue("Report8", 4, 12);//起始值Value2=ReportGetCellValue("Report8", hang, 12);//结束值Value=Value2-Value1;ReportSetCellValue("Report8", 16, 12, Value);Value1=ReportGetCellValue("Report8", 4, 13);//起始值Value2=ReportGetCellValue("Report8", hang, 13);//结束值Value=Value2-Value1;ReportSetCellValue("Report8", 16, 13, Value);Value1=ReportGetCellValue("Report8", 4, 14);//起始值Value2=ReportGetCellValue("Report8", hang, 14);//结束值Value=Value2-Value1;ReportSetCellValue("Report8", 16, 14, Value);Value1=ReportGetCellValue("Report8", 4, 15);//起始值Value2=ReportGetCellValue("Report8", hang, 15);//结束值Value=Value2-Value1;ReportSetCellValue("Report8", 16, 15, Value);Reportsaveas("Report8",FileName);//HidePicture("年报后台");//............................................................................................................................................................................................................................................................................................................................................。
组态王历史数据查询
组态王历史数据查询历史数据查询1. 功能概述常规需求:很多工业现场会存储数据并对存储的历史数据进行查询、打印输出。
历史数据查询一般为起始时间、结束时间、间隔时间都不固定,最终用户根据实际需要进行查询。
组态王中的实现方法:利用组态王内置报表以及报表的函数来实现对历史数据的查询。
组态王内置报表的操作类似excel,操作简单、方便,并且组态王提供了大量的报表函数来实现各种复杂功能。
2. 工程实例我们举一个例子来说明实现方法。
在此例程中我们定义五个变量,分别为“压力”、“温度”、“密度”、“电流”、“电压”,运行系统运行后记录历史数据,下面就以此为例来演示完成这一要求的具体步骤。
3. 操作步骤3.1定义设备根据工程中实际使用得设备进行定义,本例程使用亚控的仿真PLC设备,使用“PLC-亚控-仿真PLC-串口”驱动,定义设备名称为“PLC”。
3.2定义变量在组态王中定义五个变量:压力(IO实数类型)、温度(IO实数类型)、密度(IO实数类型)、电压(IO实数类型)、电流(IO实数类型)。
压力变量:最小值0,最大值100,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
温度变量:最小值0,最大值50,最小原始值0,最大原始值100,连接设备PLC,寄存器DECREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
密度变量:最小值0,最大值1,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
电流变量:最小值30,最大值50,最小原始值0,最大原始值100,初始值为30,连接设备PLC,寄存器DECREA100,数据类型short,读写属性为只读,采集频率1000。
组态王报表演示说明
组态王报表演示说明报表演示说明1、本演示分为日报、月报、年报2、日报的生成:对于日报可以每小时输入一个数据,然后进行统计后每天生成一个报表日报生成的命令语言见事件命令语言的条件为:$分==0 && $秒==0,消失时注意:a、报表函数命令执行时报表控件所在的画面必须打开,因此对于画面不多的情况下可以在工程运行时将后台处理画面打开并隐含起来,同时所有其它的画面属性都应为覆盖式。
如果画面较多无法全部将画面属性设为覆盖式则可以在报表命令语言执行前执行打开画面的命令 b、在新的一天开始时需要使用新的报表文件,因此需要在调用前需要判断当天的报表文件是否已经创建,如果没有创建则需要进行创建 c、对于日报的统计主要针对每天持续运行的情况,对于不能保证持续运行的现场可以参照月报的统计方式b、报表的查询在日报查询页,可以对报表文件进行读取、删除等操作{string FileName1=InfoAppDir()+\日报\\\本站点\\$年, 0, \本站点\\$月, 0, \本站点\\$日, 0, \//自定义变量long return01=InfoFile( Filename1, 1, \\\\本站点\\$分 ); //判断日报目录下是否已经有当天的报表文件了 if (return01==0) {string FileName=InfoAppDir()+\报表\\日报.rtl\ReportLoad(\FileName=InfoAppDir()+\日报\\\本站点\\$年, 0, \月, 0, \日, 0, \ReportSaveAs(\}//如果没有报表文件则从报表目录下调取模板创建报表文件 ReportLoad(\ReportSetCellString(\本站点\\$日期); long hang=\\\\本站点\\$时+6;string timestr=time(\\\\本站点\\$时,0,0);ReportSetCellString(\ReportSetCellValue(\本站点\\颗粒物); ReportSetCellValue(\本站点\\颗粒物折算); ReportSetCellValue(\本站点\\SO2); ReportSetCellValue(\本站点\\SO2折算);ReportSetCellValue(\本站点\\NO2); ReportSetCellValue(\本站点\\NO2折算); ReportSetCellValue(\本站点\\流量); ReportSetCellValue(\本站点\\O2); ReportSetCellValue(\本站点\\温度); ReportSetCellValue(\本站点\\水分); ReportSaveAs(\}3、月报的生成月报中需要每天的统计数据,该数据为每天的平均值,如果需要其它的统计数据也可照此方法进行处理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
创建历史数据报表历史数据报表创建过程如下:1、新建一価面,名押为:历史数据报表iffli面.2、选择工具箱中的工1工具,在颅而上输入文字:历史数据报表。
3、选择工具箱中的悟1工具,在岡面上绘制一历史数据报表窗口,控件名称为:Reports,并设计表格,如图8・17所 _______________________________________________A i「1 肋史2 09 瑕料输覆桂3456图8-17历史数据报表查询利用组态王提供的ReportSetHistData?的数町从组态王记录的历史库中按折定的赴始时间和时间间隔査询指定变虽的数据,设置过程如下:1、在価面中添加一按饥,按伍文本为:历史数据报表査询.2、在按粗的弹起爭件中输入如下命令ifi言.如图8JS所示:3.设置完毕后单击“文件"菜单中的“全部存”命令.保存您所作的设置。
4、单击“文件”菜单中的“切换到XTEW”命令,运厅此紳面・笊击“历史数据报表査询”按钮.弹出报表历史査询对话框.如图&19所示,报表历史査询对话框分二个履性页:报表属性页、时何属性页.变虽属性页.报表属性页:在报表属性页中您可以设置报表査询的显示恪式,此属性页设置如图8-19 所示。
时间属性页:在时间屈性页中您町以设置査询的起止时间以及査询的时间间隔.如图所示:图8・19图8-20变量属性页:在变虽叫性页中您可以选择欲査询历史数据的变忙.如图8・21所示:5. 设置完毕后单击•确定”按钮.原料油液位变虽的历史数据即可显示在历史数摇报 表控件中.从而达到了历史数据吉询的目的.如图8-22所示:图 8-22历史数据报表的其它应用一、1分钟数据报表演示利用报表窗口丁具结合组态王提供的命令语育可实现一个1分钟的数据报表•设置过程 如下:0*06/11/12 06/11/12 06/11/12 06/1142 06/1212 06/11/12柿16:24:44 15:25:44 15:26:44 15:27:44 15:28:44 15:29:44历史效抿报表用 S-211、新建一fli面.名松为:1分钟数据报表画面・2、选择工具箱中的工1工具,在曲而上输入文字:1分钟数据报表。
3、选择工具箱中的彳肖工具,在曲而匕绘制一报表窗口(64行5列),控件名称为: Repond.并设计表格,如图8・23所示:l?lS-234>在工程浏览器窗口左侧“丁程目录显示区”中选择“命令语言”中的“数据改变命令语言”选项,在右测“忖录内容显示区”中双击“新建”图标,在弹出的编辑框中输入如F脚本语言.如图8・24所示:图S-24命令语言如下所示:当系统变虽\\本站点哼秒变化时.执行该脚本稈序long row:点'$ 秒+4;ReportSetCellStnngCRepon6M . 2. 2, \\ 木站点\S 日期): Rq>ortSetCellStnngCRq>on6,\ row. 1, *木站点\S 时间): ReponSetCellValue ( ,Report6,\ row. 2, \\木站点\原料油液位); ReponSetCellValueC ^Repond*; row. 3, \V^站点皿化剂液位); ReponSetCellValue ('Repon6,', row, 4, W 木站点\成品汕液位); If (row= =4)ReportSetCellStnng2(H Repon6,\ 5,1, 63. 5, ”');上述命今ifi 肖的作用是熔点恢料汕液侍.认本汕点、•徉化制液位 和W 本站点'•成品油液位变虽每抄钟的数据自动写入报表控件中。
5、 设置完毕后单击“文件”菜单中的“全部存”命令,保存您所作的设置。
6、 单击“文件”菜单中的“切换到VIEW ”命令,运厅此画面.系统fl 动将数据写入 报表控件中,如图8・25所示:2T.OO 24.0021.… 18.00 15.00 12.00 100仇00€.00 3.00 0.00沌8 舛・00M.OO• Q AA图8・25二.1分钟数据查询报衣演示(间隔时间为2秒钟)利用组态王历史数据査询旳数ReponSetHistDataO 实现定时门动査询历史数据,并 获取1分钟数据的平均值.设置过程如下:1、新建 価而,名称为:1分钟数据査询报表iwi 面。
1分钟数抿报表演示20(»-11-13210011:08:1311:01:09 U:OI:M 11:01:06 n :o8:oe 11:08:07 ii :oi :oe 11:08:09 11:08:10 ii :os :n 日11:01:0011:01:01 11:08:02 tdKMX 002、选择工具箱中的工具,在価面上输入文字:1分钟数据査询报表。
3、选择工具箱中的彳筍工具,在価面匕绘制一报表窗口(33行5列),控件名称为: Repoit?.并设计表格.在如图8・26所示:图S・264、在报表窗I」的b33单元格中填写“=Av“agefb3:b32” • c33单元格中填写M=AverageCc3:c32y ■ d33 笊元格中填写M=AveraeeCd3:d32y ,如图8・27 所示*图S・275、在工程浏览器窗口左侧"工程目录显示区”中选择"命令语言”中的“数据改变命令语言”选项,在右侧“目录内容显示区”中双击“新建”图标,在弹出的编辑框中输入如下脚本谄乳如图8・28所示:图&28数据改变命令语言如下所示:当系统变虽\\本站点\S分变化时,执行该脚木程序Ions StanTime;StartTime=HTConvenTimeO\*站点年,W本站点,$月,\\本站点\$日,W本站点氐时,W 本站点S分,0);StartTime=StartTime-60:ReporrSetTime(H ReporT7,\ StanTune. 2,卞3立32。
;ReponSetHistData(M Report7f\ 站点\原料油液位I StartTime, 2,"b3:b32”);ReportSetHistData("Repon7”, 木站点\催化剂液位:StartTime. 2,"c3:c32J;ReportSetHistData(M Report7f\ 叫X木站点\成品油液位I StartTime, 2,”d3:d3T');上述命令语言的作用是査询\\本站点原料油液位、本处点曲化剂液位和*本站点\ 成品汕液位变呈当前时间前一分钟的数据,査询间隔为2秒,把时间显示在报表Repon7 的a3到a32单元格中,数据的査询结果分别显示在报表Repon7的b3到b32、c3到c32 和d3到d32单元格中。
5、设置完毕后单击“文件”菜单中的“全部存”命令.保存您所作的设置。
6>单击"文件”菜单中的“切换到VIEW"命令.运行此创面。
系统口动将数据写入报表控件中.如图8・29所示:图 S-29在1分钟数堀資询报表中.\\本站点\原料油液位、「本妇点•催化剂液位和2 本站点\成品油液位变量的査询结果的平均值分别豊示在b33、c33和d33单元格小, 如图8-30所示:”⑷川1!H F H3MV11/1J 12:11:11 N ・OU ««m/n/D i::n :»3 M.O) a<»3MV11A3 12!tf;23M no•A 00絡8 jw/iKw nncn创.00<T.O>2MV11/13 i2:tl:3ic cn 忆641.00 地8n :tt ;33MOO 1Z8 20M/H/1J IMilM sim "8yw/n/n miF ・* 2S.O ) n (A ax/n/is uutiM 11.« ito» sm/ii/jj iz :it :e ) 11001LO> 3>3V1LO3l (LU)LO) SMM/n/n u :it :444 w t« toil MOkOO*3gg iWil/JJ 121lt:5U 93、onH.OO :w«/n/n u :ir :ra 0】W) RM/n/P U :U :M •4.0U 11003MVH/1J U :H:M moo ”、2:yws 留H.00fXOd------------- SkW------------- 5M3------------- USZ -------------图8・30•!阿2CO/11Z1J 】2:E8 >m/u/n 】::“;•> 3t<A/ll/L] 12:1V :<M 2C«/lini 12Q:OI i;:p :aiMttnvu i..:•.:. gw ,n :P :n jca/n/jj n :p :M2CWZU/D ?w/ll/17 17:n :lf2f«4S/lJ )2:1Y :2: 4J.MCl. 00 55. (W IKW •・a>4= UJ KOO ]|.OQ 2Z uoo l・・ritioo13:1^:24 I2:r31W/11/11 12;1>:2! 2W4:/17 2tu>lxAJU :n :54 jcwu/11 n :n :3i 2<U/U/U 12:l v :382E M.tt.Hu nL 5k i.*n IJ 仏!J。