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

Spoonman

Level-1
Beiträge
86
Reaktionspunkte
7
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo alle zusammen,

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

node1.PNG


node2.PNGHier lese ich die SPS-Variable aus. Diese heißt "temp". Schalte ich dies auf eine Anzeige im Dashboard wird mir der aktuelle Wert angezeigt.
node3.PNGDer Quellcode in der Funktion sieht jetzt folgendermaßen aus:
Code:
msg.topic="INSERT INTO temperature(temp) VALUES(12)";
msg.payload=[msg.payload.value];
return msg;
node4.PNG

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
 

Anhänge

  • node5.PNG
    node5.PNG
    17 KB · Aufrufe: 32
  • node5.PNG
    node5.PNG
    17 KB · Aufrufe: 22
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
 
Hi Tommy,

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

Gruß Ralf
 
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!
 
Zuletzt bearbeitet:
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
 
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
 
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,

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

Nochmals vielen Dank für deine Hilfe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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:

Code:
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

Code:
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
 
So?

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

oder so

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

oder doch ganz anders!

Code:
msg.topic = "INSERT INTO test (Name, Wert) VALUES (?,?)";
var bez = "Zaehler";
var wert = msg.payload.value;
msg.payload = [bez,wert];
return msg
 
Zuletzt bearbeitet:
Zurück
Oben