WINCC flexible Archiv / Tabelle

Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
wenn du die Datei von einem anderen Programm in Beschlag hast, so erhälst du normalerweise nur Lesezugriffe darauf - reinschreiben ist also nicht.

In der FAQ gibt es ein schönes Beispiel (von mir ;)) zu dem Thema "Daten -> Excel". Das hat allerdings einen Haken. Die Zugriffe auf Excel sind ganz schön langwierig. Willst du also öfter in schneller Folge Daten schreiben, so würde ich dir davon abraten.

Ob das beim Schreiben in eine Datenbank wesentlich besser ist will ich mal dahingestellt sein lassen. Dazu könnte aber JesperMP (z.B.) sicherlich mehr dazu sagen.

Ob eine Datenbank für dich generell die bessere Lösung ist hat m.E. sehr mit der Aufgabe zu tun. Für deine Produktionsdaten-Chargen-Geschichte ist das nach meiner Meinung am Ziel vorbei. Für regelmäßig große Datenmengen ist das schon was Anderes.
Die Frage, die sich hier stellt ist allerdings :
Ist es nicht vielleicht sinniger, du schreibst deine aktuellen Daten wie gehabt in eine CSV-Datei - das belastet dann schonmal nicht die Visu über Gebühr - die CSV-Datei importierst du dann bei Bedarf in eine Datenbank (oder sonst wohin).

Die Daten würde ich generell nicht direkt auf dem Server erzeugen sondern immer lokal und dann diese lieber hin und wieder auf den Server kopieren. Dadurch lößt du dann auch das Problem mit dem "Öffnen von 2 Benutzern".

Gruß
LL
 
Also zu allererst muss ich mich mal hier selber loben. Die Daten in HTML anzuzeigen und die HTML Datei auch noch hübsch aussehen zu lassen war ja mal echt kein Problem. Bei dieser Form der Darstellung entfällt ja auch das Problem des gleichzeitigen öffnens bzw. lesens und schreibens. Genial!


So zurück zu meiner Excel Sache. Von dem Gedanken der Datenbank habe ich mich jetzt erstmal gelöst, da ja meine Ideen auch in Excel gehen und ich da ja jetzt drinhäng.

Zum Thema öffnen, bearbeiten und mehrere Nutzer gleichzeitig habe ich mir was überlegt. Ich habe 5 Anlagen, die ca. 1-2 mal pro Stunde was schreiben sollen. Deshalb sollte es kein echtes Problem sein, die Daten direkt auf den Server zu schreiben. Für den Fall, dass eine Anlage schreibt und eine andre auch schreiben will setze ich mir einfach ein Bit in der SPS bevor das Dokument geöffnet wird und setze es zurück wenn ich sie schließe. Vor dem Schreiben das Bit abfragen und bei gesetztem Bit ne Sekunde warten und schon bin ich recht fein raus bild ich mir ein.
Problem bleibt, wenn jemand die Datei von seinem Rechner aus auf dem Server direkt öffnet. Kann ich einem Excel-Dokument auch sagen, dass es von Usern bitte nur lesend geöffnet werden kann???
Und was noch wichtiger ist und echt ein Problem: Kann ich bei einigen Zellen vorher schon ein Format (z.B. Datum oder Zeit) festlegen???

Beispiel:
Bei der ersten Eingabe einer neuen Auftragsnummer in einem Monat soll das Gerät eine neue Datei mit Entsprechendem Namen anlegen. Soweit net schwer. Nur wenn es die Schon anlegt möge das Script auch direkt Überschriften reinknallen. Auch noch kein echtes Thema. Aber im selben Zug direkt einer Spalte sagen, dass da nun ein Datum reinkommt und es bitte nich versucen möge die Zahl als Zahl darzustellen?


Nächstes Problemchen:
Das ist jetzt einfach nur nice to have, aber nicht nötig. Ich schreibe mir eine HTML in der ich mit dateimodus 8 ja immer brav ne Zeile anhänge.
Diese hätte ich aber gern auf 50 Zeilen begrenzt, wobei ich die neueste Zeile immer oben anhänge und die älteste (bei voll) rauslösche. Idee: alles in nem for-loop auslesen, verschieben, einfügen, letzte löschen und gut. Aber gibts da nicht was andres? ich möchte ungern wieder alle Daten anfassen müssen dafür um sie neu zu ordnen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So zurück zu meiner Excel Sache. ... Zum Thema öffnen, bearbeiten und mehrere Nutzer gleichzeitig habe ich mir was überlegt. Ich habe 5 Anlagen, die ca. 1-2 mal pro Stunde was schreiben sollen. Deshalb sollte es kein echtes Problem sein, die Daten direkt auf den Server zu schreiben. Für den Fall, dass eine Anlage schreibt und eine andre auch schreiben will setze ich mir einfach ein Bit in der SPS bevor das Dokument geöffnet wird und setze es zurück wenn ich sie schließe. Vor dem Schreiben das Bit abfragen und bei gesetztem Bit ne Sekunde warten und schon bin ich recht fein raus bild ich mir ein.
Problem bleibt, wenn jemand die Datei von seinem Rechner aus auf dem Server direkt öffnet. Kann ich einem Excel-Dokument auch sagen, dass es von Usern bitte nur lesend geöffnet werden kann???

