组态王软件详细教程 第七讲 报表系统
- 格式:doc
- 大小:9.93 MB
- 文档页数:10
组态王报表制作第一步,新建“后台处理”画面,其风格与后面的“日报”画面一致,只是少了一些按钮及组合图框。
如下图报表控件为: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)指令,可以在打印前弹出打印机选择窗口运行程序即可获取报表了。
组态王简单报表组态王目前我们应用的主要有两个版本: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、新建一価面,名押为:历史数据报表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)一、功能概述 (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”。
5.3组态王组态王软件是一种通用的工业监控软件,他融过程控制设计、现场操作以及工厂资源管理于一体,将一个企业内部的各种生产系统和应用以及信息交流汇集在一起,实现最优化管理。
他基于Microsoft Windows XP/NT/2000 操作系统,用户可以在企业网络的所有层次的各个位置上都可以及时获得系统的实时信息。
采用组态王软件开发工业监控工程,可以极大地增强用户生产控制能力、提高工厂的生产力和效率、提高产品的质量、减少成本及原材料的消耗。
他适用于从单一设备的生产运营管理和故障诊断,到网络结构分布式大型集中监控管理系统的开发。
组态王软件结构由工程管理器、工程浏览器及运行系统三部分构成。
工程管理器:工程管理器用于新工程的创建和已有工程的管理,对已有工程进行搜索、添加、备份、恢复以及实现数据词典的导入和导出等功能。
工程浏览器:工程浏览器是一个工程开发设计工具,用于创建监控画面、监控的设备及相关变量、动画链接、命令语言以及设定运行系统配置等的系统组态工具。
运行系统:工程运行界面,从采集设备中获得通信数据,并依据工程浏览器的动画设计显示动态画面,实现人与控制设备的交互操作。
5.3.1组态王的特点组态王软件作为一个开放型的通用工业监控软件,支持与国内外常见的PLC、智能模块、智能仪表、变频器、数据采集板卡等(如:西门子PLC、莫迪康PLC、欧姆龙PLC、三菱PLC、研华模块等等)通过常规通信接口(如串口方式、USB 接口方式、以太网、总线、GPRS等)进行数据通信。
组态王软件与IO设备进行通信一般是通过调用*.dll 动态库来实现的,不同的设备、协议对应不同的动态库。
工程开发人员无须关心复杂的动态库代码及设备通信协议,只须使用组态王提供的设备定义向导,即可定义工程中使用的I/O设备,并通过变量的定义实现与I/O设备的关联,对用户来说既简单又方便。
主要功能特性:1)可视化操作界面,真彩显示图形、支持渐进色、丰富的图库、动画连接。
用组态王报表实现显示设备启动、停止时间和运行时长的方法在对设备的状态进行监控中,往往要取得一些参数来记录和分析设备的运行状况。
这其中就包括设备的启动时间、停止时间和运行的时长。
当然,组态软件不会有这样的功能,让我们轻易实现。
不过,通过组态软件的报表功能,再通过二次开发,写一些脚本语言。
实现起来倒也不难。
以下,以组态王为例,是对操作过程的描述,希望能够对需要的人有一些帮助。
总体思路:以一个项目为例。
在这个工程中,有21台设备的运行状态需要记录,他们的运行状态依次记录在报表中。
报表中的每一行都表示,此设备的一个运行周期。
由于设备状态在报表中依次排列,因此需要相应的变量来保存该设备状态所在的行数。
这样,当停止该设备时,才能将“停止时间”和“运行时长”填充到正确的位置。
这样,就需要建立21个内存整形变量。
由于报表中的记录依次排列,因此还需要一个变量来保存报表中最后一条记录的行数,这样才能顺序填充记录。
1、新建报表,并命名为“报表1”。
2、创建内存整形变量。
21个内存变量分别保存21个设备状态所在的行数。
1个内存变量保存报表中最后一条记录的行数。
3、编写自定义函数,好处是减少代码量,修改方便。
脚本内容具体如下//"var"是变量的名称,"name"是要显示在报表中的字符串,"varRow"是保存记录的行数//用年月日,时分秒,系统变量来组合形成日期。
//不用日期变量,因为其格式长度不确定,在后来的分解中会很麻烦。
string strY=StrFromInt(\本站点$年, 10 );string strM=StrFromInt(\本站点$月, 10 );string strD=StrFromInt(\本站点$日, 10 );string strH=StrFromInt(\本站点$时, 10 );string strMi=StrFromInt(\本站点$分, 10 );string strS=StrFromInt(\本站点$秒, 10 );//确定日期的格式,并使长度和位置固定if(\本站点$月<10) strM="0"+strM;if(\本站点$日<10) strD="0"+strD;if(\本站点$时<10) strH="0"+strH;if(\本站点$分<10) strMi="0"+strMi;if(\本站点$秒<10) strS="0"+strS;//组合,定义格式string str=strY+"-"+strM+"-"+strD+" "+strH+":"+strMi+":"+strS;//启动设备时,将“序号”、“名称”、“启动时间”填充到报表中if(var==1){long num=报表当前行-1;string id=StrFromInt(num, 10 );ReportSetCellString("报表1", 报表当前行, 1, id);//序号ReportSetCellString("报表1", 报表当前行, 2, name);//名称ReportSetCellString("报表1", 报表当前行, 3, str);//开始时间varRow=报表当前行;//所在行=报表当前行报表当前行=报表当前行+1;}//停止设备时else{string startStr=ReportGetCellString("报表1", varRow, 3);//从报表中取得开始时间//开始时间转换秒 2011-05-06 12:23:34string midY=StrMid(startStr, 1, 4 );string midM=StrMid(startStr, 6, 2 );string midD=StrMid(startStr, 9, 2 );string midH=StrMid(startStr, 12, 2 );string midMi=StrMid(startStr, 15, 2 );string midS=StrMid(startStr, 18, 2 );long lY=StrToInt(midY);long lM=StrToInt(midM);long lD=StrToInt(midD);long lH=StrToInt(midH);long lMi=StrToInt(midMi);long lS=StrToInt(midS);long startTime= HTConvertTime(lY,lM,lD,lH,lMi,lS);long endTime= HTConvertTime(\本站点$年,\本站点$月,\本站点$日,\本站点$时,\本站点$分,\本站点$秒);//结束时间转换秒//计算时间差long timeLength=endTime-startTime;//单位秒//秒转换为小时//timeLength=timeLength/3600;string endStr=StrFromInt(timeLength, 10 )+"秒";//将“停止时间”和“运行时长”填充到报表中ReportSetCellString("报表1", varRow, 4, str);//结束时间ReportSetCellString("报表1", varRow, 5, endStr);//时间长度}4、建立设备启动或停止的运行事件命令。
组态王日报表的实现例程配置参考文档北京亚控科技发展有限公司技术部目录一、功能概述 (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”。
组态王简明教程组态王软件的构造“组态王”是运行于Microsoft Windows 98/NT中文平台的全中文界面的组态软件,采取了多线程.COM组件等新技巧,实现了及时多义务,软件运行稳固靠得住.组态王具有一个集成开辟情形“组态王工程阅读器”,在工程阅读器中您可以检讨工程的各个构成部分,也可以完成构造数据库.界说外部装备等工作.画面的开辟和运行由工程阅读器挪用画面制造体系TOUCHMAK和画面运行体系TOUCHVEW来完成的.TOUCHMAK是运用程序的开辟情形.您须要在这个情形中完成设计画面.动画衔接等工作.TOUCHMAK具有先辈完美的图形生成功效;数据库中有多种数据类型,能合理地抽象控制对象的特征;对变量报警.趋向曲线.进程记载.安然防备等重要功效都有简略的操纵办法.TOUCHVEW是“组态王”软件的及时运行情形,在TOUCHMAK中树立的图形画面只有在TOUCHVEW中才干运行.TOUCHVEW从工业控制对象中收集数据,并记载在及时数据库中.它还负责把数据的变更用动画的方法形象地暗示出来,同时完成变量报警.操纵记载.趋向曲线等监督功效,并生成汗青数据文件.组态王如何和下位机通信“组态王”把第一台下位机看作是外部装备,在开辟进程中您可以依据“装备设置装备摆设领导”的提醒一步步完成衔接进程.在运行时代,组态王经由过程驱动程序和这些外部装备交换数据,包含收集数据和发送数据/指令.每一个驱动程序都是一个COM对象,这种方法使通信程序和组态王构成一个完全的体系,既包管了运行体系的高效力,也使体系可以或许达到很大的范围.如何产活泼画后果开辟者在TOUCHMAK中制造的画面都是静态的,那么它们若何故动画方法反应工业现场的状况呢?这须要经由过程及时数据库,因为只稀有据库中的变量才是与现场状况同步变更的.数据库变量的变更又若何导致画面的动画后果呢?经由过程“动画衔接”就是树立画面的图素与数据库变量的对应关系.如许,工业现场的数据,比方温度.液面高度等,当它们产生变更时,经由过程驱动程序,将引起及时数据库中变量的变更,假如画面上有一个图素,比方指针,您划定了它的偏转角度与这个变量相干,您就会看到指针随工业现场数据的变更而同步偏转.动画衔接的引入是设计人机接口的一次冲破它把程序员从反复的图形编程中解放出来,为程序员供给了尺度的工业控制图形界面,并且有可编程的敕令说话衔接来加强图形界面的功效.树立运用程序的一般进程树立运用程序大致可分为以下四个步调: 1.设计图形界面 2.构造数据库 3.树立动画衔接 4.运行和调试须要解释的是,这四个步调其实不是完全自力的,事实上,这四个部分经常是交织进行的.在用TOUCHMAK构造运用程序之前,您要细心计划您的项目,重要斟酌三方面问题:图形您愿望用如何的图形画面来模仿现实的工业现场的响应的工控装备?用组态王体系开发的运用程序是以“画面”为程序单位的,每一个“画面”对应于程序现实运行时的一个Windows窗口.数据如何用数据描写工控对象的各类属性?也就是创建一个及时数据库,用此数据库中的变量来反应工控对象的各类属性,比方“电源开关”.您的计划中可能还要为暂时变量预留空间. 动画数据和图形画面中的图素的衔接关系是什么?也就是画面上的图素以如何的动画来模仿现场装备的运行,以及如何让操纵者输入控制装备的指令.从下一节课开端,将按照以上步调循序渐进地树立一个新的运用程序.开端一个新项目在本课程您将:·懂得项目标寄义·演习运用工程阅读器·开端树立一个新项目项目标寄义在“组态王”中,您开辟的每一个运用体系称为一个项目,每个项目必须在一个自力的目次中,不合的项目不克不及共用一个目次.项目目次也称为工程路径.在每个工程路径下,组态王为此项目生成了一些重要的数据文件,这些数据文件一般是不许可修正的. 项目简介经由过程本教程9节课的进修,你将树立一个反响车间的监控中间.监控中间从车间现场收集临盆数据,并以动画方法直不雅地显示在监控画面上.监控画面还将显示及时趋向曲线和报警信息并供给查询汗青数据的功效.最后完成一个数据统计的报表.为了不局限于是具体的下位机体系,本教程树立的项目采取了仿真驱动程序.仿真驱动程序相似于现实的驱动程序,但可以或许模仿下位机主动产生数据并供给给组态王.对于现实的下位机体系,可参考驱动程序联机帮忙来设置驱动程序.运用工程阅读器工程阅读器是组态王的集成开辟情形.在这里你可以看到工程的各个构成部分,包含画面.数据库.外部装备.体系设置装备摆设等,它们以树形构造暗示.工程阅读器的运用和Windows95的资本治理器相似,不再胪陈.树立新项目假设你已经精确装配了“组态王”,起首启动组态王工程阅读器.工程阅读器运行后,将打开你上一次工作后的项目.假如你是第一次运用工程阅读器,默认的是组态王示例程序地点的目次.为树立一个新项目,请履行以下操纵:在工程阅读器中选择菜单“工程/新建”,消失“新建工程”对话框.在对话框中输入工程名称:myproj在工程描写中输入:工程路径主动指定为当前目次下以工程名称定名的子目次.假如你须要更改工程路径,请单击“阅读”按钮. 单击“肯定”.组态王将在工程路径下生成初始数据文件.至此,新项目已经可以开端树立了.你可以在每一个项面前目今树立数量不限的画面,鄙人一节,我们将开端绘制第一幅画面设计画面在本课程您将:·进修对象箱的运用·进修调色板的运用·控制图库的运用办法树立新画面在工程阅读器中左侧的树形视图中选择选择“画面”,在右侧视图中双击“新建”.工程阅读器将运行组态王开辟情形TOUCHMAK,弹出如下对话框.在“新画面”对话框中设置如下图,在对话框中单击“肯定”.TOUCHMAK将按照你指定的作风产生一幅名为“监控中间”的画面.运用图形对象箱接下来在此画面中绘制各图素.绘制图素的重要对象放置在图形编辑对象箱内.当画面打开时,对象箱主动显示,假如对象箱没有消失,选择菜单“对象\显示对象箱”或按F10键打开它.对象箱中各类根本对象的运用办法和WINDOWS中“画笔”很相似,假如你熟习“画笔”的运用,绘制本画面将是很轻易的.起首绘制监控对象原料罐和反响罐:在对象箱内单击圆角矩形对象,在画面上绘制一个矩形作为第一个原料罐;在矩形框上单击鼠标左键,在矩形框四周消失8个小矩形,当鼠标落在任一小矩形上时,按下鼠标左键,可以移动图形对象的地位用同样的办法绘制另一原料罐和反响罐.在对象箱内单击多边形对象,绘制三条管道.要转变管道的填充色彩,请选中此对象,然后单击调色板窗口的第二个按钮,再从调色板中选择任一种色彩.在对象箱内单击文本对象,输入文字.要转变文字的字体.字号,请先选中文本对象,然后在对象箱内选择“转变字体”.选择菜单“图库\刻度”,在图库窗口中双击一种竖向的刻度.在画面上单击鼠标左键,刻度将出如今画面上.你可以缩放.移动它,如同通俗图素一样.在调剂图形对象的相对地位时,几种对齐对象可能经常会用到.起首选中所有须要对齐的图形对象,然后在对象箱中单击所需的对齐对象即可.最后,绘制的画面如下图.选择菜单“文件\全体存”,保管你的工作成果.界说外部装备和数据库在本课程您将:·控制外部装备的界说办法·进修界说变量的办法界说外部装备组态王把那些须要与之交换数据的装备或程序都作为外部装备.外部装备包含:下位机(PLC.内心.板卡等),它们一般经由过程串行口和上位机交换数据;其他 Windows 运用程序,它们之间一般经由过程 DDE 交换数据;外部装备还包含收集上的其他盘算机.只有在界说了外部装备之后,组态王才干经由过程I/O变量和它们交换数据.为便利你界说外部装备组态王设计了“装备设置装备摆设领导”引诱你一步步完成装备的衔接.如图T6-1.PNG.本教程中运用仿真PLC和组态王通信.仿真PLC可以模仿PLC为组态王供给数据.假设仿真PLC衔接在盘算机的COM1口.在组态王工程阅读器的左侧选中“ COM1”,在右侧双击“新建”,运行“装备设置装备摆设领导”.选择“仿真PLC”的“串口”项,单击“下一步”;为外部装备取一个名称,输入“PLC1”,单击“下一步”;为装备选择衔接串口,假设为COM1,单击“下一步”;填写装备地址,假设为1,单击“下一步”;请检讨各项设置是否精确,确认无误后,单击“完成”.装备界说完成后,你可以在工程阅读器的右侧看到新建的外部装备“PLC1”.在界说数据库变量时,你只要把IO变量衔接到这台装备上,它就可以和组态王交换数据了.数据库的感化数据库是“组态王”最焦点的部分.在TOUCHVEW运行时,工业现场的临盆状况要以动画的情势反应在屏幕上,操纵者在盘算机前宣布的指令也要敏捷送达临盆现场,所有这一切都是以及时数据库为中介环节,所以说数据库是接洽上位机和下位机的桥梁.界说变量的办法对于我们将要树立的“监控中间”,须要从下位机收集两个原料罐的液位和一个反响罐的液位,所以须要在数据库中界说这三个变量.因为这些数据是经由过程驱动程序收集到的,所以三个变量的类型都是I/O实型变量.这三个变量分离定名为“原料罐1液位”.“原料罐2液位”和“反响罐液位”,界说办法如下:在工程阅读器的左侧选择“数据词典”,在右侧双击“新建”,弹出“变量属性”对话框;对话框设置为如图T6-2:设置完成后,单击“肯定”.用相似的办法树立另两个变量“原料罐2液位”和“反响罐液位”. 变量的类型数据库中存放的是你制造运用体系时界说的变量以及体系预界说的变量.变量可以分为根本类型和特别类型两大类.根本类型的变量又分为“内存变量”和“I/O变量”两类.“I/O变量”指的是须要“组态王” 和其它运用程序(包含I/O办事程序)交换数据的变量.这种数据交换是双向的.动态的,就是说:在“组态王”体系运行进程中,每当I/O变量的值转变时,该值就会主动写入长途运用程序;每当长途运用程序中的值转变时,“组态王”体系中的变量值也会主动更新.所以,那些从下位机收集来的数据.发送给下位机的指令,比方“反响罐液位”.“电源开关”等变量,都须要设置成“I/O变量”.那些不须要和其它运用程序交换只在“组态王”内须要的变量,比方盘算进程的中央变量,就可以设置成“内存变量”.根本类型的变量也可以按照数据类型分为离散型.模仿型.长整数型和字符串型.内存离散变量.I/O离散变量:相似一般程序设计说话中的布尔(BOOL)变量,只有0,1两种取值,用于暗示一些开关量.内存实型变量.I/O实型变量:相似一般程序设计说话中的浮点型变量,用于暗示浮点数据,取值范围10E-38至10E+38,有用值7位.内存整型变量.I/O整型变量:相似一般程序设计说话中的有符号长整数型变量,用于暗示带符号的整型数据,取值范围 -2147483648至2147483647.内存字符串型变量.I/O字符串型变量:相似一般程序设计说话中的字符串变量,用于记载一些有特定寄义的字符串,如名称,暗码等,该类型变量可以进行比较运算和赋值运算.特别变量类型有报警窗口变量.报警组变量.汗青趋向曲线变量.时光变量四种.这几种特别类型的变量恰是表现了“组态王”体系面向工控软件.主动生成人机接口的特点.至此,数据库已经完全树立起来,驱动程序也已经预备好了,下一节课的义务将是使画面上的图素活动起来,实现一个动画后果的监控体系.让画面活动起来在本课程您将:·懂得动画衔接的概念·控制界说动画衔接的办法动画衔接的感化在第一节课我们已经讲过,所谓“动画衔接”就是树立画面的图素与数据库变量的对应关系.对于我们即将树立的“监控中间”,假如画面上的原料罐.反响罐(矩形框对象)的大小可以或许跟着变量“原料罐1液位”等变量值的大小而转变,那么,对于操纵者来说,他就可以或许看到一个反响工业现场状况的监控画面,这恰是本课程的目标.接下来为1号原料罐.2号原料罐.反响罐三个图素树立动画衔接.树立动画衔接在画面上双击图形对象“1号原料罐”,弹出“动画衔接”对话框.单击“填充”按钮,弹出“填充衔接”对话框,对话框设置如图T7-1.留意填充偏向和填充色的选择.单击“肯定”.单击“动画衔接”对话框的“肯定”.用同样的办法设置“2号原料罐”和“反响罐”的动画衔接设置“反响罐”的动画衔接时须要将“最大填充高度”的“对应数值”设为2000.原料罐和反响罐的动画衔接设置完毕.作为一个现实上可用的监控程序,可能操纵者仍须要知道液面的精确高度,而不但仅是设置刻度.这个功效由“模仿值输出”动画来实现.在对象箱中选用文本对象,在“1号原料罐”矩形框的中部输入字符串“####”.这个字符串的内容是随便率性的,比方你可以输入“原料罐1液位”当画面程序现实运行时,字符串的内容将被你须要输出的模仿值所代替.用同样的办法,在另两个矩形框的中部输入字符串.操纵完成后,画面如图7-2.双击文本对象“####”,弹出“动画衔接”对话框.单击“模仿值输出”,弹出“模仿值输出衔接”对话框,对话框设置如图 T7-3.在此处,“表达式”是要输出的变量的名称.在其他的情形下,此处可输入庞杂的表达式,包含变量名.运算符.函数等.输出格局可以随便更改,它们与字符串“####”的长短无关.单击“肯定”.单击“动画衔接”对话框的“肯定”,完成设置.同样的办法,为另两个字符串树立“模仿值输出”动画衔接,衔接的表达式分离为变量“原料罐2液位”和“反响罐液位”.选择Touchmak菜单“文件\全体存”.只有保管画面上的转变今后,在Touchvew中才干看到你的工作成果.启动画面运行程序Touchvew .Touchvew启动后,选择菜单“画面\打开”,在弹出的对话框中选择“监控中间”.运行画面如下图.及时趋向曲线与及时报警窗口在本课程您将:·懂得趋向曲线和报警窗口的感化·控制及时趋向曲线的设置办法·控制及时报警窗口的设置办法趋向曲线的感化趋向曲线用来反响数据变量随时光的变更情形.趋向曲线有两种:及时趋向曲线和汗青趋向曲线.这两种曲线外形都相似于坐标纸,X轴代表时光,Y轴代表变量值.所不合的是,在你的画面程序运行时,及时趋向曲线随时光变更主动卷动,以快速反响变量的新变更,但是不克不及随时光轴“回卷”,不克不及查阅变量的汗青数据;汗青趋向曲线可以完成汗青数据的检讨工作,但它不会主动卷动,而须要经由过程敕令说话来帮助实现查阅功效.一个画面中可界说数量不限的趋向曲线,在统一个趋向曲线中最多可同时显示四个变量的变更情形. 报警窗口的感化报警窗口用以反响变量的不正常变更,组态王主动对须要报警的变量进行监督.当产生报警时,将这些报警事宜在报警窗口中显示出来,其显示格局在界说报警窗口时肯定.报警窗口也有两种类型:及时报警窗口和汗青报警窗口.及时报警窗口只显示比来的报警事宜,要查阅汗青报警事宜只能经由过程汗青报警窗口.为了分类显示报警事宜,可以把变量划分到不合的报警组,同时指定报警窗口中显示所需的报警组.趋向曲线.报警窗口和报警组都是一类特别的变量,有变量名和变量属性等.趋向曲线.报警窗口的绘制办法和矩形对象雷同,移动和缩放办法与一样.本节课将为“监控中间”增长及时趋向曲线和及时报警窗口,汗青趋向曲线和汗青报警窗口将鄙人节课中实现.设置及时趋向曲线激活画面制造体系Touchmak,在对象箱中选用“及时趋向曲线”对象,然后在画面上绘制趋向曲线,画面如图T8-1;为了让操纵者运用便利,在趋向曲线的下方须要增长标注,解释各类色彩的曲线所代表的变量.双击此及时趋向曲线对象,弹出“及时趋向曲线对象”对话框,对话框设置如下图:设置及时报警窗口在对象箱中选用报警窗口对象,在画面上绘制报警窗口,画面如图T8-3;为使报警窗口内能显示变量的非正常变更,你必须先做如下设置:切换到工程阅读器,在左侧选择“报警组”然后双击右侧的图标进入“报警组界说”对话框.在“报警组界说”对话框中将“RootNode”修正为“车间”.单击“确认”,封闭“修正报警组”对话框.单击“报警组界说”对话框的“确认”按钮.在工程阅读器的左侧选择“数据词典”,在右侧双击变量名“原料罐1液位”.在“变量属性”对话框中单击“报警界说”标签.将对话框设置如图T8-4;报警组名已经主动设为“车间”.单击“肯定”,封闭对话框.用同样的办法界说变量“原料罐2液位”和“反响罐液位”的报警限只有在“变量界说”对话框中界说了变量的报警方法后,才干在报警窗口中显示此变量.接下来设置报警窗口.双击此报警窗口对象,弹出对话框,对话框设置如图T8-5;各类文本的色彩你可自由设置.单击“报警信息格局”,设置格局如T8-6;单击“确认”单击“报警窗口界说”的肯定按钮.选择菜单“文件/全体存”,保管你的工作成果.激活画面运行程序Touchvew,画面后果如下:查阅汗青数据在本课程您将:·树立多画面的运用程序·进修汗青趋向曲线的运用办法·进修汗青报警窗口的运用办法·树立敕令说话文本汗青曲线的感化对于一个现实可用的体系来说,一幅画面经常是不敷的.组态王许可你树立画面数量不限的庞杂程序.本课将要树立的汗青趋向曲线和报警窗口将分离属于另两幅画面.激活Touchmak程序选择菜单“文件/新画面”.设置“新画面”对话框如下:画面名称:汗青趋向曲线对应文件:pic00002.pic 注释:反响车间的监控中间----汗青趋向画面画面作风:笼罩式画面边框:粗边框画面地位:左边:229 顶边:190 宽度:417 高度:256 标题杆:无效大小可变:无效绘制汗青趋向曲线在对象箱内选择汗青趋向曲线对象,在新画面上绘制汗青趋向.双击趋向曲线,弹出“汗青趋向曲线”对话框,对话框包含“曲线界说”和“标识界说”两部分.曲线界说如图T9-1.图 T9-2;单击对话框的“肯定”按钮.对使趋向曲线内能显示变量的变更情形,你必须先对变量做如下设置:选择菜单“数据库/数据词典”.在“变量界说”对话框中单击“速览”.在变量列表中双击变量“原料罐1液位”.单击“记载界说”对话框中“数据变更记载”选择框,使之有用.单击“保管”.用同样的办法使变量“原料罐2液位”和“反响罐液位”的“是否记载”选项都有用.只有在“变量界说”对话框中使变量的“是否记载”选项有用时,才干在汗青趋向曲线中显示此变量的变更情形,这是因为汗青趋向曲线中的数据都取自记载文件,而数据文件只记载那些“是否记载”有用的变量.为汗青曲线树立控制在上节课讲到,汗青趋向曲线不克不及主动卷动.为了从汗青曲线上可以或许查询到所有时光段的汗青数据,必须经由过程敕令说话来动态转变汗青曲线的时光轴(X轴)的范围.汗青曲线时光轴的范围是由汗青曲线的两个属性肯定的.属性ChartStart代表时光轴的肇端值属性ChartLength代表时光轴的长度.假如这两个属性的值被转变,汗青曲线的时光轴范围也就被转变了.敕令说话是一段相似于C说话的程序,假如能充分运用,将极大的扩充组态王的功效.在本处运用的敕令说话仅仅是“敕令说话衔接”,是动画衔接的一种.在对象箱内选择按钮对象,绘制一个按钮.单击此按钮,使之处于选中状况,选择菜单“编辑/字符调换”.将“字符串调换”对话框图中将字符串调换为“<<”.单击“肯定”.同样的办法,再绘制另一按钮,标识表记标帜为“>>”.这两个按钮将用来卷动汗青曲线的时光轴.双击按钮“<<”,弹出“动画衔接” 对话框.单击“弹起时”.在“敕令说话”对话框中输入敕令说话程序:history.ChartStart=history.ChartStart-300;单击“肯定”,封闭“敕令说话”对话框.单击“肯定”,封闭“动画衔接”对话框.以上设置将使按钮成为触敏对象,在画面程序运行时,单击此按钮(当鼠标左键弹起时)将履行你输入的敕令说话程序.此程序的目标是使汗青曲线history的Chartstart属性值减小5分钟= 300秒用同样的办法为按钮“>>”树立“弹起时”敕令说话衔接,程序为:history.ChartStart=history.ChartStart+300; 调剂按钮的地位,完成后的画面如下图:树立汗青报警窗口再新建一幅汗青报警画面.激活Touchmak程序选择菜单“文件/新画面”.设置“新画面”对话框如下:画面名称:汗青报警曲线对应文件:pic00003.pic 注释:反响车间的监控中间----汗青报警窗口画面作风:笼罩式画面边框:粗边框画面地位:左边:223 顶边:131 宽度:417 高度:250 标题杆:无效大小可变:无效单击“肯定”.在对象箱中选用“报警窗口”对象绘制报警窗口.画面如下图;“前”“后”两个按钮是用来翻阅汗青报警事宜的.双击报警窗口,将“报警窗口界说”对话框设置为:汗青报警窗口:有用报警窗口名:反响车间汗青报警窗口标题:有用报警组名已主动设置为“车间”单击“报警信息格局”,将“报警信息格局”对话框设置为下下图.为汗青报警窗口树立控制双击按钮“前”,设置“弹起时”敕令说话动画衔接:PageUp(反响车间汗青报警窗口,5);运用函数PageUp的目标是:每当操纵者单击按钮时,报警窗口内的信息向上卷动5行.同样的办法为按钮“后”设置“弹起时”敕令说话动画衔接:PageDown(反响车间汗青报警窗口,5);选择菜单“文件/全体存”.。
第七讲 报表系统
第一节 组态王内嵌数据报表
数据报表的用途
数据报表是反应生产过程中的数据、状态等,并对数据进行记录的一种重要形式。
是生产过程必不可少的一个部分。
它即能反应系统实时的生产情况,也能对长期的生产过程进行统计、分析,使管理人员能够实时掌握和分析生产情况。
组态王提供内嵌式报表系统,工程人员可以任意设置报表格式,对报表进行组态。
组态王为工程人员提供了丰富的报表函数,实现各种运算、数据转换、统计分析、报表打印等。
即可以制作实时报表,也可以制作历史报表。
另外,工程人员还可以制作各种报表模板,实现多次使用,以免重复工作。
制作实时数据报表
在组态王工具箱内选择“报表窗口”工具,在报表画面上绘制报表。
如下图所示:
双击报表窗口的灰色部分(表格单元格区
域外没有单元格的部分),弹出“报表设计”对
话框,对话框定义如下图所示:
→ 在“报表控件名”对话框中输入报表控
件名称: 实时数据报表 ,这个控件名会在报表
函数中引用。
→在行数对话框中输入所要制作的报表的大
致行数 15
→在列数对话框中输入所要制作的报表的大
致列数6
单击对话框的“确认”按钮。
则组态王报表画面如下图所示:
设置表头格式
设计表头:选中“b1”到“e2”的单元格区域,从报表工具箱上单击“合并单元格”按钮,在报表工具箱的编辑框里输入文本“实时数据报表”,单击“输入”按钮;或双击合并的单元格,使输入光标位于该单元格中,然后输入上述文本。
单击报表工具箱中的“设置单元格格式”按钮,设置单元格格式如下:数字—常规;字体—隶书、规则、一号、红色;对齐方式:水平—居中,垂直—居中;图案—设置单元格底纹颜色为灰色。
如下图所示。
设计报表时间
在单元格“d3”中显示当前日期,双击该单元格,然后输入函数“=Date($年,$月,$日)”。
“e3”中显示当前时间,双击该单元格,然后输入“=Time($时,$分,$秒)”。
设置单元格“d3”的格式为:常规—日期(YYYY年MM月DD日)。
设置单元格“e3”的格式为:常规—时间(XX时XX分XX秒)。
设置如下图所示:
设计报表格式——显示变量的实时值
1、利用数据改变命令语言和报表函数。
在a4单元格中输入“原料油液位”文本值,再选中b4单元格,然后在组态王的“数据改变命令语言”对话框中输入:
注意“实时数据报表”是报表控件名称而不是画面名称。
催化剂液位,成品油液位的实时值同样设置。
则报表设计样式如下图所示:
2、直接引用变量。
在单元格直接插入变量,在该变量前加一个“=”。
如果没有等号会认为是个字符串。
保存报表
在开发状态下,在报表工具箱中点击保存按钮:,则弹出对话框如下图所示:
选择保存路径,输入要保存的文件名,如上图所示。
点击“保存”按钮,则实时数据报表就保存为实时数据报表.rtl 文件。
这样保存的报表可供下次需要时调用。
运行组态王,则报表画面如下图所示:
这样,一个简单的实时数据报表就生成了。
报表打印
在画面中建一个打印按钮,在弹起时命令语言中输入如图所示:
点击“确认”即可。
保存画面,运行组态王,则单击“打印报表”,数据报表即可打印出来。
注:报表单元格内支持输入函数(比如数学函数和日期函数)和变量,但是前面必须有等号。
制作历史数据报表
组态王历史报表的创建和表格样式设计与实时数据报表方法是一样的,并可以通过调用历史报表查询函数加以实现。
表格设计
根据实时数据报表的设计方法,设计的历史报表样式如下图所示:
建立查询函数
在组态王历史报表画面中建一个“报表查询”的按钮,在<弹起时>时命令语言中输入历史查询函数如下图所示:
查询历史数据
运行组态王,打开历史报表画面,点击“报表查询”按钮,弹出对话框如下图所示:
在对话框中输入合适的查询参数值,然后单击“确定”按钮;依次查询催化剂液位、成品油液位。
最后生成的历史数据报表如下图所示:
注:组态王提供了丰富的报表函数以实现对历史数据的多种处理方法,用户可以根据实际要求设计需要的报表。
除了前面所述,常用报表函数如下:
ReportPageSetup此函数在运行系统中对指定的报表进行页面设置。
Reportprint此函数用于将指定数据报告文件(不是报表)输出打印机配置设定的打印口上。
ReportPrint2(EV_STRING, EV_LONG|EV_STRING|EV_ANALOG|EV_DISC)
第二个参数为真,函数自动打印,否则弹出打印对话框
ReportPrintSetup此函数对指定的报表进行打印预览并且可输出到打印配置中指定
的打印机上进行打印。
ReportGetCellString获取指定报表的指定单元格的文本。
ReportGetCellValue获取指定报表的指定单元格的数值。
ReportGetColumns获取指定报表的列数。
ReportGetRows获取指定报表的行数。
ReportLoad将指定路径下的报表读到当前报表中来。
ReportSaveAs将指定报表按照所给的文件名存储到指定目录下。
ReportSetCellString将指定报表的指定单元格设置为给定字符串。
ReportSetCellString2将指定报表的指定单元格区域设置为给定字符串。
ReportSetCellValue将指定报表的指定单元格设置为给定值。
ReportSetCellValue2将指定报表的指定单元格区域设置为给定值。
ReportSetHistData按照用户给定的参数查询历史数据。
报表函数的详细使用请参看《组态王函数速查手册》或在线帮助。
第二节用EXCEL作报表输出
用户除了可以用组态王内嵌报表进行报表的设计输出外,亚控公司还提供了用excel作历史报表输出的例子:kintable.xls文件。
用户可以从组态王的安装路径下找到该文件。
如组态王为默认安装路径c:\programfiles\kingview,则在该路径下可以找到kintable.xls文件。
双击kintable.xls ,弹出如下对话框:
单击“启用宏”按钮,进入到报表excel的报表画面,如下图所示:
点击画面中的菜单工具\宏\Visual Basic编辑器,则进入vba编程环境,如下图所示:
点击菜单下方右边的过程列表框,选择“auto_open”项,如上图所示,则光标停在相应的子程序段,其中
ret = INI_HistoryRecord(0, 0, "C:\Program Files\Kingview\Example\Kingdemo2", 0, "C:\Program Files\Kingview\Example\Kingdemo2")
的INI_HistoryRecord( )函数用于初始化查询子系统,函数中第三个参数表示组态王的历史库路径,最后一个参数表示组态王的工程路径,用户只需要修改这两个路径为自己的工程设置即可,例:当前培训工程在“E:\临时测试工程\培训工程\”下面,历史库路径也为当前工程路径,则函数设置为:
ret = INI_HistoryRecord(0, 0, " d:\培训工程", 0, " d:\培训工程")
保存所作的操作。
保存完毕后,关闭编程环境,回到excel表的环境。
点击画面中的菜单报表\历史报表项,弹出如下对话框,在对话框中输入要查询变量的起始时间、结束时间、时间间隔、然后点击“增加”按钮,输入所要查询的组态王变量:
设置完后,按下“确定”按钮,则相应时间的历史数据变量在sheet1表中就生成了。