Wertänderung von Variablen mitloggen

wincc

Level-1
Beiträge
313
Reaktionspunkte
14
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ich möchte gern auf einem MP277Touch/TP270 Wertänderungen von ca.

20 Variablen mitloggen mit Änderungszeit und Variablenwert. Am besten wär

csv datei ... muss aber jetzt noch nich sein. mit nem Archiv?

wie kann man sowas realisieren.?

hab bereits audittrail getestet ... bin aber nicht so sehr zufrieden da ich dafür

eine speicherkarte benötige und das ganz irgendwie nicht so funzt wie ich mir

das vorstelle.

Hintergrund ist das es öfters vorkommt das bei Schichtübergabe Werte sich

urplötzlich ändern und keiner wars.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich würde das mit einem skript lösen.
skript ausführen bei wertänderung und datum/zeit und wert in csv-datei schreiben.
http://www.sps-forum.de/showthread.php?t=15348

Unter Umständen könnte das Skript nicht ausgeführt werden (falls sich
die 20 Werte ständig bzw. gleichzeitig ändern)

Man kann einfach bei "Ereignisse"-->"Weränderung" die Variable archivieren
 
Hallo WinCC,
ich gehe mal davon aus, dass es sich bei den genannten Werten um eine Art Maschinen-Parameter handelt.
Bei uinseren Anlagen mache ich es so, dass diese Daten nur auf einer speziellen Parameter-Seite änderbar sind. Alle diese Parameter speichere ich außer im DB der Anlage noch in einer Datei (Parameter.DAT).
Beim Verlassen der Seite vergleiche ich die archivierte Parameter-Datei mit den aktuellen Parametern. Gibt es Unterschiede, so schreibe ich die Änderung in eine zusätzliche Log-Datei ("10.12.08 - 07:15:27 - Wert von Variable xyz geändert von 1.375 nach 1.444").

Bei Bedarf stelle ich das Script-Konstruct dafür mal hier ein (ist allerdings für ProTool - das sollte m.E. aber kein Problem darstellen).

Bei manchen Anlagen wird sogar mit aufgezeichnet wer ändert. Dort kommt der bediener nur dann an die Parameter-Seite, wenn er sich mit seinem ID-Chip angemeldet hat und authorisiert ist.

Gruß
LL
 
Das würde mich bitte auch mal interessieren.

Nun denn - es ist ja bald Weihnachten ... ;)

Zunächst die Scripte :
Code:
[B][COLOR=green]Script "Parameter_Speichern" :[/COLOR][/B]
 
