通過VBS腳本在ListView控件中顯示W(wǎng)inCC的變量記錄

發(fā)布時(shí)間:2023-09-08
在實(shí)際應(yīng)用中,客戶對(duì)于wincc變量記錄的顯示需求各式各樣,比如在excel或者word中顯示變量記錄,以特定的表格顯示歷史數(shù)據(jù)等等。當(dāng)wincc集成的在線表格控件不能滿足客戶需要時(shí),就需要通過自定義的方式來顯示變量歸檔。主要分為兩部分:
(1)從wincc中讀取歸檔數(shù)據(jù)
(2)將歸檔數(shù)據(jù)以特定的格式顯示出來
本文檔介紹從wincc讀取歸檔數(shù)據(jù)的通用方法,并以listview為例,介紹如何顯示歸檔數(shù)據(jù)。對(duì)于其它控件,客戶也可以參考本文檔的腳本和編程思路。 1.測(cè)試環(huán)境
本文檔基于wincc v7.0 asia,并通過ms windows common controls 6.0 listview 控件來顯示讀取的歸檔數(shù)據(jù)。需要的授權(quán)如下: 授權(quán)名稱 個(gè)數(shù) 備注
wincc rc v7.0 1
wincc連通性軟件包v7.0 1 訂貨號(hào)為:6av6371-1dr07-0ax0,授權(quán)通過wincc ole db訪問過程值歸檔。
表 01 2.實(shí)現(xiàn)方式總體思路介紹
本文檔通過調(diào)用wincc ole db數(shù)據(jù)庫(kù)接口驅(qū)動(dòng)(需要wincc連通性軟件包的授權(quán))來訪問wincc的變量歸檔,并在微軟的listview控件中顯示歸檔數(shù)據(jù)。程序結(jié)構(gòu)如下所示:
圖1
其中,自定義函數(shù)的說明如下表所示: 函數(shù)名稱 功能
winccdatasourceaccess(connobj, psql) 建立到數(shù)據(jù)庫(kù)的連接。參數(shù)connobj為連接對(duì)象(adodb.connection),參數(shù)psql為要執(zhí)行的sql查詢語句
winccdatasourceclose(precordset, connobj) 斷開與數(shù)據(jù)庫(kù)的連接,釋放資源。參數(shù)precordset為adodo.recordset對(duì)象,參數(shù)connobj為連接對(duì)象(adodb.connection)
addlistviewheadercolumn(precordset, plistview) 添加listview的列名。參數(shù)precordset為adodo.recordset對(duì)象,參數(shù)plistview為listview對(duì)象
filllistview (precordset, plistview) 參數(shù)precordset為adodo.recordset對(duì)象,參數(shù)plistview為listview對(duì)象。
表 02 具體代碼見附件。 3.具體實(shí)現(xiàn)方法和代碼 3.1 創(chuàng)建到歸檔數(shù)據(jù)庫(kù)的連接 由于wincc的變量歸檔為壓縮數(shù)據(jù),所以必須通過wincc ole db來讀取歸檔數(shù)據(jù)。對(duì)于已經(jīng)安裝wincc的計(jì)算機(jī),不需要安裝wincc連通性軟件包。對(duì)于未安裝wincc的客戶端,必須安裝wincc連通性軟件包。該軟件包含在wincc v7.0的安裝光盤中。
數(shù)據(jù)庫(kù)連接的腳本如下所示:
'定義數(shù)據(jù)庫(kù)連接變量
dim conn set conn = createobject(adodb.connection) '定義數(shù)據(jù)庫(kù)查詢腳本(可以根據(jù)需要自定義修改)
dim ssql ssql=tag:r,'processvaluearchive\tag1','0000-00-00 00:01:00.000','0000-00-00 00:00:00.000' '通過調(diào)用自定義的數(shù)據(jù)庫(kù)連接函數(shù),建立與數(shù)據(jù)庫(kù)的連接
dim ors set ors= winccdatasourceaccess(conn,ssql) 其中,自定義的數(shù)據(jù)庫(kù)連接函數(shù)winccdatasourceaccess(connobj,psql),參數(shù)connobj為連接對(duì)象(adodb.connection),參數(shù)psql為要執(zhí)行的sql查詢語句,具體代碼如下所示:
function winccdatasourceaccess(connobj,psql)
'建立到數(shù)據(jù)庫(kù)的連接
on error resume next
'讀取本地的wincc運(yùn)行數(shù)據(jù)庫(kù)名稱
dim datasourcenamert,dataconnectionname
set datasourcenamert = hmiruntime.tags(@datasourcenamert)
datasourcenamert.read '定義數(shù)據(jù)庫(kù)連接字符串
dim spro, sdsn,sser spro = provider=winccoledbprovider.1; sdsn = catalog= & datasourcenamert.value & ; sser = data source=.\wincc dataconnectionname = spro + sdsn + sser
' 定義查詢語句字符串
dim ssql
ssql=psql '建立連接
dim ors,ocom,conn
set conn = createobject(adodb.connection)
set conn=connobj
conn.connectionstring = dataconnectionname
conn.cursorlocation = 3
conn.open
' 創(chuàng)建查詢的命令文本
set ors = createobject(adodb.recordset) set ocom = createobject(adodb.command) ocom.commandtype = 1 set ocom.activeconnection = conn ocom.commandtext=ssql
'執(zhí)行查詢
set ors = ocom.execute '返回結(jié)果
set winccdatasourceaccess=ors if err.number <> 0 then msgbox error code & err.number & source: & err.source & error description & err.description
err.clear end if on error go to 0 end function 自定義函數(shù)的創(chuàng)建過程為:在wincc項(xiàng)目管理器中右鍵點(diǎn)擊全局腳本打開vbs全局腳本編輯器項(xiàng)目函數(shù)新建函數(shù)。具體如下圖所示:
圖2
3.2 注冊(cè)microsoft listview control 6.0控件
打開wincc圖形編輯器。在右側(cè)的對(duì)象選項(xiàng)板中單擊“控件”,選中“activex control”,點(diǎn)擊右鍵,選擇“添加移除”。在彈出菜單中,選擇“microsoft listview control 6.0”,點(diǎn)擊“ok”確認(rèn)。
圖3
之后,將“microsoft listview control 6.0”拖動(dòng)到畫面編輯器中,并將對(duì)象名稱設(shè)置為control1。
注意:在腳本中,當(dāng)定義listview對(duì)象時(shí)用到對(duì)象名稱control1。詳情請(qǐng)參考圖1的步驟2。 3.3 添加listview 控件的列名
在listview中添加列名,步驟如圖1的步驟3。自定義函數(shù)addlistviewheadercolumn(precordset, plistview)的具體代碼如下所示:
function addcolumnheader(precordset, plistview)
'添加listview列名 '用于錯(cuò)誤捕獲和處理
on error resume next dim ors,columncount set ors=createobject(adodb.recordset) set ors=precordset '獲取數(shù)據(jù)庫(kù)中的列數(shù)
columncount=ors.fields.count '定義操作的listview對(duì)象
dim listviewt set listviewt=plistview
'清空listview對(duì)象的列數(shù)
listviewt.columnheaders.clear '用查詢的數(shù)據(jù)庫(kù)表格列名來為listview添加列名(*2)
dim addcolumnindex for addcolumnindex=0 to columncount-1 listviewt.columnheaders.add , , cstr(ors.fields(addcolumnindex).name) next
'發(fā)生錯(cuò)誤,提示消息框
if err.number <> 0 then msgbox addcolumnheader函數(shù)報(bào)錯(cuò),source: & err.source & vbcr & error description: & err.description err.clear end if on error goto 0 end function 3.4 填充listview 控件
在listview中添加列名,步驟如圖1的步驟4。自定義函數(shù)filllistview (precordset, plistview) 的具體代碼如下所示:
function filllistview(precordset,plistview)
'用數(shù)據(jù)庫(kù)查詢的值填充listview
on error resume next '獲取查詢記錄條數(shù)
dim recordscount,ors
set ors=createobject(adodb.recordset)
set ors=precordset
recordscount=ors.recordcount '定位到第一條記錄
if (recordscount > 0) then
ors.movefirst '定義最大的查詢條目(*3)
dim maxline,n maxline = 10
n=0
'填充數(shù)據(jù)值列
do while (not ors.eof and n < maxline) n = n + 1 dim oitem,listviewt
set listviewt=plistview
set oitem = listviewt.listitems.add() oitem.text = ors.fields(0).value oitem.subitems(1) = ors.fields(1).value oitem.subitems(2) = formatnumber(ors.fields(2).value, 4) oitem.subitems(3) = hex(ors.fields(3).value) oitem.subitems(4) = hex(ors.fields(4).value) ors.movenext loop 3.5 關(guān)閉到歸檔數(shù)據(jù)庫(kù)的連接
關(guān)閉與數(shù)據(jù)庫(kù)的連接并釋放資源,步驟如圖1的步驟5。自定義函數(shù)winccdatasourceclose(precordset, connobj)的具體代碼如下圖所示:
function winccdatasourceclose(precordset,connobj)
'關(guān)閉數(shù)據(jù)庫(kù)連接,釋放資源
'獲取連接和查詢對(duì)象
dim ors,conn set ors=precordset
set conn=connobj ors.close set ors = nothing conn.close set conn = nothing end function 3.6 運(yùn)行結(jié)果
本文檔介紹的腳本,其運(yùn)行結(jié)果如下圖所示:
圖4
3.7 更改代碼以滿足更廣泛的需求
對(duì)于不同客戶的定制化需求,可以通過修改少量代碼實(shí)現(xiàn)。
(1) 不同的查詢需求,修改ssql變量的值。
'修改變量ssql的值
dim ssql
ssql=tag:r,'processvaluearchive\tag1','0000-00-00 00:01:00.000','0000-00-00 00:00:00.000' 比如,如果需要?jiǎng)討B(tài)制定查詢時(shí)間,可以在畫面中輸入查詢?nèi)掌冢缓笸ㄟ^hmiruntime.tags(“變量名”)來獲得查詢條件,再賦值給ssql。
(2) listview需要使用不同的列名。
修改函數(shù)addlistviewheadercolumn中的如下內(nèi)容:
‘用查詢的數(shù)據(jù)庫(kù)表格列名來為listview添加列名 (*2)
dim addcolumnindex for addcolumnindex=0 to columncount-1 listviewt.columnheaders.add , , cstr(ors.fields(addcolumnindex).name) next (3) listview需要填充不一樣的行數(shù)和內(nèi)容。
修改函數(shù)filllistview中的如下內(nèi)容:
dim maxline,n maxline = 10 '改變此值,可以更改最大顯示的條目數(shù)
n=0
'修改填充內(nèi)容,請(qǐng)修改下面do while循環(huán)中的代碼
do while (not ors.eof and n < maxline) n = n + 1 dim oitem,listviewt
set listviewt=plistview
set oitem = listviewt.listitems.add() oitem.text = ors.fields(0).value oitem.subitems(1) = ors.fields(1).value oitem.subitems(2) = formatnumber(ors.fields(2).value, 4) oitem.subitems(3) = hex(ors.fields(3).value) oitem.subitems(4) = hex(ors.fields(4).value) ors.movenext loop 本文檔中提供的腳本盡量通用化,方便客戶修改和復(fù)用。并加入了錯(cuò)誤處理機(jī)制,保證腳本的正確運(yùn)行,并提高了診斷的方便性。 聲明:
本文所述的方法為wincc的高級(jí)用法,提供的代碼程序僅供用戶參考,西門子公司不提供任何調(diào)試和熱線支持。敬請(qǐng)諒解!
上一個(gè):如何給電腦文件夾設(shè)置密碼win10(如何給電腦文件夾設(shè)置密碼,且別人不能刪除)
下一個(gè):建筑面積怎么計(jì)算比較準(zhǔn)確

筆記本加裝硬盤之后怎么做,筆記本裝了光驅(qū)位硬盤后怎么設(shè)置
怎樣清理電腦c盤內(nèi)存垃圾,如何清理電腦C盤內(nèi)存
怎樣處理建筑垃圾
高壓開關(guān)柜放電的原因及應(yīng)對(duì)措施
硬盤資料丟失怎么找回,臺(tái)式電腦硬盤丟失如何找回
提高功率因數(shù)的實(shí)際意義
怎么下載最新版的qq,怎樣在步步高家教機(jī)上下載最新版本的QQ
什么是企業(yè)門戶網(wǎng)站?企業(yè)門戶網(wǎng)站包含什么功能
華碩官方客服在線解答是真的嗎,華碩官網(wǎng)客服說的話可信度高不而且他們招聘面試也不在公司里
星之守護(hù)者怎么買(星之守護(hù)者怎么合成)
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos