zoukankan      html  css  js  c++  java
  • WinCC的画面使用技巧

    以下内容以VB脚本为主,仅在VB脚本无法实现的功能中使用C脚本。

    画面导航

    画面导航的作用是打开起始画面、前一张画面和后一张画面等,只能用C脚本实现。

    • 打开起始画面:    OpenHomePicture(); 
    • 打开前一张画面: OpenPrevPicture(); 
    • 打开后一张画面: OpenNextPicture(); 
    • 存储画面:      StorePicture(); 
    • 打开存储画面:    OpenStorePicture(); 

    切换画面窗口中的画面

     WinCC通过“画面窗口”控件将其他画面嵌套显示在另一个画面中 ,可以根据需要让“画面窗口”显示不同的画面。

    “画面窗口”控件通过写入不同的画面名称调用不同的画面。“画面窗口”控件有两个属性跟画面名称相关,分别是ScreenName和PictureName,这两个属性有什么区别呢?

    '画面名称不能带后缀名
    ScreenItems("Window1").ScreenName = "Newpicture"
    ScreenItems("Window1").PictureName = "Newpicture"

     通过ScreenName属性切换画面后,使用 OpenPrevPicture() 切换到上一个画面将会回到切换画面之前,而用PictureName属性切换画面,WinCC的画面导航中不会记录这次画面的切换,使用 OpenPrevPicture() 切换到上一个画面实际是回到了上上个画面。

    通过一个实验更清楚的了解这个结论,用一个画面窗口引用三个画面,这三个画面分别标为A、B、C,用ScreenName和PictureName各做两个切换按钮。

    (1)初始画面为A;

     

    (2)使用ScreenName切换到画面B;

     

    (3)使用ScreenName切换到画面C;

    (4)使用OpenPrePicture()返回前一个画面,此时返回到画面B,ScreenName属性切换的画面是有导航路径记录的;

     

    (5)使用PictureName切换到画面C;

     

    (6)使用OpenPrePicture()返回前一个画面,此时返回到画面A,PictureName属性切换的画面没有导航路径记录,事实上返回到了第4步的上一张画面,第4步是画面B,所以上一张画面是画面A。

    如何切换基画面

    WinCC图形系统运行时第一张打开的画面就是基画面,没有画面窗口控件可以操作基画面,如何切换基画面?

    WinCC的VB脚本中的HMIRuntime对象的BaseScreenName属性保存了基画面的画面名称,通过修改 HMIRuntime.BaseScreenName 属性可以切换基画面。当调用画面时会自动加上画面后缀名,因此画面名称中不要添加 .pdl 后缀名,否则会报错。

    '画面名称不能带有后缀名
    HMIRuntime.BaseScreenName = "NewPicture"

    如何引用父窗口的对象

    在画面窗口中引用了一个画面,点击嵌套画面中的按钮后切换自身的画面,如何做?

     WinCC的VB脚本中有Parent对象,Parent对象即为当前脚本环境的父对象,当在嵌套的画面的按钮中调用Parent对象,Parent对象就是引用该画面的画面窗口对象。

    于是用以下代码就可以调用画面窗口的ScreenName属性。

    Parent.ScreenName = "NewPicture"

    同样还可以将画面窗口设成不可见,这样能够用画面窗口实现显示一个对话框,然后关闭对话框的效果。

    Parent.Visible = False

    如果要引用上层画面中的对象,这时就需要连续使用两个Parent对象。第一个Parent表示画面窗口,第二个Parent表示画面窗口所在的画面,然后再用 ScreenItems() 方法引用画面上的控件。

    Parent.Parent.ScreenItems("矩形1").BackColor = RGB(0,255,0)

     如下,点击嵌套画面中的按钮,修改基画面上矩形控件的背景颜色。

    如何引用画面窗口中的画面的控件

    如何在基画面中执行脚本,修改嵌套画面中的控件属性呢?

    在WinCC的VB脚本中,画面窗口控件有Screen属性,该属性即为画面窗口引用的画面对象,通过Screen属性可以引用嵌套画面中的控件。

    Dim SubScreen
    Set SubScreen = screenItems("Window1").Screen
    SubScreen.ScreenItems("矩形1").BackColor = RGB(0,255,0)

     如下,点击基画面中的按钮,修改嵌套画面中矩形控件的背景颜色。

    如何引用多层嵌套画面窗口中的控件

    方法之一是用 screenItems().Screen.screenItems().Screen 去调用嵌套画面,这样太麻烦,更简单的方法是用 HMIRuntime.Screens("win1.win2") ,函数参数是画面窗口的控件名,嵌套的画面窗口用点 . 分隔。

     HMIRuntime.Screens() 函数使用的是画面窗口的绝对路径,即从基画面开始排序画面窗口控件名。假设嵌套了两层画面,画面窗口名分别为win1、win2,不管是在基画面中执行代码,还是在win1画面中执行代码,代码都是 HMIRuntime.Screens("win1.win2") 。举个更具体的例子,如果在同一个画面中使用了两个画面窗口,假设它们的嵌套关系为 win1.win2 和 win3.win4 ,win1和win3两个画面窗口同在基画面中,在win4的画面中执行代码,修改win2画面中控件的属性,那么它的代码还是 HMIRuntime.Screens("win1.win2") ,如果用 Parent 和 ScreenItems().Screen 方法,就要写很长的相对路径了。

    如下,嵌套了三层画面窗口,画面窗口的控件名分别是Window1、Window2、Window3,矩形控件在Window3引用的画面中,点击基画面的按钮,修改嵌套画面中控件的颜色。

    Dim SubScreen
    Set SubScreen = HMIRuntime.Screens("Window1.Window2.Window3")
    SubScreen.ScreenItems("矩形1").BackColor = RGB(0,255,0)

    为画面添加变量前缀或服务器前缀

     有这样一种情况,有两组或多组变量,假设其中一组变量名为A_tag1、A_tag2、A_tag3,另一组变量名为B_tag1、B_tag2、B_tag3,绑定这两组变量的画面完全一样,只是绑定的变量名不同。能否只做一张画面,根据需要显示不同的变量?

    画面窗口提供了两个属性:变量前缀和服务器前缀。写入了变量前缀后,在运行时画面窗口引用的画面中所有的变量都会添加上变量前缀;写入服务器前缀后,引用的画面中所有变量和嵌套的画面都会添加上服务器前缀,即从服务器调用变量和画面。

    上面的例子中,只需做一张画面,其中变量名为tag1、tag2、tag3,显示第一组变量就用带有变量前缀 A_ 的的画面窗口,显示第二组变量就用 B_ 的画面窗口,运行时会自动给变量添加上前缀再调用。

    调用不带前缀的变量

     画面窗口添加变量前缀属性后,所有变量都有了前缀,有时个别变量不需前缀,例如在画面中调用系统变量 @CurrentUser 显示当前登录的用户就不能加前缀,如何取消这些变量的前缀?

    • 取消变量前缀:@NOTP
    • 取消服务器前缀:@NOSP
    • 取消变量前缀和服务器前缀:@NOP

    在变量前面添加以上标签,即使画面窗口有前缀,该变量也是调用不带前缀的版本。以读取不带前缀的 @CurrentUser 变量为例。

    HMIRuntime.Tags("@NOP::@CurrentUser").Read
  • 相关阅读:
    跃迁方法论 Continuous practice
    EPI online zoom session 面试算法基础知识直播分享
    台州 OJ 2648 小希的迷宫
    洛谷 P1074 靶形数独
    洛谷 P1433 DP 状态压缩
    台州 OJ FatMouse and Cheese 深搜 记忆化搜索
    台州 OJ 2676 Tree of Tree 树状 DP
    台州 OJ 2537 Charlie's Change 多重背包 二进制优化 路径记录
    台州 OJ 2378 Tug of War
    台州 OJ 2850 Key Task BFS
  • 原文地址:https://www.cnblogs.com/yada/p/11775662.html
Copyright © 2011-2022 走看看