Update: TWS Custom Logic Referenz V4.1 (Kontext für AI & Community) + Tipps & Beispiele
Hallo zusammen,
aufbauend auf der Idee einer umfassenden Referenzdatei für TWS Custom Logic (V4.0) und inspiriert von den Diskussionen und Beispielen hier im Forum (wie der Bewässerungssteuerung von Hans Martin), stellen wir heute eine aktualisierte Version V4.1 dieser Referenz vor.
Diese Version wurde durch intensives Testen, gemeinsames Debugging (vielen Dank an eib-eg / Georg S. für das Testen & den Input!) und die Analyse von KB-Artikeln verfeinert.
Zweck: Eine gemeinsame Wissensbasis – auch für KI-Helfer!
Diese Datei dient nicht nur als Nachschlagewerk für uns Menschen, sondern hat sich als extrem nützlich erwiesen, wenn man mit AI-Assistenten (wie ChatGPT, Claude etc.) an Custom Logic arbeitet.
Warum? Die Timberwolf-Logik hat ihre Eigenheiten (Syntax, verfügbare Module, Persistenz). Indem man einer AI diese Referenzdatei als Kontext gibt, "versteht" sie die TWS-spezifischen Regeln viel besser und kann schneller korrekten, funktionierenden Code generieren und bei der Fehlersuche helfen. Unsere Tests haben gezeigt, dass dies den Entwicklungsprozess erheblich beschleunigen kann!
Kollaboratives Update: Die Idee ist, diese Referenzdatei gemeinsam aktuell zu halten. Wenn jemand neue nützliche Patterns, Workarounds oder korrigierte Modul-Beispiele hat, können wir diese in zukünftigen Versionen (V4.2 etc.) integrieren und hier teilen. So profitieren alle – und auch unsere AI-Helfer lernen dazu!
Neuerungen & Highlights in V4.1:
Deutlich erweiterte Debugging-Tipps: Basierend auf häufigen Fehlern (siehe Liste unten!).
Präzisierte Modul-Syntax: Vor allem bei Comparator (Parameter je nach Modus!) und CalcFormula (Formel muss in Level-Variable!).
Wichtige Patterns:
Nutzung der $Error? Variable zur Laufzeit-Fehlererkennung.
Ein Pattern zum Schutz vor Division durch Null beim Ratio-Modul.
Das _Alt-Suffix Pattern für selbstgebaute Zustandsspeicher (via Latch).
Statemachine Beispiel: Ein grundlegendes Beispiel für die Syntax dieses mächtigen Moduls.
Weitere Modul-Beispiele: Syntax für Interpolation, Statistic, Step etc. ergänzt.
Not-Workaround: Verwendet konsequent den Comparator-Workaround für die logische Negation, da das Not-Modul in Tests Probleme machte.
Die wichtigsten Debugging-Tipps aus V4.1:
// WICHTIGE TIPPS & HÄUFIGE FEHLER (V4.1 - Aktualisiert & Erweitert):
// --------------------------------------------------------------------------
// 1. KOMMASETZUNG: Fehlerquelle #1!
// a) KEIN Komma nach dem LETZTEN Element in einem Array [...]. (Level, Module, Input, Output)
// b) EIN Komma ZWISCHEN den Hauptblöcken (`Level`], `"Module"`, etc.). Fehler oft erst im nächsten Block!
// c) KEIN Komma nach dem letzten Key-Value-Paar im Hauptobjekt (`}`).
// 2. UNDEFINIERTE VARIABLEN: Jede `$Variable` muss im "Level"-Block definiert sein.
// 3. UNBEKANNTE MODULE: Namen exakt (Groß/Kleinschreibung!).
// 4. DATENTYPEN: Auf korrekte Typen achten (float, integer, bool, string). String braucht oft Längenangabe (z.B. `,64`).
// 5. LATCH-MODI & TRIGGER: Mode 0 (Pegel) mit `$KonstTrue` als Trigger ist häufig für Persistenz über Zyklen.
// 6. STATEFUL MODULE & PERSISTENZ: `Latch`, `PID`, `Monoflop`, `Hobbs`, `Ramp`, `Statemachine` speichern Zustände.
// 7. `_Alt` SUFFIX PATTERN: Um eigene Zustände (Zähler, FF, etc.) über Zyklen zu speichern: Berechne neuen Wert in `$Calc_X_Neu`, schreibe diesen per `Latch` (Mode 0, Trigger `$KonstTrue`) in `$State_X_Alt`. Im nächsten Zyklus steht der alte Wert in `$State_X_Alt` zur Verfügung.
// 8. AUSFÜHRUNGSREIHENFOLGE: Module oben nach unten. Ergebnis nur von Modulen *darüber* nutzbar.
// 9. PARSER-EMPFINDLICHKEIT: Kommentare an "ungewöhnlichen" Stellen (direkt vor `]`) vermeiden.
// 10. `CalcFormula`: Die Formel (z.B. "X1 + X2") MUSS in einer String-Variable im `$Level`-Block stehen! Der Modulaufruf referenziert dann diese Variable.
// 11. `Comparator` PARAMETER: Die Struktur des Schwellwert-Parameters hängt vom Modus ab!
// - Modi mit *einem* Schwellwert (0-5): Parameter ist die Variable direkt (z.B. `$Schwelle`).
// - Modi mit *zwei* Schwellwerten (Hysterese): Parameter ist ein Array (z.B. `["$Unten", "$Oben"]`).
// -> Falsche Struktur führt zu "Level index has wrong type" Fehlern!
// 12. `$Error?` VARIABLE: Definiere `["$Error?", "bool", false]` im Level und `["Err","Fehler","$Error?","ce"]` im Output. Der Server setzt `$Error?` auf TRUE, wenn zur Laufzeit ein Fehler auftritt (z.B. Division durch Null). ESSENZIELL fürs Debugging!
// 13. LOGIK PAUSIERT (Gelber Rand): Wenn eine Logik im TWS-Editor einen gelben statt grünen Rand hat, ist sie pausiert und wird NICHT ausgeführt. Inputs bleiben auf Default, Outputs ändern sich nicht. Aktivieren nicht vergessen!
// 14. COPY/PASTE FEHLER: Unsichtbare Zeichen oder falsche Zeilenenden können den Parser stören. Code im Zweifel über einen einfachen Texteditor (Notepad etc.) zwischenkopieren.
// 15. NEGATION: Logisches NICHT geht **NICHT** mit `-`. Nutze das `Not`-Modul (falls es funktioniert) oder als Workaround `Comparator` mit Mode 0 gegen `$KonstFalse`. Diese Referenz verwendet den Workaround.
// 16. `$VAR<Inhibit?>`: Empfohlener Name für den boolschen Input des `Break`-Moduls.
// 17. `Statemachine` Persistenz: Der Zustand der Statemachine muss i.d.R. persistent gespeichert werden. Sicherster Weg: Output der SM in `$Calc_SM_Neu`, dann per `Latch` nach `$State_SM_Alt`.
Der Code (V4.1):
Der vollständige, kommentierte und (auf TWS 2600/3500 mit Not-Workaround) erfolgreich speicherbare Code befindet sich in der angehängten Datei TWS_CustomLogic_Reference_V4_1.txt.
Timberwolf Custom Logic - Umfassender Referenzcodeblock (V4.1).txt
Nutzung & Feedback:
Nutzt diese Datei gerne als Nachschlagewerk und als Kontext für eure AI-Assistenten. Wenn ihr Fehler findet, Verbesserungen habt oder weitere nützliche Beispiele (insbesondere für Statemachine!) beisteuern könnt, teilt es bitte hier, damit wir die nächste Version erstellen können!
Lizenz:
Der Code wird gemäß der TOLL ("Timberwolf Open Logikblock License") zur Verfügung gestellt (siehe
https://wrgt.news/TOLL).
Viele Grüße,
eib-eg (Georg)
von der AI geschrieben
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.