问题:
简写符 lpszPictureName,lpszObjectName 和 lpszPropertyName 是什么意思?
解答:
在WinCC中可以集成用户可自定义的功能。其脚本语言在Kernighan/Ritchie编著的“Programming in C”一书中有描述。该语言的定义是ANSI C定义的基础。
用户功能可用如下的脚本方式表示:
对象功能:
建立到一个图形显示中,并且十分典型的,被附到一个图形对象属性中。
全局功能:
以受运行时间控制或事件控制的方式编制的例程,不受被调用图片的影响。
创建对象功能时,会对相关的脚本创建一个标准标题。它包含有图片系统供脚本在运行时可用的接口信息。
Fig. 1 图形编辑器的参数化 ( 24 KB )
这里是简写符 lpszPictureName, lpszObjectName 和 lpszPropertyName 出现的地方。这三个简写符均给出有关脚本运行位置的信息。因此在以运行系统中,图形系统提供如下信息:
lpszPictureName 图片名
lpszObjectName 对象名
lpszPropertyName 对象属性名
比如说,如果:
在一幅图片中 “BEISPIELBILD”
在I/O域中 放有“EA-Feld1”,“EA-Feld2”和“EA-Feld3”并且
在属性中 脚本I/O域的“OutputValue”为简单的脚本
当 ?b>return lpszPictureName;?,?b>return lpszObjectName;? 或 ?b>return lpszPropertyName;? 运行时,然后当你在运行系统中选择图片“BEISPIELBILD”时,在I/O域中显示输出值“BEISPIELBILD”,“EA-Feld2”或“OutputValue”:
Fig. 2 运行系统( 2 KB )
这里需注意,图片名和对象名可在组态中按所希望的预先组态好,但属性名由系统预定义并以英文显示。(这就是为何在I/O域 3 中为英文输出值而非德文)
注意事项:
在实例中所示的德文术语“BILDFENSTER”,“EA-Feld1”和“BEISPIELBILD”其含义分别为:“图像窗口”,“I/O域”和“实例图片”。
如果现在将简单的对像动作 ?b>return lpszPictureName;? 附到一个I/O域的对象属性输出中,就可以把它储存到库中并且,再从那里不做任何改变的将它插入到任何想要插入的图片中。然后在运行系统中,每次所选图片的名字将被显示。
脚本函数的寻址
通过浏览器,WinCC图形编辑器提供了大量的 C 函数,在那里可以将其标记,选择,参数化及建立到一个脚本中。在下面的实例中,画面中有一个按钮,这个按钮用来在点击鼠标时改变对象的背景色。完成这一步可采用的函数是 SetBackColor(..),把它从功能浏览器中选出然后传送到“鼠标单击脚本”。如果是标准参数,则函数开始看来象:
SetBackColor(lpszPictureName,lpszObjectName,lBackColor);
第一个参数指出要改变背景色的对象位于哪一幅图片。第二个参数指出对象名,第三个参数则为颜色值,在这个实例中,颜色值已被设置为CO_RED:
Fig. 3 在脚本里寻址 ( 28 KB )
现在,在本例中,前面的两个参数保持不变。脚本被附到图片中的按钮上,使系统可在运行时传送按钮对象名及用lpszObjectName 和 lpszPictureName 传送图片名。这样,改变颜色的名称通过按钮本身可完成。如果用一个不同的对象名替换第二个参数 lpszObjectName,那么那个对象的颜色就会随它而改变(见图4):
Fig. 4 寻址到另一个对象 ( 8 KB )
在图像边界外寻址
在函数 SetBackColor( lpszPictureName, "EA-Feld2", CO_RED )中,当然可以给图片指定任何想要的名字,这个名字以后会替换 lpszPictureName 的缺省参数。如果在一个图片窗口中放了一幅图片,而该图片中又调用了另一个图片的话,这种做法很有用。
例如,如果在指定的第二幅图片中(这里是“BEISPIELBILD2”),里面放置了一个I/O域。该I/O域的输出值附有对象动作 ?b>return lpszPictureName;?,而且该图片以后被在图片窗口中的“BEISPIELBILD”图中调用。那么在运行时你可看到:
Fig. 5 在图像窗口中寻址( 4 KB )
现在在 BEISPIELBILD2 的 I/O 域中可看到图片名 BEISPIELBILD.BILDFENSTER1:BEISPIELBILD2。这就是lpszPictureName,是图片在图片窗口中被调用时图形系统将它返回到输出值中。 这里可看到寻址时创建的路径。
假定在图像中有一个图片窗口,在这个窗口中通过同样的输出脚本 ?b>return lpszPictureName? 调用了另一幅名为BEISPIELBILD3 的图片,那么就会显示出简写符 BEISPIELBILD.BILDFENSTER1:BEISPIELBILD2.BILDFENSTER1: BEISPIELBILD3。因此,命名的一般规则为:
[图像名 1].[图像窗口名 1]:[图像名 2].[图像窗口名 2]: ... .[图像窗口名(n-1)]:[图像名(n)]
如果现在想用 BEISPIELBILD 图片中的按钮来改变 BEISPIELBILD2 图片中I/O域的颜色,可选择脚本命令:
SetBackColor("BEISPIELBILD.BILDFENSTER1:BEISPIELBILD2","EA-Feld1",CO_RED);
另一个选件显示在图6中。
Fig. 6 已获得寻址的功能参数 ( 10 KB )
这里脚本中目标由发出调用的图像的名,图像窗口的名和被 GetPictureName()所采集到的,并被在该图像窗口里调用的图像名所组成。该目标是图像窗口的一个对象属性。这是在运行时首先采集函数参数,然后又执行它们的一个实例。
函数 SetBackColor()只是使用 lpszPictureName, lpszObjectName 和 lpszPropertyName 这些缺省参数的众多函数中的一个。
步骤是相同的:
SetOutputValueDouble(lpszPictureName,lpszObjectName,dValue) ? 将浮点值写入一个I/O域中。
SetLeft(lpszPictureName, lpszObjectName,dwValue) ? 设置一个对象的 X 轴位置。
通过函数浏览器还可以在脚本中使用其它许多的函数。要操作的属性已包含在这些函数的名字中。如:SetOutputValueDouble() 中的输出值或在SetLeft()的左边。
通过 SetPro.(..) 函数中的浏览器,也可找到他们的一般形式:
SetPropBOOL (lpszPictureName, lpszObjectName, lpszPropertyName, Value);
SetPropChar (lpszPictureName, lpszObjectName, lpszPropertyName, Value);
SetPropWord (lpszPictureName, lpszObjectName, lpszPropertyName, Value);
SetPropDouble(lpszPictureName, lpszObjectName, lpszPropertyName, Value);
这些函数总是跟在询问:在哪幅图片中的哪个对象上,应该写哪一种属性(或通过GetProp读取哪一种属性)之后。因此函数调用
SetBackColor("BILDFENSTER", "EA-Feld1", "CO-RED");
具有同 SetPropWord("BILDFENSTER", "EA-Feld1", "BackColor", "CO-RED")完全一样的含义