搬家第一天-22.Wincc V7.3 VBS脚本实现组合框、单选框、复选框备选内容与数据库的结合

在工程实际应用中,我们可能遇到一些交互式功能用到组合框、单选框、复选框控件,而这些控件的内容不是固定的,可能是来自数据库的某个字段,我们还希望在画面切换回来后,选择项不要发生变化回到初始状态。经过测试,可以按照以下步骤实现这样的功能。

一 SQL Server的准备工作

      开放sa用户,默认是禁用的,开放后使用windows和SQL混合授权的模式,如果使用sa连接数据库报错,那么就打开sql configuration manager,把几个协议都启用。启用协议后需要停止sql服务,再重启,然后就可以使用sql用户方式登陆了,这个对后面wincc连接数据库脚本很重要。

二 建立数据表

     假设三个控件的内容分别来自数据库MyDB的三张表myList、MyOption、MyCheck,三张表都只有一个字段,分别是List、OptionList、CheckList。

三 建立Wincc内部变量,用于存储用户选择。

  在Wincc中新建三个无符号32位数,名字分别是ComBoxSelIndex、OptionListSelIndex、CheckListSelIndex,默认值均是1(默认三个控件选择第一项)。

四 了解三个控件主要属性

1. 组合框的主要属性

  .NUMBERLINES 表示组合框有多少个选项
 .INDEX              表示组合框的索引,从1开始
 .TEXT               表示组合框某个索引时的显示文本是啥
 .SELINDEX         操作人员选中的是第几项,从1开始
 .SELTEXT           操作人员选中了什么文本

2. 单选框的主要属性

 .BOXCOUNT      表示单选框有多少个选项
 .INDEX              表示单选框的索引,从1开始
 .TEXT                 表示单选框某个索引时的显示文本是啥
 .PROCESS           操作人员选中的是第几项,从1开始

3. 复选框的主要属性

 .BOXCOUNT      表示复选框有多少个选项
 .INDEX               表示复选框的索引,从1开始
 .TEXT                 表示复选框某个索引时的显示文本是啥
 .PROCESS           操作人员选中的是哪几项,从1开始

五 画面准备工作

   为了测试画面切换,选项不变的功能,新建三个画面存放三个控件,画面名称分别是ComBox.pdl,Option.pdl,Check.pdl。 组合框的名称修改为Combox,单选框的名称修改为OptionList,复选框的名字修改为ObjCheck。

六 组合框页面的脚本

1. 页面打开的脚本

  实现页面一打开,就从数据表MyList中把字段List每个记录写入控件,同时读取用户上一次选择的项目编号。脚本如下:

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)      
  HMIRuntime.Tags("ComBoxSelIndex").Write 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. 页面打开的脚本

  实现页面一打开,就从数据表MyOption中把字段OptionList每个记录写入控件,同时读取用户上一次选择的项目编号。脚本如下:

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
  If process Mod 2 =0 Then
    process=process\2
  Else
    index=i
     Msgbox index
    Exit For
  End If
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
  If process Mod 2 =0 Then
    process=process\2
  Else
    index=i
    OptionList.Index =index
    Msgbox OptionList.text
    Exit For
  End If
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
  If process Mod 2 =1 Then
    Selindex=Selindex & " " & CStr(i)
  End If
  process=process\2
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
  If process Mod 2 =1 Then
    index=i
    objCheck.Index =index
    SelText=SelText & " " & objCheck.text
  End If
   process=process\2
Next
Msgbox "复选框勾选的文本是" & SelText

End Sub

posted @ 2021-01-29 16:20  来自金沙江的小鱼  阅读(4317)  评论(1编辑  收藏  举报