Direkte Datensicherung und Archivierung von SPS-Daten in eine Datenbank (MySQL)

elektroniktommy

Level-2
Beiträge
57
Reaktionspunkte
14
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich möchte Daten aus der SPS (SIMATIC S7-1500)direkt, ohne Umwege, in eine MySQL-Datenbank speichern. Konkret sind das Rezeptur/Artikeldaten, Betriebsdaten der Anlage und die Störungen bzw. Meldungen der Anlage, um später eine Auswertung und Optimierung (mit Excel) der Maschine zu ermöglichen.

Kurz zu meiner Person: Ich heiße Thomas (Tommy), programmiere schon über 30 Jahre SPS und habe mich dabei hauptsächlich mit der Maschinenseite (Steuerung) befasst.
Jetzt möchte ich ein größeres Projekt in Richtung Datenerfassung und Archivierung zur Analyse realisieren. Anfangs möchte ich nur eine Maschine als Prototyp und Testanlage erweitern.

Mein bisheriger Aufbau besteht aus einer SIMATIC S7-1500 CPU und ein Raspberry-Pi 3 auf dem eine Datenbank (MySQL) läuft. Der Pi wurde um eine Netzwerkschnittstelle erweitert und fungiert somit auch als Gateway zwischen Maschine und EDV-Netzwerk. Später soll darüber auch eine Fernwartung möglich sein.
Grundsätzlich funktioniert bis jetzt alles so wie es soll. Mir geht es jetzt um die Strukturierung der Datenbank und des Ablaufes in der SPS zur Übertragung der gewünschten Informationen.

Wie würdet ihr die Datenbank strukturieren? In welchen Intervallen sollte man die Betriebsdaten schreiben? Wie sind da eure Erfahrungen?
Da Störungen zu beliebigen Zeiten und mehrere Zeitgleich auftreten können müsste man die Meldungen in der PLC speichern und dann seriell aus einem Puffer in die Datenbank schaffen. Wie kann man das elegant lösen.

Gibt es dazu vielleicht ein Beispiel, nach dem man eine Übersicht und Struktur ableiten kann. Jede Idee ist willkommen!

Die Datenbankanbindung (Die SPS spricht MySQL:D) habe ich fast fertig und möchte nun die Organisation in Angriff nehmen. Da stehe ich aber irgendwie auf dem Schlauch bzw. sehe den Wald vor lauter Bäumen nicht. Noch als Info, in der SPS gibt es schon ein Störmeldearchiv auf dem Panel, kann man das nutzen bzw. auslesen und zur Datenbank schaffen?

Danke schon mal für Eure Bemühungen.

MfG Tommy
(Thomas Unger)
 
Hi Tommy,

d.h. du brauchst konkret Beratung beim DB Layout?
Dann wirst du wohl konkretere Angaben machen müssen, was da genau rein soll.
Den einen richtigen Weg gibt es ohnehin nicht, da verfolgen verschiedene Leute verschiedene Philosophien.

Ich denke es läuft auf etwas hinaus wie :

Tabelle Rezepte (welche daten auch immer dein Prozess benötigt)
Tabelle Aufträge (auftragsbezeichnung, rezeptverweis, anzahl zu produzierender teile, gutstückzahl, schlechtstückzahl,
Tabelle Fehler ( datum, uhrzeit, severity level (warnung fehler info?), verweis auf rezept oder auftrag?, verweis auf 1-x benutzte komponenten in diesem rezept
Tabelle OEE Daten (Datum, Uhrzeit, Änderung des maschinenzustandes nach ......) z.b. Running,Failure,scheduled downtime,unscheduled downtime ...ferner starved,blocked.. beliebig erweiterbar -> http://oeestandard.com/eng/eng_4_definition.html

Für mich riecht das Ganze nach: "der Chef sagt, wir brauchen Industrie 4.0, los geh Daten sammeln!"

Viel Erfolg :)

Gruß

Frank
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Thommy

Wieso willst du das Rad neu erfinden?
Wenn du im Internet nach BDE (Betriebsdatenerfassung), MDE (Maschinendatenerfassung) und / oder MES (Manufacturing Execution System) suchst, wirst du viele Systeme finden.
Die Preisspanne ist natürlich weitgespannt ;)

