组态王报表功能实现方法

合集下载

用组态王做日历查询数据报表说明

用组态王做日历查询数据报表说明

组态王简单报表组态王目前我们应用的主要有两个版本: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版本新项目就直接用此函数。

组态王日报表例程

组态王日报表例程

组态王日报表的实现例程配置参考文档北京亚控科技发展有限公司技术部目录一、功能概述 (3)一、功能概述 (3)二、工程实例 (3)三、操作步骤: (3)1、定义设备: (3)2、定义变量: (3)3.制作画面: (4)3.1) 创建报表: (4)3.2) 创建日历控件: (6)4.进入运行系统: (12)四、注意事项 (13)图表图一报表 (5)图二报表设计 (5)图三日报表 (6)图四日历控件 (7)图五控件事件函数 (10)图六保存报表 (10)图七打印报表 (11)图八打印报表 (11)图九运行系统 (12)图十打印预览 (13)一、功能概述常规需求:很多工业现场会用到报表功能,而日报是其中最基本的一种报表形式。

日报表一般为每天整点的数据,每一个变量有24个数据。

组态王中的实现方法:利用组态王内置报表以及报表的函数来实现对日数据的查询生成日报表。

组态王内置报表的操作类似excel,操作简单、方便,并且组态王提供了大量的报表函数来实现各种复杂功能。

二、工程实例我们举一个例子来说明日报表的实现方法。

在此例程中我们定义五个变量,分别为“压力”、“温度”、“密度”、“电流”、“电压”,运行系统运行后记录历史数据,查询日报表数据时自动从历史数据中查询整点数据生成报表,并可以保存、打印报表。

下面就以此为例来演示完成这一要求的具体步骤。

三、操作步骤:1、定义设备:根据工程中实际使用得设备进行定义,本例程使用亚控的仿真PLC设备,使用“PLC-亚控-仿真PLC-串口”驱动,定义设备名称为”PLC”。

2、定义变量:在组态王中定义三个变量:压力(IO实数类型)、温度(IO实数类型)、密度(IO实数类型)。

压力变量:最小值0,最大值100,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。

记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。

组态王自动保存报表指定单元格数据

组态王自动保存报表指定单元格数据

组态王自动保存报表指定单元格数据
要实现组态王自动保存报表指定单元格的数据,可以按照以下步骤进行操作:
1. 打开组态王软件,并创建报表。

2. 在报表中选择要自动保存数据的指定单元格。

例如,如果要保存A1单元格的数据,则选择A1单元格。

3. 在选中的单元格上右键单击,然后选择"图形/动画相关"->"数据插入关键I/O"。

4. 在弹出的窗口中,选择要保存数据的I/O点。

这可以是任何一个在组态王中可用的I/O点。

确定选择后,点击"确定"。

5. 在弹出的窗口中,选择要保存数据的I/O点的属性,例如数据类型和保存的文件路径。

点击"确定"。

6. 现在,当报表中所选的单元格中的数据发生变化时,这些变化将自动保存到指定的文件中。

请注意,以上步骤可能因组态王的版本而略有差异。

它们仅提供了一个大致的指导,具体操作可能需要根据实际情况进行微调。

1.1 组态王的报表中如何实现报表数据的统计(如求和、求平均、检索最大最小值)?

1.1 组态王的报表中如何实现报表数据的统计(如求和、求平均、检索最大最小值)?

1.1组态王的报表中如何实现报表数据的统计(如求和、求平均、检索最大最小值)?针对报表中的数据统计需求功能,组态王提供了sum(),average(),max(),min()函数来实现相应的需求。

如:在报表的某一单元格写入=sum('a1:a100')此功能为对从A1到A100的连续的单元格进行求和,其他的函数的应用,请参照组态王的函数使用手册。

1.2在组态王画面上如何得到指定变量在指定时间内的最大值、最小值和平均值?组态王6.53 2008年版本新增加了求历史库中某段时间的最大值、最小值、平均值的功能,使用此函数可以在组态王画面上得到指定变量在一段时间内的最大值、最小值和平均值。

函数使用方法如下:RealResult=GetHistMaxData(TagName,StartTime,EndTime); //获取某段时间的最大值RealResult=GetHistMinData(TagName,StartTime,EndTime); //获取某段时间的最小值RealResult=GetHistAveData(TagName,StartTime,EndTime); //获取某段时间的平均值参数描述:TagName:所要查询的变量的名称,类型为字符串型,即带引号。

StartTime:数据查询的开始时间,该时间是通过组态王HTConvertTime函数转化的以1969年12月31日16:00:00为基准的长整型数,所以用户在使用本函数之前,应先将查询起始时间转换为长整型数值。

EndTime:数据查询的结束时间,类型同StartTime。

返回值:返回一个实数值。

调用方法如下:long time1;long time2;time1=HTConvertTime(2008,10,17,17,07,35);time2=HTConvertTime(2008,10,17,17,09,35);\\本站点\最大值=GetHistMaxData("\\本站点\仿真变量",time1,time2);\\本站点\最小值=GetHistMinData("\\本站点\仿真变量",time1,time2);\\本站点\平均值=GetHistAveData("\\本站点\仿真变量",time1,time2);需要更新文件实现。

组态王月报表制作

组态王月报表制作

组态王报表制作第一步,新建“后台处理”画面,其风格与后面的“日报”画面一致,只是少了一些按钮及组合图框。

如下图报表控件为:report5第二步,新建“后台月报”画面,其风格与后面的“月报”画面一致,只是少了一些按钮及组合图框。

如下图报表控件为:report7第三步:执行指令生成日报及月报文件(后缀名为rtl,同时可生成.xls文件)在“事件命令语言”中新建两个事件:1、第一个事件为:\\本站点\$分==0&&\\本站点\$秒==0在该事件“消失时”写入如下脚本(该事件为每个小时写入一次数据):string FileName1=InfoAppDir()+"日报\"+ StrFromReal(\\本站点\$年, 0, "f")+"y"+StrFromReal(\\本站点\$月, 0, "f")+"m"+StrFromReal(\\本站点\$日, 0, "f" )+".rtl";//自定义变量long return01=InfoFile( Filename1, 1,\\本站点\$分);//判断日报目录下是否已经有当天的报表文件了if (return01==0){string FileName=InfoAppDir()+"报表\日报.rtl";ReportLoad("Report5",FileName);FileName=InfoAppDir()+"日报\"+StrFromReal( \\本站点\$年, 0,"f" )+"y"+StrFromReal($月, 0, "f" )+"m"+StrFromReal($日, 0, "f" )+".rtl"; ReportSaveAs("Report5",FileName);}//如果没有报表文件则从报表目录下调取模板创建报表文件ReportLoad("Report5",FileName1);ReportSetCellString("report5", 3,10,\\本站点\$日期);long hang=\\本站点\$时+6;//定义写入不同时间写入不同的行,将0点至1点的写入第六行,后面的往后加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,\\本站点\水分);//ReportSetCellString就是将变量数值写入到报表的那一列中ReportSaveAs("Report5",FileName1);//将数据保存到报表中2、第二个事件为:\\本站点\$时==23在该事件“消失时”写入如下脚本(该事件为每天写入一次数据):string reportname2=StrFromReal(\\本站点\$年, 0, "f" )+StrFromReal(\\本站点\$月, 0, "f" )+".rtl";//====================string FileName;//自定义变量FileName=InfoAppDir()+"月报\"+reportname2;long return02=InfoFile( Filename, 1,\\本站点\$分);ShowPicture("后台月报");HidePicture("后台月报");//判断月报目录下是否已经有当月的报表文件了if (return02==0){FileName=InfoAppDir()+"报表\月报.rtl";ReportLoad("Roport7",FileName);FileName=InfoAppDir()+"月报\"+ reportname2;Reportsaveas("Roport7",FileName);\\本站点\日计数=0;}//如果当月的月报文件还没有产生则调入月报.rtl文件并按规定格式保存报表文件FileName=InfoAppDir()+"月报\"+StrFromReal( \\本站点\$年, 0,"f")+StrFromReal(\\本站点\$月, 0, "f" )+".rtl";ReportLoad("Report7",FileName);long hang;hang= $日+5;\\本站点\日计数=\\本站点\日计数+1;string str;long Value;str=ReportGetCellString("Report5", 3,10); ReportSetCellString("Report7", hang, 1,str); Value=ReportGetCellValue("Report5", 30,2); ReportSetCellValue("Report7", hang, 2,Value); Value=ReportGetCellValue("Report5", 30,3); ReportSetCellValue("Report7", hang, 3,Value); Value=ReportGetCellValue("Report5", 30,4); ReportSetCellValue("Report7", hang, 4,Value); Value=ReportGetCellValue("Report5", 30,5); ReportSetCellValue("Report7", hang, 5,Value); Value=ReportGetCellValue("Report5", 30,6); ReportSetCellValue("Report7", hang, 6,Value); Value=ReportGetCellValue("Report5", 30,7); ReportSetCellValue("Report7", hang, 7,Value); Value=ReportGetCellValue("Report5", 30,8); ReportSetCellValue("Report7", hang, 8,Value); Value=ReportGetCellValue("Report5", 30,9); ReportSetCellValue("Report7", hang, 9,Value); Value=ReportGetCellValue("Report5", 30,10); ReportSetCellValue("Report7", hang, 10,Value);ReportSetCellValue("Report7", hang, 11,Value); //将日报表中的统计数据(平均值)输入到月报表中Value=ReportGetCellValue("Report7", 39,2); Value=Value/\\本站点\日计数; ReportSetCellValue("Report7", 37, 2,Value); Value=ReportGetCellValue("Report7", 39,3); Value=Value/\\本站点\日计数; ReportSetCellValue("Report7", 37, 3,Value); Value=ReportGetCellValue("Report7", 39,4); Value=Value/\\本站点\日计数; ReportSetCellValue("Report7", 37, 4,Value); Value=ReportGetCellValue("Report7", 39,5); Value=Value/\\本站点\日计数; ReportSetCellValue("Report7", 37, 5,Value); Value=ReportGetCellValue("Report7", 39,6); Value=Value/\\本站点\日计数; ReportSetCellValue("Report7", 37, 6,Value); Value=ReportGetCellValue("Report7", 39,7); Value=Value/\\本站点\日计数;Value=ReportGetCellValue("Report7", 39,8);Value=Value/\\本站点\日计数;ReportSetCellValue("Report7", 37, 8,Value);Value=ReportGetCellValue("Report7", 39,9);Value=Value/\\本站点\日计数;ReportSetCellValue("Report7", 37, 9,Value);Value=ReportGetCellValue("Report7", 39,10);Value=Value/\\本站点\日计数;ReportSetCellValue("Report7", 37, 10,Value);Value=ReportGetCellValue("Report7", 39,11);Value=Value/\\本站点\日计数;ReportSetCellValue("Report7", 37, 11,Value);//将累计值转换为平均值Reportsaveas("Report7",FileName);ClosePicture("后台月报");第四步、新建“日报”“月报”这几个画面1、在“日报”中放置一个报表控件、一简单组合框控件及几个按钮,如下图:其中(1)、报表控件名为:report1(2)、组合图框名为:日报查询变量名为:日报表(3)、“刷新列表”按钮在“命令语言链接—弹起时”写入如下脚本string FileName; //定义变量FileName=InfoAppDir()+"日报\"+"*.rtl"; //日报表存放路径,InfoAppDir()为程序文件存放路径listClear("日报查询"); //清除组合图框中的列表ListLoadFileName( "日报查询", FileName ); //读取日报存放路径中的报表文件显示在组合图框中(4)、“查询日报”按钮在“命令语言链接—弹起时”写入如下脚本stringFileName; //定义变量FileName=InfoAppDir()+"日报\"+\\本站点\日报表; //组合图框中选中的报表文件,,InfoAppDir()为程序文件存放路径,\\本站点\日报表为组合图框的变量名ReportLoad("Report1",FileName); //将读取的报表显示在报表控件中(5)、“打印”按钮在“命令语言链接—弹起时”写入如下脚本ReportPrint2("Report1"); //使用ReportPrint2("Report1",0)指令,可以在打印前弹出打印机选择窗口2、在“月报”中放置一个报表控件、一简单组合框控件及几个按钮,如下图:其中(1)、报表控件名为:月报(2)、组合图框名为:月报查询变量名为:报表名(3)、“刷新列表”按钮在“命令语言链接—弹起时”写入如下脚本string FileName; //定义变量FileName=InfoAppDir()+"月报\"+"*.rtl"; //月报表存放路径,InfoAppDir()为程序文件存放路径listClear("月报查询"); //清除组合图框中的列表ListLoadFileName( "月报查询", FileName ); //读取月报存放路径中的报表文件显示在组合图框中(4)、“查询日报”按钮在“命令语言链接—弹起时”写入如下脚本stringFileName; //定义变量FileName=InfoAppDir()+"月报\"+\\本站点\报表名; //组合图框中选中的报表文件,,InfoAppDir()为程序文件存放路径,\\本站点\报表名为组合图框的变量名ReportLoad("月报",FileName); //将读取的报表显示在报表控件中(5)、“打印”按钮在“命令语言链接—弹起时”写入如下脚本ReportPrint2("月报"); //使用ReportPrint2("月报",0)指令,可以在打印前弹出打印机选择窗口运行程序即可获取报表了。