[COLOR=#0000ff][COLOR=#0000ff]Const[/COLOR][/COLOR] ForReading = 1, ForWriting = 2, ForAppending = 3
[COLOR=#0000ff][COLOR=#0000ff]Dim[/COLOR][/COLOR] fs , f , Datei , sD , sT
[COLOR=#0000ff][COLOR=#0000ff]Set[/COLOR][/COLOR] fs = CreateObject("Scripting.FileSystemObject")
Datei = [COLOR=#ff0000][COLOR=#ff0000]a_Daten_Verzeichnis[/COLOR][/COLOR] + "Parameter.DAT"
[COLOR=#0000ff][COLOR=#0000ff]Set[/COLOR][/COLOR] f = fs.OpenTextFile(Datei, ForWriting, [COLOR=#0000ff][COLOR=#0000ff]true[/COLOR][/COLOR])
f.WriteLine "Parametersatz Anlage " + [COLOR=#ff0000][COLOR=#ff0000]a_Anlage_Nummer[/COLOR][/COLOR] + " :"
f.WriteLine "--------------------------"
sD = Mid(Date,1,6) + Right(Date,2) : sT = Right(Time,8)
f.WriteLine sD + " - " + sT
f.WriteLine "--------------------------"
f.WriteLine "--- St.00 ----------------"
f.WriteLine [COLOR=#ff0000][COLOR=#ff0000]PtVar[/COLOR][/COLOR].[COLOR=#ff0000][COLOR=#ff0000]"Par_St.00_Verpackung_IO"[/COLOR][/COLOR] 
f.WriteLine [COLOR=#ff0000][COLOR=#ff0000]PtVar[/COLOR][/COLOR].[COLOR=#ff0000][COLOR=#ff0000]"Par_St.00_Verpackung_NIO"[/COLOR][/COLOR] 
f.Close

Code:
[COLOR=green][B]Script "Parameter_Vergleichen" :[/B][/COLOR]
 
[COLOR=#0000ff][COLOR=#0000ff]Const[/COLOR][/COLOR] ForReading = 1, ForWriting = 2, ForAppending = 3
[COLOR=#0000ff][COLOR=#0000ff]Dim[/COLOR][/COLOR] fs, f , Z , Datei , alter_Wert
Datei = [COLOR=#ff0000][COLOR=#ff0000]a_Daten_Verzeichnis[/COLOR][/COLOR] + "Parameter.DAT"
[COLOR=#0000ff][COLOR=#0000ff]Set[/COLOR][/COLOR] fs = CreateObject("Scripting.FileSystemObject")
[COLOR=#0000ff][COLOR=#0000ff]Set[/COLOR][/COLOR] f = fs.OpenTextFile(Datei, ForReading, [COLOR=#0000ff][COLOR=#0000ff]true[/COLOR][/COLOR])
Z = f.ReadLine [COLOR=#008000][COLOR=#008000]' "Parametersatz Anlage xyz :"[/COLOR]
[/COLOR]Z = f.ReadLine [COLOR=#008000][COLOR=#008000]' "--------------------------"[/COLOR]
[/COLOR]Z = f.ReadLine [COLOR=#008000][COLOR=#008000]' PtVar.Par_Daten_geändert [/COLOR]
[/COLOR]Z = f.ReadLine [COLOR=#008000][COLOR=#008000]' "--------------------------"[/COLOR]
[/COLOR]Z = f.ReadLine [COLOR=#008000][COLOR=#008000]' "--- St.00 ----------------"[/COLOR]
[/COLOR]alter_Wert = CInt(f.ReadLine)
[COLOR=#0000ff][COLOR=#0000ff]Call[/COLOR][/COLOR] [COLOR=#808080][COLOR=#808080]PtScp[/COLOR][/COLOR].[COLOR=#808080][COLOR=#808080]Parameter_Logging[/COLOR][/COLOR]("Füllstand max. Behälter IO" ,alter_Wert,[COLOR=#ff0000][COLOR=#ff0000]PtVar[/COLOR][/COLOR].[COLOR=#ff0000][COLOR=#ff0000]"Par_St.00_Verpackung_IO"[/COLOR][/COLOR])
alter_Wert = CInt(f.ReadLine)
[COLOR=#0000ff][COLOR=#0000ff]Call[/COLOR][/COLOR] [COLOR=#808080][COLOR=#808080]PtScp[/COLOR][/COLOR].[COLOR=#808080][COLOR=#808080]Parameter_Logging[/COLOR][/COLOR]("Füllstand max. Behälter NIO" ,alter_Wert,[COLOR=#ff0000][COLOR=#ff0000]PtVar[/COLOR][/COLOR].[COLOR=#ff0000][COLOR=#ff0000]"Par_St.00_Verpackung_NIO"[/COLOR][/COLOR])
f.Close

Code:
[COLOR=green][B]Unter-Script "Parameter_Logging" :[/B][/COLOR]
[COLOR=green][B]dieses Script hat die Übergabe-Parameter "Beschreibung , alter_Wert , neuer_Wert"[/B][/COLOR]
 
[COLOR=#0000ff][COLOR=#0000ff]Dim[/COLOR][/COLOR] fs , f , i , Verzeichnis , Ziel_Datei , Check
[COLOR=#0000ff][COLOR=#0000ff]Const[/COLOR][/COLOR] ForReading = 1, ForWriting = 2, ForAppending = 8
[COLOR=#008000][COLOR=#008000]' ----------------------------------------------------------[/COLOR]
[/COLOR]Check = alter_Wert - neuer_Wert
[COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] (Check > 0.00001) [COLOR=#0000ff][COLOR=#0000ff]Or[/COLOR][/COLOR] (Check < -0.00001) [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]' ----------------------------------------------------------[/COLOR]
[/COLOR]Verzeichnis = [COLOR=#ff0000][COLOR=#ff0000]a_Daten_Verzeichnis[/COLOR][/COLOR] + "Logging\" 
Ziel_Datei = Verzeichnis +_
"Log-File " + Right(Year(Now) ,4) + "-" + Right(100 + Month(Now) ,2) + ".csv"
[COLOR=#008000][COLOR=#008000]' Ziel-Verzeichnis schon vorhanden ?[/COLOR]
[COLOR=#008000]' ... wenn nein, dann erst erzeugen ...[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Set[/COLOR][/COLOR] fs = CreateObject("Scripting.FileSystemObject")
[COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Not[/COLOR][/COLOR] fs.FolderExists (Verzeichnis) [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR]
[/COLOR]fs.CreateFolder (Verzeichnis)
[COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] 
[COLOR=#008000][COLOR=#008000]' Ziel-Datei schon vorhanden ?[/COLOR]
[COLOR=#008000]' ... wenn nein, dann erst erzeugen ...[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Not[/COLOR][/COLOR] fs.FileExists (Ziel_Datei) [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Set[/COLOR][/COLOR] f = fs.OpenTextFile(Ziel_Datei , ForWriting, [COLOR=#0000ff][COLOR=#0000ff]true[/COLOR][/COLOR])
f.WriteLine " - Log-Daten Anlage " + [COLOR=#ff0000][COLOR=#ff0000]a_Anlage_Nummer[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Else[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Set[/COLOR][/COLOR] f = fs.OpenTextFile(Ziel_Datei , ForAppending)
[COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] 
f.Write Right(100 + Day(Now) ,2) & "." & Right(100 + Month(Now) ,2) & "." & Right(Year(Now) ,2) & " - "
f.Write Right(100 + Hour(Now) ,2) & ":" & Right(100 + Minute(Now) ,2) & ":" & Right(100 + Second(Now) ,2) & " - "
f.Write "Parameter »" & RTrim(Beschreibung) & "« geändert "
f.Write "von »" & [COLOR=#ff0000][COLOR=#ff0000]Chip_Person[/COLOR][/COLOR] & "« "
f.WriteLine "- alter Wert : " & CStr(alter_Wert) & " in neuen Wert : " & CStr(neuer_Wert) 
f.Close 
 
[COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]If[/COLOR]
[/COLOR]

Vorausgehend zu Allem ist, dass es die gespeicherten Parameter als Datei schon gibt. Das erledigt das Script "Parameter_Speichern".
Beim Verlassen der Parameter-Seite in der Visu wird das Script "Parameter_Vergleichen" aufgerufen, dass seine Arbeit erledigt. Nach diesem Script werden dann die "neuen" Parameter auch wieder abgespeichert.
Das Unter-Script "Parameter_Logging" vergleicht die Werte und macht ggf. einen Eintrag im Log-File.

Diese Scripte laufen auf einer PC-Runtime mit ProTool 6.0 SP3. Das Übertragen auf Flex und WinCE sollte m.E. aber machbar sein.

Ich hoffe, das ist für euch brauchbar ...

Gruß
LL
 
Das mit dem script bzw archiv käme mir am gelegensten... da die parameter auf einigen bilder verteilt sind.

kann man die csv dadei oder das archiv als tabelle am mp277 anzeigen???

werden da nur die wertänderungen archiviert bzw mitgeloggt die auf diesen panel geändert werden oder auch die in anderen panels geändert werden ?

sind 4 panels mit den gleichen parametern ... 2x mp277 2xTP177 .. was wenn am tp 177 geändert wird? werden die dann am mp277 auch mitgeloggt?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das mit dem script bzw archiv käme mir am gelegensten... da die parameter auf einigen bilder verteilt sind.

Du mußt hier dann nur darauf achten, dass beim Verlassen der jeweiligen Seiten das Überprüfungs-Script aufgerufen wird - es wird dann zwar Alles überprüft, aber das wäre ja nicht so schlimm ...

kann man die csv dadei oder das archiv als tabelle am mp277 anzeigen???

Im Prinzip ja - du wirst dafür dann nur einen gewissen Aufwand betreiben müssen ...

werden da nur die wertänderungen archiviert bzw mitgeloggt die auf diesen panel geändert werden oder auch die in anderen panels geändert werden ?

Logischerweise wird bei dieser Vorgehensweise natürlich "nur" das mitgeloggt, das auf dem jeweiligen Panel passiert. Um Aktionen, die auf anderen Panels stattfinden, mitschreiben zu können wäre es Voraussetzung, dass alle Panels alle Änderungen mitbekommen - das ist wahrscheinlich auch machbar - allerdings nicht so einfach ...

sind 4 panels mit den gleichen parametern ... 2x mp277 2xTP177 .. was wenn am tp 177 geändert wird? werden die dann am mp277 auch mitgeloggt?

s.o.
Was hällst du in dem Fall davon, wenn du nur eine Möglichkeit für das Ändern der Parameter festlegst ?
Das würde dann auch für eine mögliche Anzeige ganz hilfreich sein - Das Log-File liegt ja schließlich ggf. auch nur auf einem Panel ...

Gruß
LL
 
die wertänderungen kann ich leider nicht auf 1 panel beschränken da bei auftragswechsel ein rezept geladen wird und dann an den verschiedenen stationen nachoptimiert wird und da die Maschine 40m lang ist wäre es fatal
immer an 1 bestimmtes Panel laufen zu müssen.

ahja handelt sich um eine Papier/Folien Silikonisiermaschine.

Also beschränk ich mal die Anforderugen

1. Logfile auf einem MP277 ausreichend
2. Änderungen von anderen Panels müssen mitgelogt werden
3. Anzeige des Logfiles am Panel

.... irgendwie komm ich nich weiter
 
Loggen usw.

Hi Kollege,
Überlegung:
entweder ein vernetzter PC für die Maschine, wo zentral mitgeloggt und archiviert wird(aus den Panels heraus), die 399 Euro rentieren sich immer..
oder das "Überwachen und Loggen" der Wertänderungen direkt in der SPS mit ein Paar DBs machen; dann ist dein Problem weg.
Sonst...:rolleyes: Aufwand sei willkommen.

Gruss: Vladi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
1. Logfile auf einem MP277 ausreichend
2. Änderungen von anderen Panels müssen mitgelogt werden
3. Anzeige des Logfiles am Panel

Du mußt (z.B. mit einer Hilfs-Variablen) erreichen, dass das gleiche Script, dass die Änderung erfasst und mitloggt auf beiden Panels abläuft. Das könnte so aussehen, dass du die Hilfsvariable auf Panel 1 um 1 erhöhst und auf dem anderen Panel auf Wert-Änderung abfragst. Dafür muss diese Variable "zyklisch fortlaufend" gelesen werden. Jedes Panel hat eine Trigger-Variable für das jeweils andere Panel.

Zu Punkt 3:
Das ist schon etwas schwieriger. Hier müßtest du eine Lade-Routine bauen, die dir z.B. die letzten 10 Einträge (in Hilfsvariablen für die Anzeige) lädt.

Gruß
LL
 
Zurück
Oben