刚开始认真学习WinCC,有什么不妥的地方欢迎指正。
LBP的弹窗设计很有意思(我自己觉得),不仅能够做到一般的根据全屏画面尺寸处理边缘弹窗位置,还能 实现根据弹窗中的子画面尺寸来改变弹窗尺寸。
(发现不能发gif图片)
学习中发现其实LBP在实现脚本方面做的不太理想,于是我动手重新设计了脚本。目的是让后续的弹窗复用尽量减少需要改变的脚本,我们知道虽然设计出了一个部件,但要复用完全不像其他软件只需简单给几个参数就行的,需要修改的脚本仍然让人直觉得恶心。虽然有变量替换之类的大招,但不能完全做到替换。
上部三个按钮分别对应三个不同的画面窗口,尺寸可能是不一样的,其中报警子画面是公共画面,放在公共目录中。有公共的画面尽量设计成公共的,免得设置画面名称麻烦。主画面中还有一个二次确认画面, 不方便设计成公共的。
为了减少设置子画面窗口的绑定画面名称步骤,在主画面中放置三个IO域控件,打开画面时把子画面窗口的画面名称设置成IO域的Outputvalue,这样就只需要设置这几个IO控件的输出值,并且可以直观地在设计界面查看画面名称,而不需要查看属性。

-----------------------------------------------
主画面会根据子画面窗口内的画面尺寸改变自己的尺寸,这里在主画面的高宽属性改变事件中添加处理脚本来修改主画面上的一些需要重新排列位置的图标参数。

----------------------------------------------------------
子画面窗口的画面上,添加打开画面事件,自动调整主画面窗口的尺寸,也就是最开始的弹窗尺寸。

和主画面处理该事件不同的是这里是修改主弹窗尺寸,而不是位置。
我不知道如何在画面打开事件中获取画面的对象,只能设计一个谁都不用的方框recMask来获取,如果使用画面上的控件也可以,但如果设计中删除了这个控件就有连带风险。
-----------------------------------------------------------
这样就设计出了所需要的功能:打开子画面引发修改弹窗尺寸,弹窗尺寸改变引发修改弹窗位置和主画面一些布局。
这个功能复用在不同部件上时只需要修改几个IO域控件的输出值即可。
----------------------------------------------------------------
和主功能类似,参数设置画面中只有一个子画面窗口,分别根据左右按钮绑定不同的画面。
需要说明的是,没有实现子-子画面改写弹窗尺寸的功能,只实现了二级画面改变弹窗尺寸。所以参数设置画面的几个子画面需要一样的尺寸。
打开配置画面时绑定ioPic1设置的画面名称。

画面窗口名称改变时设置左右按钮的Enable和颜色:
这里使用的是svg控件,颜色显示通过自己的属性来设置。

原本这个SVG控件的thisStation和opStation属性是用来根据操作站锁定的不同来改变自己的颜色的,这里是借用。操作站锁定我通过覆膜来处理可操作性。
这样子子画面的切换也可以只设置IO域控件的输出值来简单设置了。
----------------------------------------------------------------------------
如果要复用,只需设计好画面,设置IO域输出值即可实现框架了。
------------------------------------------------------------------
配置画面的左右按钮事件处理也只需简单给画面窗口绑定IO域控件值。
这里是右按键的处理:
Sub OnClick(Byval Item)
Dim pic1, pic2, pic3
pic1 = ScreenItems("ioPic1").OutputValue
pic2 = ScreenItems("ioPic2").OutputValue
pic3 = ScreenItems("ioPic3").OutputValue
If ScreenItems("swConfig").PictureName = pic1 Then
ScreenItems("swConfig").PictureName = pic2
Elseif ScreenItems("swConfig").PictureName = pic2 Then
ScreenItems("swConfig").PictureName = pic3
Elseif ScreenItems("swConfig").PictureName = pic3 Then
ScreenItems("swConfig").PictureName = pic3
End If
End Sub