WinCC中的画面模板介绍画面模板是WinCC做画面组态的常用工具。现实工作中经常遇到多个设备需要显示相同参数(组)的情况。使用画面模板,可以避免反复组态相同画面布局的工作,减少项目后期某些细节部位的修改而带来的工作量;画面模板与结构变量的配合使用,可以在一个画面中根据条件显示具有相同类型参数的多个对象(如电机),极大地丰富了画面信息。下面列出了四种不同的实现方式:用户自定义对象画面原型使用变量前缀的画面窗口使用动态向导的画面窗口1.用户自定义对象图1所示为用户自定义对象的样例用户自定义对象是由多个WinCC对象组合而成的,可以挑选其中的某些用户需要的属性作为用户自定义属性,因此生成的新对象可作为模板连接不同的变量,这种模板不适用于结构变量。观看制作演示请双击下面的压缩文件,运行其中的可执行文件。用户自定义对象a.rar2.画面原型图2所示为画面原型的样例在用户自定义对象的基础上,如果要支持结构变量的使用,可以用动态向导的方法来简化工作。如例子所示,首先做好自定义对象的模板,利用标准动态下的”Adddynamicstotheprototype”在输入输出值属性里连接结构变量,将这个模板拷贝成多份,分别创建标准动态下的“Linkaprototypetoastructureorrenameanexistinglink”,在创建的过程中,您可以选择和原型结构类型相同的其它前缀,用这个模板迅速生成连接不同结构变量的自定义对象。观看制作演示请双击下面的压缩文件,运行其中的可执行文件。画面原型a.rar注:以上两种方式主要用于一些对象集合需要多次使用,连接多套参数的情况,但是不能使用脚本,动态对话框等,如果要实现复杂的功能,则需要画面窗口。画面窗口也分为两种实现方式,使用变量前缀型和动态向导型。3.使用变量前缀的画面窗口图3所示为画面窗口的样例这是本篇讲述的重点,因为画面窗口作为模板来使用,它所提供的功能最丰富,也最灵活。标准做法是首先组态好在画面窗口对象要调用的模板画面,其中的对象连接变量为结构变量的元素名(如Structure.a,则连接名为a),连接包括“变量连接“,”直接连接”,“动态对话框”和C脚本(小技巧:作动态对话框或C-脚本中的变量连接时,如果只连接元素名,系统会因为找不到这个变量而报警告,可以预先生成内部变量a用于连接)。然后在主画面中组态画面窗口对象,画面名称选择模板画面,变量前缀可以静态定义或者动态定义为相应的结构变量前缀。关键步骤的做法演示如下:I.结构变量的做法演示:结构变量a.rarII.使用项目中已经生成的结构变量演示画面模板的做法:画面窗口a.rarIII.若要动态修改画面窗口的变量前缀,有两种方法可以实现,基本思路都是先给变量前缀重新赋值,然后给画面名称重新赋值。方法一演示,变量前缀更改的事件触发画面名称的重新赋值动态修改变量前缀a.rar方法二演示,利用SetPropChar修改画面窗口的TagPrefix属性1)重新设置相关图片窗口的“变量预设定”,如:SetPropChar(TestPicture,TestPictureWindow,TagPrefix,TestTagPrefix.).2)然后重设图片窗口的“图片名”属性。重要的是图片窗口的“图片名”属性的赋址。如:SetPropChar(TestPicture,TestPictureWindow,PictureName,TestPictureWindowPictureName)或SetPictureName(TestPicture,TestPictureWindow,TestPictureWindowName).参数说明:TestPicture图片名,在该图片名中图片窗口对象被调用TestPictureWindow图片窗口对象名TestTagPrefix.新变量前缀名,该前缀将在图片窗口中与元素合并为完整的变量名称。TestPictureWindowName显示在图片窗口中的图片的名字TagPrefix图片窗口的“变量预设定”属性PictureName图片窗口的“图片名”属性脚本切换变量前缀a.rar注:使用变量前缀的缺陷是它会在画面窗口中所有变量出现的地方都加载变量前缀,后面我们将会有一节讲述如何在带有变量前缀的画面窗口对象中避免变量前缀。4.使用动态向导的画面模板图4所示为利用动态向导做得画面模板的样例首先模板的做法和第三种方法一致,先在模板画面中组态好要用到的对象,但是不用连接变量,画面做好后保存,如module.pdl。然后点击该模板画面背景,创建画面模板的动态向导,双击动态向导Picturemodules下的PictureModuletemplate-V1.14,出现对话框要求连接画面中的对象与结构变量元素的连接,动态向导创建完成后会生成一个新的模板画面@TYPE_module.pdl,这个画面与于原来画面的不同在于它的变量前缀不用写在画面窗口的变量前缀属性里,新模板上方有一个蓝色的输入输出域,它可以连接WinCC中任意一个字符串型的变量,修改这个字符串的值为某一个变量前缀,则画面窗口中元素名前会自动加载这个前缀名,从而显示结构变量。或者可以利用动态向导Picture-Moduleinstances–V.1.14给画面模板加载前缀。使用演示:动态向导生成画面模版a.rar动态向导在蓝色输入输出域中加入的脚本,实现了对象属性和变量的连接。#includePicBlck.hTypeConnectionTable={Button2,Visible,1,0,.PA_0,IOField1,OutputValue,1,0,.PA_0,StatusDisplay1,Index,1,0,.PA_0,};LinkInstance;但是,这种方法的元素名连接只限于与对象属性之间的,不能用于动态对话框,直接连接或者脚本,所以如果画面窗口中有不希望加载变量前缀的对象或者事件,可以用这种方法实现。如果用户不想在画面窗口中显示那个蓝色的变量前缀名,可以使用画面窗口的画面Y偏移量来调整,隐藏这个对象。注:一般情况下,如果不做特殊设置,画面窗口中从变量管理器添加过来的变量都会自动添加变量前缀,如果用户希望使用全局变量,则必须对对象或变量进行特殊处理才能实现,共有三种方法可用,分述如下:1.利用Get/SetOutputValue函数获得父窗口输入输出域的输出值。(如果不想在主窗口里显示,可以利用偏移量隐藏这个对象)在画面窗口中的I/O域输出中加C脚本:{char*pszPicName=NULL;charszPicName[_MAX_PATH+1];pszPicName=GetParentPicture(lpszPictureName);//获得父窗口的画面名称if(pszPicName!=NULL){strncpy(szPicName,pszPicName,_MAX_PATH);}returnGetOutputValueDouble(szPicName,IOField1);//将父画面中的IO域的值取出并返回}使用演示:变量前缀避免方法一a.rar2.使用全局C变量图5所示为全局C变量的样例凡是在画面窗口的脚本中使用变量,通常也会自动添加变量前缀,若要使用全局变量,使用下述方法处理既可。在项目函数外部定义变量,需要使用的时候在脚本里先声明再使用如:intglobal_c_var=0;voidglobal_var(){}画面窗口的脚本:{....externglobal_C_var;.......}使用演示:全局C脚本变量a.rar3.利用间接寻址画面窗口里要显示全局变量的IO域连接字符串型变量,间接寻址。在主窗口里用脚本将全局变量的名字赋值给TagPrefix1.VarName使用演示:间接寻址a.rar加一些操作效果,使选中按钮高亮显示并且不可再操作按钮效果a.rar