VBS訪問WINCC過程值歸檔數據

主要內容:

1、WinCC中的過程值歸檔

2、WinCC/Connectivity Pack

3、ADO

4、VBS腳本使用ADO

 

一、WinCC中的過程值歸檔

 

很多人剛使用WINCC時應該都會問,WINCC過程值歸檔咋這麼複雜,什麼壓縮不壓縮,備份不備份,慢速、快速……

 

 

WinCC有以下兩種歸檔模式:

 

快速變量記錄

WinCC 默認會自動在快速變量記錄 (TagLogging Fast) 中歸檔週期小於 1 分鐘的所有歸檔變量(具體可在“歸檔內容”配置)。這些過程值最初保存並壓縮在一個二進制文件中(可以降低快速歸檔對系統資源的開銷)。當二進制文件達到特定大小時,將其存儲到短期歸檔數據庫中。在項目文件\ArchiveManager\TagLoggingFast路徑下。

 

慢速變量記錄

WinCC 會自動在慢速變量記錄 (TagLogging Slow) 中歸檔週期大於 1 分鐘的所有歸檔變量。並立即將數據寫入短期歸檔數據庫中但不進行壓縮。在項目文件\ArchiveManager\TagLoggingSlow路徑下。

 

要歸檔的過程值(快速變量記錄與慢速變量記錄)存儲在歸檔數據庫的兩個獨立的循環歸檔(A、B)中。各短期歸檔均由數目可組態的數據緩衝區(分段)組成。數據緩衝區(分段)根據大小(以 MB 計)和時間週期(例如一天)定義。這些分段可存儲在歸檔數據庫中的硬盤上,或存儲在變量記錄運行系統的主內存中。

 

 

過程值被連續寫入數據緩衝區(分段)中(1)。如果達到數據緩衝區(分段)所組態的大小或超出時間段,系統切換到下一個數據緩衝區(2)。當所有數據緩衝區滿時,如果過程值歸檔存儲位置設置爲“硬盤”,爲了使最早的歸檔數據分段不被覆蓋過程破壞(3),可以將其先換出(激活備份),生成歸檔備份文件(長期歸檔)。

 

說明:

與存儲在硬盤中不同,在主內存中歸檔的過程值只在WINCC系統激活時有效。存儲在主內存中的優點是可以非常快速地寫入和讀出數據,但存儲在主內存中的數據無法換出。

 

數據緩衝區(分段)的大小和時間限制可根據項目需要設置:

所有分段的時間範圍及最大尺寸:
這個設置定義了歸檔數據庫的大小。如果超出其中一個標準,則啓動新的分段並刪除最舊的分段。

單個分段的時間範圍及最大尺寸:
如果違反了其中任意一個限制,則將啓動一個新的單個分段。

 

設置備份功能:

 

二、WinCC/Connectivity Pack

 

高級語言,如 Visual Basic 或 VBScript,可使用ADO通過WINCC OLE DB Provider訪問壓縮歸檔數據。

需要在訪問端安裝“連通性軟件包客戶端”(ConnectivityPackClient)。

注意:

如果訪問端已安裝 WinCC,則無需再安裝。從 WinCC/Connectivity Pack V7.0 開始,訪問端不再需要 WinCC 客戶端訪問許可證 (WinCC/CAL)。

要使用三個以上的客戶端,則服務端必須安裝服務器版操作系統。使用工作站版操作系統(WIN7/8.1/10)時,最多隻能使用三個客戶端。

 

三、ADO

 

ADO(ActiveX Data Objects,ActiveX 數據對象)是 OLE DB 的高級別、 簡單易用的界面。

ADO 提供了一箇中間層應用程序與低級別的 OLE DB 接口之間的抽象層 。ADO 和 OLE DB 可以訪問關係 (表格) 和非關係 (層次結構或流) 數據。它們都屬於Microsoft/Windows 數據訪問組件(MDAC/WDAC)。ADO會隨微軟的 IIS 被自動安裝。ADO的主要優點是易於使用、高速度、低內存開銷和小磁盤空間佔用量。

 

一張圖看懂ADO、OLE DB、ODBC關係:

註冊表查看ADO版本:
HKEY_LOCAL_MACHINE\Software\Microsoft\DataAccess下Version項,Windows 7下ADO版本爲6.1(msado15.dll)。

不同的系統要注意ADO兼容性。關於ADO引用方法:http://1t.click/bwCM

(提示:此網址由新浪短網址生成)

 

ADO文件通常保存在C:\Program Files (x86)\Common Files\System\ado\目錄下。

 

OLE DB

 

OLE DB(Object Linking and Embedding, Database,對象鏈接嵌入數據庫)是微軟爲了以統一方式訪問不同類型的數據存儲,而設計的一種應用程序接口(API),是一組用組件對象模型(COM)實現的接口。

它被設計成爲ODBC的一種高級替代者和繼承者,把它的功能擴展到支持更多種類的非關係型數據庫,例如電子表格Excel。

 

一些常見的OLE DB Provider:

  • SQL Server OLE DB Provider,以SQL Server爲主的OLE DB資料提供者。

  • Microsoft Jet OLE DB Provider,以Access, Excel等檔案型資料庫爲主的OLE DB資料提供者。

  • OLE DB Provider for ODBC,呼叫ODBC的OLE DB資料提供者。

  • OLE DB Provider for Oracle Client,呼叫Oracle資料庫的OLE DB資料提供者,通常由Oracle原廠提供。

 

對ADO感興趣想深入學習的,可訪問:

https://docs.microsoft.com/zh-cn/sql/ado/microsoft-activex-data-objects-ado?view=sqlallproducts-allversions

ADO 教程:

https://www.w3school.com.cn/ado/index.asp

 

四、VBS腳本使用ADO

ADO對數據源涉及四個主要操作:獲取數據、 檢查數據、 編輯數據更新數據

ADO 對象模型

ADO 對象和它們的集合:

 

VBS使用ADO/WINCC OLE DB讀取本地歸檔數據

示例建立的WINCC RT 過程值歸檔:

 

ADO讀取數據的操作:首先使用ADO連接對象連接到數據源,然後使用ADO命令對象將查詢傳遞到數據源,最後通過ADO記錄集對象接收數據。

1、與歸檔數據庫建立連接

使用ADO Connection對象連接數據庫,對象中連接字符串ConnectionString屬性是最重要的參數。在此連接字符串中,ADO僅識別"Provider="參數,指定作爲 ADO 數據源的OLE DB訪問接口。其餘的參數/值對,"Data Source=; Catalog=",傳給WINCC OLE DB提供程序。

 

ConnectionTimeout屬性:以秒爲單位,表示多長時間等待要打開的連接。默認值爲15。如果將屬性設置爲0,ADO將無限期地等待打開連接。

 

CursorLocation屬性:指定遊標服務的位置。可以設置爲3(adUseClient):客戶端來調用用於OLE DB 的 Microsoft 遊標服務(http://1t.click/bwGu),它支持批量更新。默認值爲2(adUseServer): 使用由數據訪問接口或驅動程序提供的遊標。

 

示例vbs腳本:

Dim sProDim sDsnDim sSerDim sConDim sSqlDim connDim oRsDim oComDim m
sPro = "Provider=WinCCOLEDBProvider.1;"sDsn = "Catalog=CC_wincctes_18_07_11_22_23_06R;"sSer = "Data Source=.\WinCC"sCon = sPro & sDsn & sSer
Set conn = CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.CursorLocation = 3conn.Open

 

連接字符串參數說明:

參數

說明

Provider

WINCC OLE DB Provider的名稱:WinCCOLEDBProvider.1

Data Source

服務器名稱

本地機:.\WINCC

遠程機:ComputerName\WINCC

Catalog

WINCC數據庫的名稱

對於wincc運行數據庫,用數據庫的名稱末尾加一個R:<DatabaseName_R>;

如果用Wincc Archive Connector連接交換出Wincc歸檔,則用其符號名稱

 

2、使用命令文本進行查詢

 

使用ADO Command對象,從提供程序請求任何受支持的類型的操作。常見操作是查詢取回數據,此數據將以一個 RecordSet 對象返回。

 

CommandType屬性:可設置或返回一個 CommandTypeEnum 值,該值可定義 Command 對象的類型。默認是 8(adCmdUnknown):指示 CommandText 屬性中命令的類型未知。

一般設置爲1(adCmdText):按命令或存儲過程調用的文本定義計算 CommandText。如果沒有規定此類型,ADO 將需要聯繫 provider 以確定命令的類型。如果定義了該類型,則 ADO 將有能力更快地處理此命令。

 

CommandText 屬性:可設置或返回一個字符串,該字符串包含一個 provider 命令,比如一條 SQL 語句、一個表名稱、一個相對 URL、或者一個存儲過程調用。

 

ActiveConnection 屬性:可指示 Command 對象當前所屬的 Connection 對象。

 

查詢WINCC過程值歸檔語法

 

8 字節長 ValueID 的請求語法:

TAG_LLVID:R,<ValueID 或 ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]

4 字節長 ValueID 的請求語法:

TAG:R,<ValueID 或ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]

 

注意:

ValueID 的長度可以不同。

  • 對於在中央歸檔服務器 (CAS) 上處理的數據庫,ValueID 爲 8 字節長,並且包括 HI-DWORD 區域中的服務器 ID,以及 LO-DWORD 區域中由相應服務器分配的 ValueID。

  • 對於所有其它數據庫,ValueID 爲 4 字節長,並且僅包括由 WinCC 服務器分配的唯一ValueID。

爲了保持兼容性,通過 TAG:R 的 4 字節請求仍然可用。在 CAS 數據庫的情況下,返回的 4 字節 ValueID 不再唯一。

對過程值歸檔的查詢,最多限於 20 個變量,對每個變量的查詢最多爲 128 個字符。

查詢語句不能包含任何空格。

 

示例vbs腳本:查詢 PVArchives_1\tag8 歸檔變量最新10秒數據

sSql = "TAG:R,'PVArchives_1\Tag8','0000-00-00 00:00:10.000','0000-00-00 00:00:00.000'"Set oCom = CreateObject("ADODB.Command")oCom.CommandType = 1Set oCom.ActiveConnection = connoCom.CommandText = sSql

 

3、填充記錄集、輸出指定值

 

使用ADO Recordset 對象,用於容納一個來自數據庫表的記錄集。一個 Recordset 對象由記錄和列(字段)組成。在 ADO 中,此對象是最重要且最常用於對數據庫的數據進行操作的對象。通常使用Command對象Execute方法來從數據源接收數據記錄集:Execute 方法可執行 Command 對象的 CommandText 屬性中指定的查詢、SQL 語句。

 

WINCC過程值歸檔的記錄集結構:

 

EOF 屬性:如果當前記錄的位置在最後的記錄之後,則返回 true,否則返回 fasle。

MoveFirst 方法:把記錄指針移動到第一條記錄。

MoveNext 方法:把記錄指針移動到下一條記錄。

Fields 集合:指示在此 Recordset 對象中 Field 對象的數目。其Count屬性:返回 fields 集合中項目的數目,以 0 起始。Item(named_item/number)屬性:返回 fields 集合中的某個指定的項目。

 

注意:並非所有的OLE DB 提供者(providers)支持 Recordset 對象的所有方法和屬性。

 

示例vbs腳本:​​​​​​​

Set oRs = CreateObject("ADODB.Recordset")Set oRs = oCom.Executem = oRs.Fields.Count
If (m > 0) ThenoRs.MoveFirstDo While (Not oRs.EOF)'打印歸檔變量值HMIRuntime.Trace   oRs.Fields(3).Value & vbCrLfoRs.MoveNextLoopoRs.CloseElseEnd If
Set oRs = Nothingconn.CloseSet conn = Nothing

 

關於VBS腳本訪問WINCC過程值歸檔數據,就寫到這。本文涉及內容比較多,初學者可循序漸進來閱讀。有疑問可留言。

 

-END-      

說明

本文由個人編輯並整理,難免有筆誤及錯誤。

更多內容請關注WX公衆號:自控技術FAQ

創建環境

WINCC V7.4 SP1,Windows 7專業版 SP1,ADO 6.1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章