TIA Probleme mit der Archivierung

MartinJ12

Level-1
Beiträge
43
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Werte Kollegen,

ich habe ein Problem mit der Archivierung von Datensätzen, besser gesagt mit der Sortierung. WinCC besitzt ja ein Archivierungsverzeichnis dort kann man den Ablageort auswählen, genauso die Dateiart. Wenn man nun die Dateiart .csv auswählt, werden die Parameter die man archivieren will ganz willkürlich gespeichert in diese Datei.

Ich möchte dem vorgreifen und eine VB-Skript schreiben, das dem vorgreift geht das [oder muss ich das .csv Sheet nach erstellung immer neu in VBA programmieren?]? Falls ja, hat jemand ein Beispiel für mich damit ich mir das mal ansehen kann, da ich keinerlei Erfahrung mit Skriptsprachen habe sondern bisher nur mit Objektorientierter Sprache gearbeitet habe.

Bleibt gesund, euer Martin
 
Zuletzt bearbeitet:
Heyho Martin,

Ich würde das komplett in VB machen. Gen
Generell kannst du mit einem Skript ja auch Dateien auf einem z.B Stick erstellen und speichern.
Ich habe dir mal ein Beispiel hier etwas zusammengebastelt und mit Kommentaren versehen.

Deine Daten sowie deinen Pfad musste natürich anpassen.
Dann halt noch zyklisch oder wie auch immer das Skript triggern und gut ist.

Code:
Sub VBSCRIPTDATALOG()


Dim fileName, folderName, fileLocation, fso, fctl
Dim currentPosition, nextPosition, currentTime, dataValues

'So wird deine Datei später heissen
fileName = Year(Now) & "_" & Month(Now) & "_" & Day(Now) & ".csv"
'Das ist der Pfad wo es gespeichert werden soll, bei einem Panel kann das entweder ein USBStick oder eine SD Karte, oder ein File Server sein
'Wenn du einen IPC hast kannst du auch einfach ein Verzeichnes wie C:\MeinOrdner\MeinUnterordner sein
folderName = "\Storage Card USB\Logs\"
'Hier die Dateilocation, das ist dein Ordner + Dateiname
fileLocation = folderName & fileName



On Error Resume Next
                 'Erstellen des Verzeichnises wenn keins existiert
                Set fso = CreateObject("FileCtl.FileSystem")
                If (fso.Dir(folderName)) = "" Then
                                fso.MkDir folderName
                End If
                                 
                If Err.Number <> 0 Then
                                ShowSystemAlarm "Error # " & CStr(Err.Number)& " " & Err.Description
                                Err.Clear
                End If
                
              
                Set fctl = CreateObject("FileCtl.File")
                fctl.Open fileLocation, 8
                 
                If Err.Number <> 0 Then
                                ShowSystemAlarm "Error # " & CStr(Err.Number)& " " & Err.Description
                                Err.Clear
                End If
                
                currentPosition = fctl.Loc
                nextPosition = fctl.Seek
                 
                'Schreibt den Tabellenkopf
                If currentPosition = 1 And nextPosition = 1 Then
                                fctl.LinePrint "Time, Data Point 1, Data Point 2, Data Point 3, Data Point 4, Data Point 5"
                End If
                currentTime = Hour(Time) & ":" & Minute(Time) & ":" & Second(Time)
                'Erstellt die Daten mit komma separiert
                dataValues = currentTime & _
                                SmartTags("DataPoint1") & ", " & _
                                SmartTags("DataPoint2") & ", " & _
                                SmartTags("DataPoint3") & ", " & _
                                SmartTags("DataPoint4") & ", " & _
                                SmartTags("DataPoint5")
fctl.LinePrint dataValues

                fctl.Close

End Sub
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Nico,

wenn ich das nun richtig verstanden habe, kann ich mit einem VB Skript direkt auf den Archivspeicher des HMI zugreifen? Ich versteh noch nicht ganz wie ich die Verbindung zwischen Skript und Archiv HMI bekomme?

