实现无变量前缀属性对象或控件的画面模板

摘要?画面模板是使用WINCC组态画面是的常用工具。现实工作中经常遇到许多设备需要显示相同参数的情况。。画面模板实现方式有许多种种:用户自定义对象、画面原型、使用变量前缀的画面窗口、使用动态向导的画面窗口等。本文主要针对使用变量前最的画面窗口,讨论无变量前缀的对象和控件的画面模板实现方法。

关键词?画面模板,Wincc,前缀

Key Words??Picture template, Wincc, Prefix

?

?

目录

一.?????????画面模板实现方法

二.?????????几种实现方法的优缺点

三.?????????无变量前缀对象和控件的实现方法

四.?????????运行效果

 

一 画面模板实现方法

在实际的工业现场及应用中,经常会遇到多个设备需要显示相同参数(组)的情况,比如现场有许多个电机,每个电机需要显示和控制的参数(组)都相同,只是不同电机的参数数值不同。采用画面模板的方式,能够避免多次重复组态相同的画面,减少组态人员的工作量,又能避免日后项目维护时期的大量工作,提高系统的可维护性。

画面模板实现方法主要有以下种:

1?用户自定义对象

用户自定义对象是由多个WINCC对象组合而成的。只需选择用户需要的对象,生成新的对象,同时用户可以选择需要的属性作为对象的自定义属性。

2?画面原型

画面原型是建立在用户自定义对象的基础之上,使用结构变量和动态向导的方法建立画面模板。首先做好自定义对象的模板,利用动态向导下的“Add dynamics to the prototype”在输入输出值属性里连接结构变量,将这个模板复制多份,分别创建标准动态下的“Link a prototype to a??structure or rename an existing link”,在创建的过程中,可以选择和原型结构类型相同的其他前缀。

3?使用变量前缀的画面窗口

画面窗口功能灵活、内容丰富,在WINCC中使用广泛,非常适合最为画面模板使用。通常做法是,首先组态一个画面模板,画面中的对象不是与变量相连,而是与结构元素相连(如Motor.Current,则连接名为Current),然后在主画面中组态画面窗口对象,画面名称选择模板画面,变量前缀可以定义或者动态定义为相应的结构变量前缀

4?利用动态向导实现

先在模板画面中组太好要用到的对象(不用连接变量),画面做好后保存,如module.pdl.然后点击该模板画面背景,创建画面模板的动态向导,双击动态向导Picture modules下的Picture Module template-V1.14,出现对话框要求连接画面中的对象与结构变量元素的链接,动态向导创建完成后会生成一个新的模板画面@TYPE_module.pdl,这个画面模板上方有个蓝色的输入输出域,它可以连接Wincc中任意一个字符串型的变量,修改这个字符串的值为摸个变量前缀,则画面窗口中元素名前会自动加载这个前缀名,从而显示结构变量。

二 几种实现方法的优缺点

用户自定义对象和画面原型两种种方法主要用于一些对象集合需要多次使用,连接多套参数的情况,但是不能使用脚本,动态对话框等。

利用变量前缀,可以将结构元素关联到画面中对象的属性里,也能关联到对象的事件,包括脚本动作和直接连接。

利用动态向导生成的模板,只能将结构元素关联到画面中对象的属性里,不能关联对象的事件。

三 无变量前缀对象和控件的实现方法

使用画面窗口,在指定画面窗口的“变量前缀”属性后,画面中出现的所有变量都会自动添加前缀。前缀可以自由定义,单必须与结构变量的名称相匹配,必须以句点结尾,如“Motor.”。改变变量前缀只有在在再次装载画面时才起作用。使用名称“TagPrefix”,可以是变量前缀属性动态化,非常容易显示画面模板。一般的对象都支持TagPrefix属性,控件只有“Wincc Fauge Control(量表控件)”和“Wincc Slider Control(滚动条控件)”提供“TagPrefix”属性。

对于支持“TagPrefix”属性的对象或控件,只需关联到结构元素上,然后在画面窗口属性中设置“TagPrefix”内容即可。

对于没有提供“TagPrefix”属性的对象或控件,如果像支持“TagPrefix”属性的对象一样使用,只需获得变量前缀即可。

下面以趋势图控件为例说明

1?创建结构变量

在项目中创建一个名为Motor的结构类型,如图1,

