0

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

  1. 记录集返回一个 ValueID,我希望能够找到与其对应的标记名并将其写入 csv。
  2. 每个查询我限制为 20 个标签,但我想导出 30 个标签。
  3. 为每个标签运行查询的 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;
4

1 回答 1

-1

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

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

否则,您可以在 CS 数据库 Runtime 中找到 valueId 在这种情况下是“CC_GruppLar_15_05_06_10_35_08R”,它的最后一个“R”表示“runtime”,删除它,您就在构建数据库(CS)中:

Varname = 给定的名称

procvarname= 归档的标签。

TLGTAGID = 值 ID

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

于 2018-01-27T09:40:48.680 回答