2017-11-10 11 views
0

すべてのプロセス変数を定期的にアーカイブするために、SCADAシステム(WinCC RT Professional)からプロセスデータをエクスポートするためのVBscriptを作成しようとしています。データは、接続パックを介してアクセスできるSQLテーブルに格納されます。 1つのタグ(プロセス変数)をエクスポートするときにスクリプトを動作させることができましたが、システム内のすべてのタグをループして(約60)、別のレコードセットでそれらを収集し、このレコードセットのすべてのデータを1つのcsv-ファイル。 1つのタグ(時間、プロセス変数など)のすべての変数(フィールド)を収集するRecSetを作成しました。フィールド4(すべてのタグで同じフィールド)からの値のみが必要です。私はこのフィールドを別のレコードセットにコピーしたいと思います。RecSetCollは、すべてのタグから必要なすべてのデータ(フィールド4)を収集し、最後にCSVファイルに保存します。助けてくれてどうもありがとう。SCADAシステムからのデータのエクスポート

Sub DataExport() 

Dim fso   'FileSystemObject 
Dim f   'File 
Dim ts   'TextStream 
Dim path  'Path 
Dim ArchiveDate 'Archive date 

'Name of CSV-file 
ArchiveDate = ArchiveDate & Now 
ArchiveDate = Replace(ArchiveDate,"/","") 
ArchiveDate = Replace(ArchiveDate," ","") 
ArchiveDate = Replace(ArchiveDate,":","") 
ArchiveDate = "MDF_" & ArchiveDate 

'Path to the csv-file 
path = "D:\Historical_data\" & ArchiveDate & ".csv" 

'Create Filesystemobject and CSV-file if not exists: 
Set fso = CreateObject("Scripting.FileSystemObject") 
If Not fso.FileExists(path) Then 
    fso.CreateTextFile(path) 
Else 
    MsgBox "File already exists!" 
    Exit Sub 
End If 

'Create object and open it for writing 
Set f = fso.GetFile(path) 
Set ts = f.OpenAsTextStream(2,-2) 

ts.WriteLine("Tag-Name;ValueID;Date/Time;Process-Value") 'Header 

'Generate String for the CSV-Filename 
Dim Pro   'Provider 
Dim DSN   'Data Source Name 
Dim DS   'Data Source 
Dim ConnString 'Connection String 
Dim MachineNameRT 'Name of the PC from WinCC-RT 
Dim DSNRT  'Data Source Name from WinnCC-RT 

Dim Conn  'Connection to ADODB 
Dim RecSet  'RecordSet 
Dim RecSetColl 'RecordSet storing data to be saved to the CSV-file 
Dim Command  'Query 
Dim CommandText 'Command-Text 
Dim i 

'Read the name of the PC-Station and the DSN-Name from WinCC-RT 
Set MachineNameRT = HMIRuntime.Tags("@LocalMachineName") 
Set DSNRT = HMIRuntime.Tags("@DatasourceNameRT") 

'Preparing the Connection-String 
Pro = "Provider=WinCCOLEDBProvider.1;" 'First instance of WinCCOLEDB 
DSN = "Catalog=" & DSNRT.Read & ";"  'Name of Runtime-Database 
DS = "Data Source=" & MachineNameRT.Read & "\WinCC" 'Data Source 

'Build the complete String: 
ConnString = Pro + DSN + DS 

'Make Connection 
Set Conn = CreateObject("ADODB.Connection") 
Conn.ConnectionString = ConnString 
Conn.CursorLocation = 3 
Conn.open 

Set RecSetColl = CreateObject("ADODB.Recordset") 

With RecSetColl.Fields 
    .Append "Time1", adChar 
    .Append "AHU_RUN", adChar 
    .Append "Time2", adChar 
    .Append "TT01", adChar 
    .Append "TT02", adChar 
End With 


For i = 0 To 4 

    Set RecSet = CreateObject("ADODB.Recordset")     
    Set Command = CreateObject("ADODB.Command") 

    Command.CommandType = 1 

    Set Command.ActiveConnection = Conn 

    'Building the complete string 
    CommandText = "Tag:R," & i & ",'0000-00-00 12:00:00.000','0000-00-00 00:00:00.000'" 

    Command.CommandText = CommandText 

    Set RecSet = Command.Execute 

    RecSet.MoveFirst 

    RecSetColl.Fields(i) = RecSet.Fields(4) 'RecSet.Fields(4) stores a proces value 

    RecSet.Close 
    Set RecSet = Nothing 
    Set Command = Nothing 
Next 

'Writing recordsets to CSV-file 
Do While Not RecSetColl.EOF 
    ts.WriteLine (RecSetColl.Fields(0).Value & ";" & RecSetColl.Fields(1).Value & ";" & RecSetColl.Fields(2).Value & ";" & RecSetColl.Fields(3).Value & ";" & RecSetColl.Fields(4).Value & ";" & RecSetColl.Fields(5).Value) 
    RecSetColl.MoveNext 
Loop 

RecSetColl.Close 
Set RecSetColl = Nothing 
Conn.close 
Set Conn = Nothing 

ts.Close 
Set fso = Nothing 
Set f = Nothing 
Set ts = Nothing 

End Sub 

答えて

0

私は実際に何がうまくいかないのか分かりません。

あなたのプロジェクトにValueID = 0( "for 0 to 4"の "i")がありますか?

テーブル「アーカイブ」では、すべてのプロジェクトで有効なValueIDが「1」から始まります。 SQL Management Studioには簡単に見えますが、時には0が存在することもあります。

すべての値をエクスポートするには、まず「アーカイブ」テーブルを照会し、返されるValueIDを使用してループ内のデータを要求します。

// PerD

関連する問題