# DotNetSimaticDatabaseProtokoller



## Jochen Kühner (1 Juli 2011)

Ein Tool um Daten aus einer SPS in datenbanken zu speichern (oder CSV)

Mit diesem ist es über eine GUI möglich sich seine Datensätze zusammen zu stellen.

Es kann auch über einen Trigger Daten von verschiedenen SPSen auf einmal gelesenen werden.

Wer sich eine Vorabversion schon mal ansehen möchte, gibts hier als Anhang!

Features der Vorabversion:
- Datenbanktreiber (CSV, SQLlite, Excel, Postgres, MySQL, MsSQL)
- LibNoDave Verbindungen 
- 3 Triggertypen (über Bits und Zeitgesteuert, Cron Tabelle, TCP/IP )

Das Programm besteht aus 2 exe files, ConfigurationTool mit dem ihr die Config erstellt und Service, ein Windows Dienst welcher die Daten holt.

Einfach eine Config erstellen, im ConfigurationTool unter Protocolling auf Save klicken, und dann den Dienst starten.
Der Dienst kann ganz einfach über die Service exe installiert werden.

Achso, .Net Framework 4.0 wird benötigt!

Geplante Features (sind schon in Arbeit)
- Firebird
- Multiple Inserts bei MySQL, Postgres, ... (damit's schneller geht!)
- weitere Datenbanken (mal schaun)

Lizenz: GPL

Achso, wer mir was Gutes tun will:

Hier kann gerne was gespendet werden: http://siemensplctoolboxlib.codeplex.com/



Acho sp, noch was: Diese Version hier ist nicht immer ganz aktuell! Die neuste gibts immer hier: http://siemensplctoolboxlib.codeplex.com/


----------



## Jochen Kühner (2 Juli 2011)

*So...*

So, hab noch ein bischen dran gebastelt...

Wer Bugs findet, wer schön wenn Ich davon erfahre!


----------



## Jochen Kühner (6 Juli 2011)

*Noch ein paar Features...*

- 2 neue Datenbanktreiber (Excel(xls) und Postgres)
 - Datenbankbrowser (mit dem können die Datensätze betrachtet werden)
 - Fenster zu Dienstverwaltung (Starten, Stoppen, Installieren, Deinstallieren und Ereignislog)
 - SQLlite-Storage-Treiber: mehrere Inserts in eine Transaktion gepackt falls die Daten schneller kommen als auf die Disk geschrieben werden kann! (Dies wirkt sich wahrscheinlich erst wieder aus, wenn der direkte TCP/IP Kanal wieder implementiert ist, über den mehrere Telegramme auf einmal übertragen wurden)
 - Bugfixes...


----------



## Jochen Kühner (3 August 2011)

Der Quellcode zu diesem Tool ist nun in meiner Connection Lib enthalten!


----------



## Jochen (8 August 2011)

Wollte Dir nur schnell mal vielen Dank für dieses schöne Stück Software sagen. Funktioniert klasse.

Ein kleiner Bug:

Existiert der DB nicht, aus dem Daten gelesen werden sollen, stürzt das Programm ab, wenn das Logging im "Testen"-Unterpunkt gestartet wird.

Gruß

Jochen


----------



## Jochen Kühner (9 August 2011)

Jochen schrieb:


> Wollte Dir nur schnell mal vielen Dank für dieses schöne Stück Software sagen. Funktioniert klasse.
> 
> Ein kleiner Bug:
> 
> ...



Sollte behoben sein...


----------



## Jochen (11 August 2011)

Hi, hast Du vielleicht noch ne Idee für mich?

Ich habe jetzt ein Excel-Storage gemacht, in dem ein Feld die Uhrzeit (DateTime) ist. Leider wird der Wert als Zahl in die Spalte geschrieben und ich muss nach dem Öffnen des Excel-Files die Spalte noch von Hand als Zeit Formatieren, damit dann die richtige Zeit angezeigt wird. Kann man das irgendwie Protokollerseitig beheben? Wohl eher nicht, oder, da das ja ein Excel (OpenOffice)-Problem ist.

Gruß

Jochen


----------



## Jochen Kühner (11 August 2011)

Nee, im Excel File schreiber könnte Ich die Feldformatierung schon machen... Schau ich mir morgen mal an!


----------



## Jochen (11 August 2011)

Edit: Noch ein Problem.

Ich will 4 Realwerte Auslesen. Wenn ich die nun im Storage als Feld "Float" festlege und den Service mit "Test as a Service" testen will, poppt das Fenster auf "ConfigurationTool hat ein Problem festgestellt und muss beendet werden" Im Hintergrund läuft NetToPlcSim in dessen Fenster ich aber nun immer noch lese, dass regelmäßig Daten abgeholt werden. Da ich das Programm trotz des "Beenden"-Popups noch bedienen kann, sehe ich im Ereignisprotokoll als letzte verwertbare Fehlermeldung:

Error - Exception occurred - There is an error in XML document (150,30)

Die Exceltabelle wird noch angelegt, enthält aber nur die Überschriften.
Wenn ich statt "Float" den Wert als "DWord" auslesen lasse, wird ein Wert geschrieben, natürlich in falschem Format. 

Wenn ich den Service "normal" starte, werden überhapt keine Werte ausgelesen und auch keine xls erstellt, sofern ich "Float" gewählt hatte.

Ich hoffe, Du kannst mit meiner Fehlerbeschreibung was anfangen.



Edit: Mit den gleichen Einstellungen funktioniert "Float" mit einem csv-File perfekt. Dort stimmt sogar direkt die Datums- und Zeitangabe
Gruß

Jochen


----------



## Jochen Kühner (12 August 2011)

Jochen schrieb:


> Edit: Noch ein Problem.
> 
> Ich will 4 Realwerte Auslesen. Wenn ich die nun im Storage als Feld "Float" festlege und den Service mit "Test as a Service" testen will, poppt das Fenster auf "ConfigurationTool hat ein Problem festgestellt und muss beendet werden" Im Hintergrund läuft NetToPlcSim in dessen Fenster ich aber nun immer noch lese, dass regelmäßig Daten abgeholt werden. Da ich das Programm trotz des "Beenden"-Popups noch bedienen kann, sehe ich im Ereignisprotokoll als letzte verwertbare Fehlermeldung:
> 
> ...



Die Abstürze sind nun behoben, auch DataTime wird nun automatsich als Feldtyp übernommen.

Mit Floats gibts aber ein problem, die bekomme Ich nur als Text nach Excel, da die von mir genutzte Excel Bibliothek irgendwelche Probleme damit hat!


----------



## Jochen Kühner (14 August 2011)

MySQL Support...


----------



## Jochen (14 August 2011)

Ich bin zwar jetzt ganz auf csv umgestiegen, aber noch zur Information etwas zum Excel-Storage:

Excel 2010 bringt bei jedem Versuch, die Datei zu öffnen "Von Excel wurde unlesbarer Inhalt in der Datei "xyz.xls" gefunden, möchten Sie den Inhalt wiederherstellen?"

Wenn ich auf "Ja" klicke, stellt Excel garnix wieder her. Mit OpenOffice kann ich die Dateien allerdings öffnen. 

Noch etwas, was mir bei Excel aufgefallen ist: Der Protokoller-Service benötigt anscheinend Exklusivzugriff auf die Datei, denn wenn ich sie in Excel öffne oder sie zu öffnen versuche, stoppt der Service.

Ich nehm jetzt CSV, das scheint unverwüstlich zu sein. Ich kann während des Protokollierens die Netzwerkverbindung trennen, die Dateien löschen und ansehen, trotzdem arbeitet der Service einfach im Hintergrund perfekt weiter. Ist die CPU wieder erreichbar, wird wieder geloggt. Echt ein tolles Ding. 

P.S.:

Ich habe mal versucht, auf ein Netzlaufwerk protokollieren zu lassen, zum Testen ob das geht. Es kommt leider nur der Fehler "Ein Teil des Pfades 'Y:\xxxx\xyz.csv' konnte nicht gefunden werden.

Kann man das trotzdem irgendwie machen?

Gruß

Jochen


----------



## Jochen Kühner (14 August 2011)

Jochen schrieb:


> Ich bin zwar jetzt ganz auf csv umgestiegen, aber noch zur Information etwas zum Excel-Storage:
> 
> Excel 2010 bringt bei jedem Versuch, die Datei zu öffnen "Von Excel wurde unlesbarer Inhalt in der Datei "xyz.xls" gefunden, möchten Sie den Inhalt wiederherstellen?"
> 
> ...



Mit Excel 2010, das ist ein bekannter Bug. Wenn die Datei größer wird (so ab ca 10kb) kann Sie mit Excel auch geöffnet werden. Das liegt aber nicht an meinem Protokoller sondern an der Dll welche Ich für das Excel Format verwende! Hab da mittlerweile aber noch ein paar weitere Dlls gefunden um Excel Files zu schreiben, und muss mal sehen ob Ich Zeit finde diese einzubauen.

Das mit den CSV Files aufs Netzwerk sollte eigentlich gehen (habs aber nie getestet!) Muss Ich morgen mal testen, wens da noch einen Bug gibt, fixe Ich den natürlich!

Ich nutze selbst hauptsächlich SQLite, daher ist das am meisten getestet!


----------



## Jochen Kühner (15 August 2011)

Jochen schrieb:


> Ich habe mal versucht, auf ein Netzlaufwerk protokollieren zu lassen, zum Testen ob das geht. Es kommt leider nur der Fehler "Ein Teil des Pfades 'Y:\xxxx\xyz.csv' konnte nicht gefunden werden.
> 
> Kann man das trotzdem irgendwie machen?
> 
> ...



Das geht schon, kommt halt auf deine Zugriffsberechtigen an! Der User unter dem du meine Programm startes muss Zugriff auf das Netzlaufwerk haben. Achtung, wenn du als Administrator ausführen machst, gelten nicht deine Zugriffsberechtigungen, sondern die des Administrator Accounts!


----------



## Jochen Kühner (16 August 2011)

@Jochen:

Ich habe für den CSV Writer mal noch die möglichkeit vorgesehen, das er sich an einem Network Share anmelden kann. Kannst du es nun nochmals versuchen. Du musst aber dann statts dem Laufwerknamen den kompletten UNC Pfad benutzen (so: \\RechnerName\Freigabename\xxx.csv).
Wenn's funktioniert bau Ich das auch noch in den Excel und SQLLite Writer ein!


----------



## Jochen (17 August 2011)

Danke, war zwar heute den ganzen Tag an der Anlage, aber hatte noch nicht ins Forum geschaut. Ich werde das morgen testen. Noch eine Frage, ist es eventuell möglich, Floats statt mit Komma mit Punkt in die CSV rein zu schreiben? Unsere Rechner sind alle im "FuE-Modus" mit den internationalen Dezimaltrennzeichen und Tausendergruppierungszeichen eingerichtet. Die Biologen hier meckern den ganzen Tag rum, dass ihr Excel die gemessenen Realwerte dann mit lauter Kommata darstellt und sie in ihrem Windows immer erst in den Regionaleinstellungen den Punkt und Komma wieder tauschen müssen.

Ich berichte Dir morgen von dem Versuch mit dem Netzlaufwerk.

Edit.: Hatte heute leider keine Zeit, das mit dem Netzwerkpfad zu testen, hoffentlich morgen.

Gruß

Jochen


----------



## Jochen Kühner (18 August 2011)

Jochen schrieb:


> Danke, war zwar heute den ganzen Tag an der Anlage, aber hatte noch nicht ins Forum geschaut. Ich werde das morgen testen. Noch eine Frage, ist es eventuell möglich, Floats statt mit Komma mit Punkt in die CSV rein zu schreiben? Unsere Rechner sind alle im "FuE-Modus" mit den internationalen Dezimaltrennzeichen und Tausendergruppierungszeichen eingerichtet. Die Biologen hier meckern den ganzen Tag rum, dass ihr Excel die gemessenen Realwerte dann mit lauter Kommata darstellt und sie in ihrem Windows immer erst in den Regionaleinstellungen den Punkt und Komma wieder tauschen müssen.
> 
> Ich berichte Dir morgen von dem Versuch mit dem Netzlaufwerk.
> 
> ...


Jo, das könnte Ich schon einbauen, mal sehn ob Ich diese Woche noch dazu komme? 
Hats mit dem Netzlaufwerk funktioniert?


----------



## Jochen (19 August 2011)

Jochen Kühner schrieb:


> Jo, das könnte Ich schon einbauen, mal sehn ob Ich diese Woche noch dazu komme?
> Hats mit dem Netzlaufwerk funktioniert?



Lass Dir ruhig Zeit, die Daten werden geloggt, das ist die Hauptsache. Der Dezimalpunkt hat für mich jetzt nicht oberste Priorität, weil das ja auch per Importsyntax in Excel reguliert werden kann. Vielleicht wäre später halt ein Schalter nicht schlecht, mit dem man das umschalten kann.

Zu Deiner zweiten Frage, siehe in meinem letzten Beitrag:



			
				Jochen schrieb:
			
		

> Edit.: Hatte heute leider keine Zeit, das mit dem Netzwerkpfad zu testen, hoffentlich morgen.
> 
> Gruß
> 
> Jochen



Ich muss morgen noch zu nem Termin und weiß nicht, wielange ich an der Anlage bin, aber sobald ich es spätestens nächste Woche probiert habe, berichte ich Dir.

Gruß

Jochen

P.S.: Ein Donate-Button auf Deiner Homepage würde mir gefallen.


----------



## Jochen Kühner (19 August 2011)

Jochen schrieb:


> Der Dezimalpunkt hat für mich jetzt nicht oberste Priorität, weil das ja auch per Importsyntax in Excel reguliert werden kann. Vielleicht wäre später halt ein Schalter nicht schlecht, mit dem man das umschalten kann.


Ist nun drin! Eingeschaften des CsvStorrage!



Jochen schrieb:


> P.S.: Ein Donate-Button auf Deiner Homepage würde mir gefallen.


Der ist nun auch wieder da!


----------



## Jochen (24 August 2011)

Sooooo,

ich darf berichten:

1. Dezimalpunkt klappt.
2. Speichern auf Netzwerkfreigabe direkt funktioniert super.

Danke

Gruß

Jochen


----------



## Jochen Kühner (25 August 2011)

*Jo...*

Das mit der Netzwerkfreigabe, nutzt du da nun die Username Passwort anmeldung von meinem Programm?

Wenn du die Felder leer lässt gehts dann nicht?

Will nur wissen, ob Ich das in den Excel und SQLite Writer auch einbauen sollte.


----------



## Jochen (26 August 2011)

Ich hab es jetzt nur auf eine öffentliche Netzwerkfreigabe ohne Nutzernamen und Passwort getestet. Aber ich schau es mir gleich nochmal an, mit Benutzernamen und Passwort und berichte Dir dann. Im regulären Betrieb hab ich es allerdings jetzt so konzeptioniert, dass die Daten lokal geloggt werden und ein Cronjob sie periodisch ins Netzwerk sichert.

Edit:

Habs jetzt ne Stunde lang probiert, aber es klappt einfach nicht. Auf die im Netzwerk befindliche FritzBox, die keinerlei Anmeldung erfordert, kann ich über den UNC-Pfad die Werte einwandfrei wegschreiben. Die Felder für Benutzername und Passwort sind dabei leer. Richte ich auf irgendeinem anderen PC eine Freigabe ein, auf die ich im Explorer mit Nutzername und Passwort zugreifen kann, dann bekomme ich die Exception dass der Pfad nicht gefunden wurde. 

Aber ich muss auch zugeben, mit den Netzwerkfreigaben unter Windows komm ich nicht mehr so richtig klar, vor allem unter den neuen Windows 7-Systemen. Mag sein, dass es da noch irgendwelche versteckten Hürden gibt. Die ganze Benutzerverwaltung von Windows ist unglaublich unübersichtlich. Und eine vernünftige smb.conf existiert auch nicht.


----------



## Jochen Kühner (27 August 2011)

*Jo*

Dann muss Ich das ganze wohl selbst noch probieren. Muss mir dazu halt erst mal ein Test Netzwerk einrichten! Wird etwas dauern...


----------



## Jochen (29 August 2011)

Habe übrigens filgendes festgestellt:

Hatte eine Woche lang die Werte im 3-Minutenabstand durchgeloggt, ohne Probleme. 

Nun sollten die Intervalle auf 10 Sekunden reduziert werden. Das hab ich am Freitag mittag um 14 Uhr gemacht und heute morgen hab ich festgestellt dass das Logging etwa um 19 Uhr aufgehört hat. Das Eventlog meldet nur "Protokoller gestoppt".


----------



## Jochen Kühner (29 August 2011)

Wie hast du denn den Protkoller gestartet?? Als Test über die Konfigurationsoberfläche oder als Windows Dienst?

Wenn du ihn als Windows Dienst gestartet hast, und diese Meldung kam, kann es eigentlich nur sein das jemand Stop gedrückt hat, oder die Meldung davor war eine Exception (wenn ja, dan schick sie mal)!


----------



## Jochen (29 August 2011)

Nein, er läuft als Dienst, Zwischen den Meldungen "Protokoller Gestartet" und "Protokoller gestoppt" gibt es keine weiteren Meldungen. Und auf "Stop" gedrückt hat auch keiner, denn wie ich gerade sogar sehe, läuft der Dienst an sich noch. Loggt halt nicht mehr. Habe es jetzt heute mehrfach getestet, hat heut Morgen nach etwa einer halben Stunde aufgehört zu loggen, nach dem zweiten Start ist er nach etwa 1,5 Stunden ausgestiegen. Ich versuchs jetzt mal mit Handshakebetrieb. 

Gruß

Jochen


----------



## Jochen Kühner (29 August 2011)

*Nochmal...*

Hallo, kannsts nochmal testen, hab was umgebaut, jetzt sollte zumindest ein Fehler kommen...


----------



## Jochen (29 August 2011)

Morgen werd ich es nochmal testen, hab es jetzt erstmal auf Handshakebetrieb umgestellt, läuft soweit mit dem kurzen Intervall schon seit einer Stunde. Ein Kollege arbeitet grade an der Anlage, ich teste es dann morgen nochmal zeitgesteuert und berichte dann.

Zum Handshakebetrieb noch eine Frage. Ich habe als Readbit m80.4 und als Quittierbit M80.3 eingestellt

Dann wie folgt programmiert:


```
UN    M     80.4
      SPBNB _016

//Daten aus den Prozess-DBs abholen und in Messwert-DB schreiben
[...] 

//Readbit für Daten vorhanden setzen

      S     M     80.4
      R     M     80.3



_016: U     M     80.3
         R     M     80.4

         NOP   0
```

Ginge das noch effektiver?

Gruß

Jochen


----------



## Jochen Kühner (30 August 2011)

@Jochen:

Was willst du denn effektiver machen? 

@All:

Hab jetzt noch die Möglichkeit eingebaut die SPS Verbindung Offline zu lassen, und nur bei bedarf zu Verbinden.

Genauso gibts nun einen neuen Trigger, den man über eine CRON Tabelle steuern kann!


----------



## Jochen (1 September 2011)

Jochen Kühner schrieb:


> @Jochen:
> 
> Was willst du denn effektiver machen?



Ich war mir nicht sicher, ob es so korrekt programmiert ist. 

Übrigens ist seit Deiner Änderung auch mit dem Zeitintervall kein Fehler mehr aufgelaufen bisher. Das Handshakemodell ist allerdings sauberer ,deswegen behalt ich das jetzt bei. 

Gruß


----------



## Jochen Kühner (1 September 2011)

Jochen schrieb:


> Ich war mir nicht sicher, ob es so korrekt programmiert ist.
> 
> Übrigens ist seit Deiner Änderung auch mit dem Zeitintervall kein Fehler mehr aufgelaufen bisher. Das Handshakemodell ist allerdings sauberer ,deswegen behalt ich das jetzt bei.
> 
> Gruß



Schade, denn Ich habe keine Änderung gemacht, sondern nur mehr Logging Infos hinzugefügt!

Also falls es nochmal zum abbruch kommt, einfach hier rein posten!


----------



## Jochen Kühner (8 September 2011)

*So...*

- S7 FC zum Logging ist nun wieder dabei
- Logging via TCP/IP Verbindung (für schnelle Daten)


----------



## stumpi_8 (14 September 2011)

@Jochen,

sehr interessantes Projekt!! Super, dass du das hier zur Verfügung stellst.

@all
Ich möchte für meine Abschlussarbeit Leistungs- und Druckwerte mit diesem Programm auslesen. Das funktioniert soweit auch ganz gut. Mein Problem ist folgendes:
Ich brauche eine Zeitbasis mit Millisekundenauflösung auf die sich die Werte beziehen, idealerweise wäre das die Triggerzeit. 

Wenn ich zur Aufzeichung den Time_Trigger verwende, dann funktioniert die Aufzeichung ohne Probleme. Wähle ich aber Triggered_on_incoming... dann kommt die Fehlermeldung Objektverweis wurde nicht auf eine Objektinstanz festgelegt. Ist das ein Einstellungsfehler Meinerseits oder ein Bug? 


Vielen Dank für eure Unterstützung!

Gruß Stumpi


----------



## Jochen Kühner (14 September 2011)

stumpi_8 schrieb:


> @Jochen,
> 
> sehr interessantes Projekt!! Super, dass du das hier zur Verfügung stellst.
> 
> ...



Der Trigger : Trigger_On_icoming_TCP_data ist für eine TCOP Verbindung gedacht, welche Daten über AG_SEND von einer PLC bekommt. Dieser ist nicht für die anderen Verbindungen verwendbar. 
In einer kommenden Version werde Ich das Verriegeln.
Eine Zeitbasis von nur ein paar Millisekunden ist über das auslesen von der PLC nicht möglich, dazu müsstest du dann die Telegramme auf der PLC Puffern und über AG_Send an den PC schicken. Dazu gibt es auch einen Baustein von mir (dem Protokoller liegt ein Zipfile mit einem Step 7 Projekt bei!)


----------



## stumpi_8 (15 September 2011)

Hi Jochen,

Danke für die Antwort. Werde mir das Step7 Projekt heute mal anschauen. Welche zeitl. Auflösung ist denn ohne das Puffern der Programme möglich? Wie kann ich die Zeitbasis am geschicktesten mitloggen?

Gruß


----------



## Jochen Kühner (15 September 2011)

*mhmmm*

im sourcecode vin meinem protokoller (meiner toolboxlib) ist auch ein tool, um die zeit auszulesen, wie lange ein readrequest an die sps dauert! Aber mal schaun, vieleicht bau ich das noch ein!


----------



## stumpi_8 (19 September 2011)

Hi Jochen, 

mir gehts nicht um die Readrequest Zeit ist zwar auch interessant, aber wichtiger wäre es mir ein Zeitstempel zu meinen geloggten Werten zu haben. Ich habe schon versucht das mit der Systemzeit der Steuerung zu realisieren, aber das Ergebnis ist nicht ganz zufriedenstellend. Besteht da eine andere Möglichkeit? Idealerweise würde der Datenlogger automatisch die Systamzeit des PC mitschreiben.

Gruß Stumpi


----------



## Jochen Kühner (19 September 2011)

stumpi_8 schrieb:


> Hi Jochen,
> 
> mir gehts nicht um die Readrequest Zeit ist zwar auch interessant, aber wichtiger wäre es mir ein Zeitstempel zu meinen geloggten Werten zu haben. Ich habe schon versucht das mit der Systemzeit der Steuerung zu realisieren, aber das Ergebnis ist nicht ganz zufriedenstellend. Besteht da eine andere Möglichkeit? Idealerweise würde der Datenlogger automatisch die Systamzeit des PC mitschreiben.
> 
> Gruß Stumpi



Warum ist das nicht zufriedenstellend? Wenn du die SPS Zeit mitprotokollierts, hast du genau den Zeitpunkt an dem die Werte von der SPS gelesen wurden!


----------



## fuss (19 September 2011)

Super Tool, danke!!!

Ich verwende das Tool zum aufzeichnen von Temperaturen und da meine AG- und PC-Zeit sowieso miteinander über eine Variable synchronisiert werden, lass ich mir diese Variable (DATE_TIME) gleich mit in die Excel-Tabelle schreiben. Hat aber natürlich nur eine Auflösung von 1sek, aber für meinen Anwendungsfall reicht es!


----------



## stumpi_8 (21 September 2011)

Hi Jochen, 
Fehler meinerseits ich habe die SPS-Zeit falsch ausgelesen.
Vielen Dank für deine Antworten!!
Gruß Stumpi


----------



## Jochen Kühner (27 September 2011)

Updates:
- Excel 2007 Data Storage
- Fixes in MySQl/PostGres


----------



## Jochen Kühner (22 Oktober 2011)

Bugfixed Version


----------



## Jochen Kühner (7 November 2011)

Bugfixes:
- TCP IP COnnection


----------



## giraffe (9 Dezember 2011)

hallo,
erstmal danke für das Projekt, sieht sehr vielversprechend aus. Hab ne Frage zum Feld "Write PC DateTime to following Field" im Tab Datasets. Was muss ich da eintragen? Irgendwie bekomme ich das nicht hin. Ich denke mal das Ziel soll sein, dass zu jedem Wert die aktuelle PC Uhrzeit geschrieben wird? Bei mir erscheint immer nur Row_1 mit den Werten und nicht mehr.


----------



## Jochen Kühner (9 Dezember 2011)

Hallo, dies ist im Moment leider nur für SQLLite implementiert... Wenn du da einen Feldnamen eingibst, wird dort die Uhrzeit eingetragen wann der PC es Protokolliert hat!


----------



## Andreas (20 Dezember 2011)

Geniales Tool!
Wie muss Ich unter Datasets das Feld "Write PC DateTime to following Field" parametrieren um die PC Zeit in z.B. ein CSV zu schreiben?

Gruß
Andreas


----------



## Jochen Kühner (4 Januar 2012)

Siehe Antwort vorher! Ist bisher nur für SQLLite implementiert!


----------



## nekron (7 Januar 2012)

Moin Moin,

Ist es moeglich, oder ist das ohne Probleme einzubauen, int Werte zu skalieren oder Real Werte mit einer Präzision auszustatten ? D.h. Es werden z.b nur 2 nachkommastellen geloggt... Oder ein int-wert wird * 0.01 gerechnet und dann geloggt ?

Gruß,
Michael


----------



## Jochen Kühner (12 Januar 2012)

Hab da mal einen Multiplikationsfaktor eingebaut. Musst du mal testen! Bisher nur im Source!


----------



## dr.hareg (27 Januar 2012)

Hallo,

gibt es eine einfache möglichkeit Daten bei Änderung zu loggen?

Grüße Gerhard

P.S. Ein wirklich geniales Tool


----------



## shainax (3 Februar 2012)

Hallo Jochen,
danke für dieses schöne Werkzeug.
Eine Frage/Bitte habe ich jedoch.
Besteht die Möglichkeit die csv Dateien irgendwie Täglich neu auszulaggern mit dem aktuellem Datem vorne weg?
Also das ich ein Pfad angebe und in einem Ordner die Dateien mit dem Datum vorne wie z.B 03.02.2012Temperaturdaten.csv erstellt werden?

Das wäre echt super, weill irgendwann die csv Datei ja sehr groß wird

mfg shainax


----------



## ceasar (4 Februar 2012)

Hallo, Jochen.
Ich habe meine Aufgabe, auf die S7-300 Steuerung verbinden und Daten aus. Haben Sie nicht vorher Erfahrung praboty in diesem Bereich hatte. Ich will verbinden und Schreiben von Daten aus den Tabellen des Controllers in eine CSV-Datei mit Ihrem Programm. Es ist viel leichter meine Aufgabe. Als Nächstes ich nipishu Programm, das Daten aus einer Datei CSV extrahieren kann. Wenn Sie nicht sind hart du mir helfen? Nämlich, um mit der Einrichtung der Verbindung zum Controller und Sie können Sie beschreiben Schritt für Schritt Anschluss an die Steuerung mit Ihrem Programm zu helfen.
Hier ist die Controller-Daten:
IP-Controller-Adresse 192.168.0.1, empfangen Daten aus den Tabellen des Reglers muss ich Periodizität 5 Minuten. Ein Beispiel für eine Datentabelle in der Steuerung kann in Teilbilder gefunden werden.
Vielen Dank. Meine Email-Adresse yuriy.mokshin@gmail.com.
P.S. Entschuldigung Sie bitte für mein schlechtes Deutsch.


----------



## Jochen Kühner (5 Februar 2012)

Versteh nur Bahnhof....


----------



## Jochen Kühner (5 Februar 2012)

shainax schrieb:


> Hallo Jochen,
> danke für dieses schöne Werkzeug.
> Eine Frage/Bitte habe ich jedoch.
> Besteht die Möglichkeit die csv Dateien irgendwie Täglich neu auszulaggern mit dem aktuellem Datem vorne weg?
> ...



Bisher gibts dafür noch nichts... Ich schau mal was Ich machen kann...


----------



## shainax (6 Februar 2012)

Für mich ist es wichtig, dass jeden Tag um 0:00 Uhr eine neue Datei automatisch mit dem aktuellen Datum erzeugt wird.

Die Uhrzeit kann ich ja aus der SPS auslesen und in eine Spalte einfügen. Aber damit mann nicht ewig in der Datei scrollen muss wäre es sinnvoll das Dateien mit dem Datum vorneweg beginnen. Oder sehe ich da etwas falsch.

Ansonsten funktioniert dein Tool klasse. Super Leistung! Danke dafür


mfg shainax


----------



## eloboy (6 Februar 2012)

shainax schrieb:


> Die Uhrzeit kann ich ja aus der SPS auslesen
> 
> mfg shainax




Wird deine SPS Uhrzeit irgednwo synchronisiert?
Bei mir laufen die Zeiten immer wieder davon.


----------



## shainax (6 Februar 2012)

eloboy schrieb:


> Wird deine SPS Uhrzeit irgednwo synchronisiert?
> Bei mir laufen die Zeiten immer wieder davon.



falsche abteilung um technische angelegenheiten musst du in das entsprechende Forum.
Aber zu deiner Frage: Die Uhrzeit stellst du ja ein am anfang ein über dein PG und liesst diese dann in der SPS aus.
Zum Synchronisieren habe ich nichts, weil ich nur eine CPU und ein Panel habe.
Hast du denn deine CPU zeit mit deiner ausgelesenen verglichen? Wenn die angezeigte von der CPU Zeit abweicht dann liesst du diese falsch aus!


mfg shainax


----------



## Jochen Kühner (6 Februar 2012)

shainax schrieb:


> Für mich ist es wichtig, dass jeden Tag um 0:00 Uhr eine neue Datei automatisch mit dem aktuellen Datum erzeugt wird.
> 
> Die Uhrzeit kann ich ja aus der SPS auslesen und in eine Spalte einfügen. Aber damit mann nicht ewig in der Datei scrollen muss wäre es sinnvoll das Dateien mit dem Datum vorneweg beginnen. Oder sehe ich da etwas falsch.
> 
> ...



Hab mal was dazu eingebaut... Kanns im Moment aber nicht testen bin auf Montage... Schreib einfach obs geht!


----------



## Jochen Kühner (6 Februar 2012)

eloboy schrieb:


> Wird deine SPS Uhrzeit irgednwo synchronisiert?
> Bei mir laufen die Zeiten immer wieder davon.



Zum zeitsynchronisieren hab Ich auch was eingebaut, geht aber nur mit LibNodave Connection!
Kann ich aber gerade auch nicht testen!


----------



## shainax (6 Februar 2012)

Jochen Kühner schrieb:


> Hab mal was dazu eingebaut... Kanns im Moment aber nicht testen bin auf Montage... Schreib einfach obs geht!



funtioniert 1A. habe das Datum in meinem rechner geändert und und das programm erstellt neue files

Danke


----------



## shainax (6 Februar 2012)

Jochen eine Frage habe ich nochmal. Ist zwar nicht so wichtig aber kannst ja mal schauen bei gelegenheit.
Und zwar wenn ich die erstellt Datei geöffnet habe loggt der Protokoller nicht mehr. Dieser loggt erst weiter wenn die erstellte Datei geschlossen ist. 
Ich lagere die Datei jetzt mit einer batch Datei automatisch aus um diese nicht zu öffnen

mfg shainax


----------



## Jochen Kühner (6 Februar 2012)

shainax schrieb:


> Jochen eine Frage habe ich nochmal. Ist zwar nicht so wichtig aber kannst ja mal schauen bei gelegenheit.
> Und zwar wenn ich die erstellt Datei geöffnet habe loggt der Protokoller nicht mehr. Dieser loggt erst weiter wenn die erstellte Datei geschlossen ist.
> Ich lagere die Datei jetzt mit einer batch Datei automatisch aus um diese nicht zu öffnen
> 
> mfg shainax



Wahrscheinlich öffnet excel die datei exklusiv und sperrt sie, und da ich die datei nicht offen halte, sondern nur beim schreiben öffne...


----------



## shainax (7 Februar 2012)

Guten Morgen Jochen,

sag mal ist es möglich noch einen Triggerungstyp einzubinden in dein Programm?
Solange ein Merker gesetzt is das der Protokoller im Zeittakt(einstellbar) aufnimmt?
Damit könnte man die Fehler aus der SPS auslesen. Bei einem Fehlerereignis wird ein Merker gesetzt und bleibt gesetzt bis ein quittieren erfolgt. Wenn ich auf handshake gehe nimmt der Protokoller nur einmal auf. Ich wollte das mit eine Flanke realisieren in der SPS aber leider schaft der Protokoller nicht die Flanke (wahrscheinlich zu schnell). Jetzt dachte ich mir da ich sowieso einen Fehlerausgang in jeder SPS habe könnte ich wenn diese gesetzt ist z.B. jede Sekunde einen Wert aufnehmen.

Meinst du man kann das realisieren? 

Achso noch etwas festgestellt.
Wenn ich zwei oder mehr Tabellen auf eine StorageDatei legen möchte wird nichts geschrieben. 

Ich mach das nur mit csv.

mfg shainax


----------



## eloboy (7 Februar 2012)

shainax schrieb:


> Guten Morgen Jochen,
> 
> Solange ein Merker gesetzt is das der Protokoller im Zeittakt(einstellbar) aufnimmt?
> 
> mfg shainax





Wieso erweiterst du nicht einfach die S7 Bausteine? 
Dann hättest du auch noch einen zwischen Buffer 


gruß 
elo


----------



## shainax (7 Februar 2012)

eloboy schrieb:


> Wieso erweiterst du nicht einfach die S7 Bausteine?
> Dann hättest du auch noch einen zwischen Buffer
> 
> 
> ...


----------



## eloboy (7 Februar 2012)

shainax schrieb:


> eloboy schrieb:
> 
> 
> > Wieso erweiterst du nicht einfach die S7 Bausteine?
> ...


----------



## Jochen Kühner (7 Februar 2012)

shainax schrieb:


> Guten Morgen Jochen,
> 
> sag mal ist es möglich noch einen Triggerungstyp einzubinden in dein Programm?
> Solange ein Merker gesetzt is das der Protokoller im Zeittakt(einstellbar) aufnimmt?


Von diesem Trigger sehe Ich den Sinn nicht wirklich... 



shainax schrieb:


> Achso noch etwas festgestellt.
> Wenn ich zwei oder mehr Tabellen auf eine StorageDatei legen möchte wird nichts geschrieben.
> 
> Ich mach das nur mit csv.
> ...



Danach werde ich schauen...


----------



## Jochen Kühner (7 Februar 2012)

Achso, hatte überlese das du nur CSv machst! Willst du 2 datensätze in eine CSV datei schreiben? Das geht natürlich nicht, in eine CSV kann nur ein Datensatz!


----------



## shainax (7 Februar 2012)

ok klappt alles wunderbar.

danke nochmal Jochen


----------



## opaloub (9 Februar 2012)

Hallo

verwende das Programm seit gestern mit MsSQL

einfach geil das teil   	 		:grin: 		

Weiter so

DANKE     :TOOL:


----------



## Jochen Kühner (9 Februar 2012)

opaloub schrieb:


> Hallo
> 
> verwende das Programm seit gestern mit MsSQL
> 
> ...



Wenn's mit MsSQL noch Probleme gibt, bitte schreiben, ist noch nicht sehr ausgiebig getestet!


----------



## Jochen Kühner (9 Februar 2012)

Hab noch ein kleines Problem mit dem CSV Writer behoben, welches beim betrachen der csv's vom Programm aus entstand, wenn man die neue Logik zum erzeugen des Dateinames verwendet!


----------



## nekron (12 Februar 2012)

Moin moin Jochen,

erstmal danke fuer die Implementation einer "Precision" ... hatte das ganze schon angefangen, aber konnte es noch nicht komplett zu Ende verfolgen (mein Ansatz war ganz anders  )

Habe heute das komplett aktuelle source-paket rel 88261 runtergeladen, da fehlt in der ProtokollerLibrary ein Verzeichnis Remoting ... 

Wenn ich das Remoting aus der Projektmappe rausnehme sowie das using in ProtokollerInstance.cs kann man das ganze jedoch wieder einwandfrei uebersetzen ...

Gruss,
nekron


----------



## Jochen Kühner (17 Februar 2012)

nekron schrieb:


> Moin moin Jochen,
> 
> erstmal danke fuer die Implementation einer "Precision" ... hatte das ganze schon angefangen, aber konnte es noch nicht komplett zu Ende verfolgen (mein Ansatz war ganz anders  )
> 
> ...



Hab das was vergessen zu comitten, was noch nicht ganz fertig ist... Sollt nun wieder gehen!


----------



## Jochen Kühner (27 Februar 2012)

Noch ein paar Updates:

- TCP/IP Verbindung ohne fixe Telegrammlänge (es werden die Felder Protokolliert die halt gefüllt sind)
- TCP/IP Multitlegramme fixes
- Bugfixes


----------



## nekron (29 Februar 2012)

Moin moin ...

Hier ein quick'n'dirty Hack, um in ein CSV-File einen TimeStamp zu protokollieren ...

1) Er kommt an erster Stelle (bei uns historisch bedingt  )
2) Er bekommt im Header das DatabaseField aus der Konfiguration als Kommentar