Also dazu schon jetzt von mir ein ganz herzliches "Viel Spaß" ... ;)
Die gleiche Datei für mehrere Visu-PC's auf dem Server zu nehmen und die Zugriffe zu synchronisieren wird bestimmt ein Unterfangen mit Anforderungs-Charakter - aber bestimmt ist es machbar.
Allerdings - was machst du, wenn die Server-Verbindung mal nicht zur Verfügung steht ? Bei uns im Unternehmen kommt das aus unterschiedlichen Gründen schon mal vor ...
Des weiteren : Für die Dauer der Script-Bearbeitung ist deine Visu möglicherweise für Weiteres (auf jeden Fall aber für weitere Scripts) geblockt. Mach dir auch das bitte klar ...

Das mit dem "Read-Only-Zugriff" für andere User kann ich mir nicht vorstellen, da es von Excel kommt. Dazu habe ich aber leider keine weiteren Kenntnisse ... :(

Und was noch wichtiger ist und echt ein Problem: Kann ich bei einigen Zellen vorher schon ein Format (z.B. Datum oder Zeit) festlegen???

Beispiel:
Bei der ersten Eingabe einer neuen Auftragsnummer in einem Monat soll das Gerät eine neue Datei mit Entsprechendem Namen anlegen. Soweit net schwer. Nur wenn es die Schon anlegt möge das Script auch direkt Überschriften reinknallen. Auch noch kein echtes Thema. Aber im selben Zug direkt einer Spalte sagen, dass da nun ein Datum reinkommt und es bitte nich versucen möge die Zahl als Zahl darzustellen?

Für ein öhnlich geartetes Unterfangen hatte ich mit einemm Vorlagen-Sheet gearbeitet. Ist die gwünschte Ziel-Datei noch nicht vorhanden, so lädt (und bearbeitet) die Visu die Vorlage und speichert diese unter einem neuen Namen ab. Vorteil hierbei : du kannst sicherlich die Formatierungen auch im Script und handisch machen - aber blickt da hinterher noch einer durch ?

Nächstes Problemchen:
Das ist jetzt einfach nur nice to have, aber nicht nötig. Ich schreibe mir eine HTML in der ich mit dateimodus 8 ja immer brav ne Zeile anhänge.
Diese hätte ich aber gern auf 50 Zeilen begrenzt, wobei ich die neueste Zeile immer oben anhänge und die älteste (bei voll) rauslösche. Idee: alles in nem for-loop auslesen, verschieben, einfügen, letzte löschen und gut. Aber gibts da nicht was andres? ich möchte ungern wieder alle Daten anfassen müssen dafür um sie neu zu ordnen.

Da wirst du wohl nicht darum herum kommen, dass du erst alle Daten lädst und dann den veränderten Stand abspeicherst. Dafür gibt es keine interne Funktion (oder so). Das sehe ich aber auch nicht als problematsich an, denn das ist sehr viel einfacher zu programmieren, wie deine Synchronisierung ...

Gruß
LL
 
Augenscheinlich hast du einen Punkt von mir icht zu 100% so verstanden wie ich das gemeint habe......
Also die Visu PCs sollen nicht alle wild auf meine Tabelle zugreifen. Die Tabelle ist mein "Datenendlager".
Nix lesen und nix weiteres. Einfach nur öffnen, Zeile schreiben und wieder freigeben. ENDE! ich unterstelle einfach mal, dass das nicht zu lange aufhalten sollte und auch kein echtes Problem mit der synchronisierung darstellt, oder lieg ich da ganz falsch?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also Zellen vorformatieren is jetzt auch kein Ding. Man lernt ja nie aus!

Habs mir einfach gemacht und in Excel einfach mal ein Makro aufgezeichnet und von Hand die Zellen formatiert. Makro anzeigen lassen und siehe da....Die Befehle gehen auch in meinem Script
Code:
Set wsExcel = wbExcel.Worksheets("Tabelle1")
  
 'Zellen formatieren
 wsExcel.Columns("G:G").NumberFormat = "d/m/yyyy;@"

Nur mal um die stumpfheit dieses Beispiels zu dokumentieren...
 
Für ein ähnlich geartetes Unterfangen hatte ich mit einemm Vorlagen-Sheet gearbeitet. Ist die gewünschte Ziel-Datei noch nicht vorhanden, so lädt (und bearbeitet) die Visu die Vorlage und speichert diese unter einem neuen Namen ab. Vorteil hierbei : du kannst sicherlich die Formatierungen auch im Script und handisch machen - aber blickt da hinterher noch einer durch ?

Hatte ich etwas davon gesagt, dass es nicht geht ?
Ich denke, dass du alle Excel-Eigenschaften im Script umsetzen kannst.
Heute muss eine Spalte im Date-Format sein. Morgen soll sie eine Spaltenbreite von 15 haben und der ganze Block einen Fett umrahmten Header, der hellblau ist mit anderer Schriftgröße und und und ...
Es sollte nur ein Vorschlag sein und jeder soll und darf natürlich auch seine eigenen Erfahrungen machen. Also los ...

Gruß
LL
 
Bei Win flex kannst du Variablen archivieren und anschließend über ein VBS script diese in eine Tabelle schreiben, sortieren, etc.
Ich schreibe Variablen meistens in eine SQL Datenbank (über eine Runtime) und Werte die dann über Excel aus.

Hallo Mondi,

könntest Du vielleicht mal posten wie Du das machst? Möchte soetwas auch gerne umsetzen, da man mit dem originalen Archiv am PC ja gar nichts anfangen kann.

Würde mich freuen :)

