[TwinCat 3] CX5140 Daten in Datenbank (SQL) speichern

naheliegend

Level-1
Beiträge
87
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich würde gerne meine CX5140 an eine Datenbank anbinden, um dort anfallende Daten in SQL zu speichern.
Auf meiner CX läuft TwinCat3.
Ich habe nur keine Ahnung, wie ich das bewerkstelligen soll.

Könnt ihr mir da helfen?

Gruß
 
Dafür musst Du die TF6420 (TC3 Database Server) nutzen. Schau mal im Infosys nach, da ist die Funktionalität recht umfangreich beschrieben. Ansonsten such hier im Forum mal nach den Stichworten SQL und Datenbank, dazu gibt es etliche Fragen/Antworten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, dort habe ich einige tolle Beispiele gefunden zu Umsetzung.

In jedem Beispiel wird von einem CurrentConfigDataBase.xml gesprochen. Das verstehe ich nicht so ganz. Ist das ein Zusatzprogramm?
 
Nein, das ist eine XML-Datei, ohne jetzt weiter in die Doku zu schauen würde ich mal vermuten, dass in dieser XML-Datei die Konfigurationseinstellungen abgelegt werden.
Nachtrag: Und nach dem Lesen wird die Vermutung auch bestätigt.
DataBaseServer.png
 
Zuletzt bearbeitet:
Das ist doch voll in Ordnung und ich danke dir für jede Hilfe.


Es gibt dort auch schöne FB, die zum schreiben von SPS Variablen genutzt werden können: https://infosys.beckhoff.de/index.p...31/tcdbserver/html/tcdbserver_sample3.htm&id=

Da heißt es dann :

Um dieses Beispiel verwenden zu können müssen Sie den Servernamen und die Authentifizierung in der XML-Konfigurationsdatei (CurrentConfigDataBase.xml) anpassen. Des weiteren müssen Sie beachten, das keine "TestDB" Datenbank vorhanden ist bevor Sie das SQLQuery.sql Script ausführen.

Das verstehe ich zum Beispiel nicht. :-)
 
Auch hier schieße ich mal ins Blaue.
Ich denke mal dass das Script SQLQuery.sql auf dem SQL-Server in einer (ich nenne es jetzt mal so) SQL-Eingabeaufforderung ausgeführt werden muss und auf diesem dann eine Datenbank mit dem Namen TestDB erstellt, die von dem Beispiel SPS-Programm genutzt wird. Existiert diese auf dem Server jedoch schon funktioniert sowohl das Script als auch später das Beispiel nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit dem Database Server Configurator konfigurierst Du nicht die Datenbank, sondern eben den TC3 Database Server (TF6420), der die Verbindung zwischen SPS und Datenbank herstellt. Diese Konfig wird dann in der Datei "CurrentConfigDataBase.xml" gespeichert und auf das Zielsystem geladen und dort aktiviert. Wobei ich es bislang noch nicht geschafft habe, von meinem Entwicklungsrechner aus mit dem in VS integrierten Konfigurator eine Konfiguration auf dem Zielrechner (auch ein CX5140) zu aktivieren (wegen angeblich fehlender Lizenz). Stattdessen mache ich das mit dem Standalone-Konfigurator direkt auf dem CX.
 
Das ist bei mir auch immer das Problem. Wenn ich eine Konfig erstellen möchte für z.B. ASCII, dann gebe ich den SPeicherpfad ein und unten auf CREATE. Jedoch meckert er : ADS-Error 0x724 oder so, dann ich keine License habe.

Was muss ich tun?
 
Wo finde ich denn den Standalone Konfigurator?

Warum funktioniert das denn nicht über den License Weg in der XAE? Im Infosys wird das auch so vorgeschlagen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schau mal auf dem CX unter C:\TwinCAT\Functions nach, da sollte es einen Ordner für den Database Server geben und in dem oder einem der Unterordner sollte der Konfigurator zu finden sein. Bevor das TF auf dem CX genutzt werden kann muss es natürlich auf diesem auch installiert sein, soweit es nicht per Default bei der Runtime vorhanden, vielleicht ist das auch das Problem von StructuredTrash.
 
