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(,,)
如下,点击嵌套画面中的按钮,修改基画面上矩形控件的背景颜色。
如何引用画面窗口中的画面的控件
如何在基画面中执行脚本,修改嵌套画面中的控件属性呢?
在WinCC的VB脚本中,画面窗口控件有Screen属性,该属性即为画面窗口引用的画面对象,通过Screen属性可以引用嵌套画面中的控件。
- Dim SubScreen
- Set SubScreen = screenItems("Window1").Screen
- SubScreen.ScreenItems("矩形1").BackColor = RGB(,,)
如下,点击基画面中的按钮,修改嵌套画面中矩形控件的背景颜色。
如何引用多层嵌套画面窗口中的控件
方法之一是用 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(,,)
为画面添加变量前缀或服务器前缀
有这样一种情况,有两组或多组变量,假设其中一组变量名为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
WinCC的画面使用技巧的更多相关文章
- Angularjs启动入口, splash画面,与加快启动的技巧
Angularjs启动入口, splash画面,与加快启动的技巧 Angularjs启动入口 * 自动响应DOMContentLoaded event * 从ngApp指定的入口启动: 在angula ...
- Wincc flexable的画面浏览切换组态
1.新建项目和6个画面 2.双击导航控件设置,选择默认设置 3.使用画面浏览编辑器编辑画面层次切换关系,拖拽画面到编辑器中进行关系连接 4.保运并运行
- 【VC编程技巧】窗口☞3.5对单文档或者多文档程序制作启动画面
(一)概要: 文章描写叙述了如何通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于 ...
- 为你的Web程序加个启动画面
.Net开发者一定熟悉下面这个画面: 这就是宇宙第一IDE Visual Studio的启动画面,学名叫Splash Screen(或者Splash Window).同样,Javar们一定对Eclip ...
- Marmoset Toolbag中的角色布光技巧 by Joe”EarthQuake”Wilson
Sagat by Tim “spacemonkey” Appleby 有言在先 首先,我要感谢才华横溢的Tim“spacemonkey Appleby允许本教程中使用他那个极其NB的Sagat模型.不 ...
- 工欲善其事,必先利其器 之 WPF篇: 随着开发轨迹来看高效WPF开发的工具和技巧
之前一篇<工欲善其事,必先利其器.VS2013全攻略(安装,技巧,快捷键,插件)!> 看到很多朋友回复和支持,非常感谢,尤其是一些拍砖的喷油,感谢你们的批评,受益良多. 我第一份工作便是W ...
- iOS 保持界面流畅的技巧 (转载)
这篇文章会非常详细的分析 iOS 界面构建中的各种性能问题以及对应的解决思路,同时给出一个开源的微博列表实现,通过实际的代码展示如何构建流畅的交互. Index 演示项目 屏幕显示图像的原理 卡顿产生 ...
- 如何让iOS 保持界面流畅?这些技巧你知道吗
如何让iOS 保持界面流畅?这些技巧你知道吗 作者:ibireme这篇文章会非常详细的分析 iOS 界面构建中的各种性能问题以及对应的解决思路,同时给出一个开源的微博列表实现,通过实际的代码展示如 ...
- Linux命令--top使用技巧
摘自 http://www.jb51.net/LINUXjishu/151995.html top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况,类似于Windows的 ...
随机推荐
- centos_redis 安装脚本
#!/bin/bash # change to root echo "start to install build env..." sudo yum groupinstall &q ...
- Liu Junqiao:工作中用到的命令以及问题汇总
工作中用到的命令以及问题汇总 2019-11-29 查看系统运行时间,这个问题是因为我们在阿里云上有个机器,在某一天发现这台机器上有的服务莫名奇妙的停了,然后排查时怀疑机器被重启过用如下如下命令查看了 ...
- 【西北师大-2108Java】第十二次作业成绩汇总
[西北师大-2108Java]第十二次作业成绩汇总 作业题目 面向对象程序设计(JAVA) 第14周学习指导及要求 实验目的与要求 (1)掌握GUI布局管理器用法: (2)掌握Java Swing文本 ...
- C语言结构选择语句
总结一下常用的if else与switch,其中switch中的break知识点是笔试题经常考到的内容. if else与else if 在C语言中,经常使用if else选择语句,来实现很多对应的功 ...
- jQuery 源码解析(二十八) 样式操作模块 scrollLeft和scrollTop详解
scrollLeft和scrollTop用于获取/设置滚动条的,如下: scrollLeft(val) ;读取或设置整个页面的水平滚动条距离 scrollTop(val) ;读取或设置整个页面的垂直滚 ...
- idea实战技巧
一.背景 为什么想写这个,因为编码一线更多的是实战,实战中,可能一个快捷键,一个小技巧,就能省很多时间. 本文会持续记录,持续更新. 二.技巧 1.全局替换(带正则) 场景是: 多profile的情况 ...
- Linux系统:centos7下搭建ElasticSearch中间件,常用接口演示
本文源码:GitHub·点这里 || GitEE·点这里 一.中间件简介 1.基础概念 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于R ...
- Mysql高手系列,连载中
Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 欢迎大家加我微信itsoku一起交流java.算法.数据库相关技术. 第1篇:mysql基础知识 第2篇:详解mys ...
- ubuntu安装gcc不同的版本
服务器ubuntu14.04安装ns3.29中,显示gcc版本过低 使用apt-get安装失败,ubuntu14.04默认安装gcc4.8.4,无法下载更高级的gcc版本 先找到资料1,脚本尝试了,下 ...
- Java后端高频面试题汇总
Java后端面试题汇总 近来,分专题更新了Java后端面试题,此文章对这些文章做一个目录式的整理,方便查看 1.Java基础 https://www.cnblogs.com/autism-dong ...