# Wertänderung von Variablen mitloggen



## wincc (10 Dezember 2008)

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.


----------



## crash (10 Dezember 2008)

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


----------



## johnij (10 Dezember 2008)

crash schrieb:


> 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


----------



## TobiB. (10 Dezember 2008)

wincc schrieb:


> ... bin aber nicht so sehr zufrieden da ich dafür
> 
> eine speicherkarte benötige ...



Speichermedium brauchst du aber immer, also entweder SD Karte, MMC Karte, USB Stick oder Netzlaufwerk. 
Intern hat das Gerät keinen Speicher zum Archivieren.


----------



## Larry Laffer (10 Dezember 2008)

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


----------



## Ralle (10 Dezember 2008)

@Larry

Das würde mich bitte auch mal interessieren.


----------



## Larry Laffer (10 Dezember 2008)

Ralle schrieb:


> Das würde mich bitte auch mal interessieren.


 
Nun denn - es ist ja bald Weihnachten ... 

Zunächst die Scripte :

```
[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
```
 

```
[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
```
 

```
[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


----------



## wincc (12 Dezember 2008)

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?


----------



## Larry Laffer (14 Dezember 2008)

wincc schrieb:


> 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 ...



wincc schrieb:


> 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 ...



wincc schrieb:


> 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 ...



wincc schrieb:


> 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


----------



## wincc (14 Dezember 2008)

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


----------



## vladi (14 Dezember 2008)

*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... Aufwand sei willkommen.

Gruss: Vladi


----------



## Larry Laffer (14 Dezember 2008)

wincc schrieb:


> 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


----------



## wincc (16 Dezember 2008)

oh man ....grübel


----------



## Larry Laffer (16 Dezember 2008)

wincc schrieb:


> oh man ....grübel


 
Na .. Na ..
Ich denke schon, dass das zu schaffen ist - so oder so.
Man muß / sollte nur in kleinen Schritten anfangen.

Gruß
LL


----------

