步驟
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