Gruss Hausen
 
Hallo Mondmann,

also ich nutze zur Zeit die normale Archivierung von WinCC Flexible um Historische Trends auf einem MP377 anzuzeigen. Da man diese erzeugten Dateien jedoch außerhalb vom MP nur sehr schlecht auswerten bzw. benutzen kann, suche ich eine andere Lösung.

Ich habe bereits schon einen Script hier im Forum gefunden der die zur archivierenden Werte in eine "normale" gut lesbare csv-Datei schreibt.

1.) Was ich jedoch etwas negativ daran finde ist die doppelte Datenarchivierung. Einmal die normale interne WinCC Flexible um die Historischen Trends anzuzeigen und die zweite gut lesbare Form.

2.) Ich denke das die performance da doch bestimmt gut leidet wenn ich zusätzlich noch ca. 20-30 Werte je sekunde in eine zweite Datei schreibe.

Was ich mir vorstellen würde ist, das ich z.B. ein oder zweimal am Tag die vorhandenen Archivdateien auslese und die Werte in eine csv-Datei schreibe die dann besser auswertbar ist.

Geht das überhaupt? Und wie müsste ich da ansetzten.

Herzlichen Dank schon mal für Deine/Euere Mühe.

Gruss Hausen
 
Hallo Mondmann,

egal wie es du drehst oder wendest, die Archivierung von Variablen in WinCC ist eine Krücke. Egal ob du die integrierte Funktion verwendest, oder es über ein Skript lösen willst. Wobei du mit dem Skript wahrscheinlich noch am weitesten kommst.
Ich weiss aber nicht, wie es bei einem Skript aussieht, wenn aktionen wie defekte oder gezogene Speicherkarte oder auch solche Sachen wie eine zu große Datei auftreten. Wenn du es schaffst die Daten jeden Tag auszulesen, dann kannst du es ja einmal ausprobieren.
Eine Sichere und gute Archivierung muss man leider extern vornehmen.

Hier noch eine Link zur Siemens FAQ http://support.automation.siemens.com/WW/view/de/26190515
Beachte vor allem Abschnitt 2 zu den Systemgrenzen.

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mahlzeit zusammen,

da ich in der Suche nichts dazu gefunden habe erweitere ich meinen guten alten Thread einfach mal wieder ein bisschen....

Also ich habe ein Problem!

Und zwar ein Problem mit der Synchronisierung von meinen 5 Anlagen. Alle schreiben in EINE gemeinsame Excel Datei auf einem Server im Netz. Bevor eine Anlage das Dokument öffnet setzt sie ein Bit in der SPS und setzt dieses nach dem Schreiben wieder zurück, damit die nächste Anlage schreiben darf. Wenn Bit gesetzt warten alle, die schreiben wollen brav ab, bis das Bit weg ist. So weit ganz einfach.......eigentlich.

Jetzt das Problem:
zwischendurch scheint Ecxel zu sterben und in einer Instanz im Hintergrund offen zu bleiben und das Dokument in Beschlag zu nehmen. Das Bit wird dank "on error resume next" brav zurückgesetzt, aber Excel nicht geschlossen. Was zur Folge hat, dass der Benutzer der nächsen Anlage, die schreiben will, das schöne Fenster eingeblendet bekommt, welches ihn fragt wo er denn gerne speicher möchte.
Da es mehrere Dokumente gibt (eins zur Schichterfassung und eins zur Störerfassung) klickt der gute Anlagenführer (in dem Fall der gute alte Schlosser) einfach mal auf irgendwas. Damit wird dann z.B. die Störtabelle mit einem Einzeiler der Schichterfassung überschrieben.

Also was tun? Ich will das Fenster nicht eingeblendet bekommen, welches einen Fragt wo man hinspeichern kann. Ich will dass Excel immer und definitiv zu 100% geschlossen wird und ich will einen Button, der noch bestehende Instanzen von Excel killt.

Versteht mich jemand? Bzw. kann jemand helfen?
 
Zurück
Oben