WinCC Unified Archive exportieren

Robsi

Level-2
Beiträge
34
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

von einem MPT1200 soll ich Archive Variablen ereignisgesteuert auf einen USB Stick exportieren. Ich habe mir folgendes Script Snippet hergenommen und etwas abgeändert.

let timeStamp = new Date().toLocaleDateString().replace(/[/]/g, "_");
let path = "/media/simatic/X63/Export_" + timeStamp + ".csv";
let delimiter = ";";
let start = new Date(); //now
let end = new Date(start.getTime() - 1000 * 60);
let CSVData =
"Time Stamp:" + delimiter + "Tag name:" + delimiter + "Value:" + "\n";
let logTagSet = HMIRuntime.TagLogging.CreateLoggedTagSet([
"LoggedTag1:ThE_Tag1",
"LoggedTag2:ThE_Tag2",
"LoggedTag3:ThE_Tag3",
]);
let loggedTagsMatrix = await logTagSet.Read(start, end, 0);
for (let loggedTag of loggedTagsMatrix) {
for (let loggedTagValue of loggedTag.Values) {
CSVData +=
new Date(loggedTagValue.TimeStamp) +
delimiter +
loggedTag.Name +
delimiter +
loggedTagValue.Value +
"\n";
HMIRuntime.FileSystem.WriteFile(path, CSVData, "utf8")
.then(function () {
HMIRuntime.Trace("Write file finished successfully");
})
.catch(function (errorCode) {
HMIRuntime.Trace("Write failed errorcode=" + errorCode);
});
}
}

Wie kann ich das Script modifizieren damit ich das Script um folgende Funktionen erweitern kann.
  1. Dateiname soll nicht nur das Datum sondern auch die Uhrzeit beinhalten
  2. Kann ich über das Script das CSV bearbeiten damit kundenspezifische Daten beim Export übergeben werden - wie Chargennummer, Username, etc.
  3. Jede Variable soll eine eigene Spalte für den Messwert haben (Spaltenname soll Variablenname sein)
  4. Kann ich Systemmeldungen generieren sobald der Export begonnen hat und wenn dieser abgeschlossen ist.
  5. Besteht die Möglichkeit vor dem Export zu überprüfen ob ein USB Stick gesteckt ist

Kann mir noch jemand sagen wie man am Besten ein Script testet ohne jedes Mal jede kleine Änderung ins HMI zu transferieren um dann zu prüfen ob es funktioniert....?

Vielen Dank für eure Hilfe und Tipps
ROB
 
Hi,
zu 1. solltest du damit deine Uhrzeit in den Namensstring hinzufügen können.
1708526299389.png

2. bin ich mir nicht sicher, ob ich das richtig verstehe. Du willst nur bestimmte Werte aus der CSV-Datei exportieren? Oder willst du Chargenname, Username, etc. hinzufügen, da diese nicht im Archiv sind?

3. kann ich dir gerade nicht helfen.

4. sollte so funktionieren
HMIRuntime.Alarming.SysFct.CreateSystemAlarm("Meldetext")

5. Ja geht auch, indem du schaust, ob das Verzeichnis, in welches du speichern willst existiert. Hier wird das Verzeichnis erstellt, sollte es nicht existieren.
if (HMIRuntime.FileSystem.IsDirectory(Filepath) === false) {
HMIRuntime.Trace("Dir 1 Export 1")
HMIRuntime.FileSystem.CreateDirectory(Filepath).then(
function() {}
)
}

Zum Skript testen, gibt es noch den Debugger. Der funktioniert aber nur in der Simulation.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die Antwort werde ich am Abend sofort ausprobieren.

Zu deiner Frage, ja ich möchte noch Daten in die CSV Datei hinzufügen welche in keinem Archiv sind, sondern vom Benutzer eingegeben werden.

Ist es notwendig das ich nach dem Export den USB Stick sicher entferne, denn ich habe öfter das Problem das sich in der CSV Datei keine Daten mehr befinde sobald ich den USB abstecke und am PC auslese.
 
Vielen Dank für die Antwort werde ich am Abend sofort ausprobieren.

Zu deiner Frage, ja ich möchte noch Daten in die CSV Datei hinzufügen welche in keinem Archiv sind, sondern vom Benutzer eingegeben werden.

Ist es notwendig das ich nach dem Export den USB Stick sicher entferne, denn ich habe öfter das Problem das sich in der CSV Datei keine Daten mehr befinde sobald ich den USB abstecke und am PC auslese.
Das sollte gehen, indem du die gewünschten Daten in den CSVData String hinzufügst, also einfach am Anfang, da die Daten vermutlich oben stehen sollen. Wegen der genauen Formatierung weiß ich aber nicht genau, wie das bei CSV funktioniert. Das müsstest du mal nachschauen.

Ist es notwendig das ich nach dem Export den USB Stick sicher entferne, denn ich habe öfter das Problem das sich in der CSV Datei keine Daten mehr befinde sobald ich den USB abstecke und am PC auslese.
Das ist bei mir mal noch nie passiert. Sicher, dass das File immer richtig erzeugt wird? Denke eher, dass da dann ein Fehler aufgetreten ist.
 
Ich probiere seit Tagen irgendwie vernünftig Variablen (12 Real Werte, Archivierungszyklus 10s) aus einem Variablen Archiv auf einen USB Stick zu exportieren - leider klappt es nie wirklich. Entweder hängt sich das HMI auf oder jedes Mal wenn ich den USB Stick vom HMI abziehe und das CSV File auf einem Rechner öffnen möchte ist das File entweder beschädigt oder leer.

Die letzte Meldung beim öffnen war das ich die maximale Zeilenanzahl erreicht habe - ich muss die letzten 24 Stunden exportieren

Gibt es beim Unified HMI keine integrierte Funktion das ich unter Angabe eines Zeitraums Variablen aus einem Archiv auf ein USB Stick kopieren kann..?

Schön langsam bin ich am verzweifeln :cry: - ich hoffe jemand kann mir dabei helfen das Problem zu lösen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich kenne die Unified Panele und das Javascript nicht.
Muss man auch bei Unified vor dem Abziehen des Archiv-Sticks oder vor dem Archiv-Export die Archivierung stoppen und die Archive schließen?
Hat das MPT1200 einen SD-Memorycard-Slot? Ich würde die regulären Archive auf der SD-Card laufen lassen und nur (kurzzeitige) Exporte und Datei-Schreibereien auf dem USB-Stick machen.

Gibt es in dem Javascript ein explizites Datei schließen nach WriteFile oder eine Art "Flush"?
 
Die Archive werden auf der SD Karte gespeichert und von der SD Karte möchte ich die Archiv-Variablen Trigger gesteuert auf einen USB Stick exportieren.
 
Wenn sich das Panel aufhängt bzw. die max. Zeilenanzahl erreicht ist, würde ich mal versuchen den Zeitraum zu verkleinern und/oder weniger Variablen, um zu schauen ob es dann funktioniert und vielleicht einfach die Performance nicht ausreicht.
Ansonsten kannst du auch mal in der Simulation mit Debugger schauen, was beim Skript ausführen passiert.

Bei mir funktioniert das von dir gepostete Skript auf jeden Fall.
 
Zurück
Oben