Hallo,
ich habe mehrere Variablen welche in einer Kurvenanzeige darstelle. Über einen Trigger aus der SPS werden diese Echtzeitdaten dann auch in eine Archiv gespeichert bzw von den Archiven wieder in der Kurvenanzeige dargestellt.
Ich habe auf der HMI einen EA-Feld, in welchem in einen Eintrag auswähle, worauf ein bestimmtes Archiv geladen werden soll. Gibt es dieses Archiv nicht, wird ein Leerarchiv geladen.
Also eine Erweiterung des
Siemensbeispiel.
Das Speichern klappt auch ohne Probleme. Mein Problem ist das Laden von gespeicherten Archiven.
Ich hab mir mal beispielhaft 5 Archive gespeichert.
Ein Archiv mit 1kB welches Leer ist, um die Kurvenanzeige leer darzustellen.
Je zwei Archive mit 10kB und mit 34kB.
Das leere Archiv lässt sich immer laden. Egal welches Archiv zuvor geladen wurde.
Die anderen Archive lassen sich nur laden, wenn zuvor ein gleich großes oder ein größeres geladen wurde.
Ansonsten erscheint die Systemmeldung 80053 Fehler beim Lesezugriff auf geschlossenes Archiv.
An den Archiven selbst liegt es nicht, da auch beim Tausch der Dateinamen das selbe Phänomen auftritt.
Hier der VBS-Code zum Laden der Archive.
Code:
Sub VBS_Restore_archive()
'Tip:
' 1. Verwenden Sie die Tastenkombination <CTRL+SPACE> oder <CTRL+I>, um eine Liste aller Objekte und Funktionen zu öffnen
' 2. Schreiben Sie den Code unter Verwendung des HMI Runtime Objekts.
' Beispiel: HmiRuntime.Screens("Screen_1").
' 3. Verwenden Sie die Tastenkombination <CTRL+J>, um eine Objektreferenz zu erstellen.
'Schreiben Sie den Code ab dieser Position:
Dim fso, f
Dim restore_entry, restore_fields, date_time, Dateiname
Set fso = CreateObject("Scripting.FileSystemObject")
'archive_path = SmartTags("File_" & fileChosen)
'[Archiv]_[Datum]_[Uhrzeit]_[HMI-Name] z.B.: Qualitaet0_20190721_201509_Benutzer
Dateiname = "Qualitaet0_" & SmartTags("OEE.HMI.Archivierung.Datei_Datum") & "_" & SmartTags("OEE.HMI.Archivierung.Datei_Uhrzeit") & "_" & SmartTags("OEE.HMI.Archivierung.HMI_Name") & ".csv"
archive_path = SmartTags("OEE.HMI.Archivierung.Pfad_Echtzeit") & "\" & Dateiname 'SmartTags("File_" & fileChosen)
current_path= SmartTags("OEE.HMI.Archivierung.Pfad_Echtzeit") & "\Qualitaet_Archiv0.csv" '"C:\Storage Card SD\Archiv_Qualitaet.csv"
If Not fso.FileExists(archive_path) Then 'Datei existiert nicht
'Leere Datei laden
Dateiname = "Qualitaet0_Leer.csv"
archive_path = SmartTags("OEE.HMI.Archivierung.Pfad_Echtzeit") & "\" & Dateiname
ShowSystemAlarm "Leere Datei geladen."
End If
fso.CopyFile archive_path, current_path, 1 'Datei kopieren
Set f = fso.GetFile(current_path) 'Datei laden
f.Attributes = 0 'Schreibschutz entfernen
Set f = fso.OpenTextFile(current_path, 1) 'Datei öffnen
'-----------------------------------------------------
Do While Not f.AtEndOfStream
restore_entry = f.ReadLine 'Zeile lesen
restore_fields = Split(restore_entry, ";") 'Spalten trennen (Trennzeichen ggf. anpassen)
ShowSystemAlarm "A: " & restore_fields(0)
If Not restore_fields(0) = """$RT_COUNT$""" Then 'Nicht die letzte Zeile
date_time = Mid(restore_fields(1), 2, Len(restore_fields(1))-2) 'Datum und Uhrzeit holen -> "23.07.2019 14:17:57" => Ab Zeichen 2 bis zum vorletzten Zeichen
ShowSystemAlarm "B: " & date_time
Else 'Nix machen => ELSE entfernen
ShowSystemAlarm "C: " & date_time
'Exit Do
End If
Loop
'------------------------------------------------------
Set fso = Nothing
Set f = Nothing
OpenAllLogs
If IsDate(date_time) = True Then
restore_time = DateAdd("s", trendview_offset, CDate(date_time))
Else
ShowSystemAlarm "Can't set trend view time to <" & date_time & ">."
End If
ShowSystemAlarm "Restored archive <" & archive_path & "> to <" & current_path &"> at " & restore_time & "."
End Sub
Mein Gedanke war auch ob es vielleicht an der Dateigröße selbst liegt. Das die Datei noch nicht fertig geladen ist und die Software dieses aber schon öffnet. Kann ich mir bei 34kB aber nicht vorstellen...
Wie im Anhang zu sehen ist, werden die Daten auch alle so geladen wie sie sollen. Die Ausgabe der Meldungen (A, B, C) ist auch in der Reihenfolge, wie es sein soll.
Habt ihr hierzu vielleicht eine Idee, was dieses Problem hervorruft?