Showing results 1 to 7 of 7

Thread: Archivwerte von einem Archiv ins Andere übertragen

  1. #1

    Default Archivwerte von einem Archiv ins Andere übertragen

    Hallo,

    ein Zenonprojekt verändert sich über die Zeit. Ich habe in einem bestehenden Projekt Energieverbräuche archiviert. Je Energieform habe ich ein Archiv erstellt. Über die Zeit hat es sich aber bewährt alle Verbräuche in einem Archiv zu speichern. Ich habe also ein neues Archiv erstellt in dem alle Variablen liegen die vorher in den anderen Archiven verteilt waren. Nun möchte ich aber das die alten Archivwerte weiter verfügbar sind, und ich möchte auch nicht einen separaten Weg erstellen um einen Trend mit den neuen Werten und einen Trend mit den alten Werten zu erstellen. Die Archive beinhalten auch Folgearchive und haben auch eine etwas andere Auflösung (Aufzeichnungszyklus).
    Grundsätzlich ist es ja möglich Werte in einem Archiv manuell nachzutragen, mit dem Bildtyp Archiv-Nachbearbeitung.
    Was ich aber machen möchte, ist mittels VBA alle alten Archive zu durchlaufen und jeweils abhängig vom Variablennamen die alten Archivwerte in das große neue Archiv übertragen.
    Mit Archiven sollte man etwas vorsichtig sein, deshalb meine Frage, hat schon mal jemand so etwas gemacht?
    Gibt es etwas auf das ich achten muss, oder kann ich einfach neue Archiveinträge anlagen? Kann ich einen Archiveintrag als ganzes Objekt verschieben oder muss ich alle Eigenschaften (Zeit Werst Satus etc.) einzeln auslesen und neu anlegen?
    Bis jetzt habe ich mir mal folgendes zusammen gereimt.
    Public Sub LeftClickUp_Test(obElem As Element)
    'Archivwerte von altem in neues Archiv übertragen
    'Werte werden nach Variablennamen identifiziert
    'Zeitraum der zu übertragenden Werte bitte angeben
      'Declarations
        Dim zArchiveZiel As Archive
        Dim zArchivQuelle As Archive
        
        Dim zArvFilterZiel As ArchiveFilter
        Dim zArvFilterQuelle As ArchiveFilter
        Dim dTime As Double
        
        Dim zArvVarsZiel As ArchiveFilterVariables
        Dim zArvVarsQuelle As ArchiveFilterVariables
        
        Dim myNewArchivValue As ArchiveValue
        
        Dim i As Long
        Dim k As Long
        Dim y As Long
        Dim n As Long
        Dim j As Long
        
        'Initialize zArchive with the first available archive
        Set zArchiveZiel = thisProject.Archives.Item("ArchivZiel")
        'Initialize zArchive with the first available archive
        Set zArchiveQuelle = thisProject.Archives.Item("ArchivQuelle")
        
        'If no archive is availabe, then ...
        If zArchiveZiel Is Nothing Or zArchiveQuelle Is Nothing Then
            '... inform the user
            MsgBox ("No archive available!")
            
        Else
            'Initialize zArvFilter by creating a new archive filter
            Set zArvFilterZiel = zArchiveZiel.ArchiveFilters.CreateArchiveFilter
            'Initialize zArvFilter by creating a new archive filter
            Set zArvFilterQuelle = zArchiveQuelle.ArchiveFilters.CreateArchiveFilter
        End If
        'manuell pflegen
        dTime = System2zenOn(CDbl(CDate("01.01.2014")))
        zArvFilterZiel.StartTime = dTime
        zArvFilterQuelle.StartTime = dTime
        'Endzeit des Filter ist aktuelle Zeit (in Long)
        dTime = System2zenOn(CDbl(Now))
        zArvFilterZiel.EndTime = dTime
        zArvFilterQuelle.EndTime = dTime
        
        'alle Variablen im Archiv in den Filter laden
        For k = 0 To zArchiveZiel.ArchiveVariables.Count - 1
            zArvFilter.AddArchiveVariable zArchiveZiel.ArchiveVariables.Item(k)
            n = n + 1
        Next k
        
        'alle Variablen im Archiv in den Filter laden
        For k = 0 To zArchiveQuelle.ArchiveVariables.Count - 1
            zArvFilterQuelle.AddArchiveVariable zArchiveQuelle.ArchiveVariables.Item(k)
            j = j + 1
        Next k
        
        'Initialize zArvVars by initiating a new filter query
        Set zArvVarsZiel = zArvFilterZiel.Query
        'Initialize zArvVars by initiating a new filter query
        Set zArvVarsQuelle = zArvFilterQuelle.Query
        
        
        'Prüfung ob Werte aus dem Archiv geslesen wurden, oder ob ein Fehler beim Filtern auftrat
        If zArvVarsZiel.Item(0).ArchiveValues.Count = 0 Or zArvVarsQuelle.Item(0).ArchiveValues.Count = 0 Then
            MsgBox ("keine Daten Verfügbar")
            Exit Sub
        End If
        
        For k = 0 To j - 1
            
            For i = 0 To n - 1
                
                If zArvVarsQuelle.Item(j).ArchiveVariable.Name = zArvVarsZiel.Item(n).ArchiveVariable.Name Then
            
                    For y = 0 To zArvVarsQuelle.Item(j).ArchiveValues.Count - 1
                    
                            Set myNewArchivValue = zArvVarsZiel.Item(n).ArchiveValues.CreateArchiveValue
                            Set myNewArchivValue = zArvVarsQuelle.Item(j).ArchiveValues.Item(y)
                            myNewArchivValue.SetModified 'set entry to modified
                            
                    Next y
                End If
            Next i
        Next k
        
    End Sub

    Gruß Tobi
    Last edited by zero : 11th February 2016 at 15:23
    Zenon 8.00

    Zenon Server Windows R2016

    Clients WebClientStarter / Windows 10 Enterprise

    ZenonWebserver 8.00



    --trust me i'm an engineer--

  2. #2
    Join Date
    10.12.2007
    Posts
    192

    Default AW: Archivwerte von einem Archiv ins Andere übertragen

    Ich habe erst kürzlich versucht, über VBA einem Archiv nachträglich Werte einer neu hinzugefügten Variable hinzuzufügen. Leider ohne Erfolg

    Angeblich ist das von der Art des Archivs abhängig ob das funktioniert oder nicht (soviel ich noch weiß, soll's mit zyklischen Archiven nicht gehen), aber ich glaube das funktioniert nie. (zenon Version 7.11 Build 19853)

    (Zur Info: Ich wollte bei einem getriggerten Archiv zu den Zeitpunkten anderer Archivvalues je ein Archivvalue für die neue Variable erstellen.)

    [EDIT: Allerdings find ich den Teil etwas komisch:
    Set myNewArchivValue = zArvVarsZiel.Item(n).ArchiveValues.CreateArchiveVa lue
    Set myNewArchivValue = zArvVarsQuelle.Item(j).ArchiveValues.Item(y)
    myNewArchivValue.SetModified 'set entry to modified

    zuerst erstellst Du ein neues Archivvalue im Zielarchiv, dann holst Du Dir aber wieder das Value aus dem Quellarchiv und setzt das auf modified? Warum nicht das im Zielarchiv?]
    Last edited by mst : 12th February 2016 at 08:51

  3. #3

    Default AW: Archivwerte von einem Archiv ins Andere übertragen

    Hallo,

    danke für die Rückmeldung. Ja du hast recht, das macht wenig Sinn. Der Gedanke war einen Archivwert im Zielarchiv zu erzeugen und dann alle Eigenschaften des Archiveintrags auf einmal vom Quellearchiv in den neuen Wert zu schreiben. Aber "Set" kann man hier nicht nutzen. Ich habe den Code noch nicht wirklich getestet. Aber ich werde jetzt mal ein Testarchiv anlegen, um das Skript zu testen. Falls ich Erfolg habe, melde ich mich wieder hier....und auch falls nicht
    Habe es mal etwas angepasst.

    Public Sub LeftClickUp_Test(obElem As Element)
    'Archivwerte von altem in neues Archiv übertragen
    'Werte werden nach Variablennamen Aufgelöst
    'Zeitraum der zu übertragenden Werte bitte angeben
      'Declarations
        Dim zArchiveZiel As Archive
        Dim zArchivQuelle As Archive
        
        Dim zArvFilterZiel As ArchiveFilter
        Dim zArvFilterQuelle As ArchiveFilter
        Dim dTime As Double
        
        Dim zArvVarsZiel As ArchiveFilterVariables
        Dim zArvVarsQuelle As ArchiveFilterVariables
        
        Dim myNewArchivValue As ArchiveValue
        
        Dim i As Long
        Dim k As Long
        Dim y As Long
        Dim n As Long
        Dim j As Long
        
        'Initialize zArchive with the first available archive
        Set zArchiveZiel = thisProject.Archives.Item("ArchivZiel")
        'Initialize zArchive with the first available archive
        Set zArchiveQuelle = thisProject.Archives.Item("ArchivQuelle")
        
        'If no archive is availabe, then ...
        If zArchiveZiel Is Nothing Or zArchiveQuelle Is Nothing Then
            '... inform the user
            MsgBox ("No archive available!")
            
        Else
            'Initialize zArvFilter by creating a new archive filter
            Set zArvFilterZiel = zArchiveZiel.ArchiveFilters.CreateArchiveFilter
            'Initialize zArvFilter by creating a new archive filter
            Set zArvFilterQuelle = zArchiveQuelle.ArchiveFilters.CreateArchiveFilter
        End If
        
        'manuell pflegen*****************************************
        'Startzeit des Filter(in Long)
        dTime = System2zenOn(CDbl(CDate("01.01.2014")))
        zArvFilterZiel.StartTime = dTime
        zArvFilterQuelle.StartTime = dTime
        'Endzeit des Filter(in Long)
        dTime = System2zenOn(CDbl(CDate("01.01.2014")))
        zArvFilterZiel.EndTime = dTime
        zArvFilterQuelle.EndTime = dTime
        'manuell pflegen*****************************************
        
        'alle Variablen im Archiv in den Filter laden
        For k = 0 To zArchiveZiel.ArchiveVariables.Count - 1
            zArvFilter.AddArchiveVariable zArchiveZiel.ArchiveVariables.Item(k)
            n = n + 1
        Next k
        
        'alle Variablen im Archiv in den Filter laden
        For k = 0 To zArchiveQuelle.ArchiveVariables.Count - 1
            zArvFilterQuelle.AddArchiveVariable zArchiveQuelle.ArchiveVariables.Item(k)
            j = j + 1
        Next k
        
        'Initialize zArvVars by initiating a new filter query
        Set zArvVarsZiel = zArvFilterZiel.Query
        'Initialize zArvVars by initiating a new filter query
        Set zArvVarsQuelle = zArvFilterQuelle.Query
        
        
        'Prüfung ob Werte aus dem Archiev geslesen wurden, oder ob ein Fehler beim Filtern auftrat
        If zArvVarsZiel.Item(0).ArchiveValues.Count = 0 Or zArvVarsQuelle.Item(0).ArchiveValues.Count = 0 Then
            MsgBox ("keine Daten Verfügbar")
            Exit Sub
        End If
        'Für jede Variable im Zielarchiv
        For k = 0 To j - 1
            'Für jede Variable im Quellarchiv
            For i = 0 To n - 1
                'Vergleich ist die Variable im Zielarchiv im Quellarchiv enthalten
                If zArvVarsQuelle.Item(j).ArchiveVariable.Name = zArvVarsZiel.Item(n).ArchiveVariable.Name Then
                    'Für jeden Archivwert der Variable im Filter
                    For y = 0 To zArvVarsQuelle.Item(j).ArchiveValues.Count - 1
                            'Erzeugen des neuen Archivwertes
                            Set myNewArchivValue = zArvVarsZiel.Item(n).ArchiveValues.CreateArchiveValue
                            'Übernahme der Eigenschaften aus dem Quellarchiv
                            myNewArchivValue.Parent = zArvVarsQuelle.Item(j).ArchiveValues.Item(y).Parent
                            myNewArchivValue.Time = zArvVarsQuelle.Item(j).ArchiveValues.Item(y).Time
                            myNewArchivValue.TimeMilliSec = zArvVarsQuelle.Item(j).ArchiveValues.Item(y).TimeMilliSec
                            myNewArchivValue.Value = zArvVarsQuelle.Item(j).ArchiveValues.Item(y).Value
                            'Status auf Manuell setzen
                            myNewArchivValue.Status = &H1000
                            'Aktivieren des erzeugten Wertes
                            myNewArchivValue.SetModified 'set entry to modified
                            
                    Next y
                End If
            Next i
        Next k
        
    End Sub


    Gruß Tobi
    Last edited by zero : 12th February 2016 at 10:11
    Zenon 8.00

    Zenon Server Windows R2016

    Clients WebClientStarter / Windows 10 Enterprise

    ZenonWebserver 8.00



    --trust me i'm an engineer--

  4. #4
    Join Date
    13.08.2013
    Posts
    57

    Default Re: Archivwerte von einem Archiv ins Andere übertragen

    Hi,
    hier eine Beispiel wie man das in C# umsetzen kann, sollte aber in VBA analog funktionieren, hierbei wird auch überprüft ob für den Zeitpunkt schon ein Eintrag existiert in dem Fall würde er angepasst ( changeSingleArchiveValue)


     public Int32 WriteArchive(Variable pVariable, System.DateTime pTimestamp, Double pValue, Int32 pStatus)
        {
          Int32 result = -1;
          zenOn.Project currentProject = getProjectByGuid(pVariable.ProjectGuid.ToString());
    
          if (currentProject != null)
          {
            //Check if an entry exists at the given timestamp, if yes overwrite and return
            Double currentValue;
            if (CheckIfArchiveEntryExists(pVariable, pTimestamp, out currentValue))
            {
              if (changeSingleArchiveValue(pVariable, pTimestamp, pValue))
              {
                return 0;
              }
    
              return -1;
            }
    
            for (Int32 i = 0; i < currentProject.Archives().Count; i++)
            {
              //Compare all ArchivesID with pShortName if match archive is found
              if (currentProject.Archives().Item(i).Identifier == pVariable.ArchivShortName)
              {
                zenOn.Archive archive = currentProject.Archives().Item(i);
                zenOn.ArchiveFilter filter = archive.ArchiveFilters().CreateArchiveFilter();
    
                //Try to Add Variable to Filter
                if (filter.AddArchiveVariable(archive.ArchiveVariables().Item(pVariable.Name)))
                {
                  //Apply Changes to filter if Variable could be added
                  filter.ApplyChanges();
                  zenOn.ArchiveFilterVariables avariables = filter.Query();
                  Int32 timestamp = (Int32)(pTimestamp.ConvertToUnixTimeStamp());
    
                  //Make sure only 1 Variable was applied to filter
                  if (avariables.Count == 1)
                  {
                    zenOn.ArchiveFilterVariable filterVariable = avariables.Item(0);
                    zenOn.ArchiveValue aValue = filterVariable.ArchiveValues().CreateArchiveValue();
                    aValue.Status = pStatus;
                    aValue.Time = timestamp;
                    aValue.TimeMilliSec = 0;
                    aValue.Value = pValue;
                    aValue.SetModified();
                    result = Convert.ToInt32(filter.ApplyChanges());
    
                    filterVariable = null;
                    aValue = null;
                  }
                  avariables = null;
                }
                archive = null;
                filter = null;
              }
            }
          }
    
          currentProject = null;
          GC.WaitForPendingFinalizers();
          GC.Collect();
    
          return result;
        }
    lg
    Sigi

  5. #5

    Default AW: Archivwerte von einem Archiv ins Andere übertragen

    Hallo,

    ich hab jetzt noch etwas an dem Skript gearbeitet und der aktuelle Stand ist der, dass es Fehlerfrei durchläuft. Aber leider tauchen die Werte nicht im Archiv auf
    Die zwei Archive "EL" und "EV" sind zyklische Archive (Aufzeichnungszeit alle 15min) die Dateien werden jeden Monat abgeschlossen und es werden Folgearchive gebildet. Die ursprünglichen Daten werden aber auch 5 Jahre aufgehoben.
    Kann hier jemand definitiv sagen ob ich mittels VBA künstliche Archivwerte erzeugen kann oder nicht. Habe versucht das Skript über den WebClient oder direkt am Server aus zu führen. Kein Ergebnis. Obwohl er schon einige Zeit am Arbeiten ist.

    Public Sub LeftClickUp_Test(obElem As Element)
    'Archivwerte von altem in neues Archiv übertragen
    'Werte werden nach Variablennamen Aufgelöst
    'Zeitraum der zu übertragenden Werte bitte angeben
      'Declarations
        Dim zArchivZiel As Archive
        Dim zArchivQuelle As Archive
        
        Dim zArvFilterZiel As ArchiveFilter
        Dim zArvFilterQuelle As ArchiveFilter
        Dim dTime As Double
        
        Dim zArvVarsZiel As ArchiveFilterVariables
        Dim zArvVarsQuelle As ArchiveFilterVariables
        
        Dim myNewArchivValue As ArchiveValue
        
        Dim i As Long
        Dim k As Long
        Dim y As Long
        Dim n As Long
        Dim j As Long
        
        Dim StartZeit As Date
        Dim Endzeit As Date
        
        'manuell pflegen*****************************************
        For k = 0 To thisProject.Archives.Count - 1
            'Initialize zArchive Ziel
            If thisProject.Archives.Item(k).LongName = "EL" Then
                Set zArchivZiel = thisProject.Archives.Item(k)
            End If
            'Initialize zArchive Quelle
            If thisProject.Archives.Item(k).LongName = "EV" Then
                Set zArchivQuelle = thisProject.Archives.Item(k)
            End If
        Next k
        '*********************************************************
        
        MsgBox ("Quelle: " & zArchivQuelle.Name & " Ziel: " & zArchivZiel.Name)
        'If no archive is availabe, then ...
        If zArchivZiel Is Nothing Or zArchivQuelle Is Nothing Then
            '... inform the user
            MsgBox ("No archive available!")
            
        Else
            'Initialize zArvFilter by creating a new archive filter
            Set zArvFilterZiel = zArchivZiel.ArchiveFilters.CreateArchiveFilter
            'Initialize zArvFilter by creating a new archive filter
            Set zArvFilterQuelle = zArchivQuelle.ArchiveFilters.CreateArchiveFilter
        End If
        
        'manuell pflegen*****************************************
        'Startzeit des Filter
        StartZeit = #9/1/2015#
        zArvFilterZiel.StartTime = System2zenOn(CDbl(StartZeit))
        zArvFilterQuelle.StartTime = System2zenOn(CDbl(StartZeit))
        'Endzeit des Filter
        Endzeit = #9/2/2015#
        zArvFilterZiel.EndTime = System2zenOn(CDbl(Endzeit))
        zArvFilterQuelle.EndTime = System2zenOn(CDbl(Endzeit))
        '*********************************************************
        
        'alle Variablen im Archiv in den Filter laden
        For k = 0 To zArchivZiel.ArchiveVariables.Count - 1
            zArvFilterZiel.AddArchiveVariable zArchivZiel.ArchiveVariables.Item(k)
            n = n + 1
        Next k
    '    zArvFilter.AddArchiveVariable zArchiveZiel.ArchiveVariables.Item(k)
        'alle Variablen im Archiv in den Filter laden
        For k = 0 To zArchivQuelle.ArchiveVariables.Count - 1
            zArvFilterQuelle.AddArchiveVariable zArchivQuelle.ArchiveVariables.Item(k)
            j = j + 1
        Next k
    '    zArvFilterQuelle.AddArchiveVariable zArchiveQuelle.ArchiveVariables.Item(k)
        'Initialize zArvVars by initiating a new filter query
        Set zArvVarsZiel = zArvFilterZiel.Query
        'Initialize zArvVars by initiating a new filter query
        Set zArvVarsQuelle = zArvFilterQuelle.Query
        
        
        'Prüfung ob Werte aus dem QuellArchiv geslesen wurden, oder ob ein Fehler beim Filtern auftrat
        If zArvVarsQuelle.Item(0).ArchiveValues.Count = 0 Then
            MsgBox ("keine Daten Verfügbar")
            Exit Sub
        Else
            MsgBox ("Es wurden " & zArvVarsQuelle.Count & " Variablen im Archiv mit jeweils " & zArvVarsQuelle.Item(0).ArchiveValues.Count & " Werte gefunden.")
        End If
        
        'Für jede Variable im Zielarchiv
        For k = 0 To j - 1
            'Für jede Variable im Quellarchiv
            For i = 0 To n - 1
                'Vergleich ist die Variable im Zielarchiv im Quellarchiv enthalten
                If zArvVarsQuelle.Item(i).ArchiveVariable.Name = "Visu_UDINT_EnergieVerbrauch[" & k & "]" Then 'zArvVarsZiel.Item(k).ArchiveVariable.Name Then
                    'Für jeden Archivwert der Variable im Filter
                    For y = 0 To zArvVarsQuelle.Item(i).ArchiveValues.Count - 1
                            'Erzeugen des neuen Archivwertes
                            Set myNewArchivValue = zArvVarsZiel.Item(k).ArchiveValues.CreateArchiveValue
                            'Übernahme der Eigenschaften aus dem Quellarchiv
                            myNewArchivValue.Time = zArvVarsQuelle.Item(i).ArchiveValues.Item(y).Time
                            myNewArchivValue.Value = zArvVarsQuelle.Item(i).ArchiveValues.Item(y).Value * 4
                            'Status auf Manuell setzen
                            myNewArchivValue.Status = &H1000
                            'Aktivieren des erzeugten Wertes
                            myNewArchivValue.SetModified 'set entry to modified
    
                    Next y
                End If
            Next i
        Next k
        
    MsgBox ("Fertig, Im Zielarchive wurden bei " & i & " Variablen " & y & " Werte ersetzt.")
        
    End Sub

    Über die Seite Archivnachbearbeitung lassen sich Werte anlegen. Gibt es etwas essenzielles was in dem Skript fehlt?
    Muss man das Archiv noch speichern?
    Last edited by zero : 8th March 2016 at 10:37
    Zenon 8.00

    Zenon Server Windows R2016

    Clients WebClientStarter / Windows 10 Enterprise

    ZenonWebserver 8.00



    --trust me i'm an engineer--

  6. #6
    Join Date
    10.12.2007
    Posts
    192

    Default AW: Archivwerte von einem Archiv ins Andere übertragen

    Vielleicht ist nach .SetModified noch ein Filter.ApplyChanges nötig (vgl.C# Code von sntech)
    Hab's aber nicht ausprobiert, ist mir nur beim Vergleich aufgefallen.

  7. #7

    Default AW: Archivwerte von einem Archiv ins Andere übertragen

    Hallo,

    vielen Dank für die Unterstützung. Das Skript funktioniert jetzt soweit.
    Es kopiert Archivwerte von einem ins andere Archiv abhängig vom Namen der archivierten Variablen. Meine Archive sind zyklische Archive welche jeden Monat abgeschlossen werden.
    Man muss nur das Quell und Ziel Archiv, sowie den Zeitraum der kopiert werden soll manuell ändern. (Es sollte nie zu viele Werte auf einmal kopiert werden)
    Es wird nicht auf vorhandene Einträge geprüft, da dies bei mir nicht nötig war.
    Es sollte dringen darauf geachtet werden, das kein Archiv Werte aufzeichnet, während das Skript ausgeführt wird. Also vorher alle Archive stoppen.
    Nutzung auf eigene Gefahr

    Public Sub LeftClickUp_Test(obElem As Element)
    'Archivwerte von einem in anderes Archiv übertragen, abhängig vom Variablennamen
    '#########################################
    '#    !!!!!!!!!!!!ACHTUNG!!!!!!!!!!!!    #
    '#    Das Zielarchiv sollte leer sein,   #
    '#     es wird nicht geprüft, ob im      #
    '# Zielarchiv schon Werte vorhanden sind #
    '#    Es kommt zu Werten mit gleichem    #
    '#             Zeitstempel!              #
    '#########################################
      
      'Declarations
        Dim zArchivZiel As Archive
        Dim zArchivQuelle As Archive
        
        Dim zArvFilterZiel As ArchiveFilter
        Dim zArvFilterQuelle As ArchiveFilter
        Dim dTime As Double
        
        Dim zArvVarsZiel As ArchiveFilterVariables
        Dim zArvVarsQuelle As ArchiveFilterVariables
        
        Dim myNewArchivValue As ArchiveValue
        
        Dim i As Long
        Dim k As Long
        Dim y As Long
        Dim n As Long
        Dim j As Long
        
        Dim StartZeit As Date
        Dim Endzeit As Date
        
        Dim Index As Integer
        Dim sItemVariable As String
            
        'manuell pflegen*****************************************
        For k = 0 To thisProject.Archives.Count - 1
            'Initialize zArchive ZIEL
            If thisProject.Archives.Item(k).LongName = "AA" Then '*****
                Set zArchivZiel = thisProject.Archives.Item(k)
            End If
            'Initialize zArchive QUELLE
            If thisProject.Archives.Item(k).LongName = "EV" Then '*****
                Set zArchivQuelle = thisProject.Archives.Item(k)
            End If
        Next k
        '*********************************************************
        
        MsgBox ("Quelle: " & zArchivQuelle.Name & " Ziel: " & zArchivZiel.Name)
        'If no archive is availabe, then ...
        If zArchivZiel Is Nothing Or zArchivQuelle Is Nothing Then
            '... inform the user
            MsgBox ("No archive available!")
            
        Else
            'Initialize zArvFilter by creating a new archive filter
            Set zArvFilterZiel = zArchivZiel.ArchiveFilters.CreateArchiveFilter
            'Initialize zArvFilter by creating a new archive filter
            Set zArvFilterQuelle = zArchivQuelle.ArchiveFilters.CreateArchiveFilter
        End If
        
        'manuell pflegen*****************************************
        'Startzeit des Filter
        StartZeit = #1/1/2016#    '*****
        zArvFilterZiel.StartTime = System2zenOn(CDbl(StartZeit))
        zArvFilterQuelle.StartTime = System2zenOn(CDbl(StartZeit))
        'Endzeit des Filter
        Endzeit = #1/31/2016 11:59:00 PM#   '*****
        zArvFilterZiel.EndTime = System2zenOn(CDbl(Endzeit))
        zArvFilterQuelle.EndTime = System2zenOn(CDbl(Endzeit))
        '*********************************************************
        
        'alle Variablen im Archiv in den Filter laden
        For k = 0 To zArchivZiel.ArchiveVariables.Count - 1
            zArvFilterZiel.AddArchiveVariable zArchivZiel.ArchiveVariables.Item(k)
            n = n + 1
        Next k
    '    zArvFilter.AddArchiveVariable zArchiveZiel.ArchiveVariables.Item(k)
        'alle Variablen im Archiv in den Filter laden
        For k = 0 To zArchivQuelle.ArchiveVariables.Count - 1
            zArvFilterQuelle.AddArchiveVariable zArchivQuelle.ArchiveVariables.Item(k)
            j = j + 1
        Next k
    '    zArvFilterQuelle.AddArchiveVariable zArchiveQuelle.ArchiveVariables.Item(k)
        'Initialize zArvVars by initiating a new filter query
        Set zArvVarsZiel = zArvFilterZiel.Query
        'Initialize zArvVars by initiating a new filter query
        Set zArvVarsQuelle = zArvFilterQuelle.Query
        
        'Prüfung ob Werte aus dem QuellArchiv geslesen wurden, oder ob ein Fehler beim Filtern auftrat
        If zArvVarsQuelle.Item(0).ArchiveValues.Count = 0 Then
            MsgBox ("keine Daten Verfügbar")
            Exit Sub
        End If
        
        'Für jede Variable im Zielarchiv
        For k = 0 To n - 1
            'Für jede Variable im Quellarchiv
            For i = 0 To j - 1
                'Vergleich ist die Variable im Zielarchiv im Quellarchiv enthalten
                'sItemVariable = zArvVarsQuelle.Item(i).ArchiveVariable.Name
                'Index = Val(Mid(sItemVariable, InStr(1, sItemVariable, "[") + 1, (InStr(1, sItemVariable, "]") - 1 - InStr(1, sItemVariable, "[") + 1)))
                If zArvVarsQuelle.Item(i).ArchiveVariable.Name = zArvVarsZiel.Item(k).ArchiveVariable.Name Then
                    'Für jeden Archivwert der Variable im Filter
                    For y = 0 To zArvVarsQuelle.Item(i).ArchiveValues.Count - 1
                        'Erzeugen des neuen Archivwertes
                        Set myNewArchivValue = zArvVarsZiel.Item(k).ArchiveValues.CreateArchiveValue
                        'Übernahme der Eigenschaften aus dem Quellarchiv
                        myNewArchivValue.Time = zArvVarsQuelle.Item(i).ArchiveValues.Item(y).Time
                        myNewArchivValue.TimeMilliSec = 0
                        myNewArchivValue.Value = zArvVarsQuelle.Item(i).ArchiveValues.Item(y).Value * 4
                        'Status auf Manuell setzen
                        myNewArchivValue.Status = &H1000
                        'Aktivieren des erzeugten Wertes
                        myNewArchivValue.SetModified 'set entry to modified
                    Next y
                End If
            Next i
        Next k
        zArvFilterZiel.ApplyChanges    'Daten Speichern
    MsgBox ("Fertig")
        
    End Sub

    Vielen Dank nochmal.

    Gruß Tobi
    Zenon 8.00

    Zenon Server Windows R2016

    Clients WebClientStarter / Windows 10 Enterprise

    ZenonWebserver 8.00



    --trust me i'm an engineer--

Similar Threads

  1. Replies: 3
    Last Post: 16th July 2015, 10:19
  2. Replies: 4
    Last Post: 4th November 2014, 19:59
  3. Datenpunkt einem bestehenden Rezept hinzufügen
    By michael.winter in forum VSTA
    Replies: 14
    Last Post: 23rd September 2014, 13:14
  4. einen webclient anders konfigurieren als andere?
    By michab in forum Webserver/Webclient
    Replies: 4
    Last Post: 22nd April 2014, 17:00
  5. Replies: 1
    Last Post: 2nd December 2008, 11:07

Posting Rules

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •