[转载]22.Wincc V7.3 VBS脚本实现组合框、单选
(2019-12-19 09:15:43)
标签:
转载 |
在工程实际应用中,我们可能遇到一些交互式功能用到组合框、单选框、复选框控件,而这些控件的内容不是固定的,可能是来自数据库的某个字段,我们还希望在画面切换回来后,选择项不要发生变化回到初始状态。经过测试,可以按照以下步骤实现这样的功能。
一 SQL Server的准备工作
二 建立数据表
三 建立Wincc内部变量,用于存储用户选择。
四 了解三个控件主要属性
1. 组合框的主要属性
2. 单选框的主要属性
3. 复选框的主要属性
五 画面准备工作
六 组合框页面的脚本
1. 页面打开的脚本
Sub
OnOpen()
Dim combox
Dim conn,ssql,ors,scon,ocom,i
Dim PCName
PCName=HMIRuntime.Tags("@LocalMachineName").Read
scon="Provider = SQLOLEDB.1;Integrated Security=SSPI;Persist
SecurityInfo=False;Initial Catalog =MyDB;Data Source = "
&PCName & "WINCC"
ssql="select List from Mylist"
Set conn=CreateObject("ADODB.Connection")
conn.ConnectionString=scon
conn.Cursorlocation=3
conn.open
Set ors=CreateObject("ADODB.RecordSet")
Set ocom=CreateObject("ADODB.Command")
ocom.commandtype=1
Set ocom.ActiveConnection=conn
ocom.CommandText=ssql
Set ors=ocom.Execute
ors.movefirst
Set Combox=ScreenItems("Combox")
combox.NumberLines = ors.recordcount '让组合框的可选项数量与数据表记录数一样
For i=1 To ors.recordcount
Combox.Index =i
Combox.Text =ors.fields(0).value
ors.movenext
Next
Set ors=Nothing
conn.close
Set conn=Nothing
'读取操作人员上一次选择
combox.selindex=hmiruntime.Tags("ComBoxSelIndex").Read
End Sub
2. 操作人员修改选项时的脚本
操作人员修改了选择,那么需要及时把修改情况记录下来,一边下一次画面切换回来仍然保持原选择。我们在组合框的事件-“属性主题-其他-选择框-更改”写入以下脚本:
Sub SelIndex_OnPropertyChanged(ByVal Item, ByVal
value)
End Sub
3. 其他脚本
计算组合框有多少个可选条目
Sub OnClick(ByVal
Item)
Dim combox
Set combox=ScreenItems("Combox")
Msgbox combox.NumberLines
End Sub
删除组合框条目只保留一条
Sub OnClick(ByVal
Item)
Dim combox,i
Set combox=ScreenItems("combox")
combox.numberlines=1
combox.index=1
combox.text=""
End Sub
显示当前操作人员选中的是第几项
Sub OnClick(ByVal Item)
Dim combox
Set combox=screenitems("combox")
Msgbox combox.selindex
End Sub
显示用户当选选择的项目内容
Sub OnClick(ByVal Item)
Dim combox
Set combox=screenitems("combox")
Msgbox combox.seltext
End Sub
七 单选框的脚本
1. 页面打开的脚本
Sub
OnOpen()
Dim OptionList
Dim conn,ssql,ors,scon,ocom,i
Dim PCName
PCName=HMIRuntime.Tags("@LocalMachineName").Read
scon="Provider = SQLOLEDB.1;Integrated Security=SSPI;Persist
SecurityInfo=False;Initial Catalog =MyDB;Data Source = "
&PCName & "WINCC"
ssql="select OptionList from MyOption"
Set conn=CreateObject("ADODB.Connection")
conn.ConnectionString=scon
conn.Cursorlocation=3
conn.open
Set ors=CreateObject("ADODB.RecordSet")
Set ocom=CreateObject("ADODB.Command")
ocom.commandtype=1
Set ocom.ActiveConnection=conn
ocom.CommandText=ssql
Set ors=ocom.Execute
ors.movefirst
Set OptionList=ScreenItems("OptionList")
OptionList.boxcount = ors.recordcount '让组合框的可选项数量与数据表记录数一样
For i=1 To ors.recordcount
OptionList.index =i
OptionList.Text =ors.fields(0).value
ors.movenext
Next
Set ors=Nothing
conn.close
Set conn=Nothing
Set OptionList=screenitems("OptionList")
'读取上一次操作人员的选择
OptionList.process=hmiruntime.Tags("OptionListSelIndex").Read
End Sub
2. 操作人员修改选项时的脚本
操作人员修改了选择,那么需要及时把修改情况记录下来,一边下一次画面切换回来仍然保持原选择。我们在组合框的事件-“属性主题-输入输出-选择框-更改”写入以下脚本:
Sub Process_OnPropertyChanged(ByVal Item, ByVal value)
HMIRuntime.Tags("OptionListSelIndex").Write value
End Sub
3. 其他脚本
扩展一下,有时我们可能需要读取一下控件其他的属性,下面给出几个例子参考一下。
计算单选框有多少个可选条目
Sub OnClick(ByVal
Item)
Dim OptionList
Set OptionList=ScreenItems("OptionList")
Msgbox OptionList.Boxcount
End Sub
删除单选框条目只留一个
Sub OnClick(ByVal
Item)
Dim OptionList
Set OptionList=ScreenItems("OptionList")
OptionList.boxcount=1
OptionList.index=1
OptionList.text=""
End Sub
显示操作人员选择的是哪一项
Sub OnClick(ByVal
Item)
Dim OptionList,i,process,index,boxcount
Set OptionList=ScreenItems("OptionList")
process =OptionList.Process
boxcount=OptionList.BoxCount
For i=1 To boxcount
Next
End Sub
显示操作人员当前选项的文本是什么
Sub OnClick(ByVal
Item)
Dim OptionList,i,process,index,boxcount
Set OptionList=ScreenItems("OptionList")
process =OptionList.Process
boxcount=OptionList.BoxCount
For i=1 To boxcount
Next
End Sub
八 组合框的脚本
1. 打开画面的脚本
实现页面一打开,就从数据表MyCheck中把字段CheckList每个记录写入控件,同时读取用户上一次选择的项目编号。脚本如下:
Sub
OnOpen()
Dim conn,ssql,ors,scon,ocom,i
Dim PCName
Dim objCheck
PCName=HMIRuntime.Tags("@LocalMachineName").Read
scon="Provider = SQLOLEDB.1;Integrated Security=SSPI;Persist
SecurityInfo=False;Initial Catalog =MyDB;Data Source = "
&PCName & "WINCC"
ssql="select CheckList from MyCheck"
Set conn=CreateObject("ADODB.Connection")
conn.ConnectionString=scon
conn.Cursorlocation=3
conn.open
Set ors=CreateObject("ADODB.RecordSet")
Set ocom=CreateObject("ADODB.Command")
ocom.commandtype=1
Set ocom.ActiveConnection=conn
ocom.CommandText=ssql
Set ors=ocom.Execute
ors.movefirst
Set objCheck=ScreenItems("objCheck")
objCheck.boxcount = ors.recordcount '让组合框的可选项数量与数据表记录数一样
For i=1 To ors.recordcount
objCheck.index =i
objCheck.Text =ors.fields(0).value
ors.movenext
Next
Set ors=Nothing
conn.close
Set conn=Nothing
'读取上一次操作人员的选择
objcheck.process=hmiruntime.Tags("CheckListSelIndex").Read
End Sub
2. 操作人员修改选项时的脚本
操作人员修改了选择,那么需要及时把修改情况记录下来,一边下一次画面切换回来仍然保持原选择。我们在组合框的事件-“属性主题-输入输出-选择框-更改”写入以下脚本:
Sub Process_OnPropertyChanged(ByVal Item, ByVal
value)
HMIRuntime.Tags("CheckListSelIndex").Write value
End Sub
3. 其他脚本
扩展一下,有时我们可能需要读取一下控件其他的属性,下面给出几个例子参考一下。
计算单选框有多少个可选条目
Sub OnClick(ByVal
Item)
Dim ObjCheck
Set ObjCheck=ScreenItems("ObjCheck")
Msgbox ObjCheck.Boxcount
End Sub
删除单选框条目只留一个
Sub OnClick(ByVal
Item)
Dim ObjCheck
Set ObjCheck=ScreenItems("ObjCheck")
ObjCheck.boxcount=1
ObjCheck.index=1
ObjCheck.text=""
End Sub
显示操作人员选了哪几项编号
Sub OnClick(ByVal
Item)
Dim ObjCheck,i,process,Selindex,boxcount
Set ObjCheck=ScreenItems("ObjCheck")
process =ObjCheck.Process
boxcount=ObjCheck.BoxCount
For i=1 To boxcount
Next
Msgbox "复选框勾选的是:" & Selindex
End Sub
显示操作人员选择项目的文本
Sub OnClick(ByVal
Item)
Dim objCheck,i,process,index,boxcount,SelText
Set objCheck=ScreenItems("objCheck")
process =objCheck.Process
boxcount=objCheck.boxcount
For i=1 To boxcount
Next
Msgbox "复选框勾选的文本是" & SelText
End Sub