组态王6报表
用组态王做日历查询数据报表说明
组态王简单报表组态王目前我们应用的主要有两个版本: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、月报的生成月报中需要每天的统计数据,该数据为每天的平均值,如果需要其它的统计数据也可照此方法进行处理。
组态王报表导入导出
-------------------------------------------------------------组态王 6.53 数据词典导入/导出说明(c) 北京亚控科技有限公司 版权所有,2003------------------------------------------------------------------功 能:作为组态王6.53工程管理器的一部分,实现组态王数据词典和 Excel 格式数据的交换。
注 意:1.在从 Excel 格式导入到组态王的数据词典中时,工程管理器要对 Excel 格式数据进行严格的校验, 只有校验通过后才能导入数据词典,否则将拒绝导入。
因此在导入之前请仔细检查尽可能保证数据的 正确,以节约时间,减少修改和导入反复的次数。
2.导入之前请先备份工程,以备出现异常情况时恢复到导入前状态。
使用说明:1.不能删除和修改引用计数大于0的模板,结构变量,基本变量。
2.必须按固定格式新建模板类型或新建结构变量和基本变量。
格式如下:(1).新建模板:引用的模模板类型必须是在定义此模板之前已经定义过。
每个变量必须加正确的标题模板名称 模板使用记数 注释[模板] 模板ID模板二的定义1 temp2 1[成员] 成员ID 成员名称 成员类型整型1 mem12 mem2temp13 mem3 实型(2).结构变量:每个变量必须加正确的标题。
[结构变量] 变量ID 变量名称 变量类型 变量使用记数 报警组 优先级 历史记录方式(不记录/变化记不记录 结 2 st2 temp2 1 AlmGrp1 999[成员] 成员名称 成员基本变量IDst2.mem1 1st2.mem2.sm1 2... ...(3).基本变量:分类列出,具体格式见基本变量页,不必每个变量都加标题。
3.约束规则:(1). 模板成员类型有效值:整型、实型、离散型、字符串、其它模板类型名称。
(2). 名称:由字母、数字、汉字组成,但不能以数字开头。
组态王历史数据导出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表格。
工业通用组态软件组态王6.51常见技术问答文档
报表与打印1.如何实现历史报表的定时打印?[可以利用命令语言实现。
例如每天早八点打印一次,利用事件命令语言,在“事件描述”中写入事件 "$小时==8"在事件“发生时”执行函数"reportprint2("reportname")"即可。
]2.如何打印信息到针式打印机,以便实现逐行打印?[用函数FileWriteStr(Filename,FileOffset,Message,LineFeed); 函数实现,filename参数为“LPT1:”]即可,只能是针式打印机才能实现逐行打印]3.组态王中的打印函数PrintWindow()如何使用纸张的横向打印功能?[PrintWindow()函数的第二、三个参数不能够为0并且将打印机的纸张设置为横向即可;如:PrintWindow( "监控中心", 60,60, 0,10, 10);]4.如何清除组态王6.0报表单元格中的内容?[1、[组态王报表没有提供清除报表内容函数,但提供了设置报表单元格内容的函数,包括设置一个或多个单元格的字符或数据,可以使用这些函数ReportSetCellString2(ReportName, StartRow, StartCol, EndRow, EndCol, "") 、ReportSetCellString(ReportName, Row, Col,"")来清除报表单元格的内容,如设为空字符。
这种方式比较灵活,对固定格式的表格特别有效,2、如果报表格式不固定,一般建议是通过REPORTLOAD("","")函数重新调入表格模板来实现数据的清空。
3、采用关闭报表所在画面然后在打开方式,]5.如何利用组态王报表来实现数据统计?[报表内部函数是指只能在报表单元格内使用的函数,有数学函数、字符串函数、统计函数等。
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);需要更新文件实现。
组态王中的数据报表制作与保存教学提纲
组态王中的数据报表制作与保存组态王中的数据报表制作与保存摘要:本文主要介绍如果使用组态王来构建数据报表,并以EXCEL的格式在指定的文件路径保存。
关键字:组态王历史库数据报表制作保存一、引言数据报表是反应生产过程中的数据、状态等,并对数据进行记录的一种重要形式。
它既能反映系统实时的生产情况,也能对长期的生产过程进行统计、分析,使管理人员能够实时掌握和分析生产情况。
组态王提供内嵌式报表系统,工程人员可以任意设置报表格式,对报表进行组态。
组态王为工程人员提供了丰富的报表函数,实现各种运算、数据转换、统计分析、报表打印等。
既可以制作实时报表,也可以制作历史报表。
组态王还支持运行状态下单元格的输入操作,在运行状态下通过鼠标拖动改变行高、列宽。
另外,工程人员还可以制作各种报表模板,实现多次使用,以免重复工作。
二、数据报表的制作数据报表分为实时数据报表和历史数据报表2类。
报表的构建方法如下:在画面内,使用工具箱中的报表窗口按钮创建一个报表窗口,如图1所示。
图1 创建后的报表窗口用鼠标双击报表窗口的灰色部分,弹出“报表设计”对话框,该对话框主要设置报表的名称、报表表格的行列数目以及选择套用表格的样式。
1、制作实时数据报表实时数据报表是实时显示相关变量的数据值,在报表窗口的单元格中直接引用变量来实现。
在报表的单元格中直接输入“=变量名”,既可在运行时在该单元格中显示该变量的数值,当变量的数据发生变化时,单元格中显示的数值也会被实时刷新。
2、制作历史数据报表历史数据报表是从组态王的历史库中查询相关变量的历史数据,并在历史数据报表内显示,因此对历史数据报表要查询的数据必须设置历史记录属性。
在组态王中,离散型、整型和实型变量支持历史记录,字符串型变量不支持历史记录。
组态王的历史记录形式可以分为数据变化记录、定时记录(最小单位为1分钟)和备份记录。
记录形式的定义通过变量属性对话框中提供的选项完成。
如图2所示。
图 2 记录属性设置在查询时,希望弹出一个对话框,可以在对话框上随机选择不同的变量和时间段来查询数据,可使用函数ReportSetHistData2(StartRow,StartCol)。
组态王讲稿(报表线性等)详述
2.数据库组态功能 系统的数据库包括实时数据库和历史数据库。实时数据 库组态主要是确定数据库中保存的各个变量名称、工程量标 度变换、上下限值、线性化处理、报警特性、报警条件等; 历史数据库组态除了确定上述内容外,还需要确定循环清盘 的周期,即数据的保存周期。 3.控制回路组态功能 控制回路组态同样是一种非常重要的组态,为了确保生 产工艺的实现,计算机监控系统常常要完成一些复杂的控制 运算,如PID运算、前馈、串级、解耦等控制运算,控制回路 的组态就是将一些标准模块的输入/输出与具体的变量联系起 来,即定义各个控制回路的控制算法、调节周期及调节参数, 某些系数等。
五、组态软件按照功能成员分为六个部分 1.工程管理器 工程管理器也称为项目管理器,工程人员在使用组态软 件的过程中经常会遇到这样的问题:在开发过程中为了防止 前功尽弃,经常要对应用系统进行备份;需要引用以前开发 成功的项目中的画面或部分成果;需要经常迅速查看本台计 算机上保存了哪些开发好的工程项目等,这些工作虽然可以 靠手动方式进行,但效率底下,容易出错。有了工程管理器 后,这些工作变得简单易行。工程管理器具有新建、删除、 搜索、备份、恢复、重命名工程等多项功能,并可以通过菜 单或按钮切换到系统开发环境。
3.实时数据库运行管理程序 组态软件内部含有实时数据库系统,用户定义的全局变 量都存放在实时数据库中,这些变量的集合被形象称为数据 词典。有些组态软件中也将变量称为“标签”。实时数据库 中的I/O变量是随着生产现场变送器的输出值而变化的,而实 时数据库中的I/O变量一变化就会引起画面上的图形变化。实 时数据库的管理功能包括定义变量名称、数据类型、与外部 设备的连接等各种参数。
组态王历史报表、
创建历史数据报表历史数据报表创建过程如下: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分钟数据报表。
组态王6.55——日报表
组态王6.55——⽇报表//..............................................................float Ayear;float Amonth;float Aday;long x;long y;long Row;long StartTime;string temp;Ayear=ADate1.Year;Amonth=ADate1.Month;Aday=ADate1.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("⽇报表", 5, 1, 28, 10, " "); //清空单元格ReportSetCellString("⽇报表", 3, 2, temp);//填写⽇期//查询数据StartTime=NewHTConvertTime(Ayear,Amonth,Aday,0,0,0);ReportSetHistData("⽇报表", "\\本站点\闸门开度", StartTime, 3600, "B4:B20"); ReportSetHistData("⽇报表", "\\本站点\产⽣⽔位随机数", StartTime, 3600, "C4:C20");//填写时间x=0;while(x<24){row=5+x;y=StartTime+x*3600;temp=StrFromTime( y, 2 );ReportSetCellString("⽇报表", row, 1, temp);x=x+1;}//..........................................................................................long x;//天long t;//时间戳long m1;//⽉处理值long n1;//年处理值//年⽉处理初值n1=year1;m1=month1-2;//年⽉处理if(m1<=0){m1=m1+12;n1=n1-1;}//天数x=int(n1/4) -int( n1/100) + int(n1/400) + int(367*m1/12) + day1 + n1*365 - 719499; //时间戳结果t=x*24*3600+(hour1-8)*3600+minite1*60+second1;//错误处理if(t<0){t=0;}//返回计算值return t;。
组态王报表保存成excel
组态王报表保存成excel文件格式改变解决方案组态王内嵌的表格可以做成各种很精美的格式,也可以保存成.xls格式和.csv格式,但是原来的格式会荡然无存,很不方便。
下图是组态王报表格式(组态王6.52):下面是保存成excel之后的格式:下图是应用次解决方案后的最终效果图:下面我们来说明次方案的步骤:1.“打开文件”按钮命令语言:StartApp("F:\aa.xls");2.“文件另存为”按钮命令语言:ActivateApp("Excel.exe");ActivateApp("Excel.exe");SendKeys("%(f)abb.xls%(s)%(f)x");3.“文件转移”按钮命令语言:string filename;filename="F:\report\"+StrFromReal( \\本站点\$时, 0, "f" )+StrFromReal( \\本站点\$分, 0, "f" )+StrFromReal( \\本站点\$秒, 0, "f" )+".xls";ReportSaveAs("Report0",fileName);FileDelete( filename );FileMove( "F:\bb.xls", filename , DoneTag );说明:1.这部分是整个解决方案的核心。
利用的是组态王的报表可以保存成以时间为文件名的xls文件,同时FileMove这个函数在文件转移的时候的名字也是可以改变的。
2.“文件另存为”按钮和“文件转移”按钮里的命令语言不要写在一起,否则命令语言不执行,要让这个程序自动执行,可以做定时器实现。
4.组态王报表数据传递到excel组态王中建立excel 的dde连接,报表中所有数据均要建立dde变量,应用程序命令语言中通过赋值语言进行实时刷新。
组态王报表()解析
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("年报后台");//............................................................................................................................................................................................................................................................................................................................................。
报表系统-组态王报表系统【范本模板】
第八讲报表系统在本课程您将:Ì掌握实时报表的创建过程Ì掌握历史报表的创建、查询过程第一节概述数据报表的用途数据报表是反应生产过程中的过程数据、运行状态等,并对数据进行记录、统计的一种重要工具,是生产过程必不可少的一个重要环节。
它既能反应系统实时的生产情况又能对长期的生产过程数据进行统计、分析,使管理人员能够掌握和分析生产过程情况。
组态王提供内嵌式报表系统,工程人员可以任意设置报表格式,对报表进行组态.组态王为工程人员提供了丰富的报表函数,实现各种运算、数据转换、统计分析、报表打印等。
既可以制作实时报表又可以制作历史报表。
另外,工程人员还可以制作各种报表模板,实现多次使用,以免重复工作。
第二节实时数据报表创建实时数据报表实时数据报表创建过程如下:6、新建一画面,名称为:实时数据报表画面.7、选择工具箱中的工具,在画面上输入文字:实时数据报表。
3、选择工具箱中的工具,在画面上绘制一实时数据报表窗口,如图8-1 所示:图8-1“报表工具箱”会自动显示出来,双击窗口的灰色部分,弹出“报表设计”对话框,如图8—2 所示:图8-2对话框设置如下:报表控件名:Report1行数:6列数:104、输入静态文字:选中A1到J1 的单元格区域,执行“报表工具箱”中的“合并单元格”命令并在合并完成的单元格中输入:实时数据报表演示。
利用同样方法输入其它静态文字,如图8—3所示:图8-35、插入动态变量:合并B2和C2 单元格,并在合并完成的单元格中输入:=\\本站点\$日期。
(变量的输入可以利用“报表工具箱”中的“插入变量”按钮实现) 利用同样方法输入其它动态变量,如图8-4所示:图8—4注:如果变量名前没有添加“=”符号的话此变量被当作静态文字来处理.6、单击“文件”菜单中的“全部存”命令,保存您所作的设置。
7、单击“文件"菜单中的“切换到VIEW"命令,进入运行系统。
系统默认运行的画面可能不是您刚刚编辑完成的“实时数据报表画面”,您可以通过运行界面中“画面”菜单中的“打开”命令将其打开后方可运行,如图8-5 所示:图8—5实时数据报表打印一、实时数据报表自动打印设置过程如下:1、在“实时数据报表画面"中添加一按钮,按钮文本为:实时数据报表自动打印。
组态王日报表制作
组态王日报表制作步骤一、定义设备二、定义变量三、制作画面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");详细设置请查看保存和打印文档四、进入运行系统运行系统结果如下图所示:。
组态王教学-报表与打印
报表与打印常见问题解答北京亚控科技发展有限公司2009年8月目录1. 报表 (1)1.1 组态王软件自带的报表窗口的行列设置限制是多少? (1)1.2 组态王软件自带的报表窗口的控件名称命名有什么特殊要求吗? (1)1.3 组态王软件自带的报表窗口控件,如何设定单元格数据显示的小数位数? (1)1.4 在组态王运行系统中,如何锁定报表的行和列? (1)1.5 在组态王运行系统中能否对报表单元格中的数据进行修改? (1)1.6 在组态王运行系统中如何清除报表单元格中的数据? (2)1.7 在组态王运行系统中,如何实现将组态王报表文件保存为以日期命名的文件? (2)1.8 组态王的历史记录属性中能够设置的定时记录最短时间是1分钟,如何实现1秒钟的定时记录功能? (2)1.9 在组态王中如何删除指定目录下的单个报表文件或多个报表文件? (2)1.10 如何打开组态王报表文件(*.rtl格式的文件)?能否使用其他应用程序打开? (3)1.11 能否对组态王报表控件中的行宽和列宽进行锁定? (3)1.12 在安装组态王的计算机A中能否读取另外一台安装组态王计算机B上面的报表文件? (3)1.13 在组态王中实现以时分秒为文件名且每分钟保存一报表文件功能,当保存整点的报表时,指定文件夹内的文件名比实际时间少一个小时? (3)1.14 在组态王报表控件中对合并的单元格应如何计算它的行号和列号? 31.15 在组态王画面上如何得到指定变量在指定时间内的最大值、最小值和平均值? (3)1.16 使用组态王提供的kingreport.xls文件查询组态王历史数据,选择查询的工程后提示加载工程失败,为什么? (4)1.17 求报表中不为0的单元格数据的平均值? (4)1.18 为什么我使用ReportLoad()函数无法打开我使用ReportSaveas()函数保存的报表? (5)1.19 组态王的报表中如何实现报表数据的统计(如求和、求平均、检索最大最小值)? (5)1.20 组态王的报表能否直接保存成excel格式的文件,这样可以直接通过excel程序打开? (6)1.21 我使用组态王的报表控件制作工程报表,采用的ReportSetCellValue()来对报表控件进行后台填值操作,为什么当我显示报表时却是空白的? (6)1.22 在组态王运行系统中如何实现往报表单元格中插入数据? (6)1.23 组态王中扩展名为.rtl的文件是什么格式的文件?如何打开此类型的文件? (6)1.24 为什么在命令语言中使用报表函数却不执行? (7)2. 打印 (7)2.1 组态王软件对普通商业打印机的选择有什么要求? (7)2.2 组态王软件如何打印运行过程中的画面? (7)2.3 组态王软件的表格窗口的数据是如何进行打印输出的? (7)2.4 为什么用ReportPrint2()函数不能实现自动打印报表? (7)2.5 组态王软件的控件的数据是如何进行打印输出的? (8)2.6 在组态王中进行打印预览时,为什么不能进行打印方向的设置,如何解决? (8)1. 报表1.1组态王软件自带的报表窗口的行列设置限制是多少?组态王6.51及其以前版本,报表窗口的行列设置限制为2000行52列,对新版的组态王软件,报表窗口的行列设置限制有了改善,可以定义到20000行128列。
组态王软件详细教程--第七讲-报表系统
组态王软件详细教程--第七讲-报表系统第七讲报表系统第⼀节组态王内嵌数据报表数据报表的⽤途数据报表是反应⽣产过程中的数据、状态等,并对数据进⾏记录的⼀种重要形式。
是⽣产过程必不可少的⼀个部分。
它即能反应系统实时的⽣产情况,也能对长期的⽣产过程进⾏统计、分析,使管理⼈员能够实时掌握和分析⽣产情况。
组态王提供内嵌式报表系统,⼯程⼈员可以任意设置报表格式,对报表进⾏组态。
组态王为⼯程⼈员提供了丰富的报表函数,实现各种运算、数据转换、统计分析、报表打印等。
即可以制作实时报表,也可以制作历史报表。
另外,⼯程⼈员还可以制作各种报表模板,实现多次使⽤,以免重复⼯作。
制作实时数据报表8 在组态王⼯具箱内选择“报表窗⼝”⼯具,在报表画⾯上绘制报表。
如下图所⽰:8 双击报表窗⼝的灰⾊部分(表格单元格区域外没有单元格的部分),弹出“报表设计”对话框,对话框定义如下图所⽰:è 在“报表控件名”对话框中输⼊报表控件名称:实时数据报表,这个控件名会在报表函数中引⽤。
本讲介绍报表系统的创建和格式设置介绍报表函数介绍报表系统的组态介绍报表模板è在⾏数对话框中输⼊所要制作的报表的⼤致⾏数15è在列数对话框中输⼊所要制作的报表的⼤致列数68 单击对话框的“确认”按钮。
则组态王报表画⾯如下图所⽰:8 设置表头格式设计表头:选中“b1”到“e2”的单元格区域,从报表⼯具箱上单击“合并单元格”按钮,在报表⼯具箱的编辑框⾥输⼊⽂本“实时数据报表”,单击“输⼊”按钮;或双击合并的单元格,使输⼊光标位于该单元格中,然后输⼊上述⽂本。
单击报表⼯具箱中的“设置单元格格式”按钮,设置单元格格式如下:数字—常规;字体—⾪书、规则、⼀号、红⾊;对齐⽅式:⽔平—居中,垂直—居中;图案—设置单元格底纹颜⾊为灰⾊。
如下图所⽰。
8 设计报表时间在单元格“d3”中显⽰当前⽇期,双击该单元格,然后输⼊函数“=Date($年,$⽉,$⽇)”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
现在可以存盘和预览了
报表保存 做一个按钮: 报表保存 双击该按钮进入动画连接窗口
选命令语言连接区的按钮“弹起时”,填上如下函数 ReportSaveAs("biao1", "e:\bbb.rtl");
要保存的表 的控件名
存盘文件名
存盘运行后,单击“报表保存”按钮,就可看到e盘有bbb.rtl文件了。 存在问题是:因为老以一个名存盘,所以总覆盖前面的文件, 下面讲换名存盘的方法。
定时打印 在工程目录树的命令语言处,选事件命令语言; 右窗口中双击新建图标,选发生时标签; 在事件描述处填上:\\本站点\$时==8||\\本站点\$时==10 在程序窗口中写上:ReportPrint2("biao1");
报表查询 在画面上再建一个空白表,双击灰色区域,起个报表控件名,如:kbiao 做一个按钮: 报表查询 双击该按钮进入动画连接窗口
5.存储路径——可建一个子目录,将历史文件存在下面。 运行时每小时生成一个“.tmp”文件,24小时打包生成一个“.rec”文件(假设记录时数为24
4. 运行操作
数值轴指示器 时间轴指示器
工具条 拖动数值轴指示器,可以放大或缩小曲线在Y轴方向的长度,一般情况下,指示 器标记为当前图表中变量量程的百分比。 移动时间轴指示器可以获得曲线上某个时刻的数据。 工具条是用来查看曲线的,从鼠标放到按钮上时弹出的提示文本可以看 到每个按钮的作用。 工具条下部显示了每条曲线最左端的数值、最右端的数值、最大值、最 小值和平均值,在工具条下方右击鼠标,可以增加和删除曲线。
3. 设置动态属性 在工程目录树的系统配置中,选历史数据记录; 在右窗口中,双击历史数据记录图标; 在弹出的对话框中回答以下提问: 1.运行时自动启动——若不选此项,则
在运行时,选“特殊/重启历史数据记录”
才能记录数据。 2.数据文件记录时数——每个文件记录 多长时间的数据。超过这段时间就产生 一个新的记录文件。 3.记录起始时刻——每个文件开始记录 的时刻,文件名为:“年月日时.rec” 其中年月日时各为两位二进制数。 4.数据保存天数——每天0点,从硬盘上清除超过保存天数的文件,若计算机关 机, 则不能清除。
历史服务程序没启动的解决办法
1.单击开始——单击程序——单击组态王6.51——单击安装工具——单击服务注册工 具 2.在弹出的服务程序注册窗口中,单击Search按钮。 3.选兰窗口中的第一项,单击Register按钮。 4.重新启动组态王。 以上操作步骤如下图所示
六、制作报表、曲线
数据报表是反应生产过程中的数据、状态等记录的一种重要 形式。是生产过程必不可少的一个部分。组态王提供了内嵌报表 系统,可以任意设置报表格式,提供了丰富的报表函数,实现各 种运算、数据转换、统计分析、报表打印等。即可以制作实时报 表,也可以制作历史报表。 趋势曲线用来反应数据变量随时间变化的情况。趋势曲线有 两种:实时趋势曲线和历史趋势曲线。这两种曲线外形都类似于 坐标纸,X轴代表时间,Y轴代表变量的量程百分比。所不同的是 画面程序运行时,实时趋势曲线随时间变化自动卷动,以快速反 应变量的新变化,但时间轴不能“回卷”,不能查阅历史数据; 历史趋势曲线可以完成历史数据的查看工作,但它不会随时间自 动卷动。
使用ODBC数据源时,可显 示通用数据库中的数据, 但要提前配置好数据源。
再选坐标系标签,可设置:
边框颜色和背景颜色; 是否在图表上绘制坐标轴及轴线类型; 定义时间轴、数值轴主次分割线的数目、线型、线颜色等; Y轴刻度标记数目,最小值和最大值,字体、字型、字号、字颜色等。 X轴刻度标记数目,选择时间轴显示的时间的格式,时间段的长度及字体等; 最后单击确定返回。
单击工具箱中的工具:T ,输入表头文字,如:数据报表;
单击报表工具箱中最后一个工具:“设置单元格格式” ,设好表头字体、字号、颜 色; 双击某单元格,输入 =Date($年,$月,$日) 双击某单元格,输入 =Time($时,$分,$秒) 对准日期所在的单元格单击右键,选设置单元格格式为:YYYY年MM月DD日 对准时间所在的单元格单击右键,选设置单元格格式为:xx时xx分xx秒
历史报表制作步骤 新建一个画面,起名:历史数据报表; 单击工具箱中4排第1个工具,用鼠标拖放一个矩形区; 双击矩形区中的灰色部分,弹出报表设计窗口; 起报表控件名,如:lish,回答几行几列,单击确认;
将最上面一行拉宽后,扫选中最上一行,单击报表工具箱中的合并工具;
单击工具箱中的工具:T ,输入表头文字,如:历史数据报表; 单击报表工具箱中最后一个工具,设置好表头字体、字号、颜色和对齐方式; 再输入表头的各栏目: 在文件下拉菜单中选全部存。 以上和制作实时报表 的步骤完全一样。
组态王课题开发7
——建立动画连接(续)
二、利用控件制作历史曲线的步骤 1. 制作控件 新建画面,起名XX历史曲线,单击工具箱4排最后一个工具 在弹出的窗口中,选下部的“历史趋势曲线”,单击确定; 用鼠标拖放一个矩形区(此控件是有大小比例的,即矩形区要足够大); 双击矩形区,在弹出的动画连接属性窗口中选“常规”标签; 起控件名,如lish,单击确定(可先不定义安全区、优先级及和组态王变量的关联)。 游标是对准时间刻度的 (即插入通用控件);
8. 动画连接——值输出的设置
有三种动画效果,适用于文本对象,用来在画面上输出与文
本对象连接的表达式的值。运行时文本字符串将被连接表达
式的值所替换,输出的字符串的大小、字体和文本对象相同。 按动任一按钮弹出相应的输出连接对话框。
一、教学目的(讲清组态王内嵌报表的制作内容和步骤) 1.制作内容
2.制作实时报表的步骤 (此时会弹出一个报表工具箱,见上图) 新建一个画面起名:实时数据报表; 单击工具箱中4排第1个工具 ,用鼠标拖放出一个矩形区,即表; 双击矩形区中的灰色部分,弹出报表设计窗口; 起报表控件名,如:biao1,回答几行几列,单击确认; 将最上面一行拉高后,扫选中最上一行,单击报表工具箱中的合并工具;
存盘运行后,单击一次“报表保存”按钮,就存一个文件。
报表打印 做一个按钮: 报表打印 双击该按钮进入动画连接窗口
选命令语言连接区的按钮“弹起时”,填上如下函数 ReportPrint2("biao1");
这是单击按钮后自 动打印 手动打印 做一个按钮:
打印预览
双击该按钮进入动画连接窗口
选命令语言连接区的按钮“弹起时”,填上如下函数 ReportPrintSetup("biao1"); 这是单击按钮后先 预览,再打印
在变量属性标签中,将要查询的变量选到右窗口中 在时间属性标签中,答要查询的起始时间和终止时间和时间间隔
要想有个报表统计行,就增加一个表行,在报表工具箱中单击fx后,如选
单击确定
=Average(’C3:C27’),则表示把第C列的3~27行求平均值,放入该表达式所在的 单元格。
存在问题:在变量属性标签中,若选择变量的顺序和原表中的字段顺 序不一致,则会出现查询后的表中栏目对不上了? 解决办法:数据词典中(记录型)变量起成中文名(当表头栏目用); 填表时覆盖表头的栏目行。
现在,存盘运行后,单击下拉列表, 可以看出e:\下所有扩展名是 .rtl的文件都列出来了
再双击自制的
报表查询
按钮,进入动画连接窗口
选命令语言连接区的按钮“弹起时”,填上如下函数
//刷新列表框,得到新的列表文件 listClear("xiala"); ListLoadFileName( "xiala", "e:\*.rtl" ); //合成路径,查询文件 string filename; filename="e:\"+\\本站点\查询; ReportLoad("kbiao",filename);
此时,实际上已将, 选中的文件名赋给了刚 定义的字符串变量“查 询” 了。
单击确认。 存盘后,运行时先单击下拉列表,选中一个 .rtl文件,再单击
报表查询
还有一种方法是,只要一单击下拉列表中的一个 .rtl文件,就自动查询,制作步骤 为: 在工程目录树的命令语言处,选数据改变命令语言; 右窗口中双击新建图标; 在变量处填上:\\本站点\查询 在程序窗口中写上:这段语句 单击确认。
单击工具箱第4排倒数第2个工具(这是组态王内置的控件); 左窗口中选“窗口控制”,右窗口中选“下拉或组合框”,单击创建按钮;
用鼠标拖放出一个矩形区(要大一点,不然下拉不了); 双击长条图形,起下拉列表控件名,如:xiala,答变量名:查询,单击确认。
用鼠标右击画面,选画面属性,单击命令语言按钮,在显示时标签中, 写上如下程序: listClear("xiala"); ListLoadFileName( "xiala", "e:\*.rtl" ); 单击确认按钮。
选命令语言连接区的按钮“弹起时”,填上如下函数
ReportLoad("kbiao" , " e:\bbb.rtl " );
全部保存后,运行时单击报表查询按钮, 则bbb.rtl的内容就显示在 空表中了。 存在问题:只能查询一个报表 e:\bbb.rtl,解决办法如下:
动态查询 在数据词典中先定义一个变量,如:查询,内存字符串型
用报表查询历史库 做一个按钮: 历史库查询 双击该按钮进入动画连接窗口 ReportSetHistData2(3,1); 只答起始行、列
选命令语言连接区的按钮“弹起时”,填上如下函查询 按钮;
变量必须在数据词 典中定义为记录型, 这才出现
在报表属性标签的下拉列表中,选填入哪个表
更改变量名的办法:数据词典中右击变量名,在下拉列表中选变量名称替换:
回答新变量名后,单击确定,就将程序中所有该变量名替换完毕。