当前位置:文档之家› 用户归档实现wincc报表

用户归档实现wincc报表

使用用户归档实现报表简介Use User Archive Create Report摘要 简单介绍了用户归档,介绍如何通过用户归档和WinCC报表编辑器实现复杂报表。

关键词 用户归档,报表Key Words User Archive ,ReportIA&DT Service & Support Page 2-17目录使用用户归档实现报表简介 (1)一.用户归档介绍 (4)二.用户归档的使用 (6)三.结合用户归档实现报表 (8)1.数据的存储 (9)2.报表布局的设计 (12)3.报表输出 (14)附录-推荐网址 (17)IA&DT Service & Support Page 3-17一.用户归档介绍用户归档编辑器是一个WinCC的附加选件,需要安装相应的授权才能使用,否则只能使用DEMO模式。

它可以用来在服务器 PC 上连续的保存来自技术过程的数据。

在图形编辑器中,可以组态 WinCC 用户归档表格元素来以表格显示运行系统中用户归档的在线数据。

用户归档还可用于准备自动化系统(例如 S5、S7)的数据。

如果必要,数据可以配方或设定值的形式从控制器读出。

用户归档编辑器提供两种数据库表格:用户归档: 用户归档是用户可在其中创建自己的数据域的数据库表格。

用户归档用于存储数据,并根据 SQL 数据库规则提供对这些数据的标准化访问。

视图: 视图接收来自用户归档的数据并用于数据的相加,例如,为获得有关产品组的概述。

其在WinCC默认情况下是不会被安装的。

可以通过以下步骤安装。

插入WinCC安装光盘,选择安装SIMATIC WinCC,弹出界面(图1),选择安装或者卸载的组件,在弹出的选择组件界面中左侧选择选项,右侧选中用户归档,点击下一步开始安装。

图1 安装卸载IA&DT Service & Support Page 4-17图2选择组件安装好后打开WinCC项目编辑器在项目的树状结构里会看到用户归档选项。

如下图:图3用户归档至此用户归档安装完毕。

IA&DT Service & Support Page 5-17二.用户归档的使用双击用户归档,打开如下界面:图4 用户归档操作界面右击归档弹出插入新归档菜单,点击就会打开新建归档的界面。

按照提示步骤依次输入归档名称和控制变量。

图5创建用户归档IA&DT Service & Support Page 6-17图6 设置控制变量点击下一步,完成创建工作。

控制变量是用户归档中很重要的概念,简单介绍如下:利用这四个控制变量,可以触发用户归档。

要触发用户归档,必须为“ID”和“Job”变量或“Job”、“Field”和“Value”变量提供相应的值。

图7控制变量的功能(说明:图中的读和写是站在用户归档的角度讲的,就是把变量的数据读到用户归档写到控制系统变量。

从用户归档中把数据删除。

)IA&DT Service & Support Page 7-17图8控制变量的组合(说明:该图中ID=-1,job=6的操作是把变量的值写入用户归档。

ID=-1 job=7的操作是把用户归档的数据写入变量中。

)控制变量提供了两种访问用户归档的方法:通过输入控制变量“ID”和“Job”,可以写入或读取或删除数据记录中的目标值。

可以使用控制变量“Field”和“Value”代替控制变量“ID”来搜索数据记录。

通过控制变量“Job”,可以写入或读取或删除通过该方法选择的数据记录。

例如,如果必须将数据记录从表格中删除然后将其再添加到表格末尾,则可以使用该数据选择类型。

“值”域必须唯一,否则将采用域中满足该条件值的第一条数据记录。

更详细的信息请参见WinCC的帮助系统—>选项—>用户归档。

三.结合用户归档实现报表针对论坛中提到的报表问题,可以结合用户归档实现。

下面以下图的报表为例作一个说明:IA&DT Service & Support Page 8-17图9报表样例该报表主要功能是小时量的记录和班平均值的计算。

下面分步介绍如果使用用户归档和WinCC自带的报表编辑器实现这样的报表。

1.数据的存储首先创建一个用户归档。

选择该归档,在右侧空白处单击鼠标右键选择插入新域。

如下图:图10创建域IA&DT Service & Support Page 9-17图11 创建域名图12和WinCC变量建立连接点击下一步,按照提示完成操作。

最后对应要记录的每一个变量都创建一个域与之相对应。

同时为了统计方便创建日期和时间域分别对应在WinCC中创建的字符串变量。

创建的结果如下图:IA&DT Service & Support Page 10-17图13 创建好的归档在变量管理Æ SYSTEM INFO下创建变量用于取得系统小时值。

如下图:图14创建触发变量创建写入动作:在WinCC的全局脚本中创建一个动作,通过变量MyID1的变化来触发。

