-> Hier kostenlos registrieren
Hallo,
ich habe im Netz vor einiger Zeit ein Script gefunden womit ich die WinCC Alarme (Störungen) als CSV Datei Exportieren konnte, diese habe ich dann etwas abgeändert damit sie
meinen wünschen entsprechen.
Das Scrip lief bis jetzt immer auf dem Server und wurde manuell ausgelöst (eine Porjektbild in WinCC).
Jetzt ist der Server nicht mehr ohne weiteres bedienbar und ich wollte das automatisieren, jede Nacht sollen die Alarme exportiert werden.
Also habe ich den Code in "Global Script"/"VBS-Editor"-Aktionen eingefügt.
Als trigger habe ich einen Merker der von der SPS kommt benutz, später soll das durch die Uhrzeit getriggert werden.
Aber irgendwie will das nicht klappen, das Script wird nicht ausgelöst oder es ist im Script ein fehler vorhanden der aber nicht angezeigt wird.
Da meine erfahrungen mit VBS nur sehr begrenzt sind wollte ich euch fragen ob ihr eine idee habt wieso das Script keine Datei exportiert.
ich habe im Netz vor einiger Zeit ein Script gefunden womit ich die WinCC Alarme (Störungen) als CSV Datei Exportieren konnte, diese habe ich dann etwas abgeändert damit sie
meinen wünschen entsprechen.
Das Scrip lief bis jetzt immer auf dem Server und wurde manuell ausgelöst (eine Porjektbild in WinCC).
Jetzt ist der Server nicht mehr ohne weiteres bedienbar und ich wollte das automatisieren, jede Nacht sollen die Alarme exportiert werden.
Also habe ich den Code in "Global Script"/"VBS-Editor"-Aktionen eingefügt.
Als trigger habe ich einen Merker der von der SPS kommt benutz, später soll das durch die Uhrzeit getriggert werden.
Aber irgendwie will das nicht klappen, das Script wird nicht ausgelöst oder es ist im Script ein fehler vorhanden der aber nicht angezeigt wird.
Da meine erfahrungen mit VBS nur sehr begrenzt sind wollte ich euch fragen ob ihr eine idee habt wieso das Script keine Datei exportiert.
Code:
Option ExplicitFunction action
HMIRuntime.Tags("alarmexport_start").Write Right("000" & Year(Now),4) & "-" & Right("000" & Month(Now),2) & "-" & Right("000" & Day(DateAdd("d",-1,Now)) ,2) & " 05:00:00"
HMIRuntime.Tags("alarmexport_end").Write Right("000" & Year(Now),4) & "-" & Right("000" & Month(Now),2) & "-" & Right("000" & Day(DateAdd("d",-1,Now)) ,2) & " 23:59:59"
HMIRuntime.Tags("alarmexport_filter_bereich").Write ""
HMIRuntime.Tags("alarmexport_filter_herkunft").Write ""
HMIRuntime.Tags("alarmexport_filter_meldetext").Write ""
' ####################################################
'
' WinCC-Alarm-Archiv exportieren
'
' mit Sommer-/Winterzeitumrechnung Deutschland
'
' ####################################################
Dim objConnection
Dim strConnectionString
Dim lngValue
Dim strSQL, strSQL1
Dim objCommand
Dim n, z, s
Dim antwort
' Zeiten Archivausschnitt Online-Trend
Dim btag, bmnt, bjhr, bstd, bmin, bsek, startzeit ' Begin-Zeit
Dim etag, emnt, ejhr, estd, emin, esek, endzeit ' End-Zeit
Dim tag, mnt, jhr, std,min, sek
Dim obj_cn, obj_rs, obj_com, sql_query
Dim csvname, obj_fso, obj_stream
Dim col_number, record_count
Set obj_cn = CreateObject("ADODB.Connection")
obj_cn.connectionstring="Provider=WinCCOLEDBProvider.1;Catalog=" & HMIRuntime.Tags("@DatasourceNameRT").Read & "; Data Source=.\WinCC"
obj_cn.CursorLocation = 3
obj_cn.Open
' Startzeit Exportzeitraum
startzeit = ScreenItems("EAstart").OutputValue
btag = Day(startzeit)
bmnt = Month(startzeit)
bjhr = Year(startzeit)
bstd = Hour(startzeit)
bmin = Minute(startzeit)
bsek = Second(startzeit)
If bmin < 10 Then bmin= "0" & bmin
If bsek < 10 Then bsek= "0" & bsek
' Endzeit Exportzeitraum
endzeit = ScreenItems("EAend").OutputValue
etag = Day(endzeit)
emnt = Month(endzeit)
ejhr = Year(endzeit)
estd = Hour(endzeit)
emin = Minute(endzeit)
esek = Second(endzeit)
If emin < 10 Then emin= "0" & emin
If esek < 10 Then esek= "0" & esek
Dim strJahr, strSommer, strWinter, umrechnung
Dim i
strJahr=ejhr
umrechnung = 0
For i = 31 To 20 Step -1
' Datum Umstellung auf Sommerzeit
If Left(WeekdayName(Weekday(i & ".3." & strJahr)), 2) = "So" Then
strSommer = DateValue(FormatDateTime((i & ".3." & strJahr), vbShortDate))
Exit For
End If
Next
For i = 31 To 20 Step -1
' Datum Umstellung auf Winterzeit
If Left(WeekdayName(Weekday(i & ".10." & strJahr)), 2) = "So" Then
strWinter = DateValue(FormatDateTime((i & ".10." & strJahr), vbShortDate))
Exit For
End If
Next
' Bestimmung Sommer- oder Winterzeit
Dim datum
datum = DateValue(FormatDateTime((etag & "." & emnt & "." & ejhr),vbShortDate))
' Umrechnungsfaktoren für UTC -> MEZ bzw. MESZ
If (datum >= strSommer) And (datum < strWinter) Then umrechnung = 2
If (datum < strSommer) Or (datum >= strWinter) Then umrechnung = 1
' Start-/Endzeit auf MEZ/MESZ umrechnen
Dim start, ende
startzeit = bjhr & "-" & bmnt & "-" & btag & " " & bstd & ":" & bmin & ":" & bsek
startzeit = DateAdd("h",-umrechnung,startzeit)
startzeit = Year(startzeit) & "-" & Right("000" & Month(startzeit),2) & "-" & Right("000" & Day(startzeit),2) & " " & Right("000" & Hour(startzeit),2) & ":" & Right("000" & Minute(startzeit),2) & ":" & Right("000" & Second(startzeit),2)
start = bjhr & "-" & bmnt & "-" & btag & " " & bstd & ":" & bmin & ":" & bsek
start = Replace(start,":","_")
endzeit = ejhr & "-" & emnt & "-" & etag & " " & estd & ":" & emin & ":" & esek
endzeit = DateAdd("h",-umrechnung,endzeit)
endzeit = Year(endzeit) & "-" & Right("000" & Month(endzeit),2) & "-" & Right("000" & Day(endzeit),2) & " " & Right("000" & Hour(endzeit),2) & ":" & Right("000" & Minute(endzeit),2) & ":" & Right("000" & Second(endzeit),2)
ende = ejhr & "-" & emnt & "-" & etag & " " & estd & ":" & emin & ":" & esek
ende = Replace(ende,":","_")
Dim oRs
Dim zeit1
' SQL-String
sql_query = "ALARMVIEW:SELECT * FROM ALGVIEWDEU WHERE (DateTime >= '" & startzeit & "') AND (DateTime <= '" & endzeit &"')"
Set obj_rs = CreateObject("ADODB.Recordset")
Set obj_com = CreateObject("ADODB.Command")
obj_com.CommandType = 1
Set obj_com.ActiveConnection = obj_cn
obj_com.CommandText = sql_query
Set obj_rs = obj_com.Execute
record_count = obj_rs.Fields.Count
' CSV-Datei erstellen
csvname = HMIRuntime.ActiveProject.Path & "\Auswertung\" & "Störungshistory_" & Right("000" & Year(Now),4) & "_" & Right("000" & Month(Now),2) & "_" & Right("000" & Day(DateAdd("d",-1,Now)) ,2) & ".csv" '"-" & Right("000" & Hour(Now),2) & "_" & Right("000" & Minute(Now),2) & "_" & Right("000" & Second(Now),2) & "_" & start & "-" & ende & ".csv"
Set obj_fso = CreateObject("Scripting.FileSystemObject")
Set obj_stream = obj_fso.OpenTextFile(csvname, 2, True)
' Spaltenüberschriften schreiben
For col_number = 0 To obj_rs.Fields.Count-1
If col_number = 0 Then
obj_stream.Write obj_rs.Fields(col_number).name
Else
obj_stream.Write ";" & obj_rs.Fields(col_number).name
End If
Next
obj_stream.Write vbCrLf
Dim herkunft, meldetext, bereich
' Datensatz schreiben
If (record_count > 0) Then
obj_rs.movefirst
While Not obj_rs.Eof
herkunft = ucase(Trim(HMIRuntime.Tags("alarmexport_filter_herkunft").Read))
bereich = ucase(Trim(HMIRuntime.Tags("alarmexport_filter_bereich").Read))
meldetext = ucase(Trim(HMIRuntime.Tags("alarmexport_filter_meldetext").Read))
If ( (herkunft = "") Or (InStr(1, ucase(obj_rs.Fields(37).value), herkunft, 0) <> 0) ) And ( (bereich = "") Or (InStr(1, ucase(obj_rs.Fields(38).value), bereich, 0) <> 0) ) And ( (meldetext = "") Or (InStr(1, ucase(obj_rs.Fields(39).value), meldetext, 0) <> 0) ) Then
' Zeit auf MEZ/MESZ umrechnen und in Spalte A einsetzen
zeit1= DateAdd("h",+umrechnung,obj_rs.Fields(2).value)
jhr = Year(zeit1)
mnt = Month(zeit1)
If mnt < 10 Then mnt = "0" & mnt
tag = Day(zeit1)
If tag < 10 Then tag = "0" & tag
std = Hour(zeit1)
If std < 10 Then std = "0" & std
min = Minute(zeit1)
If min < 10 Then min = "0" & min
sek = Second(zeit1)
If sek < 10 Then sek = "0" & sek
zeit1= tag & "." & mnt & "." & jhr & " " & std & ":" & min & ":" & sek
' Ausgabe in Datei
For col_number = 0 To obj_rs.Fields.Count-1
If col_number = 0 Then
obj_stream.Write obj_rs.Fields(col_number).value
Elseif col_number = 2 Then
obj_stream.Write ";" & zeit1
Else
obj_stream.Write ";" & obj_rs.Fields(col_number).value
End If
Next
obj_stream.Write vbCrLf
End If
obj_rs.movenext
Wend
obj_rs.close
End If
Set obj_rs = Nothing
Set obj_cn = Nothing
Set obj_fso = Nothing
End Function