然后创建两个结构实例Motor_1,Motor_2,如图2,WINCC自动创建结构变量

2?建立变量归档

将建立的变量添加入变量归档中,名称为:“ProcessValueArchive”

3?组态画面

新建画面,并保存为Motor.pdl

添加所需的对象如输入输出域,静态文本,量表控件,滚动条控件,趋势图控件等。如图3.

趋势图控件中,因为趋势图控件不支持“TagPrefix”属性,属性中的“TagName”无法和变量前缀一起组成结构变量,因此是无法显示归档数值的。

处理方法是在控件属性“TagName”中添加一个C动作,关联所需的结构变量,如图4.

代码如下:
[cc]
// syntax: #define PicNameInAction “PictureName”

// next PicID : 1

// WINCC:PICNAME_SECTION_END

/****************设置变量名***********************/

#define Current_Tag “Current”???//设置变量名电流

#define Voltage_Tag “Voltage”//设置变量名电压

#define Speed_Tag “Speed”//设置变量名速度

 

 

/****************分配完整变量名存储区域********/

static char??Current_Trend_Tag[120];?//设置电流变量名存储区域

static char??Voltage_Trend_Tag[120];//设置电压变量名存储区域

static char Speed_Trend_Tag[120];//设置速度变量名存储区域

 

/**************************设置索引***********************/

static long int Index_Trend = 0;

 

/************************获取完整归档变量名***************/

//获取电流完整归档变量名

sprintf( Current_Trend_Tag,”ProcessValueArchive%s”Current_Tag,GetTagPrefix(GetParentPicture(lpszPictureName), GetParentPictureWindow(lpszPictureName)));

//获取电压完整归档变量名

sprintf( Voltage_Trend_Tag,”ProcessValueArchive%s”Voltage_Tag,GetTagPrefix(GetParentPicture(lpszPictureName), GetParentPictureWindow(lpszPictureName)));

//获取速度完整归档变量名

sprintf( Speed_Trend_Tag,”ProcessValueArchive%s”Speed_Tag,GetTagPrefix(GetParentPicture(lpszPictureName), GetParentPictureWindow(lpszPictureName)));

/************连接多个归档变量*****************/

SetIndex(lpszPictureName, “控件3”, Index_Trend);//设置索引

if (Index_Trend == 0){

Index_Trend++;//索引递增

return Current_Trend_Tag;

}

if (Index_Trend == 1){

Index_Trend++;//索引递增

return Voltage_Trend_Tag;

}

if (Index_Trend == 2){

Index_Trend = 0;//索引递增

return Speed_Trend_Tag;

}

}
[/cc]
代码中
[cc]
sprintf( Voltage_Trend_Tag,”ProcessValueArchive%s”Voltage_Tag,GetTagPrefix(GetParentPicture(lpszPictureName), GetParentPictureWindow(lpszPictureName)));
[/cc]
为关键部分,首先使用GetParentPicture函数获得当前图片的名称,也就是画面窗口所在图片的名称,然后使用GetParentPictureWindow获得当前画面窗口的名称,再使用GetTagPrefix获得当前画面窗口的变量前缀属性,最后使用sprintf函数建立归档数据。其中,”ProcessValueArchive%s”Voltage_Tag,ProcessValueArchive为归档名称,s代表的是前缀,Voltage_Tag代表的是结构元素名称,如:ProcessValueArchiveMotor_1.Voltage.

2010年05月28日 - xuanjidaoren_2098 - 玄极道人

1

2010年05月28日 - xuanjidaoren_2098 - 玄极道人

2

?

?2010年05月28日 - xuanjidaoren_2098 - 玄极道人

?

3

2010年05月28日 - xuanjidaoren_2098 - 玄极道人

4

同时,文中还实现了对连接多个归档变量。这里不再叙述。

四.????运行效果

运行效果如图5所示。

2010年05月28日 - xuanjidaoren_2098 - 玄极道人

 

图5

运行效果分析:

从图5可以看出,无论是从支持变量前缀的对象和控件,还是不支持变量前缀的对象和控件,都很好的达到了预期效果。

参考:

1?《深入浅出WINCC》

2?《WINCC中的画面模板》

3?《如何使用结构变量组态画面模板》文档编号:A0443

此条目发表在网络知识分类目录。将固定链接加入收藏夹。