Auf meinem HMI läuft ein Datenlogger, sprich es wird eine Kurve mit verschiedenen Soll- und Isttemperaturwerte ausgegeben, soweit so gut. Die Soll- und Istwerte sind in Variablen gespeichert, diese rufe ich dann im VB Skript ab und sortiere Sie, richtig? Sortierung bedeutet, Solltemp1 wiederholt sich im Archivierungsmodus 1000 mal und soll untereinander geschrieben werden und danach kommt Solltemp2 wieder mit 1000 Werte und das so ca. 30 mal eben. Ist das möglich? Momentan bekomme ich nämlich Solltemp1 Solltemp2 Solltemp1 usw. Untereinander ausgegeben😬. Es tut mir Leid, leider kenne ich mich wirklich 0.0 aus mit Skriptsprache, bekomme morgen erst mein Buch 🙈. Danke schon mal. Versteh leider nur bedingt Deinen Beispiel Code.
 
Wenn man nun die Dateiart .csv auswählt, werden die Parameter die man archivieren will ganz willkürlich gespeichert in diese Datei.
Genau welche WinCC Runtime auf welchem Gerät verwendest Du?
Was meinst Du mit "willkürlich gespeichert"? Warum meinst Du, mit dieser "Willkür" nicht leben zu können?

Wenn Du das Archivieren selber programmieren willst, dann musst Du u.A. auch dafür sorgen, daß die Werte der Variablen aktuell sind. Sonst werden die Werte von der letzten Aktualisierung in die Datei geschrieben und nicht die Werte, die gerade jetzt in der PLC sind. Einfach nur ein fehlerfreies VBS-Skript zum Erstellen einer csv-Datei ist noch lange keine Lösung. Garantiert aktualisiert bekommt man Werte nur per Handshake aus der PLC ins HMI, z.B. fertig als Rezeptur oder halt einen eigenen Handshake programmieren. Zu dem Problem benutze mal die Forumssuche mit dem Suchbegriff "GetDataRecordTagsFromPLC".

Wenn das Archiv durch die vorgefertigten Archiv-Funktionen von WinCC erstellt wird, dann sorgt die WinCC RT auch dafür daß die Daten aktuell sind, d.h. die Werte unmittelbar vor dem Schreiben ins Archiv aus der PLC gelesen werden.

Harald
 
Hallo Harald,

ich verwende oftmals das Panel KTP700 Basic, in seltenen Fällen auch das Comfort, WinCC Runtime Advanced.

Mit willkürlicher Speicherung der Werte meine ich zum Beispiel:
Ist-Wert1 0000
Ist-Wert2 0028
Ist-Wert3 0553
Ist-Wert4 0228
Soll-Wert1 0000
Soll-Wert2 0028
Soll-Wert3 0054
Soll-Wert4 2545
Ist-Wert1 0000
Ist-Wert2 0028
Ist-Wert3 0553
Ist-Wert4 0228
Soll-Wert1 0000
Soll-Wert2 0028
Soll-Wert3 0054
Soll-Wert4 2545
Ist-Wert1 0000
Ist-Wert2 0028
Ist-Wert3 0553
Ist-Wert4 0228
Soll-Wert1 0000
Soll-Wert2 0028
Soll-Wert3 0054
Soll-Wert4 2545

Ich möchte gerne das alle Ist-Wert1-4 und Soll-Wert1-4 Daten unteinander stehen, damit man sich dann seh leicht ein Diagramm in Excel ausgeben lassen. Mit der willkürlichen Anordnung kommt der Endkunde leider nicht klar und kann man so nicht verkaufen. Ich hatte jetzt den Gedanken, dass man das mit einem VB-Skript abfangen kann. Weiß leider aber nicht ob es wirklich funktioniert, deshalb meine Frage im Forum. Eine weitere Idee die ich hatte, wäre es wenn man eine Datenbank anlegt und darüber dann arbeitet. Was nun sinnvoller ist kann ich nicht beurteilen.

Jedoch muss ich sagen das die Option per Handshake aus der PLC ins HMI doch am sinnvollsten und leichtesten klingt. Danke für die schnelle Rückmeldung Harald

Martin
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... werden die Parameter die man archivieren will ganz willkürlich gespeichert in diese Datei. ...

Hallo Martin,

wie wird denn die Archivierung deiner Prozesswerte gesteuert/getriggert (Spalte "Erfassungsart" in der Tabelle "Archivvariablen")?
Standardmäßig ist es nämlich (meine ich) so, dass nur Wert-ÄNDERUNGEN archiviert - sprich: gespeichert - werden.
Das führt natürlich zu einem vermeintlich willkürlichen Dateiaufbau. Mit dem Ablageort (Dateiart) hat dies soweit ich weiß nichts zu tun.