组态王 SCADA3.0报表例程

组态王 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、本演示分为日报、月报、年报2、日报的生成:对于日报可以每小时输入一个数据,然后进行统计后每天生成一个报表日报生成的命令语言见事件命令语言的条件为:$分==0 && $秒==0,消失时注意:a、报表函数命令执行时报表控件所在的画面必须打开,因此对于画面不多的情况下可以在工程运行时将后台处理画面打开并隐含起来,同时所有其它的画面属性都应为覆盖式。

如果画面较多无法全部将画面属性设为覆盖式则可以在报表命令语言执行前执行打开画面的命令b、在新的一天开始时需要使用新的报表文件,因此需要在调用前需要判断当天的报表文件是否已经创建,如果没有创建则需要进行创建c、对于日报的统计主要针对每天持续运行的情况,对于不能保证持续运行的现场可以参照月报的统计方式b、报表的查询在日报查询页,可以对报表文件进行读取、删除等操作{string FileName1=InfoAppDir()+"日报\"+ StrFromReal( \\本站点\$年, 0, "f" )+"y"+StrFromReal(\\本站点\$月, 0, "f" )+"m"+StrFromReal(\\本站点\$日, 0, "f" )+".rtl";//自定义变量long return01=InfoFile( Filename1, 1, \\本站点\$分 );//判断日报目录下是否已经有当天的报表文件了if (return01==0){string FileName=InfoAppDir()+"报表\日报.rtl";ReportLoad("Report5",FileName);FileName=InfoAppDir()+"日报\"+StrFromReal( \\本站点\$年, 0,"f" )+"y"+StrFromReal( $月, 0, "f" )+"m"+StrFromReal( $日, 0, "f" )+".rtl";ReportSaveAs("Report5",FileName);}//如果没有报表文件则从报表目录下调取模板创建报表文件ReportLoad("Report5",FileName1);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",FileName1);}3、月报的生成月报中需要每天的统计数据,该数据为每天的平均值,如果需要其它的统计数据也可照此方法进行处理。

