Возврат тэгов при запросе архивной базы данных в WinCC RunTime
Я разрабатываю VB Script для WinCC RunTime на станции SIMATIC PC, чтобы экспортировать исторические данные моего проекта один раз в месяц. Я устанавливаю соединение ADO и запрашиваю результаты в наборе записей, который я печатаю в CSV. У меня есть несколько проблем:
- Набор записей возвращает ValueID, я хочу иметь возможность найти соответствующий ему тэг и записать его в CSV.
- Я ограничен 20 тегами на запрос, но я хочу экспортировать 30 тегов.
- Запуск цикла for для каждого тега ничего не дает.
Мой код в настоящее время выглядит так:
Dim fso
Dim f
Dim ts
Dim path
Dim TimeStamp
Dim Pro
Dim DSN
Dim DS
Dim ConnString
Dim MachineNameRT
Dim DSNRT
Dim Conn
Dim RecSet
Dim Command
Dim CommandText
TimeStamp = localDateFormat(Now)
path = "C:\Logs\Test1_" & TimeStamp & ".csv"
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(path) Then
fso.CreateTextFile(path)
Else
MsgBox "File already exist:" & vbCrLf & path
Exit Sub
End If
Set f = fso.GetFile(path)
Set ts = f.OpenAsTextStream(2,-2)
Set MachineNameRT = HMIRuntime.Tags("@LocalMachineName")
Set DSNRT = HMIRuntime.Tags("@DatasourceNameRT")
Pro="Provider=WinCCOLEDBProvider.1;"
DSN="Catalog=" & DSNRT.Read & ";"
DS= "Data Source=" & MachineNameRT.Read & "\WinCC"
ConnString = Pro + DSN + DS
Set Conn = CreateObject("ADODB.Connection")
Conn.ConnectionString = ConnString
Conn.CursorLocation = 3
Conn.open
Set Command = CreateObject("ADODB.Command")
Command.CommandType = 1
Set Command.ActiveConnection = Conn
ts.WriteLine ("Tag-Name;ValueID;Date/Time;Process-Value")
CommandText="Tag:R,'Data_Log\TempTran','0000-01-00 00:00:00.000','0000-00-00 00:00:00.000'"
Command.CommandText=CommandText
Set RecSet = Command.Execute
RecSet.MoveFirst
Do While Not RecSet.EOF
ts.WriteLine ("TempTran;" & RecSet.Fields("ValueID").Value & ";" & RecSet.Fields("TimeStamp").Value & ";" & RecSet.Fields("RealValue").Value)
RecSet.MoveNext
Loop
ts.Close
RecSet.Close
Set RecSet=Nothing
Set Command = Nothing
Conn.Close
Set Conn = Nothing
Set fso = Nothing
Set f = Nothing
Set ts = Nothing
В качестве конечного результата мне нужен файл CSV, который отображается следующим образом
Tag-Name;ValueID;Date/Time;Process-Value;
TempTran;1;dd/mm/yyyy hh:mm:ss;xxx.xxx;
TempTran;1;dd/mm/yyyy hh:mm:ss;xxx.xxx;
PresTran;2;dd/mm/yyyy hh:mm:ss;xxx.xxx;
.
.
.
.
LimitSwt;30;dd/mm/yyyy hh:mm:ss;xxx.xxx;
LimitSwt;30;dd/mm/yyyy hh:mm:ss;xxx.xxx;
LimitSwt;30;dd/mm/yyyy hh:mm:ss;xxx.xxx;
1 ответ
Q1: ValueID и тэг находятся в Таблице "Архив", если база данных связана с пакетом подключения.
SELECT [ValueID]
,[ValueName]
FROM [CC_ExternalBrowsing].[dbo].[Archive]
В противном случае вы можете найти valueId в базе данных CS. Runtime в этом случае - "CC_GruppLar_15_05_06_10_35_08R", его последний "R", который указывает "время выполнения", удалите его, и вы окажетесь в строительной базе данных (CS):
Varname = имя
procvarname= тег, который заархивирован.
TLGTAGID = ValueID
SELECT [VARNAME]
,[PROCVARNAME]
,[TLGTAGID]
FROM [CC_GruppLar_15_05_06_10_35_08].[dbo].[PDE#TAGs]
Q3: может помочь эта записка о месяцах в прекрасной помощи? или попробуйте проверить, используя данные для этого тега. Я думаю, что это хорошая идея, чтобы проверить операторы SQL с помощью данного инструмента "Microsoft SQL Manager Studio", это быстрее, чем с помощью Excel...
Примечание Введите относительный период, который вы хотите запросить в связанной базе данных архива, используя следующий формат: 0000-00-DD чч: мм:ss.msc
Если вы укажете временные рамки в месяцах, контент может быть неисправен, поскольку в месяце может быть от 28 до 31 дня.
Пример для справки: экспорт архивных данных с помощью SIMATIC WinCC/Connectivity Pack (поставщик OLE DB)