# S7-1500 + Node-Red + MySql - Hilfe benötigt



## Spoonman (11 Dezember 2019)

Hallo alle zusammen,

ich versuche zur Zeit mit Node-Red Daten aus einer SPS auszulesen und diese in eine Sql-Datenbank zur schreiben.








Hier lese ich die SPS-Variable aus. Diese heißt "temp". Schalte ich dies auf eine Anzeige im Dashboard wird mir der aktuelle Wert angezeigt.

Der Quellcode in der Funktion sieht jetzt folgendermaßen aus:

```
msg.topic="INSERT INTO temperature(temp) VALUES(12)";
msg.payload=[msg.payload.value];
return msg;
```




Wenn ich das ganze laufen lasse, schreibt er mir zuverlässig die 12 in die Datenbank. Leider schaffe ich es nicht den aktuelle Temperaturwert aus der SPS in die Datenbank zu schreiben. 
Könnt Ihre mir helfen was ich anstelle der 12 eintragen muss? Ich habe bereits so einiges ausprobiert. Bin aber nicht so recht weiter gekommen.

Vielen Dank im Voraus.

MfG Ralf


----------



## ifi (12 Dezember 2019)

Hi,


I would like to share my experience with PDSql Library V1.3.2 for Siemens PLC S7-1200 S7-1500 and Microsoft SQL Server or MySQL Server.
I use it in my multiple projects and communicate reliably and quickly.
All SQL commands for reading (SELECT) and writing (INSERT, UPDATE, DELETE) can be executed directly from the PLC, as well as EXEC STORED PROCEDURE as well as CREATE TABLE, DROP TABLE and many others.
If you make a mistake in SQL syntax, the library will notify you exactly where you have a mistake in the syntax.
I tried to use it in several instances on the S7-1500 and it worked perfectly without any problems.


plcdirectsql.com


PDSql Library User Guide Link


----------



## elektroniktommy (13 Dezember 2019)

Hallo Ralf,

so vielleicht.


```
var wert = msg.payload;
msg.topic="INSERT INTO temperature (temp) VALUES(?)";
 msg.payload=[wert];
 return msg;
```

Gruß Tommy


----------



## Spoonman (13 Dezember 2019)

Hi Tommy,

vielen Dank für deine Antwort. Leider hat es nicht funktioniert. Die Datenbank-Node zeigt mir dann error an.

Gruß Ralf


----------



## elektroniktommy (13 Dezember 2019)

Muss das jetzt in eine MySQL oder MSSQL Datenbank? Wie heißt das Nod mit dem du das in die Datenbank schreiben willst. Wenn alles im topic stehen muss und so funktioniert dann musst du halt den String (Insert) aus mehreren Strings Zusammensetzen und die Variable dazwischen setzen!


----------



## elektroniktommy (13 Dezember 2019)

Versuche das mal so!


```
[LEFT][COLOR=#333333][FONT=Courier]var wert = msg.payload;
msg.topic="INSERT INTO temperature (temp) VALUES(" + wert + ")";
return msg;
[/FONT][/COLOR][/LEFT]
```

Gruß Tommy


----------



## Spoonman (16 Dezember 2019)

Hi Tommy,

die Node die ich nutze heißt "node-red-node-mysql". Als Datenbankanwendung habe ich den phpmyadmin auf meinem Testsystem installiert.
Der Code auf Beitrag #6 liefert wieder einen Error an der DB-Node.

Welche Node nutzt du für Mysql-Eintragungen?

Gruß Ralf


----------



## elektroniktommy (17 Dezember 2019)

Hallo Ralf,

ich nutze dasselbe Node. Das muß gehen. Der Code aus Beitrag #6 funktioniert bei mir!

Welche Fehlermeldung wird im Debugfenster angezeigt?

Gruß Tommy


----------



## Spoonman (18 Dezember 2019)

Hallo Tommy,

jetzt bin ich endlich dazu gekommen daran weiter zuarbeiten. Folgende Fehlermeldung gibt er mir raus:




Gruß Ralf


----------



## Spoonman (18 Dezember 2019)

Moin,

ich habe eine Debug-Node hinter die Funktion gehängt. Das wird im Debugfenster dazu angezeigt:




Gruß Ralf


----------



## Spoonman (18 Dezember 2019)

Hallo Tommy,

hab den Fehler gefunden. Bei "msg.payload" musste das .value hinzugefügt werden.

So sieht jetzt der Quellcode aus, mit dem das bei mir funtzt,


```
var wert = msg.payload.value;
msg.topic="INSERT INTO temperature (temp) VALUES("+ wert +")";
return msg;
```

Nochmals vielen Dank für deine Hilfe.


----------



## Spoonman (18 Dezember 2019)

Moin,

eine Sache fehlt mir jetzt nur noch zu meinem Glück. Ich habe in meiner sql-Datenbank eine Tabelle mit 4 Spalten angelegt. Datum, Uhrzeit, Name, Wert. Datum und Uhrzeit werden automatisch eingetragen. Ich möchte jetzt den Namen meines Parameters in die Spalte Name eintragen. Mein Code sieht bislang wie folgt aus:


```
var bez = "Zaehler";var wert = msg.payload.value;
msg.topic="INSERT INTO daten (Name, Wert) VALUES("+ bez +","+ wert +")";
return msg;
```

Er gibt mir jetzt "UNKNOWN COLUMN 'Zaehler' als Fehler heraus. Ändere ich die Zeile 2 in


```
msg.topic="INSERT INTO daten (Name, Wert) VALUES('Test' , "+ wert +")";
```

schreibt er mir zumindest "Test" in Spalte Name. Wie kann man in Variablen Text übertragen?

Vielen Dank

Gruß Ralf


----------



## elektroniktommy (18 Dezember 2019)

So?


```
var bez = "'Zaehler'";
var wert = msg.payload.value;
msg.topic="INSERT INTO test (Name, Wert) VALUES("+ bez +","+ wert +")";
return msg
```

oder so


```
var bez = "Zaehler";
var wert = msg.payload.value;
msg.topic="INSERT INTO test (Name, Wert) VALUES('"+ bez +"',"+ wert +")";
return msg
```

oder doch ganz anders!


```
msg.topic = "INSERT INTO test (Name, Wert) VALUES (?,?)";
var bez = "Zaehler";
var wert = msg.payload.value;
msg.payload = [bez,wert];
return msg
```


----------



## Spoonman (18 Dezember 2019)

Hi,

der Erste hat sofort funktioniert.

Vielen Dank.

MfG Ralf


----------

