1 <概述> <大多数 WinCC 项目都需要显示历史归档数据,可以制作专门的趋势曲线画面来显示重要参数的归档数据,也可以通过点击工艺画面中实时参数显示的对象来弹出对应的变量的归档数据。本文档介绍如何实现点击画面中的输出输入域后弹出其所链接变量的归档数据。 > 1.1 <解决思路> <总体解决思路是通过 WinCC 的 GetLink 函数来获取指定的 WinCC 对象所链接的变量,同时弹出带有在线趋势的画面,接着在弹出画面的画面打开事件中加载已经获取的变量对应的历史归档数据到在线趋势。> 1.2 <GetLink 函数> < GetLink 函数可以获取指定的 WinCC 对象的属性下所链接的变量。 GetLink 函数的格式: BOOL GetLink(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName, LPCTSTR lpszPropertyName, LPLINKINFO *pLink); 各个参数的含义如下: lpszPictureName:对象所在的画面名称。 lpszObjectName:对象名称。 lpszPropertyName:链接了变量的对象属性名称。 pLink:为数据结构变量,类型为 LPLINKINFO,包括以下内容: szLinkName:属性动态化所链接的变量。 LinkType:属性动态化的连接类型,如表 1 所示。 表 1
LinkType | 对应的连接类型 |
---|---|
1 | 直接变量 |
2 | 间接变量 |
3 | C 脚本 |
4 | 动态对话框 |
5 | 直接连接 |
dwCycle:属性动态化的更新周期。如下表 2 所示。
表 2
dwCycle | 对应的更新周期 |
---|---|
255 | Picture cycle |
235 | Window Cycle |
0 | Upon change |
1 | 250ms |
2 | 500 ms |
3 | 1 s |
4 | 2 s |
5 | 5s |
6 | 10s |
7 | 1min |
8 | 5min |
9 | 10min |
10 | 1h |
11-15 | 自定义周期 1-5 |
下面内容详细介绍组态步骤及细节。 2 <创建变量> <本例中,在 WinCC 创建变量,用于仿真参数及归档数据。如图 1 所示。
其中,变量“Tagn”用于保存获取到的对象属性动态化所链接的变量名称。 3 <归档组态> <在 WinCC 中创建过程值归档“pva”,并添加在图 1 中所创建的变量,如图 2 所示。
4 <组态画面> <本例中需要创建两个画面:参数画面和趋势画面,其中参数画面作为主画面,用来显示参数的实时值。趋势画面为弹出画面,用来显示对象参数的归档数据。> 4.1 <参数画面> <在画面中添加输入/输出域、静态文本以及画面窗口,如图 3 所示。
这其中,画面上六个输入/输出域分别连接变量 PARM1~ PARM6,并且输入/输出域的模式需要设置为“输出”,如图 4 所示:
设置模式为“输出”的目的是为了可以触发输入/输出域的点击事件,如果选择模式“输入”或“输入输出”,那么将无法触发输入/输出域的点击事件。 在需要显示趋势曲线的输入/输出域的“按左键”事件中编写如图 5 所示 C 脚本。
具体脚本如下:
LINKINFO linkinfo;
GetLink(lpszPictureName,lpszObjectName,"OutputValue",&linkinfo);
SetTagChar("Tagn", linkinfo.szLinkName); // 获取变量名称
SetPropBOOL(lpszPictureName,"picw1","Visible",1); //设置画面窗口的显示
属性
SetPropChar(lpszPictureName,"picw1","CaptionText",linkinfo.szLinkName);
//设置趋势曲线的标题
画面窗口对象连接趋势画面,本例中趋势画面名称为“oneTrend”。设置画面窗口 的初始显示属性为“否”,如图 6 所示。
4.2 <趋势画面> <创建趋势画面,并设置合适的大小。在画面中添加在线趋势控件,如图 7 所示:
设置在线趋势控件的属性。时间轴和数值轴使用默认的即可,数据源选择“归档变量”,如图 8 所示。
在趋势画面被加载时,需要设置在线趋势控件所连接的归档变量以及时间范围。因此在画面的“打开画面”事件下(图 9),编写如图 10 所示的 VBS 脚本。
具体脚本如下:
Dim OP1,myTrend
Dim TrendName
Dim Tagn
Set Tagn = HMIRuntime.Tags("Tagn")
Tagn.Read
TrendName="pva\"&Tagn.Value
Set myTrend =ScreenItems("myTrend") '在线趋势控件名称
Dim i
For i=1 To myTrend.TrendCount
myTrend.TrendIndex =i
myTrend.TrendRemove =myTrend.TrendName '添加曲线前先删除所有曲线
Next
myTrend.TrendAdd = TrendName
myTrend.TrendTagName = TrendName'曲线名称
myTrend.TrendTrendWindow = "Trend window 1" '曲线窗口名称
myTrend.TrendTimeAxis = "Time axis 1" '时间轴
myTrend.TrendValueAxis = "Value axis 1" '数值轴
'设置曲线开始时间和结束时间
myTrend.TimeAxisIndex =0 '时间轴索引
myTrend.Online =0
myTrend.TimeAxisRangeType =1 '时间轴类型-时间范围
myTrend.TimeAxisBeginTime = Dateadd("h",-1,Now) '起始时间
myTrend.TimeAxisEndTime =Now '结束时间
5 <运行结果> <在 WinCC 启动列表中选择“变量记录运行系统”和“图形运行系统”,并激活 WinCC 运行系统。如图 11 所示。
项目运行后,在画面中分别点击六个参数的输入输出域,可以看到其对应的历史趋 势将显示在右侧的画面中,如图 12 所示。