组态王的年月报表

组态王的年月报表

组态王的年⽉报表(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("年报后台");//............................................................................................................................................................................................................................................................................................................................................。

组态王报表查询按钮脚本语言

组态王报表查询按钮脚本语言

组态王报表查询按钮脚本语言组态王报表查询按钮的脚本语言可以使用VBA(Visual Basic for Applications),具体步骤如下:1. 在组态王软件中,打开需要添加查询按钮的报表页面。

2. 在工具栏中选择"插入",然后选择"按钮",在报表页面上添加一个按钮。

3. 右键单击添加的按钮,选择"属性",在弹出的对话框中选择"事件"选项卡,在"单击"事件中输入以下代码:```vbPrivate Sub CommandButton1_Click()'查询操作代码End Sub```4. 在代码中添加实际的查询操作代码,例如:```vbPrivate Sub CommandButton1_Click()Dim conn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim strSQL As String'打开数据库连接,这里假设使用MySQL数据库conn.Open "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=test;User=root;Password=123456;Option=3;"'拼接SQL查询语句,这里假设查询用户表中的所有记录strSQL = "SELECT * FROM user"'执行SQL查询语句rs.Open strSQL, conn'将查询结果显示在窗口中Do While Not rs.EOFMsgBox rs.Fields("username").Valuers.MoveNextLoop'关闭数据库连接rs.Closeconn.CloseEnd Sub```5. 测试查询按钮,点击按钮,查看查询结果是否正确显示。

组态王日报表例程资料讲解

组态王日报表例程资料讲解

组态王日报表的实现例程配置参考文档北京亚控科技发展有限公司技术部目录一、功能概述 (3)一、功能概述 (3)二、工程实例 (3)三、操作步骤: (3)1、定义设备: (3)2、定义变量: (3)3.制作画面: (4)3.1) 创建报表: (4)3.2) 创建日历控件: (6)4.进入运行系统: (10)四、注意事项 (11)图表图一报表 (4)图二报表设计 (5)图三日报表 (5)图四日历控件 (6)图五控件事件函数 (8)图六保存报表 (8)图七打印报表 (9)图八打印报表 (9)图九运行系统 (10)图十打印预览 (11)一、功能概述常规需求:很多工业现场会用到报表功能,而日报是其中最基本的一种报表形式。

日报表一般为每天整点的数据,每一个变量有24个数据。

组态王中的实现方法:利用组态王内置报表以及报表的函数来实现对日数据的查询生成日报表。

组态王内置报表的操作类似excel,操作简单、方便,并且组态王提供了大量的报表函数来实现各种复杂功能。

二、工程实例我们举一个例子来说明日报表的实现方法。

在此例程中我们定义五个变量,分别为“压力”、“温度”、“密度”、“电流”、“电压”,运行系统运行后记录历史数据,查询日报表数据时自动从历史数据中查询整点数据生成报表,并可以保存、打印报表。

下面就以此为例来演示完成这一要求的具体步骤。

三、操作步骤:1、定义设备:根据工程中实际使用得设备进行定义,本例程使用亚控的仿真PLC设备,使用“PLC-亚控-仿真PLC-串口”驱动,定义设备名称为”PLC”。

2、定义变量:在组态王中定义三个变量:压力(IO实数类型)、温度(IO实数类型)、密度(IO实数类型)。

压力变量:最小值0,最大值100,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。

记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。

组态王中的数据报表制作与保存

组态王中的数据报表制作与保存

组态王中的数据报表制作与保存组态王是一款常用的工业自动化软件,在工控领域内得到广泛应用。

在组态王中,可以通过界面配置的方式来实现自动化设备的运行控制和数据采集。

而对于数据的处理和展示,组态王提供了丰富的功能,其中数据报表的制作和保存是其中的重要功能之一。

本文将对组态王中数据报表制作和保存进行详细介绍。

1. 数据报表的制作在组态王中,数据报表的制作需要经过以下几个步骤:1.1 选择数据源首先,在组态王中选择需要展示的数据源,可以选择历史数据、实时数据、手动输入等多种数据源。

选择不同的数据源,会对后续报表的展示和数据处理产生不同的影响。

1.2 新建数据报表在选择了数据源之后,可以在组态王中新建数据报表。

新建数据报表的方法可以通过菜单栏“文件-新增-报表”来实现。

在新建报表时,需要指定报表的名称、报表的类型、和报表的模板。

报表的类型包括静态报表和动态报表,静态报表通常用于展示历史数据,而动态报表则用于实时展示实时数据和控制信息。

而报表的模板,则可以根据需要选择不同的报表样式,或者自定义报表模板。

1.3 设计报表模板在选择了报表模板之后,进入报表设计环节。

在报表设计环节中,需要完成以下几项工作:•将数据源字段拖放到报表中,以实现数据的展示。

•设计报表格式和样式,包括报表标题、表格格式、图表样式等。

•添加报表数据的筛选、过滤及排序方式,以满足不同场景下的数据展示需求。

•配置报表的输出方式,包括输出到本地、邮件、FTP等多种方式。

