wincc画面图层的显示和隐藏

最近在逛西门子论坛时,发现一个有趣的功能,可以通过脚本对画面的图层进行隐藏和显示,不过该帖子只显示了 简单的脚本代码,本着实践是学习的最好方法。我进行了实际操作,并增加了新的功能。下面是我实际操作的步骤和总结

思路

将整个画面作为对象,然后修改对象的属性方法,实现画面图层的隐藏显示

难点

  1. 如何将整个画面作为对象
  2. 画面中图层号和脚本中索引值的关系
  3. 画面图层随机显示

软件配置

条目描述
软件版本wincc7.5 SP1

实现步骤

创建项目

  1. 打开wincc 7.5 Advance软件,创建对应的项目,项目名称为LayerVisible。
    在这里插入图片描述

  2. 创建变量.先创建变量组Function,然后创建两个变量(红色框框),其他变量为其他画面用到的,不用于此项目画面。
    在这里插入图片描述

  3. 创建画面,画面名称为Layer01,切记此画面名称,后面创建画面对象时,需要用到。
    在这里插入图片描述

组态画面

按钮列表

对象对象名称数量描述
图形对象控件默认1显示图片
静态文本默认2显示画面名称和图层颜色介绍
按钮默认9控制图层的隐藏/显示
矩形默认66个矩形处于画面的6个图层,通过颜色区分

在这里插入图片描述

按钮描述

按钮名称作用
图层1点击此按钮,隐藏其他五个矩形,只显示红色矩形
图层2点击此按钮,隐藏其他五个矩形,只显示蓝色矩形
图层3点击此按钮,隐藏其他五个矩形,只显示黄色矩形
图层4点击此按钮,隐藏其他五个矩形,只显示绿色矩形
图层5点击此按钮,隐藏其他五个矩形,只显示紫色矩形
图层6点击此按钮,隐藏其他五个矩形,只显示白色矩形
红绿黄点击此按钮,隐藏其他三个矩形,显示红绿黄三个颜色的矩形
蓝白紫点击此按钮,隐藏其他三个矩形,只显示蓝白紫三个颜色的矩形
随机点击此按钮,隐藏其他五个矩形,显示一个随机颜色的矩形

按钮脚本

图层1

Dim Sobj
Dim VisibleOn
Set Sobj = hmiruntime.Screens("Layer01") '获取画面对象,
Set VisibleOn = HMIRuntime.Tags("VisibleOn") '获取变量
VisibleOn.Write 1							'变量值写1
If VisibleOn.Value = 1 Then 				'逻辑判断
	Sobj.Layers(1).visible = True			'显示图层0
	Sobj.Layers(2).visible = False			'隐藏图层1
	Sobj.Layers(3).visible = False
	Sobj.Layers(4).visible = False
	Sobj.Layers(5).visible = False
	Sobj.Layers(6).visible = False
Else 
	Sobj.Layers(1).visible = False
End If 

图层2

Dim Sobj
Dim VisibleOn
Set Sobj = hmiruntime.Screens("Layer01")
Set VisibleOn = HMIRuntime.Tags("VisibleOn")
VisibleOn.Write 2
If VisibleOn.Value = 2 Then 
	Sobj.Layers(1).visible = False
	Sobj.Layers(2).visible = True
	Sobj.Layers(3).visible = False
	Sobj.Layers(4).visible = False
	Sobj.Layers(5).visible = False
	Sobj.Layers(6).visible = False
Else 
	Sobj.Layers(2).visible = False
End If 

图层3

Dim Sobj
Dim VisibleOn
Set Sobj = hmiruntime.Screens("Layer01")
Set VisibleOn = HMIRuntime.Tags("VisibleOn")
VisibleOn.Write 3
If VisibleOn.Value = 3 Then 
	Sobj.Layers(1).visible = False
	Sobj.Layers(2).visible = False
	Sobj.Layers(3).visible = True
	Sobj.Layers(4).visible = False
	Sobj.Layers(5).visible = False
	Sobj.Layers(6).visible = False
Else 
	Sobj.Layers(3).visible = False
End If

图层4

Dim Sobj
Dim VisibleOn
Set Sobj = hmiruntime.Screens("Layer01")
Set VisibleOn = HMIRuntime.Tags("VisibleOn")
VisibleOn.Write 4
If VisibleOn.Value = 4 Then 
	Sobj.Layers(1).visible = False
	Sobj.Layers(2).visible = False
	Sobj.Layers(3).visible = False
	Sobj.Layers(4).visible = True
	Sobj.Layers(5).visible = False
	Sobj.Layers(6).visible = False
Else 
	Sobj.Layers(4).visible = False
End If

图层5

Dim Sobj
Dim VisibleOn
Set Sobj = hmiruntime.Screens("Layer01")
Set VisibleOn = HMIRuntime.Tags("VisibleOn")
VisibleOn.Write 5
If VisibleOn.Value = 5 Then 
	Sobj.Layers(1).visible = False
	Sobj.Layers(2).visible = False
	Sobj.Layers(3).visible = False
	Sobj.Layers(4).visible = False
	Sobj.Layers(5).visible = True
	Sobj.Layers(6).visible = False
