WinCC技巧.docx
《WinCC技巧.docx》由会员分享,可在线阅读,更多相关《WinCC技巧.docx(22页珍藏版)》请在冰豆网上搜索。
WinCC技巧
在WinCC中如何在一个画面中显示不同的趋势图?
隐藏订货号显示订货号订货号:
描述
在同一个WinCC在线趋势控件中,通过不同的按钮来选择显示不同测量点的曲线,有两种方法。
∙选择1:
用脚本分配变量
∙选择2:
画中画技术
两种方法都是在"Trend_Function_Main.PDL","Trend_Function_1.PDL" 和"Trend_Function_2.PDL"画面中实现的。
这几个画面可以在例子中找到。
准备:
变量“testvar1”和“testvar2”分别显示在两个在线控件Trend1和Trend2中。
No.
步骤
1
在变量记录中,新建过程值归档“TestArchive”。
2
在归档中建立相应的变量归档(testvar1andtestvar2)。
Fig.01
选择1:
WinCCV7.0中脚本分配变量
在本例中,WinCC在线趋势控件的名称为“Control1”。
另外,建立了两个趋势,但是并没有分配给某个变量。
分配由VBS脚本或C脚本完成。
VBS和C脚本在文件“M1_button_assign_tag.txt”中。
No.
步骤
1
将WinCC在线趋势控件组态为显示最多趋势。
2
组态一个按钮(在对象选项板中选择“标准”〉“窗口对象”〉“按钮”)。
3
右键按钮选择属性,选择“事件”〉“按钮”〉“鼠标”。
4
右键“鼠标动作”对应的闪电符号,选择VBS动作。
5
通过如下脚本,创建一个对象(如“objCon1”)(C脚本不需要创建对象)
DimobjCon1
SetobjCon1=HMIRuntime.ActiveScreen.ScreenItems("Control1")
6
将变量联系到相应的趋势中(Index0=Trend1,Index1=Trend2,...)。
'testvar1
objCon1.TrendIndex=0
objCon1.TrendTagName="TestArchive\testvar1"
'testvar2
objCon1.TrendIndex=1
objCon1.TrendTagName="TestArchive\testvar2"
注意:
∙更多关于使用VBS或C脚本建立变量变化请参考条目:
10259719
∙更多关于WinCC 在线趋势控件的动态方法及属性设置请参考WinCCInformationSystem:
"使用WinCC">"VBSforcreatingproceduresandactions">"VBSReference">"ObjecttypesoftheScreenItemobject">"Controls">"WinCCOnlineTrendControl"
选择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在线趋势控件。
连接趋势到测量点(WinCCV7.0)的归档变量(如testvar1)。
在图片中插入一个应用程序窗口并且连接到测量点的趋势模板(老板本)。
3
然后相应的调整图像的几何属性和应用程序窗口。
本例中,高350像素,宽550像素。
这个大小是根据画面窗口的大小定的。
4
重复步骤3和4,为其他的测量点创建画面。
将应用程序窗口链接到每一个曲线模板上,然后用测量点的名字保存图像。
5
下一步创建一个新图片,可以用不同的按钮调用不同的趋势。
在这个画面中,为已经建好的画面插入一个宽(550pixels)高(350pixels)的画面窗口。
属性可自由选择。
警告:
不要将画面窗口连接到某个画面,这个工作是运行时动态完成的。
6
在鼠标单击事件中插入如下源代码。
注意根据您的项目更改图片名称。
C动作
SetVisible("Trend_Function_Main","PictureWindow1",1);
SetPictureName("Trend_Function_Main","PictureWindow1","Trend_Function_1.PDL");
VBS动作
DimobjCon1
'createobjects
SetobjCon1=HMIRuntime.ActiveScreen.ScreenItems("PictureWindow1")
'configuration
objCon1.Visible=1
objCon1.PictureName="Trend_Function_1.PDL"
7
现在可以通过PictureTreeManager将画面“Trend_Function_Main.PDL”合并到画面图层。
例子:
为了在项目中可以使用这些图片,必须按照前面“准备”中提到方式建立归档变量“testvar1”和“testvar2”。
此外,将下面三个PDL文件拷贝到项目文件夹下的“GraCS”中。
(...Siemens\WinCC\WinCCProjects\).
此例是在WinCCV.0.中建立的。
ZIP文件中包含了三个PDL文件(WinCC画面)和两个TXT文件(VBSandC脚本)。
如何使用C或VBS脚本通过新变量提供WinCC在线趋势控件的单个趋势?
隐藏订货号显示订货号订货号:
说明:
例如,在初始条件下,过程值归档"TestArchive"中的变量"testvar1"被分配给趋势控件的曲线1(图01)。
图.01
C脚本:
现在按下面的步骤利用C脚本将过程值归档中的变量"testvar2"分配给趋势控件的曲线1。
No.
步骤
1
首先,将在线趋势控件的"Index"属性设置为对应曲线号的数值。
WinCCV6.x和WinCCV7.0
SetPropWord(lpszPictureName,"Control1","TrendIndex",0);
2
将WinCC在线趋势控件(=Control1)中选择出的曲线的"TagName"属性或者TrendTagName设置为新的变量:
WinCCV6.x
SetPropChar(lpszPictureName,"Control1","TagName","TestArchive\\testvar2");
WinCCV7.0
SetPropChar(lpszPictureName,"Control1","TrendTagName","TestArchive\\testvar2");
3
将WinCC在线趋势控件(=Control1)中选择出的曲线的"Command"属性设置为"Reload":
WinCCV6.x
SetPropChar(lpszPictureName,"Control1","Command","Reload");
WinCCV7.0
不需要(趋势自动更新)
VBS脚本:
现在按下面的步骤利用VBS脚本将过程值归档中的变量"testvar2"分配给趋势控件的曲线1。
No.
步骤
1
为WinCC在线趋势控件"Control1"创建一个对象"objCon1" 。
WinCCV7.0
DimobjCon1
SetobjCon1=HMIRuntime.ActiveScreen.ScreenItems("Control1")
2
首先将趋势控件的"Index"属性设置为对应曲线号的数值。
WinCC7.0
objCon1.TrendIndex=0
3
将在线趋势控件(=Control1)中选择出的曲线的"TrendTagName"属性设置为新的变量:
WinCC7.0
objCon1.TrendTagName="TestArchive\testvar2"
注意:
∙如何在运行时分配不同变量给趋势请参考条目ID:
1804857。
∙在任何情况下"Index"代表了在线趋势控件中CurveX的设置(更多信息请参考图形编辑器的在线帮助)。
∙请注意C脚本中变量名和归档名之间必须用"\\"分隔。
如何使用TagPrefix的属性?
隐藏订货号显示订货号订货号:
说明:
在WinCCOnlineHelp中,通过路径“WinCCInformationSystem>WorkingwithWinCC>VBSforCreatingProceduresandActions>VBSReference>Characteristics>T>TagPrefixProperty”,可以看到关于TagPrefix属性的描述。
只有重新加载画面后,对TagPrefix属性的任何更改才生效。
这在画面更改时自动发生;若不然,可以重新指定“PictureName”属性。
下面两个图提供了可能的C和VBS脚本。
如何使用一个通用的C函数来动态的获得对象属性的连接变量?
隐藏订货号显示订货号订货号:
介绍:
使用"GetLinkedVariable()"函数您可以读取连接到对象属性上的变量名称,"GetLinkedVariable()"函数返回的变量名称首先需要检查,检查正确之后您可以利用该变量名称在您的子程序段中根据需要进一步处理,如读写该变量或者修改其他对象的属性。
例子:
读取连接到IO域对象的上“输出值”属性的例子。
{
char*pszVarName=NULL;
charszVarName[_MAX_PATH+1];
//
//Readtagnameofadirectconnection
//
pszVarName=GetLinkedVariable(lpszPictureName,lpszObjectName,"OutputValue");
//
//检查返回值
//
if(strlen(pszVarName)<=0){
printf("Error:
thepropertyisnotlinkedtoaWinCCtag!
\r\n");
}
elseif(strlen(pszVarName)>=sizeof(szVarName)){
printf("Error:
theCtagoccupiestoolittlememorytobeabletoacceptthecompletetagname\r\n");
}
else{
strncpy(szVarName,pszVarName,sizeof(szVarName));
printf("Info:
szVarName=\"%s\"value=%f\r\n",szVarName,value);
//============================================
//
//用户自定义的子程序段
//
//============================================
//Atthispointyoucanprogramyour
//application-specificcode
}
}
GetLinkedVariable:
函数的参数:
∙lpszPictureName:
指向当前画面的指针
∙lpszObjectName:
指向当前对象的指针
∙"OutputValue":
对象属性的名称,该属性上连接着变量
程序流程:
1.GetLinkedVariable函数的返回值返回给程序内部变量pszVarName。
GetLinkedVariable函数不会返回一个空指针,所以必须用strlen检查返回值的长度,
2. 如果返回值有效,将返回值赋值给变量szVarName,赋值长度最长是_MAX_PATH个字符
3.在用户自定义程序中使用该返回值。
触发条件注意:
您需要避免在过程画面中使用周期循环触发,因为这种方式会加大系统负担,触发方式最好选用变量触发。
当您使用变量触发时请确保过程值连接到对象属性上的时候,触发C动作的触发器变量能够正常地发生改变
面板技术如何与画面窗口的"TagPrefix"属性结合使用?
隐藏订货号显示订货号订货号:
使用说明:
可以在组态中使用面板技术。
从WinCCV5版本起,可以使用画面窗口的"TagPrefix"属性。
重要信息:
画面窗口的变量前缀务必与全局定义一致。
这表示画面窗口的变量前缀对在该画面窗口中处理的所有变量或以其它方式(脚本)修改的所有变量均有效。
因此,这些变量必须是结构的一部分,结构名称已经被用户指定为画面窗口的变量前缀。
例如,如果在上述结构之外声明一个名为“Hallo”的变量,并尝试在画面窗口中修改,更改变量名"TagPrefix.Hallo"。
这会导致出错,因为该变量不存在。
请注意当同意画面窗口中的另一个变量前缀时,画面窗口的变量前缀也有效。
对于在第二次定义中处理或以其它方式(脚本)修改的变量,下列解释适用:
"TagPrefix1.TagPrefix2.TagName"。
在该示例中通过变量链接、动态对话框和C语言脚本实现动态化。
动态对话框和C语言脚本均使用变量触发。
变量前缀不仅可以与WinCC结构变量中独立的点一起使用,也可以用于WinCC变量名中的任何点处。
变量前缀也可以用于基本的WinCC变量。
关于动态对话框的注意事项
为了可以使用动态对话框,必须执行下列两点:
∙必须使用"TagPrefix"属性指定点:
示例:
"ampel13."
∙动态对话框检查是否存在变量。
因此,必须为结构的每个成员变量重新创建一个常规变量。
示例:
该结构有三个成员:
"red"、"yellow"和"green"。
必须另外创建三个变量:
"red"、"yellow"和"green"。
该面板技术的优点
无需使用任何不必要的C语言脚本。
变量触发也确保实现卓越的性能。
关于修改变量前缀的注意事项
请注意,只有当在画面窗口中修改了画面时,修改变量前缀才能在该画面窗口中生效。
这已经在这个样例项目中实现了。
欲知详情,请参见图形编辑器在线帮助中的画面窗口"TagPrefix"属性。
怎样通过登陆/退出(logon/off)来关闭已打开的面板(faceplates)?
隐藏订货号显示订货号订货号:
描述:
用户经常在登陆以后设置面板(faceplates)。
例如,用户名保存在"StaticText"对象的"Text" 属性中。
根据面板的设置, 可能会发生以下情况,当切换用户后当前保存的用户权限并没有被修改。
在实际运用中,可能意味着未被授权的动作会被执行,或者由于当权用户没有这个权限而不能执行某些开关动作。
补救:
∙切换用户后面板将被关闭并且重启。
∙不要保存当前用户的登陆信息。
每次用户操作,对于当前登陆用户总是做直接查询。
注解:
∙在某种情况下,例如:
SafetyMatrix面板。
∙如果你使用了BasicProcessControl选件(例如使用PCS7或者OS项目编辑),当切换用户时面板默认会被关闭。
这个行为的详细信息和授权的检查请参考条目ID16626380.
∙如果是标准wincc,你必须手动配置面板的管理(打开和关闭画面窗口)。
根据"@CurrentUser"标签的变化触发全局脚本,登录/登出时,全局脚本动作将会自动关闭已打开的画面窗口。
下图显示怎样去构造一个切换用户后被执行的C动作。
动作中定义的画面被重新加载成一个开始画面。
如果画面窗口的属性"Display"的静态属性是"False",那么画面窗口会根据切换用户而关闭。
补充:
在脚本中,可以通过ODK函数从用户管理查询权限设定。
条目ID27068495指出怎样在脚本中使用ODK函数"PWRTCheckPermission()"来查询权限
WinCC7.0中,如何在运行系统中通过脚本来改变对象颜色(背景,边框,文本)?
隐藏订货号显示订货号订货号:
说明:
从WinCC7.0开始,包含32位值的颜色也支持颜色透明度。
有两种组态颜色的方法可以被用来在运行系统中使用脚本通过alpha通道/透明度来改变对象颜色(背景,边框,文本)。
1.在中央调色板指定颜色
除了传统颜色,WinCC7.0还允许您创建您自己的颜色调色板。
您可以为一个项目创建10个颜色调色板,每个调色板可以包含20种颜色。
颜色调色板中的颜色可以通过脚本及指派对象颜色(如文本颜色)来使用。
这适用于常用颜色及需要统一改变的颜色,例如在颜色调色板中改变一种颜色后,指派到该颜色的对象颜色(如文本颜色)也就随之改变了。
2.通过数值指定颜色
WinCC7.0允许您使用脚本来创建一个颜色值并将该值赋给一个对象颜色(如文本颜色)。
这适用于颜色很少使用及更改传统颜色或颜色调色板不影响创建的颜色的情况。
警告:
为了改变一个对象的颜色,“Centralcolorscheme”属性必须被取消使能。
您可以在图形编辑器中设置该属性。
∙打开图形编辑器。
∙右击相关对象并点击“属性”。
∙单击“属性”标签并双击“按钮”>“显示”。
∙在打开的窗口中更改属性。
要求:
∙WinCC7.0
分配一个中央调色板中的颜色:
序号
步骤
1
创建对应于项目的颜色调色板:
∙在树形视图中右击项目名称然后单击“属性”来打开项目属性。
∙选择“UserInterfaceandDesign”标签并单击“中央颜色调色板”(参见图01:
位置1)右侧的“编辑”按钮。
∙单击“创建颜色调色板”然后单击“重命名颜色调色板”(参见图01:
位置2)。
∙为项目调色板输入一个名字(如TestColor)。
2
向调色板中添加颜色:
∙使用滚动条(透明度,红,绿和蓝)来设定所需要的颜色,或在相关输入域中输入RGB值和透明度(参见图01:
Transparency=0;Red=30;Green= 15;Blue=170)。
∙单击“ToPalette”按钮然后单击颜色调色板中的号码(如2)。
图01
∙然后单击“OK”来确认这两个对话框。
3
创建C脚本:
∙在树形视图中右击“全局脚本”然后单击“打开C编辑器”。
∙在菜单栏中单击“文件”>“创建新项目函数”,并使用C脚本中的Part1来替代函数模板中的内容。
图02
∙单击“File”>“Save”,输入一个名字并单击“OK”按钮。
∙单击“Yes”来确认所做的设置并关闭C编辑器。
4
通过单击鼠标来改变背景颜色:
∙在树形视图中单击“图形编辑器”并单击您的项目画面从而打开它。
∙通过在对象模板中选择“标准”>“窗口对象”>“按钮”来添加一个按钮到画面中。
∙右击插入的按钮然后单击“属性”,属性对话框被打开。
∙单击“事件”标签并双击“按钮”>“鼠标”。
∙在“鼠标单击”行右击“动作”列,然后单击“C动作...”。
∙使用C脚本中的Part3来替代绿色的注释行。
图03
∙同时使用要改变其背景颜色的对象名称来替代名称“Testobjekt”(图03:
位置1)。
∙使用来自项目颜色调色板(例2)中新的背景颜色号来替代数字4(图03:
位置2)。
∙单击“OK”来确认对话框,关闭属性对话框并关闭画面。
注意:
如果您没有使用按钮,Part3必须要在一个动作中被调用。
使用数值指定颜色:
序号
步骤
1
创建C脚本:
∙在树形视图中右击“全局脚本”然后单击“打开C编辑器”。
∙在菜单栏中单击“文件”>“创建新项目函数”并使用C脚本中的Part1来替代函数模板中的内容。
图04
∙单击“文件”>“保存”,输入一个名字并单击“OK”按钮。
∙在菜单栏中单击“文件”>“创建新项目函数”并使用C脚本中的Part2来替代函数模板中的内容。
图05
∙单击“Yes”来确认设置并关闭C编辑器。
2
通过单击鼠标来改变背景颜色:
∙在树形视图中单击“图形编辑器”并单击您的项目画面从而打开它。
∙通过在对象模板中选择“标准”>“窗口对象”>“按钮”来添加一个按钮到画面中。
∙右击插入的对象然后单击“属性”,属性对话框被打开。
∙单击“事件”标签并双击“按钮”>“鼠标”。
∙在“鼠标单击”行右击“动作”列,然后单击“C动作...”。
∙使用C脚本中的Part4来替代绿色的注释行。
Bild06
∙同时使用要改变其背景颜色的对象名称来替代名称“Testobjekt”(图06:
位置1)。
∙使用需要的颜色所对应的RGB值和透明度(本例中为30(红),15(绿),170(蓝),50(透明度))来替代值255,60,100,30(图06:
位置2)。
∙单击“OK”来确认对话框,关闭属性对话框并关闭画面。
注意:
如果您没有使用按钮,Part4必须要在一个动作或函数中被调用。
如下的TXT文件包含了所需的4部分C脚本。
--------------------Teil1-----------------
longGetPaletteColor(intColorIndex)
{
if(ColorIndex>199)
ColorIndex=199;
returnpow(2,31)+Co