在完成了以上的工作之后,数据报表的制作就完成了。

此时,可以预览和调试报表,对格式进行微调等操作。

2. 数据报表的保存在组态王中,数据报表的保存可以分为两个部分:前端和后端。

2.1 前端保存在报表制作完成之后,可以通过菜单栏“报表-保存”或者快捷键CTRL + S来完成前端报表的保存。

前端保存包括以下内容:•报表的设计配置信息,包括字段、格式、样式、筛选排序等配置信息。

•报表的数据展示内容,例如表格、图表中的数据展示。

组态王报表功能实现方法

组态王报表功能实现方法

一种简单的组态王报表功能实现方法2010年04月24日星期六 15:18前段时间用组态王做了一个小的画面组态,其中用到了KVADODBGrid控件来做报表,现总结如下。

一、准备工作第一步:在组态王工程管理器中新建一个项目,项目路径为D:\实验项目。

第二步:新建一个ACCESS数据库1、在“D:\实验项目”路径下新建一个 Microsoft Office Access 应用程序并命名为;2、打开“控制面板\管理工具\ODBC数据源管理器”选择“系统DSN”选项;3、点击“添加”按钮创建新数据源,选择“Microsoft Access Driver(*.mdb)”;4、在数据源名处填下“mydata”,并选择数据库路径为“D:\实验项目\”。

第三步:创建表格模板点击工程浏览器左侧的“SQL访问管理器”下的“表格模板”,新建一个表格并命名为Table。

在Table中添加所需记录的变量及1日期参数,其中“日期”为定长字符串型,字符长度为10;其它诸如年、月、日、时、分则为浮点型,字符长度为1。

第四步:创建记录体点击工程浏览器左侧的“SQL访问管理器”下的“记录体”,新建一个表格并命名为Record,在Record中添加所需记录的变量及日期参数。

记录体用来定义Access数据表格字段与组态王变量之间的对应关系。

二、连接数据库第一步:在工程浏览器左侧的“数据库”下的“数据字典”中定义一个内存整型变量,并命名为ConnectID。

第二步:创立组态王与mydata数据源的连接,并以“表格模板”Table的格式在数据库中建立名为“TheDate”的表格,命令如下:SQLConnect( ConnectID, "dsn=mydata;uid=;pwd=");SQLCreateTable(ConnectID, "TheDate", "Table" );将上面两条命令填入“工程浏览器\命令语言\应用程序命令语言”下的“启动时”选项中。

组态王中的数据报表制作与保存

组态王中的数据报表制作与保存

组态王中的数据报表制作与保存摘要:本文主要介绍如果使用组态王来构建数据报表,并以EXCEL的格式在指定的文件路径保存。

关键字:组态王历史库数据报表制作保存一、引言数据报表是反应生产过程中的数据、状态等,并对数据进行记录的一种重要形式。

它既能反映系统实时的生产情况,也能对长期的生产过程进行统计、分析,使管理人员能够实时掌握和分析生产情况。

组态王提供内嵌式报表系统,工程人员可以任意设置报表格式,对报表进行组态。

组态王为工程人员提供了丰富的报表函数,实现各种运算、数据转换、统计分析、报表打印等。

既可以制作实时报表,也可以制作历史报表。

组态王还支持运行状态下单元格的输入操作,在运行状态下通过鼠标拖动改变行高、列宽。

另外,工程人员还可以制作各种报表模板,实现多次使用,以免重复工作。

二、数据报表的制作数据报表分为实时数据报表和历史数据报表2类。

报表的构建方法如下:在画面内,使用工具箱中的报表窗口按钮创建一个报表窗口,如图1所示。

图1 创建后的报表窗口用鼠标双击报表窗口的灰色部分,弹出“报表设计”对话框,该对话框主要设置报表的名称、报表表格的行列数目以及选择套用表格的样式。

1、制作实时数据报表实时数据报表是实时显示相关变量的数据值,在报表窗口的单元格中直接引用变量来实现。

在报表的单元格中直接输入“=变量名”,既可在运行时在该单元格中显示该变量的数值,当变量的数据发生变化时,单元格中显示的数值也会被实时刷新。

2、制作历史数据报表历史数据报表是从组态王的历史库中查询相关变量的历史数据,并在历史数据报表内显示,因此对历史数据报表要查询的数据必须设置历史记录属性。

在组态王中,离散型、整型和实型变量支持历史记录,字符串型变量不支持历史记录。

组态王的历史记录形式可以分为数据变化记录、定时记录(最小单位为1分钟)和备份记录。

记录形式的定义通过变量属性对话框中提供的选项完成。

如图2所示。

图 2 记录属性设置在查询时,希望弹出一个对话框,可以在对话框上随机选择不同的变量和时间段来查询数据,可使用函数ReportSetHistData2(StartRow,StartCol)。

组态王日报表制作

组态王日报表制作

组态王日报表制作步骤一、定义设备二、定义变量三、制作画面3.1添加画面3.2添加文本与报表3.3添加日历控件并在事件中编辑closeup插入通过控件,如图所示:选择后画到画面上,双击控件,在“常规”选项卡中为控件命名为“ADate”,点击“确定”,保存画面。

