2017-09-07 18 views
0

SIMATIC PC 스테이션에서 WinCC RunTime 용 VB 스크립트를 개발하여 프로젝트의 내역 데이터를 한 달에 한 번 내보내고 있습니다. ADO 연결을 설정하고 결과를 CSV로 인쇄하는 레코드 세트로 쿼리합니다. 몇 가지 문제가 있습니다 :WinCC 런타임에서 아카이브 데이터베이스를 쿼리 할 때 Tagnames 반환

  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 

인이

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; 
+0

이 문헌 [포스트]와 내보내기 아카이브 데이터 (https://stackoverflow.com/documentation/ado/commit) 문서가 [영원히 사라지기 전에] 지금 백업하십시오 (https://meta.stackoverflow.com/questions/356294/removing-documentation-reputation-archive-and-links?cb=1)! –

답변

-1

Q1처럼 표시하는 CSV 파일 : ValueID 및 태그 이름은 데이터베이스가 연결 팩에 연결되어 있으면 테이블 "보관"에 있습니다. 그렇지 않으면

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

당신이 런타임이 경우 "CC_GruppLar_15_05_06_10_35_08R"에있는 CS 데이터베이스에 valueId을 찾을 수 있습니다, (CS를 "실행"을 나타냅니다의 마지막 'R'은이를 제거하고 당신은 건설 데이터베이스에있는) :

VARNAME = 지정된 이름

procvarname = 아카이브 태그. 도움이 미세 도움말 개월에 대해 아마도이 메모 :

TLGTAGID는 ValueID에게

SELECT [VARNAME] 
    ,[PROCVARNAME] 
    ,[TLGTAGID] 
FROM [CC_GruppLar_15_05_06_10_35_08].[dbo].[PDE#TAGs] 

Q3을 =? 이 태그에 대한 데이터가 있음을 사용하여 확인을 시도하십시오. 나는

가 링크 된 아카이브에서 조회 할 상대 날짜를 입력하고 ... 그 좋은 생각이 주어진 도구 "마이크로 소프트 SQL 관리자 스튜디오", 즉 엑셀을 사용하여 다음 빠릅니다을 사용하여 SQL 문을 테스트하는 생각 0000-00-DD hh : mm : ss.msc

시간 프레임을 개월 단위로 지정하면 한 달 단위로 28 일에서 31 일 사이이므로 내용이 잘못 될 수 있습니다. 참조

예 : SIMATIC하기 WinCC/연결 팩의 도움 (OLE DB 공급자)

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