Nein, das ist nicht mein Problem. Ich habe TF6420 auf Entwicklungs- und Zielrechner installiert, dann eine Triallizenz auf dem Zielrechner erzeugt und aktiviert. Das sollte eigentlich reichen, und tatsächlich war der Database Server nach einem Neustart des CX auch einmal erreichbar, danach aber nicht mehr. Danach habe ich halt auf die althergebrachte von TC2 gewohnte Weise weitergemacht. Gut, dass es den Standalone-Konfigurator noch gibt. Bin jetzt nicht mehr am Arbeitsplatz, aber ich meine, man findet den Konfigurator auch im Windows-Starmenü unter "Alle Programme/Beckhoff".
 
Wie im anderen Thema erwähnt würde ich nicht den standalone Konfiguration nutzen, sondern das XAE Supplement dann ist das nicht "ausgelagert" und das Lizenzthema sollte einfacher von Statten gehen.

Desweiteren lege ich die DB und die jeweiligen Tabellen immer manuell über (bei MS SQL) die Server Management Studio (SSMS) an. Das ist recht einfach. Am längsten habe ich benötigt um die Rechtevergabe des MS SQL korrekt einzustellen damit überhaupt eine Verbindung möglich ist. Ich beschreibe kurz was ich gemacht habe (ist sicherlich nicht die beste IT technisch sicherste Lösung aber für den ersten Test ideal).

1. User im SSMS anlegen z.b. TwinCAT mit Passwort (wichtig: nicht die Windows auth.. nutzen, sondern Benutzername und Passwort)
2. Der angelegten Datenbank mit Rechtsklick-> Sicherheit-> den User TwinCat hinzufügen und alle Berechtigungen geben
3. Das muss wohl auch gemacht werden, wieso auch immer: Der angelegten Tabelle ebenfalls mit Rechtsklick->Sicherheit den User Twincat hinzufügen

Wenn das so gemacht wurde ist alles für den User Twincat geöffnet. Man kann dann auch das SSMS schließen, neu öffnen und nicht die WinAuth Methode wählen, sondern sich mit dem neu angelegten User Twincat nun hier einloggen. Dann mal einen Eintrag in der Tabelle mache ob das funktioniert. Wenn ja weiß man, dass der User Schreibrechte hat und Leserecht. Dann geht es in Twincat. Hier alles wie lt. Doku anlegen

Hier die Doku:
https://download.beckhoff.com/downl...on/twincat3/TF6420_TC3_Database_Server_DE.pdf
Auf Seite 23 seht ihr das oben erwähnte supplement anstatt der Standalonevariante
Auf Seite 24 dann direkt die Beispielkonfig für einen SQL

Ich nutze allerdings nicht die autologging Funktion, sondern einfach den FB SQLInsertEx (oder so ähnlich). Man gibt dann einfach ein SQL Statement als String an und fertig: "INSERT INTO DB.Table (xy1, xy2,xy3) VALUES ('12','23','12')

Was mir aufgefallen ist, wenn man sehr viele Inserts hintereinander durchführt kann es sein, dass diese u.U. nicht richtig durchgeführt wurden obwohl der Baustein keinen Fehler meldet. Ich habe etwas die Ursachen gesucht und ich denke es liegt an der ODBC Schicht oder was auch immer im Hintergrund die Schnittstelle zwischen TC und DB schafft.
Um das Problem zu eliminieren habe ich folgendes gemacht:

1. Interner Puffer im TC der alle zu sendende Kommandos zwischenspeichert
2. Durchlaufen dieses Puffers und z.B. 10 Datensätze auf einmal als Bulk zusammenfassen. Das sieht dann so aus:
"INSERT INTO DB.Table (xy1, xy2,xy3) VALUES ('12','23','12'), ('12','23','12'), ('12','23','12'), ('12','23','12'), ('12','23','12'), ('12','23','12'), ('12','23','12')
Dann überträgt das System mit einem Rutsch x Datensätze und die Zugrifffrequenz nimmt deutlich ab
3. Wichtig: Die Länge des Insertstrings ist begrenzt. Mit der FB EX Variante sind glaube ich 10000 Zeichen möglich. Das muss im Code halt abgefangen werden, dass der String nicht länger wird, sonst -> Problem
 
Zurück
Oben