在WinCC RunTime中查询存档数据库时返回标记名

时间:2017-09-07 04:27:17

标签: csv vbscript ado recordset wincc

我正在SIMATIC PC工作站上为WinCC RunTime开发VB脚本,以便每月导出一次项目的历史数据。我正在设置一个ADO连接并将结果查询到我正在打印到csv的记录集中。我有几个问题:

  1. 记录集返回一个ValueID,我希望能够找到与其对应的标记名并将其写入csv。
  2. 每个查询限制为20个标签,但我想导出30个标签。
  3. 为每个标记运行查询的for循环不会产生任何效果。
  4. 我的代码目前看起来像这样:

    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 个答案:

答案 0 :(得分:-1)

Q1: 如果数据库链接到连接包,则ValueID和标记名位于表“存档”中。

SELECT [ValueID]
  ,[ValueName]
FROM [CC_ExternalBrowsing].[dbo].[Archive]

否则,您可以在CS数据库中找到valueId 在这种情况下,运行时是“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: 也许这个关于好几个月的帮助的说明可以帮忙吗?或者尝试验证是否存在此标记的数据。我认为使用给定的工具“Microsoft SQL Manager Studio”来测试SQL语句是一个好主意,这比使用excel更快......

注意 使用以下格式输入要在链接存档数据库中查询的相对时间段: 0000-00-DD hh:mm:ss.msc

如果您以月为单位指明时间范围,则内容可能有问题,因为一个月可能有28到31天。

参考示例: 使用SIMATIC WinCC / Connectivity Pack(OLE DB提供程序)

导出存档数据

https://support.industry.siemens.com/cs/se/en/view/38132261