Экспорт данных из системы SCADA

Я пытаюсь создать VBscript для экспорта данных процесса из системы SCADA (WinCC RT Professional), чтобы периодически архивировать все переменные процесса. Данные хранятся в таблице SQL, к которой можно получить доступ через пакет подключения. Мне удалось заставить скрипт работать при экспорте одного тега (переменной процесса), но я хотел бы перебрать все теги в системе (около 60), собрать их в другом наборе записей, а затем все данные из этого набора записей сохранить в одном csv- файл. Я создал RecSet, который собирает все переменные (поля) одного тега (время, переменная процесса и т. Д.), Мне нужны только значения из поля 4 (одно и то же поле для всех тегов). Затем я хотел бы скопировать это поле в другой набор записей - RecSetColl, который собирает все необходимые данные (поле 4) из всех тегов и, наконец, сохраняет их в файле CSV. Большое спасибо за любую помощь.

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

person Mike87    schedule 10.11.2017    source источник


Ответы (1)


Я действительно не знаю, что не работает, но предположение;

Существует ли в вашем проекте ValueID = 0 («i» в «от 0 до 4»)?

В таблице «Архив» вы найдете действительные ValueID, начинающиеся с «1» во всех моих проектах. Это просто увидеть в SQL Management Studio, возможно, иногда существует 0.

Чтобы получить все экспортированные значения, сначала запросите таблицу «Архив», а затем запросите данные в цикле, используя любой возвращаемый ValueID.

// PerD

person Per Dahlqvist    schedule 13.11.2017