Wenn du's trotzdem selber machen willst, dann solltest du bevor das Thema Datenbanken angehst, klären welche Daten überhaupt wichtig sind.
Also erstmal mit den Leuten zusammensitzen, die mit den Daten arbeiten sollen, wollen oder müssen.
Die Anforderungen unterscheiden sich erheblich ob ich z.B. einzelne Maschinen optimieren will, den Fertigungsfluss verbessern will oder Auftragsverfolgung und Quailtätsdaten tracken will.

Gruß
Blockmove
 
Hallo,
Vielen Dank für die Info. Es geht nicht ums Daten sammeln, dass macht die Maschine schon lange. Bisher wurden die Daten händisch abgeschrieben! Das möchte ich jetzt etwas automatisieren. Dabei möchte ich Maschine und EDV relativ sicher trennen. Käufliche Lösungen sind sicher machbar, aber man ist dann immer auch davon abhängig! Von den Preisen mal ganz abgesehen. Das ganze macht auch noch Spaß und man lernt ne Menge dazu!

Gruß Tommy
 
Es geht nicht ums Daten sammeln, dass macht die Maschine schon lange. Bisher wurden die Daten händisch abgeschrieben! Das möchte ich jetzt etwas automatisieren.

Dann würde ich ganz pragmatisch das Ganze in eine einzelne Datenbanktabelle packen. Zeitstempel für jeden Datensatz und gut is.
Wenn dann Änderungswünsche kommen, dann kannst du mit ein paar Zeilen SQL die Daten in passende Tabellen verschieben.
Mit Lernen und Spass hast du Recht :p

Falls ihr nen Micrsosoft SQL-Server im Haus habt, dann frag mal, ob du da deine Daten ablegen kannst.
Für den SQLServer gibt es die Reporting-Services. Damit kann man dann absolut einfach die Anlagendaten visualisieren und im Intranet verfügbar machen.
Wenn du mit Excel klarkommst, dann kommst du auch damit klar. Auf Youtube gibt es genügend Tutorials.
Zum Üben kannst du dir den kostenlosen SQL-Server Expreess installieren.
Wenn ich auch sonst kein großer Microsoft Freund bin, das Teil finde ich klasse.

Gruß
Blockmove
 
Zuviel Werbung?
-> Hier kostenlos registrieren
mich würde grundsätzlich interessieren, wie die Datensammlung aktuell vonstatten geht? Welche Protokolle werden hierbei eingesetzt und wie werden die Daten abgelegt?
 
mich würde grundsätzlich interessieren, wie die Datensammlung aktuell vonstatten geht? Welche Protokolle werden hierbei eingesetzt und wie werden die Daten abgelegt?

Auf einem Raspberry Pi bietet sich z.B. eine Umsetzung mit Python an.
Kommunikation zur S7 kannst du dann mit Snap 7 realisiseren.
Als Datenbank MySql / MariaDB.
Solange du nur rein zyklisch die Daten abfrägst und einträgst, ist so eine Applikation schnell erstellt.

Die Auswertung kann dann auf dem PC mit Excel erfolgen. Man benötigt dafür den MySQL-Connector für Windows.

Gruß
Blockmove
 
Zuletzt bearbeitet:
Auf einem Raspberry Pi bietet sich z.B. eine Umsetzung mit Python an.
Kommunikation zur S7 kannst du dann mit Snap 7 realisiseren.
Als Datenbank MySql / MariaDB.
Solange du nur rein zyklisch die Daten abfrägst und einträgst, ist so eine Applikation schnell erstellt.

Die Auswertung kann dann auf dem PC mit Excel erfolgen. Man benötigt dafür den MySQL-Connector für Windows.

Gruß
Blockmove
Danke für die Infos!

Ich meinte eigentlich "einfache Daten", wie z.B. Maschinenzustand . Da ich im Bereich SPS relativ neu bin, interessiert mich die Umsetzung, weil man die Vorgehensweise auf zig Anwendungsszenarien (Signale sammeln und in der DB auswerten) ausweiten kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich meinte eigentlich "einfache Daten", wie z.B. Maschinenzustand . Da ich im Bereich SPS relativ neu bin, interessiert mich die Umsetzung, weil man die Vorgehensweise auf zig Anwendungsszenarien (Signale sammeln und in der DB auswerten) ausweiten kann.

