WinCC TP1500 Comfort Speicherort für Archive

Zuviel Werbung?
-> Hier kostenlos registrieren
Die Idee war, den Meldespeicher intern zu lassen, da ich die externe SD-Karte für ein Langzeitarchiv brauche und die Karte auch kurzzeitig entnommen werden muss.
Du könntest die dem Bediener die Möglichkeit geben die benötigten Daten von der SD-Card auf einen USB-Stick zu kopieren, dann brauchst du die Karte nicht ziehen
 
Die Idee war, den Meldespeicher intern zu lassen, da ich die externe SD-Karte für ein Langzeitarchiv brauche und die Karte auch kurzzeitig entnommen werden muss.
Du könntest für das Meldearchiv einen USB-Stick anstecken. Oder einen USB/SD-Adapter/Cardreader.

Kann man vielleicht auch USB-Hubs anstecken für mehrere USB-Sticks oder SD-Adapter/Cardreader?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
OK, das Meldearchiv ist auf die SD-Karte umgestellt
1718876959824.png

Beim Start oder beim Aufruf des Bildes kommt keine Fehlermeldung.
Allerdings bleibt das Meldearchiv leer???

Aktuelle anstehende Meldungen:
1718877128740.png

Historisches Fenster:
1718877180134.png
Was klemmt denn jetzt?
 
Hallo Zusammen,
erstmal vielen Dank für die Unterstützung.
Das Meldearchive und das Variablenarchiv funktionieren nun soweit.

Zur Langzeitarchivierung hab ich da noch eine Frage:
Im Variablenarchiv muss ich ja die Datensätze pro Archiv angeben. Wenn der Werte erreicht ist hört das loggen der Werte ja einfach auf.
1719388195137.png

Man kann ja am Ende über ein Ereignis das Archiv schließen, archivieren und ein neues starten.
1719388226029.png

Aber genau das funktioniert nicht richtig.
Hat da jemand noch eine andere Idee?
Ziel ist es einfach nach einer bestimmten Anzahl von Datensätzen das laufende Archiv zu archivieren und ein neues zu starten, damit die Dateien nicht so groß werden.
Danke.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde das über ein vb-script lösen. Als Ereignis Archiv schliessen und dann das script aufrufen.
Im Script evtl eine kurze Zeit warten (falls nötig) und dann das archiv mit movefile umbenennen z.B. Datum_Zeit.csv. Anschliessend das Archiv wieder starten. (im Script)
Code:
Sub VBFunktion_1()
Dim fs,fso,datum,wartezeit

    Call warte(2.5)

    datum = "20" & Right(Date,2) &"."& Mid(Date,4,2) &"."& Left(Date,2)

    Set fs = CreateObject("filectl.filesystem")
    Set fso= CreateObject("filectl.file")

    fs.filemove "\storade card sd\CurrentLog0.csv",  "\storade card sd\" & datum & "_" & Time & ".csv"

    StartLogging hmiDataLog, "CurrentLog"
 
End Sub

Sub warte(ByRef zeit_real)
Dim t1,t2,t1a

t1=Timer
Do
    t2=Timer
    If t2-t1 > zeit_real Then
        Exit Do
    End If
    If t1>t2 Then
        t1a=86400-t1
        t1=0
        zeit_real = zeit_real - t1a
    End If
    SmartTags("zs_restzeit_real") = zeit_real + t1 - t2
Loop
End Sub
 
Zuletzt bearbeitet:
Im Variablenarchiv muss ich ja die Datensätze pro Archiv angeben. Wenn der Werte erreicht ist hört das loggen der Werte ja einfach auf.
Bei Umlaufarchiv nicht. Da werden automatisch die ältesten 20% gelöscht und weiter geloggt.. Bei Segmentiertem Umlaufarchiv wird das älteste Sement gelöscht und dahinein weiter geloggt.
Musst du denn den Inhalt des Archivs noch irgendwohin kopieren?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei Umlaufarchiv nicht. Da werden automatisch die ältesten 20% gelöscht und weiter geloggt.. Bei Segmentiertem Umlaufarchiv wird das älteste Sement gelöscht und dahinein weiter geloggt.
Musst du denn den Inhalt des Archivs noch irgendwohin kopieren?
Ja, ist richtig beim Umlaufarchiv. Es geht momentan nur um das "CurrentLog" als "Ereigmis auslösen".
1719401854473.png

