(完整word版)WinCC技巧
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在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, 。
)。
objCon1.Visible = 1
objCon1.PictureName= ”Trend_Function_1。
PDL”
7现在可以通过Picture Tree Manager 将画面“Trend_Function_Main.PDL”合并到画面图层。
例子:
为了在项目中可以使用这些图片,必须按照前面“准备”中提到方式建立归档变量“testvar1"和“testvar2”。
此外,将下面三个PDL 文件拷贝到项目文件夹下的“GraCS”中。
(。
.Siemens\WinCC\WinCCProjects\<Project_name>).
此例是在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");
注意:
•如何在运行时分配不同变量给趋势请参考条目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”属性必须被取消使能。
您可以在图形编辑器中设置该属性。
•打开图形编辑器.
•右击相关对象并点击“属性”。
•单击“属性"标签并双击“按钮”>“显示"。
图01
•然后单击“OK”来确认这两个对话框。
3创建C 脚本:
•在树形视图中右击“全局脚本”然后单击“打开C 编辑器”。
•在菜单栏中单击“文件”>“创建新项目函数",并使用C 脚本中的Part 1来替代函数模板中的内容。
图02
•单击“File”〉“Save”,输入一个名字并单击“OK”按钮。
•单击“Yes”来确认所做的设置并关闭C 编辑器。
4通过单击鼠标来改变背景颜色:
•在树形视图中单击“图形编辑器”并单击您的项目画面从而打开它。
•通过在对象模板中选择“标准”>“窗口对象”>“按钮"来添加一个按钮到画面中。
•右击插入的按钮然后单击“属性”,属性对话框被打开。
•单击“事件"标签并双击“按钮”〉“鼠标”.
•在“鼠标单击”行右击“动作”列,然后单击“C 动作。
”。
•使用C 脚本中的Part 3来替代绿色的注释行。
图03
•同时使用要改变其背景颜色的对象名称来替代名称“Testobjekt”(图03:位置1)。
•使用来自项目颜色调色板(例2)中新的背景颜色号来替代数字4(图03:位置2).
•单击“OK”来确认对话框,关闭属性对话框并关闭画面。
注意:
如果您没有使用按钮,Part 3必须要在一个动作中被调用。
使用数值指定颜色:
序
步骤
号
1创建C 脚本:
•在树形视图中右击“全局脚本"然后单击“打开C 编辑器"。
•在菜单栏中单击“文件”>“创建新项目函数”并使用C 脚本中的Part 1来替代函数模板中的内容.
图04
•单击“文件">“保存",输入一个名字并单击“OK”按钮。
•在菜单栏中单击“文件”>“创建新项目函数”并使用C 脚本中的Part 2来替代函数模板中的内容.
图05
•单击“Yes"来确认设置并关闭C 编辑器。
2通过单击鼠标来改变背景颜色:
•在树形视图中单击“图形编辑器”并单击您的项目画面从而打开它。
•通过在对象模板中选择“标准”>“窗口对象"〉“按钮"来添加一个按钮到画面中。
•右击插入的对象然后单击“属性”,属性对话框被打开。
•单击“事件”标签并双击“按钮”>“鼠标”.
•在“鼠标单击"行右击“动作"列,然后单击“C 动作.。
”。
•使用C 脚本中的Part 4来替代绿色的注释行。
Bild 06
•同时使用要改变其背景颜色的对象名称来替代名称“Testobjekt”(图06:位置1).
•使用需要的颜色所对应的RGB 值和透明度(本例中为30(红),15(绿),170(蓝), 50(透明度))来替代值255,60,100, 30(图06:位置2).
•单击“OK”来确认对话框,关闭属性对话框并关闭画面.
注意:
如果您没有使用按钮,Part 4必须要在一个动作或函数中被调用.
如下的TXT 文件包含了所需的4 部分C 脚本。
-—--—-——---——--—--—— Teil 1 —-————-—-———-——-—
long GetPaletteColor(int ColorIndex)
{
if (ColorIndex 〉199)
ColorIndex = 199;
return pow(2,31)+ ColorIndex;
}
—-—----—---—-——--—-— Teil 2
———-—-—————----—-—-———-—--—-————----—---——-—--——------—--—-——————-——
long CreateRGBColor32(int nRed,int nGreen,int nBlue, .。
)
{
va_list argptr;
int Alpha;
long Color;
va_start (argptr,nBlue);
if (argptr != NULL)
Alpha = va_arg(argptr, int);
else
Alpha = 0;
va_end(argptr);
Color = nRed + (pow(2, 8))* nGreen + (pow(2, 16)) * nBlue + (pow(2,24))*(Alpha + 1);
return Color;
}
-----——-----—-———--— Teil 3
--—-—--——------—-——-——--——--—---——----———
SetBackColor(lpszPictureName,"Testobjekt", GetPaletteColor(4));
---—————-——-—---—--— Teil 4
---——--——-—-—-——--—----—-—-———--—-—-—--—--—--—-—————-—-————--——-—--—--—-—--——-—----
SetBackColor
(lpszPictureName,"Testobjekt”,GetPaletteColor(GetOutputValueDouble(lpszPicture Name,”ea_Palette")));
{
SetBackColor(lpszPictureName, "Testobjekt", CreateRGBColor32(255,60, 100, 30));}。