搬家第一天-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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM