使用 WinCC OLE DB 提供程序和 Visual Basic 6 讀取過程值歸檔

步驟

 1. 創建名爲“Tag_1”的 WinCC 變量。

 2.創建名爲“ArTags”的過程值歸檔。將 WinCC 變量“Tag_1”與過程值歸檔連接起來。

3.創建 Visual Basic 項目。將 MS Windows Common Controls 6.0 的“ListView 控件”與名稱“ListView1”連接起來。ListView 中的各列由腳本創建。
將“視圖”屬性設置爲 ListView 控件的“3 - lvwReport”選項。 

4.創建“CommandButton”。從下面的“實例腳本”一節中複製腳本。

5.在腳本中,將 WinCC 運行系統數據庫的名稱“CC_OpConPac_04_10_01_10_36_36R”更改爲自己的項目。
數據庫名稱可在“SQL 企業管理器”中的“SQL Server 組”>“<計算機名稱>\WinCC”>“數據庫”>“<數據庫名稱_R>”處找到。

6.激活 WinCC 運行系統並啓動 VB 應用程序。

3.單擊“CommandButton”。
Option Explicit

Const NMAX = 100

Private Sub Command1_Click()

Dim sPro As String

Dim sDsn As String

Dim sSer As String

Dim sCon As String

Dim sSql As String

Dim conn As Object

Dim oRs As Object

Dim oCom As Object

Dim oItem As ListItem

 

Dim m, n, s, nRec

Dim strDateTime As String

Dim iMS As Long

 

 

'1.1 Make connection string for ADODB

sPro = "Provider=WinCCOLEDBProvider.1;"

sDsn = "Catalog=CC_OpConPac_04_10_01_10_36_36R;"

sSer = "Data Source=.\WinCC"

sCon = sPro + sDsn + sSer

 

' 1.2 Define command text in sSql (relative time)

sSql = "TAG:R,'ArTags\Tag_1','0000-00-00 00:10:00.000','0000-00-00 00:00:00.000'"

 

MsgBox "Open with:"& vbCr & sCon & vbCr & sSql & vbCr

 

' 2.1 Make connection

Set conn = CreateObject("ADODB.Connection")

conn.ConnectionString = sCon

conn.CursorLocation = 3

conn.Open

 

' 2.2 Use command text for query

Set oRs = CreateObject("ADODB.Recordset")

Set oCom = CreateObject("ADODB.Command")

oCom.CommandType = 1

Set oCom.ActiveConnection = conn

oCom.CommandText = sSql

 

' 2.3 Fill the recordset

Set oRs = oCom.Execute

m = oRs.Fields.Count

nRec = NMAX

 

' 3.0 Fill standard listview object with recordset

ListView1.ColumnHeaders.Clear

ListView1.ColumnHeaders.Add , , CStr(oRs.Fields(1).Name), 2500   ' DateTime

ListView1.ColumnHeaders.Add , , "MS", 1500                        ' Milisecond

ListView1.ColumnHeaders.Add , , CStr(oRs.Fields(0).Name), 1500   ' DateTime

ListView1.ColumnHeaders.Add , , CStr(oRs.Fields(2).Name), 1500   ' DateTime

ListView1.ColumnHeaders.Add , , CStr(oRs.Fields(3).Name), 1500   ' DateTime

ListView1.ColumnHeaders.Add , , CStr(oRs.Fields(4).Name), 1500   ' DateTime

 

If (m > 0) Then

oRs.MoveFirst

n = 0

Do While (Not oRs.EOF And n < nRec)

n = n + 1

SplitDateTimeAndMs oRs.Fields(1).Value, strDateTime, iMS    'Split Milisecond from DateTime

s = FormatDateTime(strDateTime, 2) & " " & FormatDateTime(strDateTime, 3)

Set oItem = ListView1.ListItems.Add()

oItem.Text = s

oItem.SubItems(1) = iMS

oItem.SubItems(2) = oRs.Fields(0).Value

oItem.SubItems(3) = FormatNumber(oRs.Fields(2).Value, 4)

oItem.SubItems(4) = Hex(oRs.Fields(3).Value)

oItem.SubItems(5) = Hex(oRs.Fields(4).Value)

 

oRs.MoveNext

Loop

oRs.Close

Else

End If

 

Set oRs = Nothing

conn.Close

Set conn = Nothing

End Sub

 

 

Sub SplitDateTimeAndMs(dtDateTimeWithMs_in, strDateTime_out, strMs_out)

 

Dim diff

Dim dtTemp

Dim lTemp As Long

 

lTemp = 86400000 '24 * 60 * 60 * 1000

 

diff = (CDbl(dtDateTimeWithMs_in) - CDbl(CDate(CStr(dtDateTimeWithMs_in)))) * lTemp

If (diff < 0) Then

diff = 1000 + diff

dtTemp = CDbl(dtDateTimeWithMs_in) - diff / lTemp

strDateTime_out = CDate(dtTemp)

Else

strDateTime_out = CDate(dtDateTimeWithMs_in)

End If

strMs_out = "00" & Round(diff)

strMs_out = Right(strMs_out, 3)

 

End Sub

發佈了9 篇原創文章 · 獲贊 0 · 訪問量 5706
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章