<acronym id="wesuw"><center id="wesuw"></center></acronym><sup id="wesuw"><div id="wesuw"></div></sup>
<acronym id="wesuw"></acronym>
<rt id="wesuw"><small id="wesuw"></small></rt>
<acronym id="wesuw"><div id="wesuw"></div></acronym>
<acronym id="wesuw"><small id="wesuw"></small></acronym>
論壇專區
在線教育
 

通過VBS腳本在ListView控件中顯示WinCC的變量記錄

放大字體  縮小字體 發布日期:2016-10-11  來源:互聯網  作者:工控資料窩  瀏覽次數:504
    在實際應用中,客戶對于WinCC變量記錄的顯示需求各式各樣,比如在Excel或者Word中顯示變量記錄,以特定的表格顯示歷史數據等等。當WinCC集成的在線表格控件不能滿足客戶需要時,就需要通過自定義的方式來顯示變量歸檔。主要分為兩部分:
    (1)從WinCC中讀取歸檔數據
    (2)將歸檔數據以特定的格式顯示出來
    本文檔介紹從WinCC讀取歸檔數據的通用方法,并以ListView為例,介紹如何顯示歸檔數據。對于其它控件,客戶也可以參考本文檔的腳本和編程思路。
    1.測試環境
    本文檔基于WinCCV7.0ASIA,并通過MSWindowsCommonControls6.0ListView控件來顯示讀取的歸檔數據。需要的授權如下:
    表01
授權名稱 個數 備注
WinCC RC V7.0 1  
WinCC連通性軟件包V7.0 1 訂貨號為:6AV6371-1DR07-0AX0,授權通過WinCC OLE DB訪問過程值歸檔。
    2.實現方式總體思路介紹
    本文檔通過調用WinCCOLEDB數據庫接口驅動(需要WinCC連通性軟件包的授權)來訪問WinCC的變量歸檔,并在微軟的ListView控件中顯示歸檔數據。程序結構如下所示:
    圖1
    其中,自定義函數的說明如下表所示:
    表02
