Trends
Trends – Live-Daten mit CODESYS verbinden (Generate Code Dokumentation)
Diese Anleitung zeigt, wie du mithilfe des Buttons „Generate Code“ Live-Daten aus einer SPS – z. B. einem CODESYS-Projekt – mit dem PLCVisu-Trendmodul verbindest. Ziel ist es, Messwerte (z. B. Temperaturen, Drücke, Füllstände) zyklisch in eine Datenbank zu schreiben, die anschließend im Trend Viewer visualisiert wird.
Ziel
- Live-Daten aus CODESYS automatisch in eine Trend-Datenbank schreiben
- Visualisierung dieser Daten in Echtzeit auf einem HMI, z. B. WAGO WP400
- Minimaler Konfigurationsaufwand dank Code-Generator in PLCVisu
Schritt-für-Schritt-Anleitung
1. Code generieren
Klicke im Trend-UI auf „Generate Code“ – der generierte Code wird automatisch kopiert und kann direkt in dein CODESYS-Projekt eingefügt werden.
(* DECLARATION SECTION *)
trendsFBlinetrend1Instance: PLCVisu.trendsFB; (* FB instance for current trend *)
slinetrend1Columns:STRING(4096):= 'dataset1';
slinetrend1Values:STRING(4096);
(* CODE SECTION *)
(* Initiate the instace parameters: path_to_file, max_records (cyclic buffer) *)
trendsFBlinetrend1Instance.init('$$PLCVisuDB$$/trends/linetrend1.db', {{max_records}});
(* write one record into the DB *)
slinetrend1Values := PLCVisu.ELA_UTIL.CONCAT_4096('"', REAL_TO_STRING({{dataset1_value}}));
slinetrend1Values := PLCVisu.ELA_UTIL.CONCAT_4096(slinetrend1Values, '"');
trendsFBlinetrend1Instance.write('',slinetrend1Columns, slinetrend1Values);
(* write delimiter line - optional - i.e. end of the batch -> this will cut the line in front-end view *)
(* trendsFBlinetrend1Instance.writeFinish(''); *)
Optional:
MitwriteFinish('')kannst du visuelle Trennlinien im Trend erzeugen, z. B. zur Kennzeichnung von Chargenwechseln.
2. Sensorwert einfügen
Ersetze GVL.MySensor durch deine reale SPS-Variable, z. B.:
REAL_TO_STRING(GVL.TemperaturSensor1)
Hinweise:
- Die Variable muss als
REALdeklariert sein. - Für andere Datentypen verwende den passenden Konverter:
INT_TO_STRING(...)für IntegerBOOL_TO_STRING(...)für Booleans usw.
3. Verbindung zwischen CODESYS & PLCVisu herstellen
Damit PLCVisu die SPS-Daten visualisieren kann, sind folgende Schritte nötig:
In CODESYS:
- Symbolkonfiguration öffnen
- Die genutzten GVL-Variablen markieren
- „Für externen Zugriff verfügbar“ aktivieren
- Gegebenenfalls Symboldatei exportieren
In PLCVisu:
- Die Verbindung zum SPS-System im Projekt konfigurieren:
PLCVisu://localhostfür lokale Testsopc.tcp://<IP>:4840für OPC UA
- Anschließend über den Tag-Browser die Werte zuweisen
4. Datenbank initialisieren
trendsFBlinetrend1Instance.init('$$PLCVisuDB$$/trends/linetrend1.db', 10000);
- Erstellt (oder öffnet) die Datenbank-Datei im Trend-Verzeichnis
10000legt die maximale Anzahl an gespeicherten Werten fest- Wird einmalig beim Start benötigt (z. B. im Init-Zyklus)
5. Werte zyklisch schreiben
Der folgende Code schreibt bei jeder Ausführung den aktuellen Sensorwert:
slinetrend1Values := PLCVisu.ELA_UTIL.CONCAT_4096('"', REAL_TO_STRING(GVL.TemperaturSensor1));
slinetrend1Values := PLCVisu.ELA_UTIL.CONCAT_4096(slinetrend1Values, '"');
trendsFBlinetrend1Instance.write('', 'dataset1', slinetrend1Values);
Typische Anwendung:
- In einem zyklischen Task (z. B. alle 1 s)
- Oder über einen Timer-FB
Übersicht: CODESYS ↔ PLCVisu Trend
| Schritt | Zweck |
|---|---|
| Generate Code | Basisstruktur erzeugen |
| Sensorwert einfügen | GVL-Variable mit *_TO_STRING(...) konvertieren |
| Verbindung aktivieren | Symbolkonfiguration & PLCVisu-Datenquelle einrichten |
| .init() | Datenbank anlegen und Puffergröße festlegen |
| .write() | Messwerte im Zyklus eintragen |
| Optional: .writeFinish | Visuelle Trennlinien erzeugen (z. B. Batch-Ende) |
Fehlerbehebung
| Problem | Mögliche Ursache |
|---|---|
| Keine Daten im Trend sichtbar | .init() fehlt oder Sensorwert = leer |
Fehler bei .write() |
Falsches Format (z. B. fehlende " in der CSV-Zeile) |
| Datenbank nicht erstellt | Pfadangabe fehlerhaft oder keine Schreibrechte |
| Keine Verbindung zur SPS | Symbolkonfiguration nicht aktiviert oder IP falsch |
Empfehlung
- Nutze den generierten Code als Basis – passe
dataset1, Variablennamen & Pfade individuell an - Mehrere Signale? → Mehrere
.write()-Zeilen oder mehreredatasetXdefinieren - Trends testen: Mit einem einfachen REAL-Wert starten und UI prüfen