组态王日报表例程.docx
《组态王日报表例程.docx》由会员分享,可在线阅读,更多相关《组态王日报表例程.docx(17页珍藏版)》请在冰豆网上搜索。
组态王日报表例程
组态王日报表的实现例程
配置参考文档
北京亚控科技发展有限公司
技术部
图表
一、功能概述
常规需求:
很多工业现场会用到报表功能,而日报是其中最基本的一种报表形式。
日报表一般为每天整点的数据,每一个变量有24个数据。
组态王中的实现方法:
利用组态王内置报表以及报表的函数来实现对日数据的查询生成日报表。
组态王内置报表的操作类似excel,操作简单、方便,并且组态王提供了大量的报表函数来实现各种复杂功能。
二、工程实例
我们举一个例子来说明日报表的实现方法。
在此例程中我们定义五个变量,分别为“压力”、“温度”、“密度”、“电流”、“电压”,运行系统运行后记录历史数据,查询日报表数据时自动从历史数据中查询整点数据生成报表,并可以保存、打印报表。
下面就以此为例来演示完成这一要求的具体步骤。
三、操作步骤:
1、定义设备:
根据工程中实际使用得设备进行定义,本例程使用亚控的仿真PLC设备,使用“PLC-亚控-仿真PLC-串口”驱动,定义设备名称为”PLC”。
2、定义变量:
在组态王中定义三个变量:
压力(IO实数类型)、温度(IO实数类型)、密度(IO实数类型)。
压力变量:
最小值0,最大值100,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
温度变量:
最小值0,最大值50,最小原始值0,最大原始值100,连接设备PLC,寄存器DECREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
密度变量:
最小值0,最大值1,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
电流变量:
最小值30,最大值50,最小原始值0,最大原始值100,初始值为30,连接设备PLC,寄存器DECREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
电压变量:
最小值180,最大值250,最小原始值0,最大原始值100,初始值220,连接设备PLC,寄存器DECREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
3.制作画面:
3.1)创建报表:
新建画面,画面名称“日报表”。
在组态王工具箱按钮中,用鼠标左键单击“报表窗口”按钮,此时,鼠标箭头变为小“+”字形,在画面上需要加入报表的位置按下鼠标左键,并拖动,画出一个矩形,松开鼠标键,报表窗口创建成功,如图一所示。
图一报表
用鼠标双击报表窗口的灰色部分(表格单元格区域外没有单元格的部分),弹出“报表设计”对话框,如图二所示。
该对话框主要设置报表的名称、报表表格的行列数目以及选择套用表格的样式。
我们设置报表名称为“Report0”,行数为27,列数为6。
图二报表设计
我们根据需要对报表的格式进行设置,如报表的表头,标题等。
我们选中单元格A1到F1,点击右键弹出快捷菜单,选择“合并单元格”,单元格合并后我们填写标题,如“监控系统日报表”,点击右键在快捷菜单中选择“设置单元格格式”,设置字体、对齐方式、边框等。
我们按照此方法设计日报表的格式,如图三所示:
图三日报表
3.2)创建日历控件:
我们按照日期进行历史数据的查询生成日报表,使用微软提供的通用控件“MicrosoftDateandTimePickerControl”,此控件在安装VB或者VC或者Office2000后会在通用控件中找到。
插入通过控件,如图四所示:
选择后画到画面上,双击控件,在“常规”选项卡中为控件命名为“ADate”,点击“确定”,保存画面。
再次双击日历控件,选择“事件”选项卡,点击在“事件”选项卡中点击CloseUp事件,弹出控件事件函数编辑窗口,在函数声明中为此函数命名:
CloseUp();在编辑窗口中编写脚本程序,在编写脚本程序之前在数据词典中定义字符串变量“选择日期”,如图五所示:
图四日历控件
脚本程序如下:
floatAyear;
floatAmonth;
floatAday;
longx;
longy;
longRow;
longStartTime;
stringtemp;
Ayear=ADate.Year;
Amonth=ADate.Month;
Aday=ADate.Day;
temp=StrFromInt(Ayear,10);
if(Amonth<10)
temp=temp+"-0"+StrFromInt(Amonth,10);
else
temp=temp+"-"+StrFromInt(Amonth,10);
if(Aday<10)
temp=temp+"-0"+StrFromInt(Aday,10);
else
temp=temp+"-"+StrFromInt(Aday,10);
\\本站点\选择日期=temp;
ReportSetCellString2("Report0",4,1,27,6,"");//清空单元格
ReportSetCellString("Report0",2,2,temp);//填写日期
StartTime=HTConvertTime(Ayear,Amonth,Aday,0,0,0);
ReportSetHistData("Report0","\\本站点\压力",StartTime,3600,"B4:
B27");
ReportSetHistData("Report0","\\本站点\温度",StartTime,3600,"C4:
C27");
ReportSetHistData("Report0","\\本站点\密度",StartTime,3600,"D4:
D27");
ReportSetHistData("Report0","\\本站点\电流",StartTime,3600,"E4:
E27");
ReportSetHistData("Report0","\\本站点\电压",StartTime,3600,"F4:
F27");
x=0;
while(x<24)
{
row=4+x;
y=StartTime+x*3600;
temp=StrFromTime(y,2);
ReportSetCellString("Report0",row,1,temp);
x=x+1;
}
编辑完成后点击“确认”,完成对日历控件的设置。
下面我们对报表进行保存和打印。
在画面上添加两个按钮,按钮文本分别为“保存”、“打印”。
双击“保存”按钮,弹出“动画连接”,点击“命令语言连接”的“弹起时”,编写报表保存的脚本程序。
报表保存的格式为“xls”文件,如图六所示:
脚本程序如下:
stringfilename;
filename=InfoAppDir()+\\本站点\选择日期+".xls";
ReportSaveAs("Report0",filename);
双击“打印”按钮,弹出“动画连接”,点击“命令语言连接”的“弹起时”,编写报表打印的脚本程序。
如图七所示:
脚本程序如下:
ReportPrintSetup("Report0");
图五控件事件函数
图六保存报表
图七打印报表
完成按钮命令语言的编写后,保存画面。
画面如下图八所示:
图八打印报表
4.进入运行系统:
画面开发完成后在工程浏览器的“系统设置”中的“设置运行系统”中对“配置主画面”选项卡进行主画面的配置,设置“日报表”画面为主画面。
配置完成后点击工程浏览器的“View”按钮切换到运行系统。
系统运行后会将主画面打开,点击日历控件,选择我们要查询的日报表的日期,就可以查询出日报表的数据,如图九所示:
图九运行系统
点击“保存”按钮,可以将报表保存为xls格式文件,文件名称为日期,如“2007-04-20.xls”,文件的保存路径为工程所在的路径。
点击“打印”按钮,可以对报表进行打印输出,并且可以进行报表的打印预览,如图十所示:
图十打印预览
四、注意事项
1.在此例程中所用到的函数请参考相关函数使用手册。
2.日历控件为微软提供,如果无法创建此控件可以考虑安装office2000或者VB、VC软件。
3.本演示工程只是简单的介绍日报表如何制作的例程,更深一步的学习使用请参考组态王使用手册、组态王帮助文档,或者参加组态王培训班。
如有问题请致电亚控公司技术部。
数据词典中变量的类型
数据词典中存放的是应用工程中定义的变量以及系统变量。
变量可以分为基本类型和特
殊类型两大类,基本类型的变量又分为内存变量和I/O变量两种。
“I/O变量”指的是组态王与外部设备或其它应用程序交换的变量。
这种数据交换是双
向的、动态的,就是说在组态王系统运行过程中,每当I/O变量的值改变时,该值就会自动
写入外部设备或远程应用程序;每当外部设备或远程应用程序中的值改变时,组态王系统中
的变量值也会自动改变。
所以,那些从下位机采集来的数据、发送给下位机的指令,比如反
应罐液位、电源开关等变量,都需要设置成“I/O变量”。
那些不需要和外部设备或其它应
用程序交换,只在组态王内使用的变量,比如计算过程的中间变量,就可以设置成“内存变
量”。
基本类型的变量也可以按照数据类型分为离散型、实型、整型和字符串型。
1、内存离散变量、I/O离散变量
类似一般程序设计语言中的布尔(BOOL)变量,只有0、1两种取值,用于表示一些
开关量。
2、内存实型变量、I/O实型变量
类似一般程序设计语言中的浮点型变量,用于表示浮点数据,取值范围10E-38~
10E+38,有效值7位。
3、内存整数变量、I/O整数变量
类似一般程序设计语言中的有符号长整数型变量,用于表示带符号的整型数据,取值范
围2147483648~2147483647。
4、内存字符串型变量、I/O字符串型变量
类似一般程序设计语言中的字符串变量,可用于记录一些有特定含义的字符串,如名称、
第二讲建立一个新工程-19-
北京亚控科技发展有限公司
密码等,该类型变量可以进行比较运算和赋值运算。
特殊变量类型有报警窗口变量、历史趋势曲线变量、系统变量三种。
对于我们将要建立的演示工程,需要从下位机采集原料油罐的液位、原料油罐的压力、
催化剂液位和成品油液位,所以需要在数据库中定义这四个变量。
因为这些数据是通过驱动
程序采集来的,所以四个变量的类型都是I/O实型变量,变量定义方法如下:
在工程浏览器树型目录中选择“数据词典”,在右侧双击“新建”图标,弹出“变量属
性”对话框,如图2-26所示:
图2-26
在对话框中添加变量如下:
变量名:
原料油液位
变量类型:
I/O实数
变化灵敏度:
0
初始值:
0
最小值:
0
最大值:
100
最小原始值:
0
最大原始值:
100
转换方式:
线性
连接设备:
PLC1
寄存器:
DECREA100
数据类型:
SHORT
采集频率:
1000毫秒
读写属性:
只读
设置完成后单击“确定”。
用类似的方法建立另外三个变量:
原料油罐压力、催化剂液位和成品油液位。
第二讲建立一个新工程-20-
北京亚控科技发展有限公司
此外由于演示工程的需要还须建立三个离散型内存变量为:
原料油出料阀、催化剂出料
阀、成品油出料阀。
在该演示工程中使用的设备为上述建立的仿真PLC,仿真PLC提供四种类型的内部寄
存器:
INCREA、DECREA、RADOM、STATIC,寄存器INCREA、DECREA、RADOM、STATIC
的编号从1-1000,变量的数据类型均为整型(即SHORT)。
递增寄存器INCREA100变化范围0~100,表示该寄存器的值周而复始的由0递加到
100。
递减寄存器DECREA100变化范围0~100,表示该寄存器的值周而复始的由100递减
为0。
随机寄存器RADOM100变化范围0~100,表示该寄存器的值在0到100之间随机的变
动。
静态寄存器STATIC100该寄存器变量是一个静态变量,可保存用户下发的数据,当用
户写入数据后就保存下来,并可供用户读出。
STATIC100表示该寄存器变量能够接收0-100
之间的任意一个整数。
变量基本属性说明
变化灵敏度
数据类型为实数型或整数型时此项有效,只有当该数据变量的值变化幅度超过设置的
“变化灵敏度”时,组态王才更新与之相连接的图素(缺省为0)。
保存参数
选择此项后,在系统运行时,如果您修改了此变量的域值(可读可写型),系统将自动
保存修改后的域值。
当系统退出后再次启动时,变量的域值保持为最后一次修改的域值,无
需用户再去重新设置。
保存数值
选择此项后,在系统运行时,当变量的值发生变化后,系统将自动保存该值。
当系统退
出后再次启动时,变量的值保持为最后一次变化的值。
最小原始值
针对I/O整型、实型变量,为组态王直接从外部设备中读取到的最小值
最大原始值
针对I/O整型、实型变量,为组态王直接从外部设备中读取到的最大值
最小值
用于在组态王中将读取到的原始值转化为具有实际工程意义的工程值,并在画面中显
示,与最小原始值对应
最大值
第二讲建立一个新工程-21-
北京亚控科技发展有限公司
用于在组态王中将读取到的原始值转化为具有实际工程意义的工程值,并在画面中显
示,与最大原始值对应。
最小原始值、最大原始值和最小值、最大值这四个数值是用来确定原始值与工程值之间
的转换比例(当最小值和最小原始值一样,最大值和最大原始值一样时,则组态王中显示的
值和外部设备中对应寄存器的值一样)。
原始值到工程值之间的转换方式有线性和平方根两
种,线性方式是把最小原始值到最大原始值之间的原始值,线性转换到最小值至最大值之间。
工程中比较常用的转换方式是线性转换,下面将以具体的实例进行讲解。