脚本如下: Dim riqiDim riqijiuSet riqijiu = HMIRuntime.Tags("riqijiu")Dim MyID1IA&DT Service & Support Page 11-17Set MyID1 = HMIRuntime.Tags("MyID1")Dim flagSet flag = HMIRuntime.Tags("flag")MyID1.Readflag.ReadIf flag.Value =1 Thenriqi=CStr(Year(Now))&"-"&CStr(Month(Now))&"-"&CStr(Day(Now))riqijiu.Readriqijiu.Write ""&riqi&""Dim UA_jiu_IDSet UA_jiu_ID = HMIRuntime.Tags("@UA_jiu_ID")Dim UA_jiu_JobSet UA_jiu_Job = HMIRuntime.Tags("@UA_jiu_Job")UA_jiu_ID.ReadUA_jiu_ID.Write -1UA_jiu_Job.ReadUA_jiu_Job.Write 6End if这样 一旦小时发生变化我们就完成了写入的动作。

注意:一般刚激活WinCC时,会触发一次变量变化。

为了避免写入无效的数据。

此处增加了一个flag变量用于判断是否激活WinCC产生的事件。

技巧:在全局脚本增加一个动作,通过flag自身的变化事件把flag置位(供参考)。

2.报表布局的设计新建一个页面布局,在布局中作如下设置:IA&DT Service & Support Page 12-17图15布局设置该布局需要注意的是:在平均处放置的是静态文本,布局中放置了六个ODBC数据库表控件。

分别连接三个班的累计和平均值。

ODBC数据库表控件的参数设置如下图:图16 ODBC控件属性设置IA&DT Service & Support Page 13-17该设置中需要说明的是:在ODBC数据源处选择想要连接的数据库,在变量处连接一个文本变量8位字符集类型的变量。

在列数中事先填写上返回的字段数。

对于布局列宽的调整可以通过控件的属性窗口设置实现。

图17 修改列宽至此完成了对页面的设计。

3.报表输出创建一个新的打印任务连接新建的布局。

IA&DT Service & Support Page 14-17图18 打印任务创建一个查询界面如下:图18 操作界面在查询测试按钮中写入如下脚本:Dim sqlriqijiuSet sqlriqijiu = HMIRuntime.Tags("sqlriqijiu")Dim sqljiuaSet sqljiua = HMIRuntime.Tags("sqljiua")Dim sqljiuaavgSet sqljiuaavg = HMIRuntime.Tags("sqljiuaavg")Dim sqljiubSet sqljiub = HMIRuntime.Tags("sqljiub")Dim sqljiubavgSet sqljiubavg = HMIRuntime.Tags("sqljiubavg")Dim sqljiucSet sqljiuc = HMIRuntime.Tags("sqljiuc")Dim sqljiucavgSet sqljiucavg = HMIRuntime.Tags("sqljiucavg")sqlriqijiu.Read ‘得到查询条件某一天如“2009-3-11”sqljiua.Read‘返回A班的统计值和平均值sqljiua.Write "selectshijianjiu,var1,var2,var3,var4,var5,var6,var7,var8,var9,var10 fromUA#DailyReport where riqijiu like '"&sqlriqijiu.Value&"%' and shijianjiu between 0 and 7 order by shijianjiu"sqljiuaavg.Readsqljiuaavg.Write "selectavg(var1),avg(var2),avg(var3),avg(var4),avg(var5),avg(var6),avg(var7),avg(var8),avg(var9),avg(var10) from UA#DailyReport where riqijiu like'"&sqlriqijiu.Value&"%' and shijianjiu between 0 and 7 "‘返回B班的统计值和平均值sqljiub.Readsqljiub.Write "selectshijianjiu,var1,var2,var3,var4,var5,var6,var7,var8,var9,var10 fromUA#DailyReport where riqijiu like '"&sqlriqijiu.Value&"%' and shijianjiu between 8 and 15 order by shijianjiu"sqljiubavg.ReadIA&DT Service & Support Page 15-17sqljiubavg.Write "selectavg(var1),avg(var2),avg(var3),avg(var4),avg(var5),avg(var6),avg(var7),avg(var8),avg(var9),avg(var10) from UA#DailyReport where riqijiu like'"&sqlriqijiu.Value&"%' and shijianjiu between 8 and 15 "‘返回C班的统计值和平均值sqljiuc.Readsqljiuc.Write "selectshijianjiu,var1,var2,var3,var4,var5,var6,var7,var8,var9,var10 fromUA#DailyReport where riqijiu like '"&sqlriqijiu.Value&"%' and shijianjiu between 16 and 23 order by shijianjiu"sqljiucavg.Readsqljiucavg.Write "selectavg(var1),avg(var2),avg(var3),avg(var4),avg(var5),avg(var6),avg(var7),avg(var8),avg(var9),avg(var10) from UA#DailyReport where riqijiu like'"&sqlriqijiu.Value&"%' and shijianjiu between 16 and 23 "其实这三个班的代码都是一样的。

相关主题