WINCC7.5SP2使用Treeview和趋势控件,结合VBS实现趋势显示和隐藏
2024-01-02 19:50阅读:
假设又50条趋势曲线,每10条分成一组,一共五组,趋势名叫做“趋势10”至“趋势59”.
新建一个wincc项目。在内部变量新建50个32位浮点数变量,初始值为100、110、120……590,截图没有截取完整。

将这些变量加入变量记录,这个操作简单,不再截图
新建画面,名字叫做main,作为起始画面。
main画面放置treeview控件,使用6.0版本那个,放置在线趋势控件和标尺空间,标尺控件数据源是趋势控件。treeview控件名字叫做TV,趋势控件的名字叫做Trend。
初步设置趋势控件,将50个趋势变量加入,标注对象名称,默认不显示。

在main画面的启动画面事件写下面的脚本,对treeview控件初始化
Sub OnOpen()
Dim TV,NodeIndex
Set TV=ScreenItems('TV')
TV.Nodes.Clear
TV.Style=6 '6.直线、+/-和文本;
TV.LineStyle =1
TV.Checkboxes=True
tv.Font.SIZE=10
Set NodeIndex=TV.Nodes.Add(,,'Class0','趋势')
Set NodeIndex=TV.Nodes.Add('Class0',4,'Class1','趋势组1')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class0',4,'Class2','趋势组2')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class0',4,'Class3','趋势组3')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class0',4,'Class4','趋势组4')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class0',4,'Class5','趋势组5')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class1',4,'Class10','趋势10')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class1',4,'Class11','趋势11')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class1',4,'Class12','趋势12')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class1',4,'Class13','趋势13')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class1',4,'Class14','趋势14')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class1',4,'Class15','趋势15')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class1',4,'Class16','趋势16')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class1',4,'Class17','趋势17')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class1',4,'Class18','趋势18')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class1',4,'Class19','趋势19')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class2',4,'Class20','趋势20')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class2',4,'Class21','趋势21')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class2',4,'Class22','趋势22')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class2',4,'Class23','趋势23')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class2',4,'Class24','趋势24')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class2',4,'Class25','趋势25')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class2',4,'Class26','趋势26')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class2',4,'Class27','趋势27')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class2',4,'Class28','趋势28')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class2',4,'Class29','趋势29')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class3',4,'Class30','趋势30')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class3',4,'Class31','趋势31')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class3',4,'Class32','趋势32')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class3',4,'Class33','趋势33')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class3',4,'Class34','趋势34')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class3',4,'Class35','趋势35')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class3',4,'Class36','趋势36')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class3',4,'Class37','趋势37')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class3',4,'Class38','趋势38')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class3',4,'Class39','趋势39')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class4',4,'Class40','趋势40')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class4',4,'Class41','趋势41')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class4',4,'Class42','趋势42')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class4',4,'Class43','趋势43')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class4',4,'Class44','趋势44')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class4',4,'Class45','趋势45')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class4',4,'Class46','趋势46')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class4',4,'Class47','趋势47')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class4',4,'Class48','趋势48')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class4',4,'Class49','趋势49')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class5',4,'Class50','趋势50')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class5',4,'Class51','趋势51')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class5',4,'Class52','趋势52')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class5',4,'Class53','趋势53')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class5',4,'Class54','趋势54')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class5',4,'Class55','趋势55')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class5',4,'Class56','趋势56')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class5',4,'Class57','趋势57')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class5',4,'Class58','趋势58')
NodeIndex.Sorted=True
Set NodeIndex=TV.Nodes.Add('Class5',4,'Class59','趋势59')
NodeIndex.Sorted=True
End Sub
上面的脚本设置了控件的外观、字体、带有复选框等属性,还设置了每个节点的文本,和趋势空间中趋势笔的名字一样。
画面上选中趋势控件,duinodeCheck事件写vbs脚本,当勾选/取消treview控件的复选框时,触发趋势控件曲线的显示和隐藏。
Sub NodeCheck(ByVal Item, ByRef Node)
Dim TV,Trend,i,j
Set TV=ScreenItems('TV')
Set Trend=ScreenItems('Trend')
If Node.text <> '趋势组1' Or Node.text <> '趋势组2' Or
Node.text <> '趋势组3' Or Node.text <> '趋势组4' Or Node.text
<> '趋势组5' Then
If NODE.checked Then
Trend.TrendName=Node.text
Trend.TrendVisible =True
Else
Trend.TrendName=Node.text
Trend.TrendVisible =False
End If
End If
'全体趋势组勾选/取消
If Node.text = '趋势' Then
If TV.nodes.item(1).checked=True Then
For i=2 To 6
TV.nodes.item(i).checked=True
Next
'全部趋势显示
For j=0 To 49
Trend.TrendIndex=j
Trend.TrendVisible=True
Next
Else
For i=2 To TV.nodes.count
TV.nodes.item(i).checked=False
Next
'全部趋势隐藏
For j=0 To 49
Trend.TrendIndex=j
Trend.TrendVisible=False
Next
End If
End If
'趋势组取消/勾选
If Node.text = '趋势组1' Then
If TV.nodes.item(2).checked=True Then
For i=7 To 16
TV.nodes.item(i).checked=True
Next
'趋势组1显示
For j=0 To 9
Trend.TrendIndex=j
Trend.TrendVisible=True
Next
Else
For i=7 To 16
TV.nodes.item(i).checked=False
Next
'趋势组1隐藏
For j=0 To 9
Trend.TrendIndex=j
Trend.TrendVisible=false
Next
End If
End If
If Node.text = '趋势组2' Then
If TV.nodes.item(3).checked=True Then
For i=17 To 26
TV.nodes.item(i).checked=True
Next
'趋势组2显示
For j=10 To 19
Trend.TrendIndex=j
Trend.TrendVisible=True
Next
Else
For i=17 To 26
TV.nodes.item(i).checked=False
Next
'趋势组2隐藏
For j=10 To 19
Trend.TrendIndex=j
Trend.TrendVisible=False
Next
End If
End If
If Node.text = '趋势组3' Then
If TV.nodes.item(4).checked=True Then
For i=27 To 36
TV.nodes.item(i).checked=True
Next
'趋势组3显示
For j=20 To 29
Trend.TrendIndex=j
Trend.TrendVisible=True
Next
Else
For i=27 To 36
TV.nodes.item(i).checked=False
Next
'趋势组3隐藏
For j=20 To 29
Trend.TrendIndex=j
Trend.TrendVisible=False
Next
End If
End If
If Node.text = '趋势组4' Then
If TV.nodes.item(5).checked=True Then
For i=37 To 46
TV.nodes.item(i).checked=True
Next
'趋势组4显示
For j=30 To 39
Trend.TrendIndex=j
Trend.TrendVisible=True
Next
Else
For i=37 To 46
TV.nodes.item(i).checked=False
Next
'趋势组4显隐藏
For j=30 To 39
Trend.TrendIndex=j
Trend.TrendVisible=False
Next
End If
End If
If Node.text = '趋势组5' Then
If TV.nodes.item(6).checked=True Then
For i=47 To 56
TV.nodes.item(i).checked=True
Next
'趋势组5显示
For j=40 To 49
Trend.TrendIndex=j
Trend.TrendVisible=True
Next
Else
For i=47 To 56
TV.nodes.item(i).checked=False
Next
'趋势组5隐藏
For j=40 To 49
Trend.TrendIndex=j
Trend.TrendVisible=True
Next
End If
End If
End Sub
保存。设置项目计算机启动时进行变量记录。运行项目,就可以看到效果了。
我把项目上传到了网盘保存
链接:https://pan.baidu.com/s/1d2DU7p7Dl92lcHrlYScTnA
提取码:1234