ansonnsten hab ich Versucht deinen Stil beizubehalten 

Falls Du einfach das komplette File haben möchtest, sag bescheid ...

Gruss,
michael

diff .\siemensplctoolboxlib-88784\DotNetDatenbankProtokollerV2\ProtokollerLibrary\Databases\CSVFile\CSVStorage.cs

25d24
<         private string dateFieldName;
80,90d78
< 
<             dateFieldName = datasetConfig.DateTimeDatabaseField;
< 
<             if (!string.IsNullOrEmpty(datasetConfig.DateTimeDatabaseField))
<             {
<                 if (myConfig.UseQuotes)
<                     zeile += "\"" + datasetConfig.DateTimeDatabaseField + "\"";
<                 else
<                     zeile += datasetConfig.DateTimeDatabaseField;
<             }
< 
181,191d168
< 
<                 if (!string.IsNullOrEmpty(dateFieldName))
<                 {
<                     string akV = "";
< 
<                     akV = DateTime.Now.ToString("yyyy.MM.dd-HH:mm:ss");
<                     if (myConfig.UseQuotes)
<                         zeile += "\"" + akV + "\"";
<                     else
<                         zeile += akV;
<                 }


----------



## Jochen Kühner (29 Februar 2012)

Der Code sieht doch ganz gut aus! ;-)
Habs, genau so übernommen eingebaut und eingecheckt. 

Ne neue Exe hier für den Thread hab Ich jetzt aber noch nicht gemacht!


----------



## nekron (29 Februar 2012)

Freut mich 

Wobei ich das Datumsformat noch ganz gern konfigurierbar machen würde 

Ein paar weitere Ideen haette ich auch noch, vielleicht schick ich dir noch ein paar Fetzen wenn ich sie ausgearbeitet habe ...

Gruß
Michael


----------



## Jochen Kühner (29 Februar 2012)

nekron schrieb:


> Freut mich
> 
> Wobei ich das Datumsformat noch ganz gern konfigurierbar machen würde
> 
> ...



Hab die Idee mit dem Konfigurierbar schon umgesetzt ;-) Einchecken kann Ichs aber erst später (Installier grad VS11), da ich erst noch testen muss...
Wirkt sich (im Moment) natürlich nur bei CSV aus, da in den richtigen Datenbanken der Feldtyp normalerweise DateTime ist, und der Wert als SQL Parameter übergeben wird


----------



## nekron (2 März 2012)

Moin moin ...

Kleiner fehler in PostgreSQLStorage.cs ...

gruss,
michael

public bool _internal_Write()
....
                if (myDBConn.State != System.Data.ConnectionState.Open)
                {
                    Logging.LogText("Error ReConnecting to Database! Dataset:" + datasetConfig.Name, Logging.LogLevel.Error);
***                                                                                                  myConfig.Name  ist da wohl gemeint nehme ich an oder ?
                    return false;
                }