函數名稱 功能
WinCCDataSourceAccess(connObj, pSQL) 建立到數據庫的連接。參數connObj為連接對象(ADODB.Connection),參數pSQL為要執行的SQL查詢語句
WinCCDataSourceClose(pRecordset, connObj) 斷開與數據庫的連接,釋放資源。參數pRecordset為ADODO.RecordSet對象,參數connObj為連接對象(ADODB.Connection)
AddListViewHeaderColumn(pRecordset, pListView) 添加ListView的列名。參數pRecordset為ADODO.RecordSet對象,參數pListView為ListView對象
FillListView (pRecordset, pListView) 參數pRecordset為ADODO.RecordSet對象,參數pListView為ListView對象。
    具體代碼見附件。
    3.具體實現方法和代碼
    3.1創建到歸檔數據庫的連接
    由于WinCC的變量歸檔為壓縮數據,所以必須通過WinCCOLEDB來讀取歸檔數據。對于已經安裝WinCC的計算機,不需要安裝WinCC連通性軟件包。對于未安裝WinCC的客戶端,必須安裝WinCC連通性軟件包。該軟件包含在WinCCV7.0的安裝光盤中。
    數據庫連接的腳本如下所示:
    '定義數據庫連接變量
    Dimconn
    Setconn=CreateObject("ADODB.Connection")
    '定義數據庫查詢腳本(可以根據需要自定義修改)
    DimsSQL
    sSQL="Tag:R,'ProcessValueArchive\Tag1','0000-00-0000:01:00.000','0000-00-0000:00:00.000'"
    '通過調用自定義的數據庫連接函數,建立與數據庫的連接
    DimoRs
    SetoRs=WinCCDataSourceAccess(conn,sSQL)
    其中,自定義的數據庫連接函數WinCCDataSourceAccess(connObj,pSQL),參數connObj為連接對象(ADODB.Connection),參數pSQL為要執行的SQL查詢語句,具體代碼如下所示:
    FunctionWinCCDataSourceAccess(connObj,pSQL)
    '建立到數據庫的連接
    OnErrorResumeNext
    '讀取本地的WinCC運行數據庫名稱
    DimDatasourceNameRT,DataConnectionName
    SetDatasourceNameRT=HMIRuntime.Tags("@DatasourceNameRT")
    DatasourceNameRT.Read
    '定義數據庫連接字符串
    DimsPro,sDsn,sSer
    sPro="Provider=WinCCOLEDBProvider.1;"
    sDsn="Catalog="&DatasourceNameRT.Value&";"
    sSer="DataSource=.\WinCC"
    DataConnectionName=sPro+sDsn+sSer
    '定義查詢語句字符串
    DimsSQL
    sSQL=pSQL
    '建立連接
    DimoRs,oCom,conn
    Setconn=CreateObject("ADODB.Connection")
    Setconn=connObj
    conn.ConnectionString=DataConnectionName
    conn.CursorLocation=3
    conn.Open
    '創建查詢的命令文本
    SetoRs=CreateObject("ADODB.Recordset")
    SetoCom=CreateObject("ADODB.Command")
    oCom.CommandType=1
    SetoCom.ActiveConnection=conn
    oCom.CommandText=sSQL
    '執行查詢
    SetoRs=oCom.Execute
    '返回結果
    SetWinCCDataSourceAccess=oRs
    Iferr.number<>0Then
    MsgBox"errorCode"&Err.Number&"Source:"&Err.Source&"errordescription"&Err.Description
    err.clear
    EndIf
    OnErrorGoto0
    EndFunction
    自定義函數的創建過程為:在WinCC項目管理器中右鍵點擊全局腳本?打開VBS全局腳本編輯器?項目函數?新建函數。具體如下圖所示:
    圖2
    3.2注冊MicrosoftListViewControl6.0控件
    打開WinCC圖形編輯器。在右側的對象選項板中單擊“控件”,選中“ActiveXControl”,點擊右鍵,選擇“添加移除”。在彈出菜單中,選擇“MicrosoftListViewControl6.0”,點擊“OK”確認。
    圖3
    之后,將“MicrosoftListViewControl6.0”拖動到畫面編輯器中,并將對象名稱設置為Control1。
    注意:在腳本中,當定義ListView對象時用到對象名稱Control1。詳情請參考圖1的步驟2。
    3.3添加ListView控件的列名
    在ListView中添加列名,步驟如圖1的步驟3。自定義函數AddListViewHeaderColumn(pRecordset,pListView)的具體代碼如下所示:
    FunctionAddColumnHeader(pRecordset,pListView)
    '添加ListView列名
    '用于錯誤捕獲和處理
    OnErrorResumeNext
    DimoRs,columnCount
    SetoRs=CreateObject("ADODB.Recordset")
    SetoRs=pRecordset
    '獲取數據庫中的列數
    columnCount=oRs.Fields.Count
    '定義操作的ListView對象
    DimListViewT
    SetListViewT=pListView
    '清空ListView對象的列數
    ListViewT.ColumnHeaders.Clear
    '用查詢的數據庫表格列名來為ListView添加列名(*2)
    DimAddColumnIndex
    ForAddColumnIndex=0TocolumnCount-1
    ListViewT.ColumnHeaders.Add,,CStr(oRs.Fields(AddColumnIndex).Name)
    Next
    '發生錯誤,提示消息框
    Iferr.number<>0Then
    MsgBox"AddColumnHeader函數報錯,Source:"&Err.Source&vbCr&"Errordescription:"&Err.Description
    err.clear
    EndIf
    OnErrorGoto0
    EndFunction
    3.4填充ListView控件
    在ListView中添加列名,步驟如圖1的步驟4。自定義函數FillListView(pRecordset,pListView)的具體代碼如下所示:
    FunctionFillListView(pRecordset,pListView)
    '用數據庫查詢的值填充ListView
    OnErrorResumeNext
    '獲取查詢記錄條數
    DimrecordsCount,oRs
    SetoRs=CreateObject("ADODB.Recordset")
    SetoRs=pRecordset
    recordsCount=oRs.RecordCount
    '定位到第一條記錄
    If(recordsCount>0)Then
    oRs.MoveFirst
    '定義最大的查詢條目(*3)
    DimmaxLine,n
    maxLine=10
    n=0
    '填充數據值列
    DoWhile(NotoRs.EOFAndn<maxLine)
    n=n+1
    DimoItem,ListViewT
    SetListViewT=pListView
    SetoItem=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)=he(oRs.Fields(3).Value)
    oItem.SubItems(4)=he(oRs.Fields(4).Value)
    oRs.MoveNext
    Loop
    3.5關閉到歸檔數據庫的連接
    關閉與數據庫的連接并釋放資源,步驟如圖1的步驟5。自定義函數WinCCDataSourceClose(pRecordset,connObj)的具體代碼如下圖所示:
    FunctionWinCCDataSourceClose(pRecordset,connObj)
    '關閉數據庫連接,釋放資源
    '獲取連接和查詢對象
    DimoRs,conn
    SetoRs=pRecordset
    Setconn=connObj
    oRs.Close
    SetoRs=Nothing
    conn.Close
    Setconn=Nothing
    EndFunction
    3.6運行結果
    本文檔介紹的腳本,其運行結果如下圖所示:
    圖4
    3.7更改代碼以滿足更廣泛的需求
    對于不同客戶的定制化需求,可以通過修改少量代碼實現。
    (1)不同的查詢需求,修改sSQL變量的值。
    '修改變量sSQL的值
    DimsSQL
    sSQL="Tag:R,'ProcessValueArchive\Tag1','0000-00-0000:01:00.000','0000-00-0000:00:00.000'"
    比如,如果需要動態制定查詢時間,可以在畫面中輸入查詢日期,然后通過HMIRuntime.Tags(“變量名”)來獲得查詢條件,再賦值給sSQL。
    (2)ListView需要使用不同的列名。
    修改函數AddListViewHeaderColumn中的如下內容:
    ‘用查詢的數據庫表格列名來為ListView添加列名(*2)
    DimAddColumnIndex
    ForAddColumnIndex=0TocolumnCount-1
    ListViewT.ColumnHeaders.Add,,CStr(oRs.Fields(AddColumnIndex).Name)
    Next
    (3)ListView需要填充不一樣的行數和內容。
    修改函數FillListView中的如下內容:
    DimmaxLine,n
    maxLine=10'改變此值,可以更改最大顯示的條目數
    n=0
    '修改填充內容,請修改下面DoWhile循環中的代碼
    DoWhile(NotoRs.EOFAndn<maxLine)
    n=n+1
    DimoItem,ListViewT
    SetListViewT=pListView
    SetoItem=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)=he(oRs.Fields(3).Value)
    oItem.SubItems(4)=he(oRs.Fields(4).Value)
    oRs.MoveNext
    Loop
    本文檔中提供的腳本盡量通用化,方便客戶修改和復用。并加入了錯誤處理機制,保證腳本的正確運行,并提高了診斷的方便性。
    聲明:
    本文所述的方法為WinCC的高級用法,提供的代碼程序僅供用戶參考,西門子公司不提供任何調試和熱線支持。敬請諒解!
 