再次双击日历控件,选择“事件”选项卡,点击在“事件”选项卡中点击CloseUp事件,弹出控件事件函数编辑窗口,在函数声明中为此函数命名:CloseUp()在编辑窗口中编写脚本程序,在编写脚本程序之前在数据词典中定义字符串变量“选择日期”双击日历控件设置属性如下图程序如下:float Ayear;float Amonth;float Aday;long x;long y;long Row;long StartTime;string temp; Ayear=ADate.Year; Amonth=ADate.Month; Aday=ADate.Day;temp=StrFromInt( Ayear, 10 );if(Amonth<10)temp=temp+"-0"+StrFromInt(Amonth,10);elsetemp=temp+"-"+StrFromInt(Amonth,10);if(Aday<10)temp=temp+"-0"+StrFromInt(Aday,10);elsetemp=temp+"-"+StrFromInt(Aday,10);\\本站点\选择日期=temp;ReportSetCellString2("Report1",4,1,27,6,"");//清空单元格ReportSetCellString("Report1",2,2,temp);//填写日期StartTime=HTConvertTime(Ayear,Amonth,Aday,0,0,0);ReportSetHistData("Report1","\\本站点\IO实数1",StartTime,3600,"B4:B27");//ReportSetHistData("Report1","\\本站点\压力",StartTime,3600,"B4:B27");ReportSetHistData("Report1","\\本站点\温度",StartTime,3600,"C4:C27");ReportSetHistData("Report1","\\本站点\密度",StartTime,3600,"D4:D27");ReportSetHistData("Report1","\\本站点\电流",StartTime,3600,"E4:E27");ReportSetHistData("Report1","\\本站点\电压",StartTime,3600,"F4:F27");x=0;while(x<24){row=4+x;y=StartTime+x*3600;temp=StrFromTime(y,2);ReportSetCellString("Report1",row,1,temp);x=x+1;}添加选择日期变量如下图所示3.4添加打印和保存保存的程序如下:string filename;filename=InfoAppDir()+\\本站点\选择日期+".xls"; ReportSaveAs("Report0",filename);打印预览的程序如下ReportPrintSetup("Report0");详细设置请查看保存和打印文档四、进入运行系统运行系统结果如下图所示:。

组态王中自动报表系统的实现

组态王中自动报表系统的实现

组态王中自动报表系统的实现作者:韩浩尹亚南朱晓山来源:《科教导刊》2017年第20期摘要数据报表是电站管理的一项重要功能,是对电力系统的运行参数及设备状态进行定时记录的一种重要形式。

利用组态王提供的内嵌式报表系统以及丰富的报表函数,实现了变电仿真培训系统中的数据报表功能,具有实时数据采集以及报表的自动保存、查询和打印功能。

关键词组态王报表仿真中图分类号:TP317 文献标识码:A DOI:10.16400/ki.kjdkz.2017.07.0230 引言组态软件是工业控制领域开发计算机监控系统的一个快捷平台,与VC、VB等平台相比,利用其提供的各类工具,通过简单的组态工作,即可实现监控系统的开发。

“组态王”集自动控制、通信、画面动态连接以及可与其它的应用软件数据交换等功能于一身,是国内使用比较普遍的建立工业控制对象的人机接口的一种智能软件包,其组态过程主要包括I/O设备连接、数据词典建立、监控画面设计以及动画连接等几个步骤,利用软件图库所提供的丰富的图库元素以及各类控件保证了所开发的工业控制系统的界面一致性和通用性,其电力版在电力系统的变电运行以及变电仿真培训系统中应用广泛。

变电仿真培训系统就是利用软件或者软硬结合的方式实现现场变电站运行系统的各种功能,以达到提高运行人员解决现场实际问题的能力。

数据报表是电站管理的一项重要功能,通常以日为单位对电力系统运行中各节点以及回路的运行数据、设备的运行状态(如断路器等的位置信息)等进行记录。

利用日报表能实现生产过程的统计、分析,以使运行和管理人员既能够及时掌握电力系统运行情况也可通过分析找寻出参数的变化规律,为生产任务的制定和发展规划提供依据。

1 报表功能的实现组态王提供的内嵌式报表系统,使开发人员可以任意设置报表格式,对报表进行组态。

同时也提供了丰富的报表函数,实现各种运算、数据转换、统计分析、报表打印等。

既可以制作实时报表,也可以制作历史报表。