Eins hab ich gelernt:
Einfache Daten gibt's nicht :p
Und Maschinenzustand schon mal gar nicht :D

Üblicherweise geht es immer ganz sompel los:
Einfach mal eine Übersicht mit dem Anlagenzustand.
Dann als Erweiterung eine Störungsauswertung, dann noch IO-NIO-Teile, ...
Und Ruck-Zuck ist man bei einer kompletten MDE-BDE-Anwendung.

Solange man seine Daten auf SPS und Datenbankseite noch selber definieren kann, ist es ok.
Lustig wird es wenn man sich dann mit IT und / oder externen Partnern rumschlagen muß.

Gruß
Blockmove
 
Eins hab ich gelernt:
Solange man seine Daten auf SPS und Datenbankseite noch selber definieren kann, ist es ok.
Lustig wird es wenn man sich dann mit IT und / oder externen Partnern rumschlagen muß.

Gruß
Blockmove

Hallo Blockmove,

Auch deshalb versuche ich eine eigene Lösung!
SQL-Server haben wir im Haus. Da müssen die Daten aber auch irgendwie hin, was bedeutet ich muss Maschine und EDV irgendwie verbinden. Da mir bisher die Lösungen mit Siemens Router und Securty-Gateway einfach zu teuer vorkommen habe ich nach einer kostengünstigen und einfachen Lösung gesucht und möglichst ohne OPC-Server. Deshalb habe ich jetzt zum Test die Geschichte mit einem Raspberry aufgebaut. Auf dem Pi läuft zur Zeit nur MySQL und später soll hier noch ein VPN-Server laufen über den ich dann auf die SPS zu Wartungszwecken zugreifen kann. Aber das ist Zukunftsmusik! Im Moment schreibe ich die Daten direkt mit der SPS(S7-1500), über einen eigenen MySQL-Treiber, in die Datenbank. Python und Snap7 kommt später ins Spiel wenn auch Alte S5 Anlagen ans Netz sollen.
Eventuell wage ich auch noch mal einen SPS-Treiber der MS-SQL kann aber soviel Langeweile werde ich die nächste Zeit wohl nicht haben, zumal der MySQL-Treiber auch noch nicht richtig fertig ist. Er kann zur Zeit nur in die Datenbank schreiben. Ich möchte aber später auch Daten zurück lesen können.

@scrfc71 Zur Zeit werden einfach Zeiten für Automatik, Stillstand, Störung usw. und IO-NIO-Teile für ein Dreischicht-Modell in der Maschine erfasst und in einem Puffer von 100 Datensätzen (100 Tage) zwischen gespeichert und können über das Panel ausgelesen werden. Störmeldungen und Betriebsmeldung werden im Panel via Archiv gespeichert.

Auf die Zeiten kann ich jetzt einfach zugreifen und werde sie zum MySQL-Server übertragen. Das ganze läuft über einen Puffer (FIFO mit 100 Einträgen) in dem die SQL-Befehle im Klartext abgelegt werden und dann nacheinander zum Server übertragen werden, d.h. es können auch mehrere Ereignisse gleichzeitig auftreten und es wird kein Verlust an Infos geben wenn zum Beispiel mehrere Meldungen oder Infos gleichzeitig auflaufen (So ist der Plan und ich hoffe das er auch funktioniert!)
:p

Schöne Ostern
Gruß Tommy
 
@Thommy

Die Idee mit dem Raspberry ist primär nicht schlecht.
Es gibt genügend Firmen, die dir einen Raspberry in einem Gehäuse und 24V-Spannungsversorgung als IOT-Gateway für 1500€ verkaufen :p
DB-Treiber in der Steuerung halte ich nicht unbedingt für sinnvoll. Wenn man Änderungen an der DB vornimmt, dann musst du jede Steuerung anpassen.
Ich denke da bist du mit einer Lösung mit Snap 7 deutlich flexibler.
Wenn du das Ganze mit Pyhthon, PHP, Perl oder Ähnlichem realisierst, dann ist es auch fast egal welche Datenbank verwendet wird.
Du tauscht quasi nur den DB-Treiber aus und parametrierst die entsprechende DB.
Bei einfachen SQL-Befehlen sind die Unterschiede zwischen den verschiedenen DBs nicht sonderlich groß.
Und so lässt sich die Lösung auch schön skalieren.
Sobald mehrere Maschinen auf die DB zugreifen und gleichzeitig Auswertungen aus der DB erfolgen, wird der Raspi in die Knie gehen.
Da du ja sowieso eine Schnittstelle zum IT-Netz hast, kann da dann auch die DB auf einem Server laufen.