關鍵詞: 控件
 
 
[ 大學堂搜索 ]  [ 加入收藏 ]  [ 告訴好友 ]  [ 打印本文 ]  [ 關閉窗口 ]

0條 [查看全部]  相關評論

 
按分類瀏覽
PLC基礎知識 (2048)
PLC編程 (478)
三菱PLC (679)
西門子PLC (954)
歐姆龍PLC (210)
AB PLC (35)
松下PLC (137)
永宏PLC (20)
臺達PLC (36)
LG PLC (12)
富士PLC (13)
日立PLC (8)
點擊排行
 
展會
微信公眾號
qq群
 
工控網 | 工控文庫 | 工控視頻 | 工控軟件 | 在線教育 | 用戶使用指南 | 關于我們 | 聯系方式 | 使用協議 | 版權隱私 | 網站地圖 |手機版 | 廣告服務

本網站所有文檔及文件資料,除特別標明本站原創外,均來自互聯網及網友上傳,如有涉及版權問題,請聯系我們,我們將第一時間處理。
我們保留版權,任何涉嫌侵犯本站版權的行為,本站保留追究其法律責任的權利。

Copyright ? 2018-2020 www.gmovier.com ?濱州新大新機電科技有限公司 版權所有 魯ICP備11011731號-4
中文字幕亚洲爆乳无码专区_亚洲aⅴ综合无码二区_国产精品国产精品国产三级普_国产1024精品免费视频