# WinCC flexible 2008 Variablenarchiv



## Rebersbou (22 März 2010)

Hallo Leute,

ich steh momentan ein bisschen auf dem Schlauch. 

Ich würde gerne eine Temperaturaufzeichnung machen. Soweit noch nicht tragisch. Ich habe mir dazu ein Skript geschrieben, das mir täglich eine neue Datei anlegt z.B. 24_12_2009.csv in der, nach einem einstellbaren Intervall, die Temperaturistwerte aufgezeichnet werden. Diese Dateien werden dann auf einem USB-Stick oder SD-Karte oder Netzlaufwerk gespeichert. Allerdings muss die Auswertung des Temperaturverlaufs auf einem Rechner mit Excel erfolgen. Jetzt hätte ich gerne, das der Temperaturverlauf für einen Tag (eine Datei) als Kurvenanzeige auf dem Panel dargestellt wird. Einfach aus dem Grund, damit Excel wegfällt.

Jetzt stellt sich mir die Frage...Wie geht denn das?

Ich habe mir schonmal überlegt, die Daten, die ich archivieren möchte so zu formatieren wie sie auch als Variablenarchiv (.csv) gespeichert werden. Sprich: VarName, TimeString ...usw. 
Ich bin nur noch nicht dahinter gestiegen, wie sich die Time_ms zusammensetzt und welche Bedeutung die Validity hat. Der Rest ist eigentlich klar.

Sollte das so funktionieren könnte ich meine Archivierung so ähnlich lassen, wie sie ist und kopiere mir die entsprechende Datei, die ich anzeigen lassen will dann nur noch in den Pfad, auf dem das Variablenarchiv zugreift. Und potz blitz hätte ich meine Daten als Kurvenanzeige auf dem Panel.

Könnte das so funktionieren? Oder bin ich da komplett auf dem Holzweg? Hat einer ne bessere Idee? Vielleicht gibts da ja schon was fertiges. Man muss ja das Rad nicht neu erfinden. 

Achja, ich verwende ein MP277 8" mit WinCC Flexible 2008 SP1

Schonmal vielen Dank

MfG

Mathias


----------



## poti2 (16 Februar 2011)

tach,tach Rebersbou

zu deinem Problem kann ich dir leider nicht so richtig helfen. Vieleicht kannst du mir ja helfen, ich habe gerade dass Problem, dass du in deinem ersten Satz beschreibst. Ich möchte bei einem Kunden eine Archivierung durchführen, in der die Dateien so heißen wie dass Datum.  Kannst du mir veraten, wie du das Script geschrieben hast?

Gruß poti2


----------



## winnman (16 Februar 2011)

die "normale" Trendfunktion wird wohl nicht deine Lösung sein?


----------



## poti2 (16 Februar 2011)

hallo winnman,

ne, ich brauche sozusage eine Endlos-Archivierung. Die max.40 Umlaufarchive reichen dem Kunden nicht, deshalb am besten jeden Tag ein neues Archiv.


----------



## wiesel187 (19 Februar 2011)

*Altes Thema aber neue Frage !!*

Hier ist ein Beispiel :


```
Dim fso, f, ts, bCreated, FName, Dataset, Header, Storage_Path, strName, strTemp, arr, strDir

Dim RaumNr
Dim IstTemp
Dim SollTemp


For RaumNr = 1 To 130
               
            ' Ablagepfad festlegen 
            Storage_Path = "E:\Raumtemperaturen\Raum_" & RaumNr 
            
            ' Archivierungspfad (Eingangsparameter) und Dateiname zusammensetzen -> Archiv_01_d_m_yyyy
            FName = Storage_Path & "\" & CStr(DatePart("d",Date)) & "_" & CStr(DatePart("m",Date)) & "_" & CStr(DatePart("yyyy",Date)) & ".csv"
            
            ' Tabellenkopf zusammenstellen  
            Header = "Datum; Ist ; Soll" &  Chr(10)
            
            ' FileSystemObject erstellen
            Set fso = CreateObject("Scripting.FileSystemObject") 
            
                'Prüfen ob Ablagepfad vorhanden, wenn nicht -> erzeugen.
                Script_Storage_Path Storage_Path ' Übergabe des Ablagepfades aus dem Script "Script_Storage_Path" / Handing over of the storage path from the script "Script_Storage_Path"
            
            ' Allgemeine Fehlerauswertung -> Datei konnte nicht angelegt oder ist geöffnet werden
            On Error Resume Next 
            
            ' Datei öffnen bzw. erstellen, wenn sie noch nicht existiert
            bCreated = False    ' Hilfsvariable, Datei bereits angelegt / Help tag, File exist?
            If Not fso.FileExists(FName) Then
                 fso.CreateTextFile FName
                 bCreated=True 
            End If
            
            
            Set f = fso.GetFile(FName)
            Set ts = f.OpenAsTextStream (8,-2)
            
            
            ' Fehlernummer <> 0 -> Meldung 
            If Err.Number <> 0 Then 
                Call ShowSystemAlarm ("Datei konnte nicht angelegt werden oder ist eventuell geöffnet")
                Err.Clear
            Else
                
                ' Wenn Datei nicht vorhanden, => Tabellenkopf muss eingefügt werden
                 If bCreated = True Then                      
                    'ts.WriteLine FName
                    ts.WriteLine Header
                 End If 
                
                IstTemp = CStr(SmartTags("R" & RaumNr & "_Temp_Ist"))
                SollTemp = CStr(SmartTags("R" & RaumNr & "_Temp_Aktuell_Soll"))
                
                ' Werte der Variablen in die Archivdatei schreiben (Tag_x)
                Dataset = CStr(Now) & ";" & IstTemp & ";" & SollTemp & ";"  'Create the Dataset'
                
                ' Schreibt die Daten in das Excel Blatt
                ts.WriteLine Dataset'    
                
                ' Datei wieder schließen 
                ts.Close                            
            
            End If
  
Next

' Verwendeten Speicher wieder freigeben
Set ts = Nothing
Set f  = Nothing
Set fso = Nothing
```



Und das Script



```
'Hinweis/Note:
'Wenn der vorgegebene Ablagepfad im "Hauptscript" mehrere Unterordner enthält, 
'müssen diese Unterordner auf dem PC komplett vorhanden sein. 
'Dieses Script dient dazu, dieses automatisch umzusetzen.


Dim fso, strDir, strTemp, arr, i

' FileSystemObject erstellen
Set fso = CreateObject("Scripting.FileSystemObject")  

' Hilfsvariable
strTemp = "" 

' Ablagepfad in einzelne "\" zerlegen 
arr = Split (strPath, "\") 

i = 0
For Each strDir In arr ' Schleifenzähler / loop counter

    If i >  0 Then
        strTemp = strTemp + "\" + strDir

        If Not fso.FolderExists (strTemp) Then ' Wenn kein "\" mehr vorhanden ist -> keine weiteren Unterpfade / If no "\" existing, then no further sub-folders
            fso.CreateFolder (strTemp)
        End If    
    Else
        strTemp =  strDir    
    End If
    i = i+1
Next 
Set fso = Nothing
```

Sollte so Laufen Leider hab ich keine Quellen mehr !! Besonders das 2 Script !!

Grüße wiesel187


----------



## poti2 (19 Februar 2011)

Hallo wiesel187,
danke dir erstmal. ich werd es mal testen.

gruß poti2


----------

