0

I am trying to create VBscript to export process data from a SCADA system (WinCC RT Professional) to periodically archive all process variables. The data are stored in SQL table that can be accessed through a connectivity pack. I managed to make the script working when exporting one tag (process variable), but I would like to loop over all tags in the system (about 60), collect them in another recordset and then all data from this recordset save in one csv-file. I have created RecSet that collects all variables (fields) of one tag (Time, Process Variable etc.), I only need values from Field 4 (the same field for all tags). I would then like to copy this field in another recordset - RecSetColl which collects all required data (Field 4) from all tags and finally save them in the CSV file. Thank you very much for any help.

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
Mike87
  • 1
  • 3

1 Answers1

0

I do not really know whats not working, but a guess;

Does ValueID = 0 , (the "i" in the "for 0 to 4" ) exist in your project?

In the table "Archive" you will find the valid ValueIDs, starts with "1" in all my projects. It's simple to see in SQL Management Studio, perhaps sometimes 0 exist.

To get all the values exported, query the "Archive" table first and then ask for data in a loop using whatever ValueID's is returned.

//PerD