Ziel ist es einfach nach einer bestimmten Anzahl von Datensätzen das laufende Archiv zu archivieren in einem "Archivordner" zu speichern und wieder ein Neues zu starten, damit die csv-Dateien nicht so groß werden.
 
Meine Methode funktioniert. Aber wie PN/DP schreibt werden das natürlich immer mehr Dateien. Abhängig davon wieviel Dateien auflaufen macht es Sinn das Archiv nicht nur umzubenennen sondern in Unterordner zu verschieben z.B. \Logs\Jahr\Monat\Tag.
Ich hatte mal einen IPC wo das BDE-System nach dem abholen der Datei diese auf dem IPC in ein Backup-Verzeichnis kopiert hat.
Da waren dann über die Zeit mehrere 100000 Dateien drin. Die konnte man nicht mal mehr löschen da dies Windows zum Absturz gebracht hat.

Oder man löscht alte Dateien.
Oder man kopiert die auf ein Netzlaufwerk / USB-Stick und löscht anschließend die Quelldatei.
Da gibt es etliche Lösungsansätze
 
Ja. Das ist ein bisschen zusammenkopiert aus anderen Projekten.
Und ich habe auch ein paar kleine Änderungen gemacht.
Wo, meinst du, das ein Fehler auftritt?
Ich kann hier jetzt keinen groben Fehler erkennen.
 
fs.filemove "\storade card sd\CurrentLog0.csv", "\storade card sd\" & datum & "_" & Time & ".csv"
\Storage Card SD
liefert Time nicht einen String mit einem Doppelpunkt drin? Ist für Dateiname unzulässig. Und das Format ist abhängig von den regionalen Einstellungen.

datum = "20" & Right(Date,2) &"."& Mid(Date,4,2) &"."& Left(Date,2)
Dieses Zerlegen des Datums-Strings ist von den regionalen Einstellungen des Panels abhängig. Außerdem sollte man Date und Time nicht mehrmals abfragen, weil es sich dazwischen ändern kann. Besser siehe FAQ:
Datum und Uhrzeit für Dateinamen formatieren
(...)
Code:
'aus der Systemzeit einen String in der Form "YYYYMMDD_hhmmss" (z.B. "20991231_015959") erzeugen
Dim t, s

t = Now  'Systemzeit (Lokalzeit des HMI)
s = Year(t) & Right("0" & Month(t), 2) & Right("0" & Day(t), 2) & "_" _
  & Right("0" & Hour(t), 2) & Right("0" & Minute(t), 2) & Right("0" & Second(t), 2)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
OK. storade. Schreibfehler
Time liefert einen ":" als Trennzeichen (da hast du recht). Also kleine korrektur

zz_zeit = Replace (Time,":","-")

fs.filemove "\storage card sd\CurrentLog0.csv", "\storage card sd\" & datum & "_" & zz_zeit & ".csv"

Es ging hier auch darum das grundsätzliche aufzuzeigen. Aber du musst ja immer das letzte Wort haben. (aber das gehört nicht hierher)

Dieses Zerlegen des Datums-Strings ist von den regionalen Einstellungen des Panels abhängig. Außerdem sollte man Date und Time nicht mehrmals abfragen, weil es sich dazwischen ändern kann. Besser siehe FAQ:

Natürlich liefert date, time das aktuelle Datum, Zeit des Panels. Wenn man was anders will muss man sich halt damit beschäftigem was man genau haben will.
:mad:

Zeitabgleich zwischen CPU und hmi z.b. über Bereichszeiger
 
Zuletzt bearbeitet:
Time liefert einen ":" als Trennzeichen (da hast du recht). Also kleine korrektur

zz_zeit = Replace (Time,":","-")