Gruß
Blockmove
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Blockmove,
Ich wollte in jede Maschine einen Pi einbauen, da dieser auch das Maschinenmetzwerk vom IT-Netzwerk trennen soll und das halt kleines Geld! Ich wollte halt erst mal eine Lösung die funktioniert, zum Testen die ohne IT Einbindung läuft. Hat auch Spaß gemacht den Treiber in der SPS zum programmieren. Änderungen an der Datenbank sind ja eigentlich nur notwendig wenn in der SPS auch mehr Daten zur Verfügung stehen, d.h. In der SPS werden auch Änderungen fällig. Dann kann ich auch die SQL-Befehle mit ändern. Die Arbeit bleibt dabei gleich denke ich.

Python und Snap7 will ich auf alle Fälle auch noch machen! Die Lösung in der SPS finde ich aber besser da ich Immer nur auf die DB zugreife wenn neue Daten in der SPS vorhanden sind. Mit Snap7 muss ich ja immer Pollen oder wie stelle ich fest das neue Daten vorhanden sind?

Gruß Tommy
 
Hallo Blockmove,
Ich wollte in jede Maschine einen Pi einbauen, da dieser auch das Maschinenmetzwerk vom IT-Netzwerk trennen soll und das halt kleines Geld! Ich wollte halt erst mal eine Lösung die funktioniert, zum Testen die ohne IT Einbindung läuft. Hat auch Spaß gemacht den Treiber in der SPS zum programmieren. Änderungen an der Datenbank sind ja eigentlich nur notwendig wenn in der SPS auch mehr Daten zur Verfügung stehen, d.h. In der SPS werden auch Änderungen fällig. Dann kann ich auch die SQL-Befehle mit ändern. Die Arbeit bleibt dabei gleich denke ich.

Python und Snap7 will ich auf alle Fälle auch noch machen! Die Lösung in der SPS finde ich aber besser da ich Immer nur auf die DB zugreife wenn neue Daten in der SPS vorhanden sind. Mit Snap7 muss ich ja immer Pollen oder wie stelle ich fest das neue Daten vorhanden sind?

Gruß Tommy

In jeder Maschine einen Pi einzubauen ist ok. Würde ich auch machen.
Ob allerdings auf jedem eine DB sinnvoll ist, hängt sehr stark von Aufbau eurer Fertigung ab.
Wenn es nur Einzelmaschinen mit geringen fertigungstechnischen Abhängkeiten sind, dann ok.
Stehen die Anlagen in einer Linie oder es sind durch das Produkt viele Abhängigkeiten, dann würde ich auf eine andere DB-Struktur geben.
Wenn Qualitätsdaten und Fertigungssteuerungskonzepte (Schreiben in die Steuerung) ins Spiel kommen, dann musst du auch auf das Thema Datenintegrität achten.
Hier hat der normale PI den Nachteil, dass er keine USV hat. Das Dateisystem und somit auch die DB können bei Stromausfall relativ leicht zerschossen werden.
Ich hab diverse PIs bei mir zu Hause im Einastz (Mediencenter, 3D-Druck, ...) und kenn die Thematik daher.
Spezielle Pi-Distributionen (z.B. Libreelec) gehen hier den Weg, dass die wichtigen Dateien in einem ReadOnly-Filesystem liegen.
Das funktioniert aber bei deiner DB nicht. Wenn's doch mal knall, dann reicht ausserdem ein einfacher Wechsel der Micro-SDCard.

Ob du nun mit Snap7 pollst oder gezielt das Schreiben von der SPS aus startest, macht in der Praxis keinen großen Unterschied.
Üblicherweise gibt es einen Handshake bei dem die Steuerung meldet, dass neue Daten bereit stehen und dann erst die entsprechenden Datenmengen gelsen werden.

Gruß
Blockmove
 
Hallo Blockmove,