Else 
	Sobj.Layers(5).visible = False
End If

图层6

Dim Sobj
Dim VisibleOn
Set Sobj = hmiruntime.Screens("Layer01")
Set VisibleOn = HMIRuntime.Tags("VisibleOn")
VisibleOn.Write 6
If VisibleOn.Value = 6 Then 
	Sobj.Layers(1).visible = False
	Sobj.Layers(2).visible = False
	Sobj.Layers(3).visible = False
	Sobj.Layers(4).visible = False
	Sobj.Layers(5).visible = False
	Sobj.Layers(6).visible = True
Else 
	Sobj.Layers(6).visible = False
End If

红绿黄

Dim Sobj
Dim VisibleOn
Set Sobj = hmiruntime.Screens("Layer01")
Set VisibleOn = HMIRuntime.Tags("VisibleOn")
VisibleOn.Write 7
If VisibleOn.Value = 7 Then 
	Sobj.Layers(1).visible = True
	Sobj.Layers(2).visible = False
	Sobj.Layers(3).visible = True
	Sobj.Layers(4).visible = True
	Sobj.Layers(5).visible = False
	Sobj.Layers(6).visible = False
Else 
	Sobj.Layers(1).visible = False
	Sobj.Layers(3).visible = False
	Sobj.Layers(4).visible = False
End If

蓝白紫

Dim Sobj
Dim VisibleOn
Set Sobj = hmiruntime.Screens("Layer01")
Set VisibleOn = HMIRuntime.Tags("VisibleOn")
VisibleOn.Write 8
If VisibleOn.Value = 8 Then 
	Sobj.Layers(1).visible = False
	Sobj.Layers(2).visible = True
	Sobj.Layers(3).visible = False
	Sobj.Layers(4).visible = False
	Sobj.Layers(5).visible = True
	Sobj.Layers(6).visible = True
Else 
	Sobj.Layers(2).visible = False
	Sobj.Layers(5).visible = False
	Sobj.Layers(6).visible = False
End If

随机

Dim Sobj
Set Sobj = HMIRuntime.Screens("Layer01")
HMIRuntime.Tags("ColorNumber").Write MyRnd(1,6)

Msgbox HMIRuntime.Tags("ColorNumber").Read
If HMIRuntime.Tags("ColorNumber").Read  = 1 Then 
		Sobj.Layers(1).visible = True
		Sobj.Layers(2).visible = False
		Sobj.Layers(3).visible = False
		Sobj.Layers(4).visible = False
		Sobj.Layers(5).visible = False
		Sobj.Layers(6).visible = False
Elseif HMIRuntime.Tags("ColorNumber").Read  = 2 Then 
		Sobj.Layers(1).visible = False
		Sobj.Layers(2).visible = True
		Sobj.Layers(3).visible = False
		Sobj.Layers(4).visible = False
		Sobj.Layers(5).visible = False
		Sobj.Layers(6).visible = False
Elseif HMIRuntime.Tags("ColorNumber").Read  = 3 Then 
		Sobj.Layers(1).visible = False
		Sobj.Layers(2).visible = False
		Sobj.Layers(3).visible = True
		Sobj.Layers(4).visible = False
		Sobj.Layers(5).visible = False
		Sobj.Layers(6).visible = False
Elseif HMIRuntime.Tags("ColorNumber").Read  = 4 Then 
		Sobj.Layers(1).visible = False
		Sobj.Layers(2).visible = False
		Sobj.Layers(3).visible = False
		Sobj.Layers(4).visible = True
		Sobj.Layers(5).visible = False
		Sobj.Layers(6).visible = False
Elseif HMIRuntime.Tags("ColorNumber").Read  = 5 Then 
		Sobj.Layers(1).visible = False
		Sobj.Layers(2).visible = False
		Sobj.Layers(3).visible = False
		Sobj.Layers(4).visible = False
		Sobj.Layers(5).visible = True
		Sobj.Layers(6).visible = False
Elseif HMIRuntime.Tags("ColorNumber").Read  = 6 Then 
		Sobj.Layers(1).visible = False
		Sobj.Layers(2).visible = False
		Sobj.Layers(3).visible = False
		Sobj.Layers(4).visible = False
		Sobj.Layers(5).visible = False
		Sobj.Layers(6).visible = True	
Else
		Sobj.Layers(1).visible = False
		Sobj.Layers(2).visible = False
		Sobj.Layers(3).visible = False
		Sobj.Layers(4).visible = False
		Sobj.Layers(5).visible = False
		Sobj.Layers(6).visible = False
End If

在使用随机按钮时,需要先创建项目函数MyRnd(min,max),此函数会出现一个随机函数,min代表随机数的下限,max为上限,产生的随机数为int型。具体创建方法请参考我的另一篇博客《wincc随机数的生成

项目实例

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yue008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值