fs.filemove "\storage card sd\CurrentLog0.csv", "\storage card sd\" & datum & "_" & zz_zeit & ".csv"
Replace... :rolleyes: umständliche Krücke, hauptsache nicht das machen, was jemand anders vorschlägt... Und was machst du, falls die Uhrzeit '/' oder ein anderes unzulässiges Zeichen enthält? Dafür hast du dann wieder keine Sonderbehandlung. Mach es einfach unabhängig von den regionalen Einstellungen, wie in der FAQ gezeigt, da kann dann auch kein Doppelpunkt reinkommen, der danach noch extra wieder entfernt werden muss.

Es ging hier auch darum das grundsätzliche aufzuzeigen. Aber du musst ja immer das letzte Wort haben. (aber das gehört nicht hierher)
Ach so, da kann man ahnungslosen Anfängern ruhig was zusammenkopiertes als Beispiel zeigen, was so aber gar nicht funktioniert und erstmal nur Runtime-Errors produziert. Und noch "Meine Methode funktioniert." dazuschreiben.

Dieses Zerlegen des Datums-Strings ist von den regionalen Einstellungen des Panels abhängig. Außerdem sollte man Date und Time nicht mehrmals abfragen, weil es sich dazwischen ändern kann. Besser siehe FAQ:

Natürlich liefert date, time das aktuelle Datum, Zeit des Panels. Wenn man was anders will muss man sich halt damit beschäftigem was man genau haben will.
BESSERWISSER :mad:
Erst genau lesen, dann verstehen, dann darf man meckern. ;)
Es geht nicht darum, ob nun Date oder Time oder Now verwendet wird, sondern dein Skript in #26 fragt 4x nacheinander die Uhr des Panels ab. Da kann sich durchaus mal dazwischen die Uhrzeit ändern, auch mal die Stunde oder das Datum. Auch wenn die Chance gering ist, man kann doch aber auch korrekten Code schreiben, wo so ein dummer Fehler nicht passieren kann. Gerade bei SPS haben schon viele Leute gedacht, dass die Chance für etwas sehr gering ist und dann passiert es doch.

Zeitabgleich zwischen CPU und hmi z.b. über Bereichszeiger
Was hat das jetzt mit deinem fehlerhaften Skript-Code zu tun? Das taugt ja noch nicht mal als Ausrede.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Replace... :rolleyes: umständliche Krücke, hauptsache nicht das machen, was jemand anders vorschlägt... Und was machst du, falls die Uhrzeit '/' oder ein anderes unzulässiges Zeichen enthält? Dafür hast du dann wieder keine Sonderbehandlung. Mach es einfach unabhängig von den regionalen Einstellungen, wie in der FAQ gezeigt, da kann dann auch kein Doppelpunkt reinkommen, der danach noch extra wieder entfernt werden muss.


Ach so, da kann man ahnungslosen Anfängern ruhig was zusammenkopiertes als Beispiel zeigen, was so aber gar nicht funktioniert und erstmal nur Runtime-Errors produziert. Und noch "Meine Methode funktioniert." dazuschreiben.


Erst genau lesen, dann verstehen, dann darf man meckern. ;)
Es geht nicht darum, ob nun Date oder Time oder Now verwendet wird, sondern dein Skript in #26 fragt 4x nacheinander die Uhr des Panels ab. Da kann sich durchaus mal dazwischen die Uhrzeit ändern, auch mal die Stunde oder das Datum. Auch wenn die Chance gering ist, man kann doch aber auch korrekten Code schreiben, wo so ein dummer Fehler nicht passieren kann. Gerade bei SPS haben schon viele Leute gedacht, dass die Chance für etwas sehr gering ist und dann passiert es doch.


Was hat das jetzt mit deinem fehlerhaften Skript-Code zu tun? Das taugt ja noch nicht mal als Ausrede.
Hallo,
könnte mir bitte jemand mit dem Skript helfen.
Das Beispiel läuft so nicht, der Compiler spukt Fehlermeldungen aus, ohne Ende.
Danke.

Gruss
 
Zurück
Oben