die Maschinen sind nicht miteinander verknüpft und besitzen somit keine Abhängikeiten! Schreiben in die Steuerung wird im Moment auch nicht gemacht, was aber nicht heißt das man aus ausschließen kann. Zum Thema Datensicherheit habe ich mir auch schon Gedanken gemacht und werde dafür ein "s.usv advanced" USV Modul vorsehen. Die USV überbrückt dann auch mal einen kurzen Netzausfall oder Hauptschalter aus, was die Bediener auch gern mal machen. Sollte es länger dauern wird der Pi dann automatisch heruntergefahren. Den Raspi betreibe ich grundsätzlich ohne SD-Card und setze hier auf SLC-USB Sticks. Wenn das Testsystem zufriedenstellend läuft muss ich mir nur noch mal Gedanken machen wie ich die Datenbank regelmäßig sichere.
Um später das System, bei defekt, wieder zum laufen zu bringen habe ich ein Image für den Stick was einfach nur neu geschrieben werden muß und eventuell noch die zwei IP-Adressen anpassen, Datensicherung DB zurückspielen und alles sollte wieder laufen.
Zur Zeit versuche ich den Pi als VPN-Server zu konfigurieren um damit auf die SPS sicheren Zugriff zu haben. Mal sehen wo hier die Fallstricke lauern.

Gruß Tommy
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zur Zeit versuche ich den Pi als VPN-Server zu konfigurieren um damit auf die SPS sicheren Zugriff zu haben. Mal sehen wo hier die Fallstricke lauern.

Was nimmst du? OpenVPN?
Solange du von deiner IT statische Adressen oder zumindest die Namensauflösung ordentlich funktioniert, sollte es eigentlich keine Probleme geben.
Du musst halt SPS-Zugriff und restliche PI-Zugriffe (ssh, MySQL) trennen. Also fur Port 102 eine entsprechende Firewall-Regel definieren.
Aber das kann schon eine Fummelei werden. Vorallem sperrt man sich da gerne mal selber aus :D
 
Hallo Blockmove,

ich wollte OpenVPN nehmen. Kennst du dich da aus? Das ist für mich alles Neuland. Zur Erklärung als Beispiel habe ich am Pi zwei Ethernet-Ports. Dem eth0 habe ich eine feste IP-Adresse im Firmennetzwerk zugewiesen, dem zweiten eth1 eine IP-Adresse in Maschinennetz.

IT 10.161.141.100 <--> Raspberry-Pi <--> 192.161.52.100 Maschine (Profinet)

Ich möchte jetzt das die zugewiesene IP-Adresse vom VPN-Sever immer im 192.161.52.1 ist. Geht das überhaupt?
Weiter soll nur der Traffic vom Tunnel zum Maschinennetzwerk durchgeleitet werden. Alles andere was auf der IP-Adressen des IT-Netzwerkes ankommt und an den Adressbereich der Maschine geht soll geblockt werden! Wie mache ich das? Kannst du mir da ein paar Tipps geben? Der VPN-Server läuft und ich kann mich zur Zeit auf den Pi verbinden, bekomme aber halt eine IP zugewiesen die in der server.conf steht (10.8.0.0 -> 10.8.0.2 für den Client, Server hat die IP 10.8.0.1). Mehr habe ich noch nicht gemacht.

Ich hoffe ich habe mich in etwa verständlich ausgedrückt?

Gruß Tommy
 
Thomas
ich für solche Themen immer eine fertige Distribution wie OpenWrt oder IPfire.
Da erfolgt die Config per Weboberfläche.
Deine Idee müsste schon funktionieren. Du brauchst halt den passenden Satz Firewallregeln.
Ich würde es Mal an deiner Stelle mit ipfire probieren.

Gruß
Blockmove
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du eh schon einen Raspberry Pi hast, dann schau dir mal Node-Red an. Hierfür gibt es einen OPC-UA Client https://www.npmjs.com/package/node-red-contrib-iiot-opcua und auch für alles andere sogenannte Nodes.

Ich habe hier mit relativ wenig Aufwand einen Datenlogger realisiert der in eine MariaDB schreibt, Datenbanksicherungen in die Dropbox macht, E-Mails mit Fehlermeldungen versendet und auch eine kleine Visualisierung bietet.

MfG

Markus
 
Danke für die Info.

Was heißt OPC-UA Client ? Braucht man da einen OPC-Server oder ist der in Node-Red integriert? Wie komme ich an die Daten in der SPS? Hast du da ein Beispiel dazu?

Danke Tommy
 
Zurück
Oben