----------



## Jochen Kühner (2 März 2012)

nekron schrieb:


> Moin moin ...
> 
> Kleiner fehler in PostgreSQLStorage.cs ...
> 
> ...



Ne, hab vergessen datasetConfig festzulegen --> gefixt...


----------



## nekron (2 März 2012)

Solala ...
einen ham wer noch 

Grad fuer CVS interessant ... Eine Precision (Anzahl der Nachkommastellen) - ich habs jetzt auch nur schnell mit CSV Probiert, da ich im Moment hier keinen Netzwerkzugriff auf einen unserer Server habe ;(

Wie immer - wenn Quellfile gewünscht bescheid sagen 

gruss,
michael

... dataSetConfigRow.cs

```
33c33
<         
---
> 
96,107d95
<         private double _precision = 0;
< 
<         public double Precision
<         {
<             get { return _precision; }
<             set
<             {
<                 _precision = value;
<                 NotifyPropertyChanged("Precision");
<             }
<         }
< 
125c113
<                 if (((Multiplier !=0) || (Precision !=0)) && (PLCTag.Value is double || PLCTag.Value is float || PLCTag.Value is int || PLCTag.Value is uint || PLCTag.Value is byte || PLCTag.Value is sbyte || PLCTag.Value is Int64 || PLCTag.Value is UInt64))
---
>                 if (Multiplier != 0 && (PLCTag.Value is double || PLCTag.Value is float || PLCTag.Value is int || PLCTag.Value is uint || PLCTag.Value is byte || PLCTag.Value is sbyte || PLCTag.Value is Int64 || PLCTag.Value is UInt64))
127,132d114
<                     string sFormat = "";
<                     if (Precision != 0)
<                     {
<                         sFormat = "F"+Precision.ToString();
<                     }
< 
134,138c116,117
<                     {    
<                         if (Multiplier != 0)
<                             return (Convert.ToDouble(PLCTag.Value)*Multiplier).ToString(sFormat);
<                         else
<                             return (Convert.ToDouble(PLCTag.Value)).ToString(sFormat);
---
>                     {                        
>                         return Convert.ToDouble(PLCTag.Value)*Multiplier;
146d124
<
```
... EditProtocolDataSets.cs

```
266,283c266
<                 <DataGridTemplateColumn Width="Auto"
<                                         Header="Precision (0 = std)"
<                                         IsReadOnly="False"
<                                         SortMemberPath="Precision">
<                     <DataGridTemplateColumn.CellTemplate>
<                         <DataTemplate>
<                             <TextBlock Text="{Binding Precision}" />
<                         </DataTemplate>
<                     </DataGridTemplateColumn.CellTemplate>
<                     <DataGridTemplateColumn.CellEditingTemplate>
<                         <DataTemplate>
<                             <TextBox Margin="0"
<                                      Padding="0"
<                                      Text="{Binding Precision,
<                                                     Mode=TwoWay}" />
<                         </DataTemplate>
<                     </DataGridTemplateColumn.CellEditingTemplate>
<                 </DataGridTemplateColumn>
---
> 
857,874c840
< <DataGridTemplateColumn Width="Auto"
<                                         Header="Precision (0 = std)"
<                                         IsReadOnly="False"
<                                         SortMemberPath="Precision">
<                     <DataGridTemplateColumn.CellTemplate>
<                         <DataTemplate>
<                             <TextBlock Text="{Binding Precision}" />
<                         </DataTemplate>
<                     </DataGridTemplateColumn.CellTemplate>
<                     <DataGridTemplateColumn.CellEditingTemplate>
<                         <DataTemplate>
<                             <TextBox Margin="0"
<                                      Padding="0"
<                                      Text="{Binding Precision,
<                                                     Mode=TwoWay}" />
<                         </DataTemplate>
<                     </DataGridTemplateColumn.CellEditingTemplate>
<                 </DataGridTemplateColumn>
---
>
```


----------



## Jochen Kühner (5 März 2012)

nekron schrieb:


> Solala ...
> einen ham wer noch
> 
> Grad fuer CVS interessant ... Eine Precision (Anzahl der Nachkommastellen) - ich habs jetzt auch nur schnell mit CSV Probiert, da ich im Moment hier keinen Netzwerkzugriff auf einen unserer Server habe ;(
> ...



ist drinn.

+ Bugfixes:
 - MSsql wenn telegramme zu schnell aufeinander Folgten
 - Mssql Browser sollte funktionieren

div fixes...


----------



## opaloub (6 März 2012)

SQL Browser funzt

allerdings sonst nur noch Fehlermeldungen

Wollte ein Bild (.png) hochladen
aber das funzt irgendwie auch nicht
und die Meldung abtippen ist Wahnsinn


*"   Exception occured!
     Message: The parameter data type of UInt16 is invalid
     Stacktrace: at DotNetSimaticDatabaseProtollerLibrary.Databases.MsSQLStorage._internal_Write()
    at DotNetSimaticDatabaseProtollerLibrary.Databases.MsSQLStorage.ThreadProc()  "*

So geht doch
Diese Meldung kommt laufend
Habs mit einer neuen Tabelle versucht ist auch das selbe

gruß


----------



## Jochen Kühner (6 März 2012)

opaloub schrieb:


> SQL Browser funzt
> 
> allerdings sonst nur noch Fehlermeldungen
> 
> ...



Ohne fehlermeldung kann ich leider nicht wirklich helfen!
Was nutzt du denn? Welche datenbank, was für eine Verbindung, etc...
Lief es schon mal?

Lad mal deine config hoch!


----------



## opaloub (6 März 2012)

Das lief bis jetzt einwandfrei
nutze NetLink Lite mit MsSQL verbindung 
die Version von gestern macht die Probleme

wie gesagt der SQL Browser funzt

Danke

nochmal die Meldung

*"   Exception occured!
     Message: The parameter data type of UInt16 is invalid
     Stacktrace: at DotNetSimaticDatabaseProtollerLibrary.Databases.MsSQLStorage._internal_Write()
    at DotNetSimaticDatabaseProtollerLibrary.Databases.MsSQLStorage.ThreadProc()  "*


----------



## opaloub (6 März 2012)

So noch mehr Infos

Danke für die Mühe


----------



## Jochen Kühner (6 März 2012)

Probiers mal wenn du bei deinen Werten in der Dataset Konfiguration bei allen float Werten in der Datenbank einen Multiplier von 1 anzugeben.

Das Problem ist, Ich habe bei MsSQL bevor Ich die Objekte an ein SQL Command übergeben hatte, diese vorher in einen String gewandelt, dies führt aber mit manchen Typen zu Problemen. Und da du aus deiner SPS keinen Float liest, und diesen aber in einen Float speicher willst, gibts diese Probleme...

Warum eigentlich speicherst du Int werte aus der PLC in Floats in der Datenbank??


----------



## opaloub (7 März 2012)

Hab probiert was du gesagt hast
Hab eine neue Tabelle angelegt

immer die selbe fehlermeldung

wie soll ich die werte in die datenbank speichern ?


----------



## Jochen Kühner (9 März 2012)

opaloub schrieb:


> Hab probiert was du gesagt hast
> Hab eine neue Tabelle angelegt
> 
> immer die selbe fehlermeldung
> ...



Sorry, habe noch keine Zeit gefunden das zu Probieren. 
Habe selbst die MsSQL Connection noch nie verwendet, hab die nur für jemand auf einfrage eingebaut, und der hats dann getestet.

Ich werd schaun das Ich das nächste woche mal teste...


----------



## of-1986 (25 März 2012)

Habe den Protokoller.zip heruntergeladen und die zip Datei entpackt, darunter sind die zwei .exe Datein, wenn ich den ProtokollerConfoigurationTool anklicke tut sich nichts, und wenn die Service.exe anklicke kommt ein kleines Fenster mit Service Config, Start-Stop,install-uninstall,postgres-mysql-mssql!
Wie soll das weiter gehen..., hast du zufälig eine kleine Anleitung wie das einzustellen ist bzw. einrichten...!

Danke!


----------



## Jochen Kühner (25 März 2012)

of-1986 schrieb:


> Habe den Protokoller.zip heruntergeladen und die zip Datei entpackt, darunter sind die zwei .exe Datein, wenn ich den ProtokollerConfoigurationTool anklicke tut sich nichts, und wenn die Service.exe anklicke kommt ein kleines Fenster mit Service Config, Start-Stop,install-uninstall,postgres-mysql-mssql!
> Wie soll das weiter gehen..., hast du zufälig eine kleine Anleitung wie das einzustellen ist bzw. einrichten...!
> 
> Danke!



Hast du DotNet 4 installiert? Hasrt du Windows 7, dann starte das Configuration Tool mal als Administrator...


----------



## of-1986 (25 März 2012)

Auf diesen PC wo ich das zuhause ausprobieren sollte, habe ich Win XP..!
Und draußen vor Ort bei der Diplomarbeit wo die SPS und etc. verbaut ist habe ich einen Win7 32bit Rechner,kann nicht täglich raus fahren, zu weit deswegen muss ich mit einen Xp PC ausprobieren und simulieren.
DotNet 4 habe ich nicht installiert, woher bekomme ich es??
Danke!!


----------



## Jochen Kühner (26 März 2012)

of-1986 schrieb:


> Auf diesen PC wo ich das zuhause ausprobieren sollte, habe ich Win XP..!
> Und draußen vor Ort bei der Diplomarbeit wo die SPS und etc. verbaut ist habe ich einen Win7 32bit Rechner,kann nicht täglich raus fahren, zu weit deswegen muss ich mit einen Xp PC ausprobieren und simulieren.
> DotNet 4 habe ich nicht installiert, woher bekomme ich es??
> Danke!!



Microsoft! http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17718


----------



## of-1986 (26 März 2012)

DotNet4 läst sich nicht installieren, es steht "Schwerwiegender Fehler bei der Installation"

nun was jetzt,soll ich auf einen Win7 Pc probieren??


----------



## Jochen Kühner (26 März 2012)

of-1986 schrieb:


> DotNet4 läst sich nicht installieren, es steht "Schwerwiegender Fehler bei der Installation"
> 
> nun was jetzt,soll ich auf einen Win7 Pc probieren??



Gib das doch mal in google ein... Da findest du einiges dazu.

Ja wenn du noch einen anderen hast, probiers damit!


----------



## Jochen (15 Mai 2012)

Hallo Jochen,

ich habe ein Problem mit der aktuellen Version des Protokollers und kann es nicht ganz nachvollziehen. Ich hatte den Protokoller in einer Konfiguration 7 Monate lang auf einem Win7-Rechner am laufen. Den Rechner habe ich nun durch einen nagelneu aufgesetzten XP-Rechner ersetzt und alles vom Protokoller mit herübergezogen. Dann hab ich den Service wieder installiert und gestartet. Alles lief prima, nur nach etwa 2 Tagen ist der Service ausgefallen und ließ sich nicht mehr starten. Im Log gab es keine Fehlermeldungen vor dem Ausfall. Einen Startversuch des Dienstes auf der Konsole quittierte der Service stets mit: "der dienst konnte nicht gestartet werden - Der Dienst hat keinen Fehler gemeldet". Ich habe dann den Dienst deinstalliert, auf die Aktuelle Version geupdatet und wieder gestartet. Jetzt lief das Logging etwa 2 Tage fehlerfrei, plötzlich steht der Dienst wieder still. Er lässt sich mit der gleichen Fehlermeldung auch hier nicht erneut starten. Auch ein Systemneustart bringt nichts. Schade ist, dass ich im Log auch überhaupt keinen Anhaltspunkt dafür finden kann, warum genau der Dienst überhaupt ausfällt. 

Gibt es eine Möglichkeit, den Debug-Level irgendwie noch zu erhöhen?

Danke

Gruß

Jochen


----------



## Jochen Kühner (15 Mai 2012)

NÖ, nicht wirklich!

D.h. Im ereignissprotokoll von windows gibts kein fehler?

Wenn du im taskmanager unter prozesse schaust, läuft dann da noch was vom protokoller?


----------



## Jochen Kühner (15 Mai 2012)

Also Ich hab mir gerade meinen Source nochmals angesehen, falls es im programm zu einer exception kommen sollte, sollte diese zumindest ins EventLog geschrieben werden, da Ich um den Kompletten Service ein Try catch habe, welches dann ins Eventlog läuft!


----------



## Jochen (16 Mai 2012)

Also vom Protokoller läuft nix mehr, wenn er sich abgeschaltet hat. Ich logge ja csv und habe festgestellt, dass er wieder anläuft, wenn ich die csv-Dateien lösche und neu anlegen lasse. Normalerweise meldet er ja auch intern im Ereignisprotokoll einen Fehler, wenn er Probleme beim Zugriff auf die CSV-Dateien hat. Diese Fehler, die ab und zu auftreten, haben den Dienst bisher allerdings noch nie zum Absturz gebracht. Dass er einfach nicht mehr anläuft, kam sowieso noch nie vor. Ich beobachte mal weiter.


----------



## Jochen Kühner (20 Mai 2012)

Und, ists nochmal passiert?


----------



## Jochen (22 Mai 2012)

Hallo Jochen, ja ist es. Aber ich vermute, ganz vorsichtig, dass ich es gerade eben, nachdem ich noch ein wenig herumgesucht habe, gelöst bekommen habe. Der Protokoller ist wieder ohne Fehlermeldung ausgefallen und ließ sich nicht mehr starten. Auch das Löschen der geloggten CSV-Files half nichts. Ich hab einfach mal ohne mir was dabei zu denken, das Ereignisprotokoll von JFK-Solutions (512KB) gelöscht. Unmittelbar davor ließ sich der Dienst (mehrfach) nicht starten, unmittelbar danach lief er problemlos an. Kann es sein, dass trotz der Einstellung im Ereignisprotokoll "Bei Erreichen der Maximalgröße alte Ereignisse überschreiben" das Erreichen der Maximalgröße zu einer "Nichtstartfähigkeit" führt? Ich werde es weiter beobachten. Gruß


----------



## Jochen Kühner (22 Mai 2012)

Jochen schrieb:


> Hallo Jochen, ja ist es. Aber ich vermute, ganz vorsichtig, dass ich es gerade eben, nachdem ich noch ein wenig herumgesucht habe, gelöst bekommen habe. Der Protokoller ist wieder ohne Fehlermeldung ausgefallen und ließ sich nicht mehr starten. Auch das Löschen der geloggten CSV-Files half nichts. Ich hab einfach mal ohne mir was dabei zu denken, das Ereignisprotokoll von JFK-Solutions (512KB) gelöscht. Unmittelbar davor ließ sich der Dienst (mehrfach) nicht starten, unmittelbar danach lief er problemlos an. Kann es sein, dass trotz der Einstellung im Ereignisprotokoll "Bei Erreichen der Maximalgröße alte Ereignisse überschreiben" das Erreichen der Maximalgröße zu einer "Nichtstartfähigkeit" führt? Ich werde es weiter beobachten. Gruß



Danke! Sehr wahrscheinlich ist es das! Hab das im Source schon mal gefixt (Einfach ein Try Catch um das schreiben ins EventLog!), aber Ich sllte auf NLOG oder log4net umsteigen...
Werd mal schauen das ich das logging in der nächsten Woche umbaue...


----------



## Jochen (22 Mai 2012)

Was mich dabei wundert, das Teil lief ja im alten Windows 7 sieben Monate lang hervorragend und das Ereignisprotokoll war dort auch allerhöchstens einmal im Monat geleert worden. Dort liefen auch, bedingt durch mein altes Skript zur Datenweiterverarbeitung ziemlich viele Zugriffsfehler auf (etwa alle 5 Minuten zwei bis drei Stück pro Verbindung bei zwei Verbindungen insgesamt). Jedenfalls denke ich, dass im alten Windows 7 mit Sicherheit wesentlich mehr Meldungen im Eventlog standen und der Service trotzdem immer weiter lief. Jetzt bei Windows XP, wo das Eventlog nach ca 2-3 Tagen voll war, (und das mit ziemlicher Sicherheit bei kleinerer Ereignisanzahl) trat der Fehler auf. Ich werde jedenfalls in einigen Tagen genau wissen, ob es an dem vollen Eventlog lag. (Habe dessen Größe jetzt im XP auf 4096 KiB gesetzt)...

Gruß


----------



## Jochen Kühner (3 Juni 2012)

Neue Version...

Es gibt mal wieder ne neue Version.

Hab nun einen Zeit Trigger mit Wertevergleich eingebaut. D.h. es werden Zeitgetriggert alle Variablen der SPS gelesen, aber ein Datensatz wird nur geschrieben, wenn sich in den Variablen ein Wert geändert hat!


----------



## Jochen Kühner (27 Juli 2012)

Ein paar kleine Updates:

- Parsen von FileName bei Excel & Excel 2007 (so kann Datum und Zeit im Filenamen vorkommen)
- Bugfixes
- Speichern in eine PLC (noch Beta, aber man kanns testen, aber ich garantiere für nichts!)


----------



## Crack123 (7 August 2012)

Hallo!


Erstmal großes Danke für das Programm, einfach klasse!

Ich hätte noch einen Vorschlag bzw eine idee, eventuell kann man eine Funktion einbauen indem man einstellen kann das man zb. ein CSV File Zyklisch/Bitgetriggert oder nach einer bestimmen Anzahl von Zeilen ausdrucken lassen kann Automatisch.

mfg!


----------



## Jochen (8 August 2012)

Hi, ich habe das bei meiner Anwendung clientseitig über Batch-Skripte und Cronjobs gelöst. Das klappt wunderbar. Ich sehe solche Funktionalität auch grundsätzlich eher auf Clientseite, weil es die Kernaufgabe des Protokollers aufblähen würde. Aber das ist auch nur meine pers. Meinung.

Mein Skript lief wie folgt ab:

Am ersten eines jeden Monats um 0:00 Uhr:

- Service stoppen
- Logdatei lokal umbenennen
- Service restarten
- Kopie lokal und im Netzwerk unter eindeutigem Namen (Datum, Zeitraum) archivieren

- Datenvorskalierung einer separaten Kopie der Datei (mit einem "R-Skript" nur einen Messwert pro Minute herausschneiden), so habe ich zwei Logversionen. Die eine ist vollständig und bestand pro Monat etwa aus einer CSV-Datei von ca. 70 MiB. Für den schnellen Überblick über Langzeitdaten gibt es dann die zweite, ausgedünnte Datei mit etwa 4-5 MiB

- Kopie löschen
- Log des Vorgangs anzeigen und wegspeichern


----------



## superkato (8 August 2012)

Hi Jochen,

ich sehe das Tool heute das erste mal. Hast du vieleicht eine kurze doku oder Anleitung (konnte keine Doku finden), wie ich eine 313C-2DP per MPI (PC Adapter Siemens USB) verbinden kann und einen DB bzw. Werte die in einem DB sind loggen ? (in eine excel, csv oder so.)

Gibts eine Möglichkeit Event-getriggert zu arbeiten ? also bei änderung eines wertes diesen speichern?

Viele Grüße
SK


----------



## Jochen (8 August 2012)

Hi SK,

eine wirklich ausführliche Doku kann ich Dir nicht anbieten, aber ich kann einen Ausschnitt meiner Studiums-Projektarbeit, die den Protokoller zum Thema hatte hochladen. Suche ich gleich und stelle es rein. Allerdings habe ich nur über einen Handshake-Trigger gearbeitet. Es gibt auch einen Trigger für eine eingehende TCP-Verbindung von der SPS, das könntest Du ja als Event verwenden. Müsstest halt dann bei Änderung deines Wertes eine Verbindung aufbauen und somit den Loggingvorgang anstoßen. Scheint dann aber ja quasi über MPI nicht zu gehen, da kann wohl Jochen (Kühner) eher Auskunft zu geben. Aber was spricht dagegen, intern in der SPS ein eventgetriggertes Logging zu machen, und dann alle x Minuten einen Abruf per Handshake zu machen? MPI kann man einfach in den Verbindungseinstellungen auswählen.

Ich lade Dir in etwa 20 Minuten hier noch die besagte Einrichtungsanleitung aus meiner Projektarbeit hoch. Gruß

Jochen

Edit:

Hier bitteschön die Seiten mit einer relativ ausfühlichen Einrichtungserklärung am Beispiel einer Ethernetverbindung. Sowohl die Einrichtung auf Steuerungsseite als auch auf Loggingrechnerseite ist beschrieben. Achtung bei Abb. 5.5 ist mir ein Fehler unterlaufen. Die falschen Buttons sind dort rot markiert. Insgesamt ist die Beschreibung sehr auf Laienverständlichkeit getrimmt, daher nicht wundern, wenn viele Sachen selbstverständlich erscheinen:

Anhang anzeigen auszug_pa2_protokoller_einrichtung.pdf


----------



## Jochen Kühner (8 August 2012)

@jochen:

erst mal hut ab zu der Arbeit, ist ja echt ne super anleitung! Wenn es dir recht ist, würde ich diese unter dem ersten Thread als Anleitung hochladen?

@superkato:
eventgetriggert von der sps geht doch, entweder wenn man die TCP/IP Connection verwendet, und eben daten an den PC schickt wenn dieser Protokolieren soll, oder mit dem Tags Handshake Trigger....

Das mit dem drucken, mal sehn ob Ich was mach, da müsste man ja baer auch das Format einstellen können, etc... Hab dazu im Moment keine Idee. Ich könnte ja aber die Möglichkeit schaffen, nach jedem Eintrag in einne Storrage, eine exe aufrufen zu lassen?

@All...

Hab auch noch ein paar Erweiterungen geschickt bekommen (z.B. EMail bei Fehler) welche Ich aber noch nicht einbauen konnte, kommt aber noch...


----------



## wee (8 August 2012)

Hi,

ich würde den Protokoller auch ganz gerne einsetzen und etwas damit spielen, funktioniert die Anbindung über die im Field PG M3 eingebaute CP5611 via MPI? 
Ist es auch möglich den Protokoller mit Plcsim zu verbinden um ohne echte HW zu testen?


Gruß wee


----------



## Jochen (8 August 2012)

@jochen kühner 

Stell es ruhig in deinen anfangspost. Hab ich Nix dagegen. Würde  auch ganze Arbeit rein hauen aber eventuell wäre das  den profs nicht so recht. 

@wee

In Verbindung mit plcsim funktioniert es auch sehr gut, habe ich auch ausführlich getestet.

Gruß

Jochen


----------



## superkato (8 August 2012)

Vielen Dank für die Anleitung!

Mittlerweile hatte ich das Programm schon irgendwie intuitiv zum laufen gebracht. Ich hab dann einfach bei connection  "Via STep7 DLL" genommen. Die CPU wurde dann erkannt.
Einen CSV Storage erstellt und dann in der Dataset über multiple add alle DB variablen eingefügt.

hab dann Time Trigger und ValueComparsion genommen.

Die Datei wächst sehr schnell aber ich bin sehr zufrieden mit der Arbeitsweise!

 -> Gibt es eine Möglichkeit, nach einem Gigabyte oder nach einem Tag automatisch eine neue Datei zu erstellen?



Viele GRüße
SK


Ansonsten, würd ich mir gerne mal die Source auf den PC ziehen und  noch ein paar verbesserungen reinprogrammieren wenn es erlaubt ist,  vielleicht kann ich helfen. Hab selbst sehr viel mit dem .net 4 und c#  gearbeitet.


----------



## Jochen Kühner (9 August 2012)

superkato schrieb:


> Vielen Dank für die Anleitung!
> 
> Mittlerweile hatte ich das Programm schon irgendwie intuitiv zum laufen gebracht. Ich hab dann einfach bei connection  "Via STep7 DLL" genommen. Die CPU wurde dann erkannt.
> Einen CSV Storage erstellt und dann in der Dataset über multiple add alle DB variablen eingefügt.
> ...



bei CSV ja, defaultmäßig ist ja das datum im dateinamen. Wenn du das so läßt, legt er jeden tag eine neue an!


----------



## Jochen Kühner (9 August 2012)

superkato schrieb:


> Ansonsten, würd ich mir gerne mal die Source auf den PC ziehen und  noch ein paar verbesserungen reinprogrammieren wenn es erlaubt ist,  vielleicht kann ich helfen. Hab selbst sehr viel mit dem .net 4 und c#  gearbeitet.



Natürlich ist das erlaubt! Dazu ist es ja OpenSource! Wär schön wenn du mir die Änderungen dann zukommen lässt. Wenn Ich denke das ist nützlich bau Ichs dann auch ein!
Achso, bitte aber keine riesigen Änderungen auf einmal, am besten in kleinen Häppchen...


----------



## superkato (9 August 2012)

Jochen Kühner schrieb:


> bei CSV ja, defaultmäßig ist ja das datum im dateinamen. Wenn du das so läßt, legt er jeden tag eine neue an!



ah das ist dann super!!!


----------



## Jeremy3 (7 November 2012)

Hallo zusammen, 

würde gerne wissen ob das Programm DotNetSimaticDatabaseProtokoller welches im Anhang zu finden ist auf der ersten Seite im ersten Beitrag, das von Jochen Kühner bereitgestellt wurde auch das aktuellste Programm ist. Da ich hier eben ständige Buggs gelesen haben die ja wahrscheinlich behoben sind. 

Oder muss man das Programm Updaten ? Wenn ja wo genau ?

Freundliche Grüße 

Jeremy


----------



## Thinfilm (8 November 2012)

Jochen aktualisiert sein Programm immer in diesem 1. Post. Erkennt man auch am Aktualisierungsdatum 

Gruß Thinfilm


----------



## Jochen Kühner (13 November 2012)

Jeremy3 schrieb:


> Hallo zusammen,
> 
> würde gerne wissen ob das Programm DotNetSimaticDatabaseProtokoller welches im Anhang zu finden ist auf der ersten Seite im ersten Beitrag, das von Jochen Kühner bereitgestellt wurde auch das aktuellste Programm ist. Da ich hier eben ständige Buggs gelesen haben die ja wahrscheinlich behoben sind.
> 
> ...



Die aktuellste Version im Forum gibts immer im ersten Thread welche Ich immer mal wieder aktualisiere. Eine aktuellere gibts nur noch auf Codeplex unter: http://siemensplctoolboxlib.codeplex.com jedoch kanns da auch sein das mal was eingecheckt wird, so das irgendwas nicht läuft...

Wenn's Probleme gibt, einfach hier schreiben, oder ne PN


----------



## ronnie.b (14 November 2012)

Hallo zusammen,
@Jochen Kühner:
Was hast du denn für ein Grid benutzt in dem Fenster wo man die Variablen anlegen kann?
Dort gibts bei der Variablenadresse einen Button in der Zelle. Ich hab bisher noch kein Grid gesehen, in dem ich so einen Browse-Button in der Zelle einfügen kann.

Edit: Ist das WPF oder Win-FOrms?


----------



## Jochen Kühner (14 November 2012)

ronnie.b schrieb:


> Hallo zusammen,
> @Jochen Kühner:
> Was hast du denn für ein Grid benutzt in dem Fenster wo man die Variablen anlegen kann?
> Dort gibts bei der Variablenadresse einen Button in der Zelle. Ich hab bisher noch kein Grid gesehen, in dem ich so einen Browse-Button in der Zelle einfügen kann.
> ...



Das ist WPF. Und da kannst du für jede Spalte ein DataTemplate definieren, in das kannst du die Controls reinpacken, die du möchtest, sogar noch ein Grid ;-) 
Der Source ist ja Verfügbar, kannst's dir ja anschauen...


----------



## ronnie.b (15 November 2012)

Hallo,
ich werds mir mal anschauen. Hab bisher immer mit Win-Forms gearbeitet und da funktioniert das leider nicht so einfach :-(


----------



## Jeremy3 (14 Dezember 2012)

Also erstmal auch einen Dank von meiner Seite.

Logge einmal 

- eine csv Datei und
- eine exel datei

 funktioniert einwandfrei bisher. Ich habe aber leider noch zwei Probleme.

1.Problem
Es wird nur kontinuierlich geloggt sofern der JFK-ProtokollerConfigurationTool geöffnet ist und sofern unter Test / Dataset ausgewählt ist und Test as Service angeklickt ist. 

Unter Service habe ich den den Dienst installiert. Und auch auf run gestellt. Es wird auch Running angezeigt. Protokoller gestartet. 

Aber sobald ich jetzt den Test Bereich verlasse oder  JFK-ProtokollerConfigurationTool schließe hört auch das Logging auf. Auf JFK-ProtokollerService steht weiterhin Running, das Logging hört aber leider auf. Woran kann das liegen ?

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
2.Problem 
Noch eine Sache ist mir aufgefallen. Ich lese ja die Zeit aus dem SFC1 raus und schreibe diese in ein DB rein ( Date and Time ) . EXEL zeigt aber in der Zeile 16.05.1994 01:00:44. Weiß da vllt auch jmd Rat ? Besten Dank 

Freundliche Grüße 

Jeremy


----------



## Jochen Kühner (15 Dezember 2012)

Save hast du gedrückt, um die einstellungen zu speichern? Also nicht sabe to file, sonder save. Und danach den service nochmal neustarten!


----------



## Jeremy3 (16 Dezember 2012)

@ Jochen Kühner

ah so, ich hatte glaub ich immer nur save to file gedrückt. Kann es leider nicht ausprobieren weil ich daheim bin. Werde aber morgen berichten ob es funktioniert wenn man noch zusätzlich save drückt.

 Hatte alles Konfiguriert und als Datei abgespeichert. Diese habe ich dann einfach immer geöffnet und habe nicht noch zusätzlich save gedrückt. Wenn es nur daran liegt wäre es natürlich erfreulich.  Herzlichen Dank !

_ _ _ _ _ _ _
Falls mir jemand noch nen Tipp geben kann wegen dem zweiten Problem wäre das echt erfreulich. Weiß halt nicht genau obs an exel, step 7 oder dem protokoller liegt . Werde mir das am Montag auf jeden Fall anschauen.

Freundliche Grüße 

Jeremy


----------



## Jochen Kühner (16 Dezember 2012)

daran liegts, kann ich dir sagen!ich werd die buttons mal umbenennen in import/export


----------



## Jeremy3 (17 Dezember 2012)

@ Jochen Kühner

richtig ! hat funktioniert ! kann es jetzt bestätigen

er zeichnet jetzt auf auch wenn alles geschlossen ist. Das ist natürlich noch schöner. Ich musste lediglich noch zusätzlich auf Save klicken damit das Configuration tool die Konfigurations-Daten übernimmt. 

Freundliche Grüße

Jeremy


----------



## joag (11 Januar 2013)

*Hallo*

Hallo Jochen,
habe das Programm an 5 S7 Steuerungen (zur gleichen zeit) zur Datenaufzeichnung (Bit-Real) mal testweise 2 Tage laufen lassen!!!
Die Daten wurden in  *.csv Dateien gesammelt mit Append und ohne Append  bei csv haut das auch alles SUPER hin!
*TOLLES Programm*
Wenn  ich es jedoch mit Excel versuche ohne Append, werden die Daten immer  anhängend gespeichert also nicht überschrieben, gibt es da noch andere  Einstellungen???

Habe auch versucht über einen S5-PCLink über "Ethernet" --> Virtuellen ComPort mich mit einer S5 Steuerung zu verbinden.
Beim Connection Editor Verbindung Testen sagt er GEHT, bei TEST dann NUR Fehler (kann ComPort nicht öffnen)!!!

Werde es noch mal versuchen!!!!

Gruß, joag


----------



## Jochen Kühner (11 Januar 2013)

s5 geht noch nicht, da dies noch nicht richtig implementiert ist, da ich keine s5 zum testen habe! bei excel gibts noch kein nicht append!


----------



## joag (11 Januar 2013)

Hallo Jochen,
Simatic S5-100U CPU103 + Eingänge und Ausgänge würde das reichen???
Die hätte ich über (SCHENKUNG)
Excel Append in der Planung????

Gruß, joag


----------



## Jochen Kühner (11 Januar 2013)

joag schrieb:


> Hallo Jochen,
> Simatic S5-100U CPU103 + Eingänge und Ausgänge würde das reichen???
> Die hätte ich über (SCHENKUNG)
> Excel Append in der Planung????
> ...



Ich schau mal nächste Woche, ob wir in der Firma vieleicht noch eine S5 und eine Schnittstelle dazu haben, dann probier Ichs damit. Ansonsten würd Ich mich nochmal melden. Das mit dem Excel Append schau Ich mir am Montag mal an...


----------



## Jochen Kühner (12 Januar 2013)

joag schrieb:


> Hallo Jochen,
> habe das Programm an 5 S7 Steuerungen (zur gleichen zeit) zur Datenaufzeichnung (Bit-Real) mal testweise 2 Tage laufen lassen!!!
> Die Daten wurden in  *.csv Dateien gesammelt mit Append und ohne Append  bei csv haut das auch alles SUPER hin!
> *TOLLES Programm*
> ...



Hab gerade noch gemerkt, bei S5 wurde der Com Port nicht mehr geschlossen. Und hab dann noch was gefixt. Vielleicht läufts mit der neusten version schon, kannsts mal testen? Die musst du aber im Moment unter http://siemensplctoolboxlib.codeplex.com/ downloaden (unter Sourcecode). Im Verzeichnis compiled ist dann die neuste exe. Wenns läuft kommt die auch hier in den ersten Thread!


----------



## joag (12 Januar 2013)

Hallo Jochen,
habe es getestet der TTY Wandler zur S5 *wird angesprochen* es erscheint bei
Verbinde folgende Meldung: 
ERRORConnection) (Code:-22) no message defined!   :-(
S7 mit der "NEUEN" geht!


----------



## Jochen Kühner (12 Januar 2013)

Und im connection editor kann die verbindung aufgebaut werden, oder auch nicht mehr?


----------



## joag (12 Januar 2013)

Hallo Jochen,
schon im connection editor erscheint die Meldung!!!

Gruß, joag


----------



## Jochen Kühner (12 Januar 2013)

joag schrieb:


> Hallo Jochen,
> schon im connection editor erscheint die Meldung!!!
> 
> Gruß, joag



Un mit der alten Version konntest du dich da Verbinden?


----------



## joag (12 Januar 2013)

Hallo Jochen,

über den Virtuellen S5-PCLink comPort ging es!

Jetzt auch bei der alten Version erhalte ich diese Meldung bei einer
Verbindung über einen TTY Wandler?????!!!!!!


----------



## Jochen Kühner (12 Januar 2013)

Ach so, das mit dem TTY Wandler schein ja eh Probleme zu machen, siehe auch hier: http://www.sps-forum.de/showthread.php/57885-S5-und-Libnodave-über-Umwege Das liegt aber nicht an meinem Tool, das es ja mit der Software welch ebei libnodave dabei ist auch nicht geht. Ich kenne im Moment aber das S5 Protokoll eigentlich gar nicht, daher kann Ich nicht sagen was da falsch läuft!


----------



## joag (12 Januar 2013)

Hallo Jochen,

ich schreibe die werte jetzt (S7) in eine mysql datenbank, das haut auch hin.
Ich möchte aber werte nur updaten nicht fortlaufend schreiben!
Kannst Du da evtl. helfen????

Gruß, joag




habe da mal eine Frage wie kann ich, wenn ich in eine mysql datenbank die werte schreibe:


----------



## Jochen Kühner (12 Januar 2013)

joag schrieb:


> Hallo Jochen,
> 
> ich schreibe die werte jetzt (S7) in eine mysql datenbank, das haut auch hin.
> Ich möchte aber werte nur updaten nicht fortlaufend schreiben!
> ...



Die Funktion gibts im Moment nicht!


----------



## joag (12 Januar 2013)

*Daten*

Hallo Jochen,
schade das es zu Zeit noch nicht möglich ist!
Ich hoffe jedoch das es KOMMT?????   
Was S5 an geht, werde es mit der "NEUEN" Version mal in der Fa. über den Virtuellen ComPort Testen,
weil da hatte ich ja eine Verbindung gegeben, warum auch immer!!
Werde dir am Montag mal Info geben!!!

Gruß, joag


----------



## Jochen Kühner (12 Januar 2013)

bis jetzt ists nicht in planung, aber du kannst doch auch einfach per sql immer nur den neusten wert abfragen!


----------



## joag (13 Januar 2013)

*Sql*

Hallo Jochen,

wenn ich ein bit abfrage das sich evtl. STÄNDIG ändert erfolgt doch bei jedem wechsel ein
Eintrag in die Datenbank (siehe Beispl. per Mail)
Läuft da meine Datenbank nicht irgendwann über???

Gruß, joag


----------



## Jochen Kühner (13 Januar 2013)

joag schrieb:


> Hallo Jochen,
> 
> wenn ich ein bit abfrage das sich evtl. STÄNDIG ändert erfolgt doch bei jedem wechsel ein
> Eintrag in die Datenbank (siehe Beispl. per Mail)
> ...



Das kann dann schon sein, aber dafür ist mein tool auch nicht gedacht! Aber vielleicht bau ich das mit dem update ja mal ein.


----------



## Jochen Kühner (13 Januar 2013)

Wo verarbeitest denn du die werte welche in der datenbank stehen? Warum kommunizierst du da nicht direkt mit der s7?


----------



## franz1973 (14 Januar 2013)

Hey Jochen,
Erstmal  Herzlichen Dank für dieses tolle Programm.

Ich hätte aber ein paar Fragen;
Bei Datentypeauswahl   "Date" kommt  "DateTime",
Ist bei der MSSQLServer  Adresseingabe etwas besonderes  zu beachten

Danke, Franz


----------



## Jochen Kühner (14 Januar 2013)

franz1973 schrieb:


> Hey Jochen,
> Erstmal  Herzlichen Dank für dieses tolle Programm.
> 
> Ich hätte aber ein paar Fragen;
> ...



Wo kommt DateTime wenn du Date auswählst? Ich kapiers nicht, schick mal n Screenshot! Bei der Adresseingabe? Nicht das Ich wüsste. Wenns aber nicht klapt, kannst du auch einen komplett eigenen COnnection String angeben, dann muss aber in dem Connection String alles enthalten sein z.B. : 

```
Server=myServerName\myInstanceName;Database=myDataBase;User Id=myUsername;
Password=myPassword;
```


----------



## franz1973 (15 Januar 2013)

hier ein Screenshot


----------



## Jochen Kühner (15 Januar 2013)

Sollte nun funktionieren...


----------



## Jeremy3 (11 Februar 2013)

Ich habe leider auch ein Problem:

Der Protokoller zeichnet die Messwerte bis 7,153 MB auf springt dann auf 7,154 MB und dann wieder auf 7,153 MB. Also es ist eine Exel Datei. Wenn ich nun die Datei kopiere und iwo einfüge und öffne macht Microsoft exel die Datei nicht vollständig, meckert das die Datei beschädigt wäre und öffnet nur die 2-3 tage aufgezeichneten messwerte und nicht z.b ne Woche. Die Zeilenanzahl von Exel liegt bei 65536. Was kann ich denn da machen. Ich möchte die Werte nämlich paar wochen aufzeichnen und nicht nur 2 tage. Max Dataset liegt bei 1000000 .

- Was mich halt wundert ist das die Datei die geloggte exeldatei nicht mehr wächst 
- Ich logge eine csv datei auch mit, die wächst jedoch weiter die liegt bei ugefähr 4 MB

File not load Completely sagt mir exel. Wenn ichs aber mitm Editor aufmache gehts. Ich werde die CSV Datei weiterhin beobachten und schauen ob sie weiterhin loggt.


----------



## Jochen (11 Februar 2013)

Moin Jeremy, wieso loggst Du überhaupt eine Exceldatei? Bleib doch bei der reinen CSV-Datei, nach dem Vorbild der Logdateien, die von den beiden Hauptanlagen existieren. Für die Rohdatenspeicherung ist das meiner Meinung nach das beste, da optimale Ausnutzung des Speicherplatzes. Ich hab zwar in meiner Thesis keinen Vergleich mit einer xls-Logdatei drin, aber wenn Du mal da nachschaust, siehst Du auf Seite 76-77. 

Eine Messwertzeile nach Optimierung belegt in der csv 84 Byte. (Macht für die Hauptanlagen ca 54MB im Monat).

Zusetzlich habe ich ja noch ein R-Skript erstellt, welches auch auf dem Loggingrechner drauf ist und in der Thesis dokumentiert. Dieses Skript dünnt die Messwert-CSVs in beliebiger Abtastrate aus. Ich bezweifle, dass irgendwer in der gesamten Messwertüpbersicht in Excel auf ein 4-Sekündiges Messintervall angewiesen ist. Für langzeitvisualisierung der Daten kannst Du ohne probleme so ein ausgedünntes CSV-File in Excel öffnen. 

Um in höherer Auflösung kurze Zeitintervalle in Excel zu sehen, kann ja mit geringer Modifikation des R-Skriptes, ein beliebiges Zeitintervall aus den CSV-Rohdaten ausgeschnitten werden, das dann in weit weniger als 655xx Zeilen in Excel importiert werden kann. 

Ich empfehle jedenfalls, auf die direkte xls-Loggerei zu verzichten, und alle Rohdaten als CSV mitzuschreiben. 

Behalte übrigens bei Windows (zumindest XP) Die Ereignisanzeige im Auge. Der Protokoller schreibt da (zumindest, wenn wie bei mir eine Star-Stopautomatik) implementiert wurde, sehr viele Statusberichte rein. Irgendwann ist die Ereignisanzeige voll und der Protokoller steigt komplett aus. (Kann man anpassen über ein Logrotate-Verfahren, oder über die Einstellungen der XP-Ereignisanzeige zur Maximalgröße.) Unter Win7 gab es in dieser Hinsicht im Übrigen keine Probleme.

Gruß

Jochen


----------



## Jeremy3 (11 Februar 2013)

Hallo Jochen mir gehts in erster Linie darum zu erfahren weswegen die exel Datei nicht weiter loggt und zweitens warum das bei exel beschränkt ist mit 65 tausend zeilen .

Das mit dem Ausdünnen der Dateien hört sich auf jeden fall sehr sinnvoll an. Ich habe mich damit eig noch nicht so richtig beschäftigt. 
 Wie genau läuft das mir diesem R-Skript ab ? Ist das noch ein weiteres Programm das man benutzt um die csv Datei auszudünnen. Wie gesagt mir hat das noch niemand gezeigt und ich habe mich damit noch nicht wirklich beschäftigt .

Freundliche Grüße

Jeremy


----------



## Jochen (11 Februar 2013)

Also die beschränkung liegt einfach im Programmcode. Excel verwaltet im Speicher halt nur bis zu 2^16 Zeilen. Excel 2007 und 2010 können 2^20 Zeilen also 1048576.
Aber Ein Excel-Arbeitsblatt mit so vielen Zeilen macht keinen Spaß. Welche Excelversion hast Du denn da?

Vielleicht auch noch interessant zu dem Thema:
http://www.xlam.ch/xlimits/excel14.htm


----------



## Jeremy3 (11 Februar 2013)

müsste 2003 sein ^^ liegt wahrscheinlich daran ;-) . Also die Exel Datei habe ich alt alternativdatei noch mit am Loggen, weil diese Auf ne Homepage geladen wird und ausprobiert wird obs halt auch funktioniert.


----------



## Jochen Kühner (11 Februar 2013)

Das problem ist auch, ich verwende zum speichern in excel irgendeine externe dll, kann also auch nicht sagen warum das nicht geht. Ich würde da eher sqllite empfehlen, und später aus den daten die ich brauche mit einer  abfrage auslesen.

Nach dem problem mit dem vollen ereignisprotokoll werd ich ende der woche mal schauen!


----------



## Jochen Kühner (11 Februar 2013)

Ich schau dann auch mal obs von den excel bibliotheken neuere versionen gibt!


----------



## Jochen (11 Februar 2013)

Hallo Jochen. Das Ding mit der Ereignisanzeige bitte nicht falsch verstehen.da gibt es keinen  fehler im Protokoller. Das liegt einfach nur daran, dass das log unter XP nur eine bestimmte  haben darf. Ich starte und stoppe den  Dienst über ein Skript alle zehn Minuten einmal.da schreibt der Dienst halt den Status ins log. Das ist aber ok so.

Gruß

Jochen


----------



## Jochen Kühner (11 Februar 2013)

Jochen schrieb:


> Hallo Jochen. Das Ding mit der Ereignisanzeige bitte nicht falsch verstehen.da gibt es keinen  fehler im Protokoller. Das liegt einfach nur daran, dass das log unter XP nur eine bestimmte  haben darf. Ich starte und stoppe den  Dienst über ein Skript alle zehn Minuten einmal.da schreibt der Dienst halt den Status ins log. Das ist aber ok so.
> 
> Gruß
> 
> Jochen



Ja, aber der Protkoller soll deswegen nicht stehen bleiben!


----------



## Jochen (11 Februar 2013)

Er bleibt ja nicht stehen, das Betriebssystem kann den Dienst nur nicht mehr als Service starten.als Anwendung funktioniert er glaube ich auch dann noch.


----------



## Jochen Kühner (11 Februar 2013)

Jochen schrieb:


> Er bleibt ja nicht stehen, das Betriebssystem kann den Dienst nur nicht mehr als Service starten.als Anwendung funktioniert er glaube ich auch dann noch.



Axh so, das ist ein Windows Problem? Dann muss ich ja nichts machen!


----------



## Jochen (11 Februar 2013)

So sieht es aus :-D Das Problem ist hausgemacht in Redmond.


----------



## sps_sr (18 Februar 2013)

Hallo,

ich habe den Protokoller gerade per MPI getestet und da funktioniert alles wunderbar.
Jetzt wollte ich das erweitern und per Ethernet auf die CPU. Der Connect über Step7.dll und TCP als PG/AG ausgewählt funktioniert. Beim Verbindungstest ist alles OK.
Bei starten des Dienstes kommt aber ein Fehler:
Exception occured!
Message: Object Reference not set to an instance of an object.

Die CSV Datei wird aber geschrieben mit einer Spalte. Nur keine Werte..

Habe versucht ein Datenbaustein auszulesen und ein Merker..

Hat jemand eine Idee..

Danke und Gruß


----------



## Jochen Kühner (19 Februar 2013)

sps_sr schrieb:


> Hallo,
> 
> ich habe den Protokoller gerade per MPI getestet und da funktioniert alles wunderbar.
> Jetzt wollte ich das erweitern und per Ethernet auf die CPU. Der Connect über Step7.dll und TCP als PG/AG ausgewählt funktioniert. Beim Verbindungstest ist alles OK.
> ...



Hm... Steht denn im Ereignisprotokoll ein aussagekräftigerer Fehler? Poste mal deine Config!


----------



## corny456 (7 März 2013)

Hallo,

Erstmal danke für das Tool! Funktioniert bombe... 

Eine Frage hätte ich allerdings, gibt es eine Möglichkeit in einem MySQL Storage einen bereits existierenden Datensatz überschreiben zu lassen?

Danke schon mal Grüße Marius


----------



## Jochen Kühner (7 März 2013)

corny456 schrieb:


> Hallo,
> 
> Erstmal danke für das Tool! Funktioniert bombe...
> 
> ...



Wenn du MySQL als Storrage verwendest, gibts die Funtkion: du kannst im Datensatz wenn du die Experten einstellungen nutzt UseDbUpdateNoInsert setzen. Dann kannst du noch eine Where Bediung eingeben, welche beim Update verwendet wird! z.b.: "Where Id = '1'" oder so...


----------



## corny456 (7 März 2013)

Ähm... Experten Einstellungen?!


----------



## Jochen Kühner (7 März 2013)

Gugst du:


Wobei, Ich glaube die Checkbox sollte heisen: "Use Update instead of Insert"...
werd das morgen mal ändern....


----------



## Jochen Kühner (7 März 2013)

Funzt im Moment auch nur bei MySQL


----------



## corny456 (8 März 2013)

Ok... hab mir mal den ganzen Thread zu gemüte geführt... hatte die EXE aus dem ersten Post heruntergeladen und somit eine ältere version 


Also bei CodePlex DotNetSiemensPLCToolBoxLibrary runtergeladen und aufm schlauch stehen... 
bin mit DotNet nicht so bewandert, was mach ich denn nu mit der DotNetSiemensPLCToolBoxLibrary?

Grüße Marius


----------



## Jochen Kühner (11 März 2013)

corny456 schrieb:


> Ok... hab mir mal den ganzen Thread zu gemüte geführt... hatte die EXE aus dem ersten Post heruntergeladen und somit eine ältere version
> 
> 
> Also bei CodePlex DotNetSiemensPLCToolBoxLibrary runtergeladen und aufm schlauch stehen...
> ...



Da gibts nen ordner compiled, da ist die compilierte Version des Protokollers enthalten!


----------



## eloboy (23 April 2013)

--Multiple Inserts.


Funktionieren Multiple Inserts auch über PLC Connections?
Wenn ja wie muss ich den Protokoller einstellen? Kleines Beispiel?


----------



## Jochen Kühner (23 April 2013)

Nee, nur per TcpIp...


----------



## twinkelbel (4 August 2013)

Hallo,
Kan ich dass program auch nutzen fur siemens Logo 0ba7 mit TcpIp?
Habe probiert um die verbindung zu testen aber bekomme keine verbindung.
wenn ich die verbindung einstelle mit S7Droid Lite auf mein handy dan muss ich einstellen ip-adresse=192.168.1.100, Mpi-adresse=1, Ip-Port=102, Rack=1, Slot=0
Wenn ich in den protokoller plc connection  ISO over TCP wahle dan kan ich nicht Mpi-Adresse 1 wahlen.

Danke fur hilfe

Robert


----------



## Jochen Kühner (6 August 2013)

twinkelbel schrieb:


> Hallo,
> Kan ich dass program auch nutzen fur siemens Logo 0ba7 mit TcpIp?
> Habe probiert um die verbindung zu testen aber bekomme keine verbindung.
> wenn ich die verbindung einstelle mit S7Droid Lite auf mein handy dan muss ich einstellen ip-adresse=192.168.1.100, Mpi-adresse=1, Ip-Port=102, Rack=1, Slot=0
> ...



Ja, weil bei TCP/IP die MPI Adresse nicht berücksichtigt wird (ist egal). Baut er mit den Angaben Ip, Rack und Slot den keine Verbindung auf?


----------



## twinkelbel (6 August 2013)

Hallo Jochen,

Ich bekomme keine verbindung in ISO over TCP, habe verschiedene Rack und slot angaben probiert aber leider.
Im logo habe ich  Tsap auf 02.00, accept all connections requests und connect with an operator panel ein haken, sondst bekomt mein handy auch keine verbindung.
Ein ping von pc-logo geht.

Gruss Robert


----------



## ErwinLSE (10 Dezember 2013)

Hallo Jochen,

habe gerade mal den Protokoller getestet, mit csv Datei klappt es super, habe aber ein Problem wenn ich die Daten in SQLite Datenbank speichern will. Es kommt zu folgender Fehlermeldung beim Testen "SQLite error Insufficient parameters supplied to the Command" (Siehe Bild) 






Wenn ich den Service dann starte kommt keine Fehlermeldung, der Service läuft also, aber es werden keine Daten in die Datenbank geschrieben.


Müssen irgendwelche Voraussetzungen auf dem Rechner sein damit das funktioniert.


Ich arbeite mit windows7 32BIT 

ErwinLSE


----------



## Jochen Kühner (10 Dezember 2013)

ErwinLSE schrieb:


> Hallo Jochen,
> 
> habe gerade mal den Protokoller getestet, mit csv Datei klappt es super, habe aber ein Problem wenn ich die Daten in SQLite Datenbank speichern will. Es kommt zu folgender Fehlermeldung beim Testen "SQLite error Insufficient parameters supplied to the Command" (Siehe Bild)
> 
> ...



Schick mir mal deine config...


----------



## ErwinLSE (10 Dezember 2013)

Hallo,

anbei mal meine Configdatei in Bildern


----------



## eloboy (30 Oktober 2014)

Hallo,

wie kann ich beim Protokoller eine Art Ringpuffer einstellen?


----------



## derfred (12 August 2015)

Hallo,

lebt das Projekt noch?

Gibt es irgendwo eine Anleitung?

Aus dem Github-Projekt alleine werde ich nicht so ganz schlau...

Danke 
Gruß
Fred


----------



## ceasar (30 März 2016)

Hallo.

Bibliothek Libnodave unterstützt Siemens S7-Steuerung (1200)?


----------



## ceasar (21 April 2016)

Hi,i have a problem when reading data from the controller to the table.
"33028" returns an error when trying to read( res=33028 )

What am I doing wrong?

Example code:

try
            {
                int res = 0; 
                int value = 0;

                try
                {
                    fds.rfd = libnodave.openSocket(102, "192.168.0.12");
                    fds.wfd = fds.rfd;
                    if (fds.rfd > 0)
                    {
                        di = new libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k); 
                        di.setTimeout(5000000); 
                        dc = new libnodave.daveConnection(di, 0, 0, 1);
                        if (0 == dc.connectPLC())
                        {
                            res = dc.readBytes(libnodave.daveDB, 1, 0, 4, null);


        //return 'res'=33028


                            if (res == 0) 
                            {
                                    value = dc.getU32();
                                    this.txtValueByte.Text = value.ToString();
                            }
                            else
                            {
                                MessageBox.Show("Ошибка - " + res + " " + libnodave.daveStrerror(res));
                            }

                        }
                        dc.disconnectPLC();
                        libnodave.closeSocket(fds.rfd);
                    }
                    else
                    {
                        MessageBox.Show("Ошибка. Не открыто соединение TCP по IP:" + mvIP);
                    }
                }
                catch (Exception exp)
                {
                    MessageBox.Show("Ошибка" + exp.Message);
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show("Ошибка - " + exp.Message, "Error");
            }


----------



## Automatonator (7 März 2018)

Mahlzeit, lebt das projekt noch ?

gibt es eine Anleitung für die Installation ? ich stehe total auf dem Schlauch ...


----------



## ceasar (7 März 2018)

Automatonator schrieb:


> Mahlzeit, lebt das projekt noch ?
> 
> gibt es eine Anleitung für die Installation ? ich stehe total auf dem Schlauch ...




I do not think that the project is still alive. But you can use these libraries.


----------



## Jochen (7 März 2018)

Schau mal den letzten Beitrag auf der Seite 11, da habe ich eine Anleitung hochgeladen.


----------



## Automatonator (8 März 2018)

Hatte die Anleitung gelesen ( danke dafür an dieser Stelle).
Das Problem ist eher, dass ich aus dem Ordner von Github nicht schlau werde .. irgendwie müsste ich mir daraus anscheinend ne .exe erstellen wenn ich das richtig sehe .. ich wüsste aber nicht wie

In dem ursprünglichen Dateipfad find ich einen Ordner, in dem eine exe vorhanden und ausführbar ist, allerdings ist diese so alt, dass .ap13 /14 und 15 nicht unterstützt wird.

Die Verknüpfung dann usw sollte kein Problem sein .. ich bräuchte quasi hilfe dabei das Tool an sich zum Laufen zu kriegen


----------



## Automatonator (13 März 2018)

Falls noch jemals einer, so wie ich, zu blöd ist : einfach Visual Basics runterladen, das Projekt öffnen, alles compilieren und im Compiled Ordner sind dann die fertigen Anwendungen


----------



## Maagic7 (3 April 2018)

Ich bin noch blöder oder es ist nicht ganz so einfach. Wahrscheinlich ist es ein Mix aus beidem! Es hapert schon am Visual Studio! Nach einigen Stunden hatte ich es dann endlich geschafft!
Beim GitHub Download sind leider keine kompilieren Dateien dabei. Ich denke mal das ist wegen Malware-Schutz.

Hier die detailliertere Anleitung.

1. Visual Studio Community Editon (aktuell die 2017er) downloaden (Dabei handelt es sich um einen Online-Installer von Microsoft)
    Bei der Installtion Windows-NET Entwicklung auswählen. (rechte obere Kachel). Der Installations-Download dürfte etwa 2GB sein.
   Leider gibt es keine ISO für die Installation. (Siehe Google)

2. Evtl. Net4.0 Runtime nachinstallieren. Wird als dotNetFx40_Full_x86_x64.exe zum Download bei Microsoft angeboten.

3. Das Projekt von GitHub downloaden und entpacken (https://github.com/dotnetprojects/DotNetSiemensPLCToolBoxLibrary)

4. Visual Studio starten

5. In VS2017: /Datei/Öffnen/Projkt_Projektmappe 
   die Projektmappe  \DotNetSiemensPLCToolBoxLibrary-master\DotNetSiemensPLCToolBoxLibrary.sln
   öffnen.

6. Zum compilieren (bzw. deutsch erstellen) des kompletten Projekts mit allen Unterprojekten
   Dropdownmenüleiste:  /Erstellen/Projektmappe erstellen
   Alternativ im Projektmappenexplorer: rechtsklick Wurzelknoten: Projektmappe "DotNetSiemensPLCToolBoxLibrary"  => Projektmappe erstellen

7. Wenn alles korrekt erstellt wurde dann befinden sich alle RELASE-Dateien in : \DotNetSiemensPLCToolBoxLibrary-master\compiled

8. Hinweis: es wurde mit Voreinstellung DEBUG erstellt. Die EXE's DLL's enthalten also DEBUG-Code. Für eine RELEASE-Version ohne DEBUG Code
    oben in der Symbolleiste:  Release | x86 | DotNetSiemensPLCToolBoxLibrary

So nun geht's erst richtig los!
Da praktisch keine Doko dabei ist hat man keine Ahnung was das alles soll bzw. was das alles kann!

Wer das weis könnte das hier vielleicht mal detailliert posten.

DANKE


----------



## erci74 (21 Juni 2018)

Ich habe soweit alles eingestellt möchte eine Boolische Variable prüfen also der soll mir schreiben ob es eine 1 oder 0 hat in bestimmten Zeitabständen.
Ich bekomme leider die Fehlermeldung   Error: Dataset "Table_1" Row "Row_1" - Error Reading Value on Address DB2.DBX2.0 !

Ich glaube ich muss da noch was für die Kommunikation zwischen Loggingrechner und Steuerung schreiben aber komme da auf keine Idee.
Der Auszug aus der Bachelorarbeit hat mir auch leider nicht geholfen.

Ich hoffe Ihr habt da einige Lösungsansätze


----------

