VBA Code:
Public Sub LeftClickUp_Archiv_Export(obElem As Element)
'Declarations
Dim obPicture As DynPicture
Dim nKurven As Integer
Dim i As Integer
Dim k As Integer
Dim j As Long
Dim lngMin As Long
Dim TimefilterTyp As Long
Dim zArchive As Archive
Dim zArvFilter(15) As ArchiveFilter
Dim zArvVars As ArchiveFilterVariables
Dim dTime As Double
Dim nArchiveinträge As Integer
Dim sPath As Variant
Dim strOutput As String
Dim Time As Date
On Error GoTo ERROR_HANDLING
'Zugriff auf Bild und damit auf die aktiven Bildfilter
Set obPicture = obElem.Parent.Parent
If (obPicture Is Nothing) Then
MsgBox "Error: Picture-object is invalid..."
Exit Sub
End If
'–ffnet Dialog um Speicherort auszuwählen
sPath = GetOrdner("")
'Falls bei der Funktion GetOrdner kein Ordner ausgewählt wurde -> Abbruch
If sPath = "" Then
MsgBox ("Daten wurden nicht exportiert")
Exit Sub
End If
'Erstelle Dateipfad aus "Export", der aktuellen Zeit und gesamten Dateipfad
sPath = sPath & "\Export_" & Format(Now(), "yyyy_mm_dd_hh_mm_ss") & ".csv"
'Erstellen und öffnen der csv Datei
Open sPath For Output As #1
'Visu Bildschirm wird während der Abarbeitung gesperrt
thisProject.RtFunctions.Item("FU_BU_Hauptfenster_Vorgang_in_Bearbeitung").Start
thisProject.DynPictures.Item("B_Vorgang in Bearbeitung").UpdateAll
'Anzahl der im Diagramm Dargestellten Kurven
nKurven = obPicture.PictureFilter.DynProperties("Curve[-1]")
'Für jede Kurve
Do While i < nKurven
'Suche in welchem Archiv die dargestellte Variable liegt (LongName Archiv Kürzel (z.B. T0))
For k = 0 To thisProject.Archives.Count - 1
If thisProject.Archives.Item(k).LongName = obPicture.PictureFilter.DynProperties("Curve[" & i & "].VarInfo.Archive") Then
'Speichern des richitgen Archives in der Variable zArchive
Set zArchive = thisProject.Archives.Item(k)
End If
Next
'Wenn kein Archiv verfügbar...
If zArchive Is Nothing Then
'... Ausgabe der Meldung
MsgBox ("Kein Archiv gefunden!")
Exit Sub
Else
'Erstellen eines neuen Archivfilters
3 Set zArvFilter(i) = zArchive.ArchiveFilters.CreateArchiveFilter
'Variable an Archivfilter übergeben
4 zArvFilter(i).AddArchiveVariable zArchive.ArchiveVariables.Item(obPicture.PictureFilter.DynProperties("Curve[" & i & "].VarInfo.VarName"))
'Zeitfiltertyp für Bestimmung der Berechnung von Start- und Endzeit des Archivfilters
TimefilterTyp = obPicture.PictureFilter.DynProperties("TimeAxe.TimeFilter.TimeFormat")
'Timefilter = 10 bedeutet Relativer Zeitraum
If TimefilterTyp = 10 Then
'Berechnung Start und Endzeit des Archivfilter bei Relativem Zeitraum
'Bestimmen der Länge des dargestellten Zeitraums (z.B. 1440min für Letzte 24h)
lngMin = DateDiff("n", obPicture.PictureFilter.DynProperties("TimeAxe.TimeFilter.ARVTime2"), obPicture.PictureFilter.DynProperties("TimeAxe.TimeFilter.ARVTime1"))
'Startzeit des Filters ist aktuelle Zeit - Zeitraum (in Long)
dTime = System2zenOn(CDbl(CDate(DateAdd("n", -lngMin, Now))))
zArvFilter(i).StartTime = dTime
'Endzeit des Filter ist aktuelle Zeit (in Long)
dTime = System2zenOn(CDbl(Now))
zArvFilter(i).EndTime = dTime
Else
'Timefilter <> 10 = bedeutet absoluter Zeitraum
'œbergabe der Start und Endzeit des Archivfilters, direkt aus PictureFilter (in Long)
dTime = System2zenOn(CDbl(obPicture.PictureFilter.DynProperties("TimeAxe.TimeFilter.ARVTime1")))
zArvFilter(i).StartTime = dTime
dTime = System2zenOn(CDbl(obPicture.PictureFilter.DynProperties("TimeAxe.TimeFilter.ARVTime2")))
zArvFilter(i).EndTime = dTime
End If
End If
'Aktiviere des aktuellen Archivfilter
5 Set zArvVars = zArvFilter(i).Query
'Prüfung ob Werte aus dem Archiev geslesen wurden, oder ob ein Fehler beim Filtern auftrat
6 If zArvVars.Item(0).ArchiveValues.Count = 0 Then
MsgBox ("keine Daten Verfügbar")
'Schließt Anzeige für laufende Bearbeitung
thisProject.RtFunctions.Item("FU_SchabloneSchließen_Popup_GLT_Erweitert").Start
Close #1
Exit Sub
End If
'Test Name des Zähler/Sensors ist der GraphName
VarName = obPicture.PictureFilter.DynProperties("Curve[" & i & "].GraphName")
'œbergabe der Archivwerte an *.csv Datei
'œberschrift pro Exportierter Variable
7 Print #1, ";" & "Name: " & VarName & ";" & "Einheit: " & obPicture.PictureFilter.DynProperties("Curve[" & i & "].Titel") & "/" & obPicture.PictureFilter.DynProperties("Curve[" & i & "].YAxe.Titel")
8 Print #1, "Uhrzeit" & ";" & "Variable" & ";" & "Wert"
'Print Funktion wird für jeden Archiveintrag der Variable durchgeführt
For j = 0 To zArvVars.Item(0).ArchiveValues.Count - 1
'Emittelt die Speicherzeit im DateFormat
9 Time = CDate(zenOn2System(zArvVars.Item(0).ArchiveValues.Item(j).Time))
'String der in die Datei geschrieben wird (Zeit, Variablenname, Archivwert)
10 strOutput = Format(Time, "dd.mm.yyyy hh:mm") & ";" & VarName & ";" & zArvVars.Item(0).ArchiveValues.Item(j).Value
'schreiben
Print #1, strOutput
Next j
'Increment Index für nächste Kurve
i = i + 1
Loop
'Datei nach Export schließen
Close #1
'Schließt Anzeige für laufende Bearbeitung
thisProject.RtFunctions.Item("FU_SchabloneSchließen_Popup_GLT_Erweitert").Start
Exit Sub
ERROR_HANDLING:
'Schließt Anzeige für laufende Bearbeitung
thisProject.RtFunctions.Item("FU_SchabloneSchließen_Popup_GLT_Erweitert").Start
'Fehlerausgabe
MsgBox ("Export nicht erfolgreich! " & vbCrLf _
& "Fehlernummer: " & Err.Number & _
vbCrLf & "Fehlerbeschreibung: " & Err.Description & _
vbCrLf & "Fehler Line: " & Erl())
Close #1
End Sub
This document governs the use of our Community Forum. By registering and using the platform, you accept these conditions.
The COPA-DATA Community Forum serves to encourage the exchange of information and experience about the zenon software between forum users respectively zenon users.
Please mind that any published information on the Community Forum is the subjective opinion and view based on the experience and the level of knowledge of the author. COPA-DATA does not overtake any responsibility for the content and the accuracy of the shared information.
Users of the Community Forum are encouraged to share only well-founded experiences and to point out any risks associated with the implementation of proposed solutions to problems. COPA-DATA at its absolute discretion, reserves the right to moderate the forum. In this connection COPA-DATA may remove any information containing false facts, potentially dangerous solutions, bad language or content that may insult, degrade or discriminate others. COPA-DATA may block a non-complying user from forum access if the user violated this provision.
COPA-DATA reserves the right to change this document from time to time at own discretion.
Ing. Punzenberger COPA-DATA GmbH
Karolingerstraße 7b · 5020 Salzburg · Austria
www.copadata.com