# Allgemein, Technik

SPS – Siemens S7 Daten in InfluxDB / Grafana übertragen

Allgemein

Das Projekt wurde ebenfalls auf GitHub veröffentlicht:

https://github.com/dolo280/s7toInfluxDB

TSDB Datenbanken

Oft sucht man nach einer einfachen Möglichkeit Daten zu Visualisieren und anzuzeigen. Seit einiger Zeit findet man viele Datenbanksysteme die für chronologische Zeiteinträge optimiert sind. Man nennt diese TSDB (Time series database). Diese sind optimiert für Zeitserien, meist wird jeder Wert automatisch mit einem Zeitwert versehen, ohne das der Programmierer hierbei Einfluss nehmen muss. Dies macht es auch für Applikationen im Bereich IoT interessant.

Einrichten von InfluxDB und Grafana

In meinem Testszenario nutze ich Docker für ein einfaches und schnelles einrichten von InfluxDB und Grafana. Es gibt auf Dockerhub schon viele fertige Images. Ich habe mich für dieses entschieden: https://hub.docker.com/r/samuelebistoletti/docker-statsd-influxdb-grafana/ Hier findet sich auch eine detaillierte Beschreibung über die Installation und Konfiguration. Um den Rahmen dieses Beitrags nicht zu sprengen, gehe ich davon aus man weiß wie sich Docker bedienen lässt.

Erstellen von Datenbank

Wir wechseln auf unseren Docker-Container und öffnen das Webfrontend von InfluxDB auf Port 3004. (http://localhost:3004/) Hier legen wir zuerst eine neue Datenbank für unseren Test an. Ich nenne die Datenbank “testdb”. Nach dem Ausführen ist auf Datenbankseite nichts weiter zu konfigurieren.

influxdb

Das Docker-Image hat den Admin User automatisch mit “root” und Passwort “root” angelegt. Dieses werden wir später für unser Programm benötigen.

Kopplen von Datenbank und Grafana

Unter http://localhost:3003/datasources muss nun in Grafana die Kopplung zur InfluxDB vorgenommen werden. Im folgenden Bild sind die Werte sichtbar.

datasource

Erstellen von .NET Applikation

Zur Kopplung an der Steuerung an die Datenbank programmieren wir nun ein kleines Programm im .NET-Framework. Ich erstelle es mit Visual Studio und verpasse dem Programm einen kleinen GUI mit WinForms. Es wäre auch möglich das Programm als Konsolen-Anwendung zu erstellen und dann z.B. mit Mono unter Linux zu betrieben.

Anbindung an die SPS-Steuerung (Siemens S7-1500)

Zur Anbindung nutze ich die DotNetSiemensPLCToolBoxLibrary welche auch per NuGet bezogen werden kann. Im Programmbeispiel sieht man die Kopplung mit der SPS Steuerung.

Übertragen der Messwerte an die InfluxDB

Für die Ankopplung an die InfluxDB kann per GitHub das notwendige Projekt geladen werden. Alternativ kann es ebenfalls per NuGet installiert werden.

Install-Package InfluxDB.Collector -Pre

Somit haben wir in unserem Projekt alle notwendigen Abhängigkeiten und können uns auf das Programmieren konzentrieren. Als Beispiel für das Schreiben eines Messwerts dient das nachfolgende Beispiel, hier wird der Wert 20.0 für den Messwert DB42.DBD500 übertragen:

//Auslesen von aktuellen Prozesswerten
var process = Process.GetCurrentProcess();

//Anlegen von Datenkollektion
Metrics.Collector = new CollectorConfiguration()
	.Tag.With("host", Environment.GetEnvironmentVariable("COMPUTERNAME"))
	.Tag.With("os", Environment.GetEnvironmentVariable("OS"))
	.Tag.With("process", Path.GetFileName(process.MainModule.FileName))
	.Batch.AtInterval(TimeSpan.FromSeconds(2))
	.WriteTo.InfluxDB("http://localhost:8086", "tempdb", "root", "root")
	.CreateCollector();

//Messwert in Datenbanksystem übertragen
Metrics.Write("DB42.DBD500",
		new Dictionary<string, object>
	{
		{ "value", 20.0 }
	});

Nun haben wir unsere erste Messreihe in die InfluxDB übertragen und können diese mit Grafana darstellen.

Anzeigen der Messreihe mit Grafana

Um die Messwerte nun anzuzeigen muss im Dashboard nun ein neuer Graph hinzugefügt werden. Für die Konfiguration und Einrichtung von Grafana finden sich im Internet genügend Videos und Anleitungen. Ich gehe deshalb nicht weiter auf das genaue Konfigurieren ein.
Wichtig ist nun die Datenanbindung zwischen Grafana und InfluxDB. Im folgenden Bild wird der “Select” sichtbar, der für die Darstellung genutzt werden sollte.

grafana

Somit haben wir die wichtigsten Teile erfüllt. Auch automatisches übertragen von Werten aus einer Siemens S7 Steuerung kann somit einfach reasliert werden. Im GitHub im Projekt findet man die Datei https://github.com/dolo280/s7toInfluxDB/blob/master/Form1.cs hier finden sich alle wichtigen Punkte wieder, die für die Umsetzung relevant sind. Abfragen wie InfluxDB erreichbar oder S7-Steuerung online sind hier allerdings noch nicht berücksichtigt und sollten noch ergänzt werden!

Die fertige Anzeige meiner Messwerte sieht nach Umsetzung dann folgendermaßen aus:

diag