1.1 自动报表功能的实现新建画面,在画面中插入报表控件并设计报表格式,右键点画面并在“画面属性”的命令语言中的“存在时”选项页中填入如下代码:long xx = 0,yy =371,rww = 99, strt = 773;string tmp, filen1; //定义变量strt =HTConvertTime($年,$月,$日,$时,0,0);ReportSetCellString2("Report0", 4, 1, 27, 6, " "); //清空单元格ReportSetCellString("Report0", 2, 2,\\本站点\$日期); //填写日期ReportSetHistData("Report0", "\\本站点\压力", strt, 120, "B4:B33"); //设定各参量及填充ReportSetHistData("Report0", "\\本站点\温度", strt, 120, "C4:C33"); //位置和采集间隔,ReportSetHistData("Report0", "\\本站点\密度", strt, 120, "D4:D33"); //此处设定120秒,ReportSetHistData("Report0", "\\本站点\电流", strt, 120, "E4:E33"); //可视情况改变ReportSetHistData("Report0", "\\本站点\电压", strt, 120, "F4:F33");while(xx{rww=4+xx;yy=strt+x*120;tmp=StrFromTime( yy, 2 );ReportSetCellString("Report0", rww, 1, tmp);x=x+1; //填充表中的时间列,注意应与上述数据采集时间一致}if($分==59&&$秒==59){filen1=InfoAppDir()+"\Datafile\"+StrFromReal( $年, 0, "f" )+StrFromReal( $月, 0, "f" )+StrFromReal( $日, 0, "f" )+StrFromReal( $时, 0, "f" )+StrFromReal($分, 0,"f" )+StrFromReal( $秒, 0, "f" )+".rtl";ReportSaveAs("Report0",filen1); //表整时保存,以时间命名}1.2 查询功能的实现新建画面并插入“下拉式组合框”控件,点击右键,在画面属性的“显示时”选项页中填入如下代码:string filen3,filen4, filen5;filen3=InfoAppDir()+"\Datafile \*.rtl";listClear("serh");ListLoadFileName( " serh ",filen3);filen4=InfoAppDir()+"\Datafile \"+\\本站点\ serh;ReportLoad("Report1",filen4);filen5=InfoAppDir()+"\Datafile \*.rtl";listClear("serh ");ListLoadFileName( " serh ", filen5);1.3 即时保存及打印功能的实现分别在报表画面和查询画面中设置保存和打印两个按钮,双击“保存”按钮,在“弹起时”填入如下代码:string filen2;filen2=InfoAppDir()+"\Datafile \"+StrFromReal($年, 0, "f" )+StrFromReal( $月, 0, "f" )+StrFromReal( $日, 0, "f" )+StrFromReal( $时, 0, "f" )+StrFromReal($分, 0,"f" )+StrFromReal( $秒, 0, "f" )+".rtl";ReportSaveAs("Report0",filen2);双击“打印”按钮,在“弹起时”填入如下代码:ReportPrintSetup("Report0");2 结束语报表系统的运行效果图如图1所示(说明:演示的数据采集间隔为2分钟,整点自动保存),综合利用组态王的报表控件以及报表函数完成了报表数据的自动采集、报表的自动保存以及查询和打印等功能,完美地实现了变电站仿真培训系统的报表功能参考文献[1] 组态王6.55用户手册[R].2012.[2] 组态王6.55命令语言函数速查手册[R].2012.[3] 刘学多等.面向中间件的组态王远程数据采集驱动设计[J].计算机应用,2016.36(1).[4] 刘景华等.基于组态王的数据采集监控系统[J].青岛理工大学学报,第29卷第4期.。

组态王软件详细教程第七讲报表系统

组态王软件详细教程第七讲报表系统

组态王软件详细教程第七讲报表系统(总9页)-CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除第七讲报表系统第一节组态王内嵌数据报表数据报表的用途数据报表是反应生产过程中的数据、状态等,并对数据进行记录的一种重要形式。

是生产过程必不可少的一个部分。

它即能反应系统实时的生产情况,也能对长期的生产过程进行统计、分析,使管理人员能够实时掌握和分析生产情况。

组态王提供内嵌式报表系统,工程人员可以任意设置报表格式,对报表进行组态。

组态王为工程人员提供了丰富的报表函数,实现各种运算、数据转换、统计分析、报表打印等。

即可以制作实时报表,也可以制作历史报表。

另外,工程人员还可以制作各种报表模板,实现多次使用,以免重复工作。

制作实时数据报表在组态王工具箱内选择“报表窗口”工具,在报表画面上绘制报表。

如下图所示:双击报表窗口的灰色部分(表格单元格区域外没有单元格的部分),弹出“报表设计”对话框,对话框定义如下图所示:在“报表控件名”对话框中输入报表控件名称:实时数据报表,这个控件名会在报表函数中引用。

在行数对话框中输入所要制作的报表的大致行数15本讲介绍报表系统的创建和格式设置介绍报表函数介绍报表系统的组态介绍报表模板在列数对话框中输入所要制作的报表的大致列数6单击对话框的“确认”按钮。

则组态王报表画面如下图所示:设置表头格式设计表头:选中“b1”到“e2”的单元格区域,从报表工具箱上单击“合并单元格”按钮,在报表工具箱的编辑框里输入文本“实时数据报表”,单击“输入”按钮;或双击合并的单元格,使输入光标位于该单元格中,然后输入上述文本。

单击报表工具箱中的“设置单元格格式”按钮,设置单元格格式如下:数字—常规;字体—隶书、规则、一号、红色;对齐方式:水平—居中,垂直—居中;图案—设置单元格底纹颜色为灰色。

如下图所示。

设计报表时间在单元格“d3”中显示当前日期,双击该单元格,然后输入函数“=Date($年,$月,$日)”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一种简单的组态王报表功能实现方法
2010年04月24日星期六 15:18
前段时间用组态王6.53做了一个小的画面组态,其中用到了KVADODBGrid控件来做报表,现总结如下。