Versuch vielleicht mal die Erfassungsart "Auf Anforderung" in Verbindung mit der Sytemfunktion "ArchiviereVariable" (siehe auch die TIA-Hilfe), vielleicht führt dich das zum Ziel.


Gruß, Fred


Edit: Zu langsam...
 
Hallo Martin,

diese Anordnung der Variablen ist aber doch nicht willkürlich, sondern sogar schön geordnet!

Du hast die Variablen für die Archivierung in genau dieser Reihenfolge projektiert, richtig?
Wenn ja, dann kann TIA die "Datensätze" gar nicht anders ablegen, da eine Triggerung immer ALLE Variablen betrifft.

Es bleiben dir also zwei Lösungswege:

+ Scripting wie schon beschrieben (mit dem Augenmerk auf einen sauberen Handshake bei der Variablenaktualisierung, siehe Post von Harald)
---> Vorteil: du kannst den Dateiaufbau selbst designen
---> Nachteil: hohe Panel-Auslastung je nach Triggerintervall für dein Script

+ ZWEI Archive anlegen (Soll- und Istwerte getrennt), gleichzeitige Triggerung der Archivierung, ggf. per Script eine NACHTRÄGLICHE Zusammenführung beider Archivdateien in eine Datei
---> Vorteil: der Archivierungsvorgang an sich ist resourcenschonend und einfach projektiert
---> Nachteil: die Zusammenführung in eine Datei sollte nur einmalig (beim Export?) erfolgen, da diese dann lange dauern kann.


Gruß, Fred
 
Hallo Fred,

die Erfassungart ist zyklisch, sprich man triggert auf jeden Zyklus der Erfassung.
Die Variable wird auf dem Panel selbst über ein Diagramm erzeugt, genau dieses Diagramm möchte ich auch in Excel wieder erzeugen.
Damit der Endkunde sich hinterher nochmal verschiedene Stellwerte ansehen kann.

Grüße, Martin
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Fred,

Problem an der Sache ist es, das es nicht nur Soll und Istwerte sind sondern noch 13 andere Werte die dann "willkürlich", immer zyklisch von vorne ausgegeben werden. Das möchte ich gerne vermeiden, sondern in immer in separate Spalten schreiben. Wie gesagt, meine Erfahrung ist sehr begrenzt, da ich aus der objektorientierten Programmierung komme und damit noch keine Berührungen hatte.

Hätte jemand ein Beispiel für einen Handshake? Leider ist es mir kein Begriff.

Grüße, Martin
 
... genau dieses Diagramm möchte ich auch in Excel wieder erzeugen. ...

Eine Diagrammerstellung in Excel sollte eine etwas andere Anordnung der Prozesswerte aber nicht verhindern:D
Hier geht es dann doch sowieso über die Wertekombination "Variablenname, Zeitstempel, Variablenwert"; eine "Sortierung in Spalten ist hierfür ja nicht notwendig, sie macht nur die Rohdaten etwas lesbarer.


Gruß, Fred
 
eine "Sortierung in Spalten ist hierfür ja nicht notwendig, sie macht nur die Rohdaten etwas lesbarer.

Ja das ist mit unteranderm auch schön, ein Kunde will ja nicht erst suchen und suchen, sondern direkt es lesen und erkennen können, was in meinen Augen auch Sinn macht.

Also bin ich in soweit Beschränkt, dass ich eine .csv Datei ausgeben lasse, danach ein .vb Skript oder Python-Skript schreibe zur Sortierung und dann gebe ich eine neue .csv aus?

Grüße Martin
 
Wäre eine Vorgehensweise.

Zumal du dann sogar die Wahl hast:
Entweder du projektierst die Zusammenführung im HMI ODER du schreibst ein Excel-Makro/eine VBA-Funktion.


Gruß, Fred
 
Vielen Dank für die schnellen Antworten.

Dann werde ich doch mein Glück mit der Verbindung von Visual Basic "A" und oder Python machen.

Falls es noch eine leichtere Option gibt, bin ich nicht abgeneigt diese mir anzusehen.

Grüße, Martin
 
Guten Morgen Peter.

ich hab mich jetzt für die Variante Python und Visual Basic entschieden, werde beide Skripte einmal schreiben und dann testen was besser aussieht.
Vielen Dank für deinen Hinweis zu dem Siemens Forum.

Viele Grüße, Martin
 
Zurück
Oben