在WinCC 中如何在一个画面中显示不同的趋势图?
显示订货号
描述
在同一个WinCC 在线趋势控件中,通过不同的按钮来选择显示不同测量点的曲线,有两种方法。
?选择1: 用脚本分配变量
?选择2: 画中画技术
两种方法都是在"Trend_Function_Main.PDL", "Trend_Function_1.PDL" 和
"Trend_Function_2.PDL" 画面中实现的。这几个画面可以在例子中找到。
准备:
变量“testvar1”和“testvar2”分别显示在两个在线控件Trend 1 和Trend 2 中。
No.步骤
1 在变量记录中,新建过程值归档“TestArchive”。
2 在归档中建立相应的变量归档(testvar1 and testvar2)。
Fig. 01
选择1:WinCC V7.0 中脚本分配变量
在本例中,WinCC 在线趋势控件的名称为“Control1”。另外,建立了两个趋势,但是并没有分配给某个变量。分配由VBS 脚本或C 脚本完成。VBS 和C 脚本在文件
“M1_button_assign_tag.txt”中。
No.步骤
1 将WinCC 在线趋势控件组态为显示最多趋势。
2 组态一个按钮(在对象选项板中选择“标准”〉“窗口对象”〉“按钮”)。
3 右键按钮选择属性,选择“事件”〉“按钮”〉“鼠标”。
4 右键“鼠标动作”对应的闪电符号,选择VBS 动作。
5 通过如下脚本,创建一个对象(如“objCon1”)(C 脚本不需要创建对象)
Dim objCon1
Set objCon1 = HMIRuntime.ActiveScreen.ScreenItems("Control1")
6 将变量联系到相应的趋势中(Index 0 = Trend 1, Index 1 = Trend 2, ... )。
'testvar1
objCon1.TrendIndex = 0
objCon1.TrendTagName = "TestArchive\testvar1"
'testvar2
objCon1.TrendIndex = 1
objCon1.TrendTagName = "TestArchive\testvar2"
注意:
?更多关于使用VBS 或C 脚本建立变量变化请参考条目:10259719
?更多关于WinCC 在线趋势控件的动态方法及属性设置请参考WinCC Information System:
"使用WinCC" > "VBS for creating procedures and actions" > "VBS Reference " >
"Object types of the ScreenItem object" > "Controls" > "WinCC Online Trend Control "
选择2:画中画技术
本例中,在画面“Trend_Function_Main.PDL”中组态了一个画面窗口,画面窗口中调用了“Trend_Function_1.PDL”和“Trend_Function_2.PDL”两个已经组态好在线趋势控件的画面。
VBS 和C 脚本在文件“M2_pic_in_pic.txt”中。
No.步骤
1 在图形编辑器中,创建第一个测量点的画面。
注意:
这个PDL 画面的名称最好来自于测量点的名字,并且可以从变量列表中复制其名字。
2 在画面中插入WinCC 在线趋势控件。连接趋势到测量点(WinCC V7.0)的归档变量(如
testvar1)。
在图片中插入一个应用程序窗口并且连接到测量点的趋势模板(老板本)。
3 然后相应的调整图像的几何属性和应用程序窗口。
本例中,高350像素,宽550像素。这个大小是根据画面窗口的大小定的。
4 重复步骤3和4,为其他的测量点创建画面。
将应用程序窗口链接到每一个曲线模板上,然后用测量点的名字保存图像。
5 下一步创建一个新图片,可以用不同的按钮调用不同的趋势。
在这个画面中,为已经建好的画面插入一个宽(550 pixels)高(350 pixels)的画面窗口。属性可自由选择。
警告:
不要将画面窗口连接到某个画面,这个工作是运行时动态完成的。
6 在鼠标单击事件中插入如下源代码。注意根据您的项目更改图片名称。
C 动作
SetVisible("Trend_Function_Main","PictureWindow1",1);
SetPictureName("Trend_Function_Main","PictureWindow1","Trend_Function_1.PDL");
VBS 动作
Dim objCon1
'create objects
Set objCon1 = HMIRuntime.ActiveScreen.ScreenItems("PictureWindow1")
'configuration
objCon1.Visible = 1
objCon1.PictureName= "Trend_Function_1.PDL"
7 现在可以通过Picture Tree Manager 将画面“Trend_Function_Main.PDL”合并到画面图
层。
例子:
为了在项目中可以使用这些图片,必须按照前面“准备”中提到方式建立归档变量“testvar1”和“testvar2”。此外,将下面三个PDL 文件拷贝到项目文件夹下的“GraCS”中。
(...Siemens\WinCC\WinCCProjects\
此例是在WinCC V.0.中建立的。
ZIP 文件中包含了三个PDL 文件(WinCC 画面)和两个TXT 文件(VBS and C 脚本)。
如何使用C 或VBS 脚本通过新变量提供WinCC 在线趋势控件的单个趋势?
显示订货号
说明:
例如,在初始条件下,过程值归档"TestArchive" 中的变量"testvar1" 被分配给趋势控件的曲线1(图01)。
图. 01
C 脚本:
现在按下面的步骤利用C 脚本将过程值归档中的变量"testvar2" 分配给趋势控件的曲线1。No.步骤
1 首先,将在线趋势控件的"Index" 属性设置为对应曲线号的数值。
WinCC V6.x 和WinCC V7.0
SetPropWord(lpszPictureName,"Control1","TrendIndex",0);
2 将WinCC在线趋势控件(= Control1)中选择出的曲线的"TagName" 属性或者
TrendTagName 设置为新的变量:
WinCC V6.x
SetPropChar(lpszPictureName,"Control1","TagName","TestArchive\\testvar2");
WinCC V7.0
SetPropChar(lpszPictureName,"Control1","TrendTagName","TestArchive\\testvar2");
3 将WinCC 在线趋势控件(= Control1) 中选择出的曲线的"Command" 属性设置为
"Reload":
WinCC V6.x
SetPropChar(lpszPictureName,"Control1","Command","Reload");
WinCC V7.0
不需要(趋势自动更新)
VBS 脚本:
现在按下面的步骤利用VBS 脚本将过程值归档中的变量"testvar2" 分配给趋势控件的曲线1。
No.步骤
1 为WinCC 在线趋势控件"Control1" 创建一个对象"objCon1" 。
WinCC V7.0
Dim objCon1
Set objCon1 = HMIRuntime.ActiveScreen.ScreenItems("Control1")
2 首先将趋势控件的"Index" 属性设置为对应曲线号的数值。
WinCC 7.0
objCon1.TrendIndex = 0
3 将在线趋势控件(= Control1) 中选择出的曲线的"TrendTagName" 属性设置为新的变
量:
WinCC 7.0
objCon1.TrendTagName = "TestArchive\testvar2"
注意:
?如何在运行时分配不同变量给趋势请参考条目ID: 1804857。
?在任何情况下"Index" 代表了在线趋势控件中CurveX 的设置(更多信息请参考图形编辑器的在线帮助)。
?请注意C 脚本中变量名和归档名之间必须用" \\" 分隔。
如何使用Tag Prefix 的属性?
显示订货号
说明:
在WinCC Online Help 中,通过路径“WinCC Information System > Working with WinCC > VBS for Creating Procedures and Actions > VBS Reference > Characteristics > T > TagPrefix Property”,可以看到关于Tag Prefix 属性的描述。
只有重新加载画面后,对Tag Prefix 属性的任何更改才生效。这在画面更改时自动发生;若不然,可以重新指定“Picture Name”属性。下面两个图提供了可能的C 和VBS 脚本。
如何使用一个通用的C函数来动态的获得对象属性的连接变量?
显示订货号
介绍:
使用"GetLinkedVariable()"函数您可以读取连接到对象属性上的变量名称,"GetLinkedVariable()"函数返回的变量名称首先需要检查,检查正确之后您可以利用该变量名称在您的子程序段中根据需要进一步处理,如读写该变量或者修改其他对象的属性。
例子:
读取连接到IO域对象的上“输出值”属性的例子。
{
char* pszVarName = NULL;
char szVarName[_MAX_PATH+1];
//
//Read tag name of a direct connection
//
pszVarName = GetLinkedVariable(lpszPictureName,lpszObjectName,"OutputValue");
//
//检查返回值
//
if (strlen(pszVarName) <= 0){
printf("Error: the property is not linked to a WinCC tag!\r\n");
}
else if (strlen(pszVarName) >= sizeof (szVarName)){
printf("Error: the C tag occupies too little memory to be able to accept the complete tag name\r\n");
}
else{
strncpy(szVarName,pszVarName,sizeof (szVarName));
printf("Info: szVarName=\"%s\" value=%f\r\n", szVarName, value);
//============================================
//
//用户自定义的子程序段
//
//============================================
//At this point you can program your
//application-specific code
}
}
GetLinkedVariable:函数的参数:
?lpszPictureName:指向当前画面的指针
?lpszObjectName:指向当前对象的指针
?"OutputValue": 对象属性的名称,该属性上连接着变量
程序流程:
1.GetLinkedVariable函数的返回值返回给程序内部变量pszVarName。
GetLinkedVariable函数不会返回一个空指针,所以必须用strlen检查返回值的长度,
2.如果返回值有效,将返回值赋值给变量szVarName,赋值长度最长是_MAX_PATH个
字符
3.在用户自定义程序中使用该返回值。
触发条件注意:
您需要避免在过程画面中使用周期循环触发,因为这种方式会加大系统负担,触发方式最好选用变量触发。
当您使用变量触发时请确保过程值连接到对象属性上的时候,触发C动作的触发器变量能够正常地发生改变
面板技术如何与画面窗口的"Tag Prefix" 属性结合使用?
显示订货号
使用说明:
可以在组态中使用面板技术。从WinCC V5 版本起,可以使用画面窗口的"Tag Prefix" 属性。
重要信息:
画面窗口的变量前缀务必与全局定义一致。这表示画面窗口的变量前缀对在该画面窗口中处理的所有变量或以其它方式(脚本)修改的所有变量均有效。
因此,这些变量必须是结构的一部分,结构名称已经被用户指定为画面窗口的变量前缀。
例如,如果在上述结构之外声明一个名为“Hallo”的变量,并尝试在画面窗口中修改,更改变量名"TagPrefix.Hallo"。这会导致出错,因为该变量不存在。
请注意当同意画面窗口中的另一个变量前缀时,画面窗口的变量前缀也有效。
对于在第二次定义中处理或以其它方式(脚本)修改的变量,下列解释适用:
"TagPrefix1.TagPrefix2.TagName"。
在该示例中通过变量链接、动态对话框和C 语言脚本实现动态化。动态对话框和C 语言脚本均使用变量触发。
变量前缀不仅可以与WinCC 结构变量中独立的点一起使用,也可以用于WinCC 变量名中的任何点处。变量前缀也可以用于基本的WinCC 变量。
关于动态对话框的注意事项
为了可以使用动态对话框,必须执行下列两点:
?必须使用"Tag Prefix" 属性指定点:
示例:
"ampel13."
?动态对话框检查是否存在变量。因此,必须为结构的每个成员变量重新创建一个常规变量。
示例:
该结构有三个成员:"red"、"yellow" 和"green"。必须另外创建三个变量:"red"、"yellow"
和"green"。
该面板技术的优点
无需使用任何不必要的C 语言脚本。变量触发也确保实现卓越的性能。
关于修改变量前缀的注意事项
请注意,只有当在画面窗口中修改了画面时,修改变量前缀才能在该画面窗口中生效。这已经在这个样例项目中实现了。欲知详情,请参见图形编辑器在线帮助中的画面窗口"Tag Prefix" 属性。
怎样通过登陆/退出(log on/off)来关闭已打开的面板(faceplates)?
显示订货号
描述:
用户经常在登陆以后设置面板(faceplates)。例如, 用户名保存在"Static Text"对象的"Text" 属性中。根据面板的设置, 可能会发生以下情况,当切换用户后当前保存的用户权限并没有被修改。在实际运用中,可能意味着未被授权的动作会被执行,或者由于当权用户没有这个权限而不能执行某些开关动作。
补救:
?切换用户后面板将被关闭并且重启。
?不要保存当前用户的登陆信息。每次用户操作,对于当前登陆用户总是做直接查询。注解:
?在某种情况下,例如:Safety Matrix面板。
?如果你使用了Basic Process Control选件(例如使用PCS 7 或者OS 项目编辑),当切换用户时面板默认会被关闭。这个行为的详细信息和授权的检查请参考条目ID
16626380.
?如果是标准wincc,你必须手动配置面板的管理(打开和关闭画面窗口)。根据
"@CurrentUser"标签的变化触发全局脚本,登录/登出时,全局脚本动作将会自动关闭已打开的画面窗口。
下图显示怎样去构造一个切换用户后被执行的C动作。动作中定义的画面被重新加载成一个开始画面。如果画面窗口的属性"Display"的静态属性是"False",那么画面窗口会根据切换用户而关闭。
补充:在脚本中,可以通过ODK函数从用户管理查询权限设定。条目ID 27068495指出怎样在脚本中使用ODK函数"PWRTCheckPermission()"来查询权限
WinCC 7.0中,如何在运行系统中通过脚本来改变对象颜色(背景,边框,文本)?
显示订货号
说明:
从WinCC 7.0 开始, 包含32 位值的颜色也支持颜色透明度。有两种组态颜色的方法可以被用来在运行系统中使用脚本通过alpha 通道/透明度来改变对象颜色(背景,边框,文本)。
1.在中央调色板指定颜色
除了传统颜色,WinCC 7.0 还允许您创建您自己的颜色调色板。您可以为一个项目创
建10 个颜色调色板,每个调色板可以包含20 种颜色。颜色调色板中的颜色可以通
过脚本及指派对象颜色(如文本颜色)来使用。这适用于常用颜色及需要统一改变的
颜色,例如在颜色调色板中改变一种颜色后,指派到该颜色的对象颜色(如文本颜色)也就随之改变了。
2.通过数值指定颜色
WinCC 7.0 允许您使用脚本来创建一个颜色值并将该值赋给一个对象颜色(如文本颜
色)。这适用于颜色很少使用及更改传统颜色或颜色调色板不影响创建的颜色的情况。警告:
为了改变一个对象的颜色,“Central color scheme”属性必须被取消使能。您可以在图形编辑器中设置该属性。