一、准备工作
第一步:在组态王工程管理器中新建一个项目,项目路径为D:\实验项目。

第二步:新建一个ACCESS数据库
1、在“D:\实验项目”路径下新建一个 Microsoft Office Access 应用程序并命名为mydatabase.mdb;
2、打开“控制面板\管理工具\ODBC数据源管理器”选择“系统DS N”选项;
3、点击“添加”按钮创建新数据源,选择“Microsoft Access Driver(*.mdb)”;
4、在数据源名处填下“mydata”,并选择数据库路径为“D:\实验项目\mydatabase.mdb”。

第三步:创建表格模板
点击工程浏览器左侧的“SQL访问管理器”下的“表格模板”,新建一个表格并命名为Table。

在Table中添加所需记录的变量及
日期参数,其中“日期”为定长字符串型,字符长度为10;其它诸如年、月、日、时、分则为浮点型,字符长度为1。

第四步:创建记录体
点击工程浏览器左侧的“SQL访问管理器”下的“记录体”,新建一个表格并命名为Record,在Record中添加所需记录的变量及日期参数。

记录体用来定义Access数据表格字段与组态王变量之间的对应关系。

二、连接数据库
第一步:在工程浏览器左侧的“数据库”下的“数据字典”中定义一个内存整型变量,并命名为ConnectID。

第二步:创立组态王与mydata数据源的连接,并以“表格模板”Table的格式在数据库中建立名为“TheDate”的表格,命令如下:SQLConnect( ConnectID, "dsn=mydata;uid=;pwd=");
SQLCreateTable(ConnectID, "TheDate", "Table" );
将上面两条命令填入“工程浏览器\命令语言\应用程序命令语言”下的“启动时”选项中。

第三步:在工程浏览器左侧的“命令语言\事件命令语言”下新建一事件命令,在“事由描述”项内填下“\\本站点\$分==01”(每小时事件发生一次即分变量每次为一,计算了60分钟),在“发生时”框内填写
SQLInsert(connectionid, "TheDate", "Record");//每小时向数据库保存一条记录。

三:建立报表查询画面
新建一个画面,并在画面上添加一个日期控件作日期查询用;添加一个KVADODBGrid控件作报表显示用;添加三个按钮分别作查询、打印、退出用。

第一步:添加KVADODBGrid控制
1.菜单栏\编辑\插入通用控件\KVADODBGrid Class,双击添加的控件,并命名“控件名”为dayreport
2.在控件属性里的“数据源”选择前面定义的mydata、“表名称”选择TheDate,此时下面的“有郊字段”将出现你在记录体里面加入的数据,根据需要添加到右侧,并编辑好“标题”、“格式”等内容
3.根据需要可修改控件属性里面的“字体”、“打印设置”等
第二步:添加时间控件
1.菜单栏\编辑\插入通用控件\Microsoft Date and Time Picker Control 6.0(SP4)
2.双击添加的控件,并命名“控件名”为DayreportSelect
3.根据需要可修改控件属性
第三步:添加查询按钮
1.定义按钮的“命令语言连接”“按下时”为:
dayreport.RemoveAllData();
(RemoveAll RemoveAll 方法描述RemoveAll 方法从 Dictionary 对象中删除所有关键字和条目对。

语法
object.RemoveAllobject始终是一个 Dictionary 对象的名字。

说明下面的代码举例说明了 RemoveAll 方法的用法:Dim a, d, i '创建一些变量Set d = CreateObject("Scripting.Dictionary")d.Add "a", "Athens" '添加一些关键字和条目d.Add "b", "Belgrade"d.Add "c", "Cairo"...a = d.RemoveAll '清除字典VC: CARRAY类下的操作函数,功能:删除该数组中的所有指针。

从该数组中删除所有指针,但并不真正的删除CObject对象。

RemoveAll 函数将释放所有用于指针存储所占用的内存。

)2.定义按钮的“命令语言连接”“弹起时”为:(下列语言中“条件句”为内存字符串格式,在“数据词典”里面定义) long a;
long b;
string str1;
string str2;
a=DayreportSelect.Month;(指针命令,控件DayrepotSelect中的Month变量)
b=DayreportSelect.Day;
if (a<10)
str1="-0"+StrFromInt( DayreportSelect.Month, 10 );
else
str1="-"+StrFromInt( DayreportSelect.Month, 10 );
if (b<10)
str2="-0"+StrFromInt( DayreportSelect.Day, 10 );
else
str2="-"+StrFromInt( DayreportSelect.Day, 10 );
\\本站点\条件句=StrFromInt( DayreportSelect.Year, 10 )+str1+str2;
dayreport.Where="日期='"+\\本站点\条件句+"' order by 时";
dayreport.FetchData();
dayreport.FetchEnd();
注意:在控制面板\区域和语言\自定义下,需定义短日期格式为“yyyy-MM-dd”样式,若不同,则上面命令代码的判断段需作相应修改。

第四步:添加打印按钮
定义按钮的“命令语言连接”“弹起时”为:dayreport.Print();
第五步:添加退出按钮
总体效果图如下图所示:。

相关文档
最新文档