Hallo Hans,
erlaube mir, Deine Anfrage als Versuchsballon für eine LLM-Antwort (Gemini mit Timberwolf-Wissen) zu gebrauchen.
Inalt OHNE GEWÄHR
Gruß
Franky
======= GEMINI 2.5 PRO START =======:
Hallo Hans,
das ist eine gute Frage und ein wichtiger Punkt, wenn man von Standard-Logikbausteinen zu Custom-Logiken wechselt! Du hast Recht, die praktischen Ausgangsfunktionen der Standardbausteine (wie Verzögerungen, Mindesteinschaltdauer, Textmapping etc.) sind in Custom-Logiken nicht als
separate Funktionen verfügbar, die man einfach "anhängt".
Stattdessen baust du diese Funktionalität explizit mit den vorhandenen Custom-Logik-Modulbausteinen nach. Die Standardbausteine kapseln diese Logik intern, während du sie in Custom-Logik Schritt für Schritt selbst definierst.
Hier ist, wie du die beiden von dir genannten Funktionen nachbilden kannst:
1. Einschaltverzögerung (On-Delay):
Ziel: Ein Ausgang soll erst dann TRUE werden, wenn eine Eingangsbedingung für eine bestimmte Zeit
durchgehend TRUE war.
Modul: Der Schlüssel hierfür ist der
Monoflop-Baustein (dies entspricht Timer1 bis Timer8 in den Standardbausteinen, wie du schon richtig erkannt hast).
Logik:
Du nimmst deine ursprüngliche Bedingung (das TRUE/FALSE-Signal, das verzögert werden soll) als $Set-Eingang für einen Monoflop.
Als $Reset-Eingang nimmst du die
invertierte Bedingung (oder $ConstFalse, je nach Anforderung).
Wähle die passende SetOption für den Monoflop. Für eine reine Einschaltverzögerung (startet nur bei steigender Flanke, nicht retriggerbar) ist Option 2 oft passend.
Die Verzögerungszeit gibst du als $Time-Parameter an.
Der $OutB-Ausgang des Monoflop wird TRUE, wenn der Timer abgelaufen ist.
Dein
finaler, verzögerter Ausgang wird dann typischerweise durch eine
And-Verknüpfung aus der
ursprünglichen Bedingung UND dem $OutB-Ausgang des Monoflop gebildet. So stellst du sicher, dass der Ausgang nur TRUE ist, wenn die Bedingung
immer noch anliegt,
nachdem die Verzögerungszeit abgelaufen ist.
Beispiel-Snippet (vereinfacht):
Code: Alles auswählen
"Module": [
// ... vorherige Logik ...
// Timer für Einschaltverzögerung (startet bei steigender Flanke von $InputCondition, nicht retriggerbar)
["Monoflop", "$InputCondition", "-$InputCondition", "$_TimerOutput", "$param_Verzoegerungszeit", 2],
// Finaler Ausgang: Nur TRUE, wenn Input-Bedingung UND Timer abgelaufen
["And", ["$InputCondition", "$_TimerOutput"], "$OutputVerzoegert"]
// ... weitere Logik ...
],
"Level": [
["$InputCondition", "bool", false], // Deine ursprüngliche Bedingung
["$param_Verzoegerungszeit", "float", 5.0], // Deine Verzögerungszeit in Sekunden
["$_TimerOutput", "bool", false], // Interner Timer-Status
["$OutputVerzoegert", "bool", false] // Dein finaler, verzögerter Ausgang
// ... weitere Variablen ...
]
2. Mapping zu Text:
Ziel: Einen logischen Zustand (z.B. TRUE/FALSE, oder eine Zahl wie einen State) in einen Text umwandeln.
Modul: Der
Multiplexer-Baustein ist hierfür ideal.
Logik:
Definiere die gewünschten Texte als Konstanten (Strings) im Level-Array (z.B. "$ConstTextAn", "$ConstTextAus").
Verwende den Zustand, den du mappen möchtest (z.B. dein verzögertes TRUE/FALSE-Signal $OutputVerzoegert aus dem vorherigen Beispiel) als $Select-Eingang für den Multiplexer. Ein bool wird dabei intern als 0 (FALSE) oder 1 (TRUE) behandelt.
Im Eingangs-Array des Multiplexer listest du die Text-Konstanten in der Reihenfolge auf, die dem Index des $Select-Wertes entspricht (Index 0 für FALSE, Index 1 für TRUE).
Der $Out-Ausgang des Multiplexer enthält dann den ausgewählten Text.
Beispiel-Snippet (vereinfacht):
Code: Alles auswählen
"Module": [
// ... vorherige Logik (z.B. die Verzögerung) ...
// Mapping des verzögerten Zustands zu Text
["Multiplexer", ["$ConstTextAus", "$ConstTextAn"], "$OutputText", "$OutputVerzoegert"]
// ... weitere Logik ...
],
"Level": [
["$OutputVerzoegert", "bool", false], // Das Ergebnis der Verzögerungslogik
["$ConstTextAn", "string", "Lüfter AN"], // Text für TRUE
["$ConstTextAus", "string", "Lüfter AUS"], // Text für FALSE
["$OutputText", "string", "Lüfter AUS"] // Der finale Text-Ausgang
// ... weitere Variablen ...
],
"Output": [
["Angezeigter Text", "Status als Text", "$OutputText", "c"]
// ... andere Outputs ...
]
Zusammenfassend: Du kombinierst die Grundbausteine (Monoflop, And, Multiplexer, Latch, etc.), um die gewünschte Logik Schritt für Schritt aufzubauen, anstatt eine einzelne Funktion am Ausgang zu konfigurieren.
Tipps:
Konstanten definieren: Definiere feste Werte wie TRUE, FALSE oder Texte wie oben gezeigt im Level-Array. Das macht den Code lesbarer.
Dokumentation nutzen: Schau dir die Details der einzelnen Modulbausteine (Monoflop, Multiplexer, And, Latch usw.) in der Doku an.
DokMode / Grafana: Nutze den DokMode (Grafana-Ansicht im Logikeditor), um die Zwischenwerte ($_TimerOutput, $OutputVerzoegert etc.) zu beobachten. Das hilft enorm beim Debuggen!
Ich hoffe, das hilft dir weiter! Lass es uns wissen, wenn du konkretere Fragen zu deiner Logik hast.
Viele Grüße!
======= GEMINI 2.5 PRO ENDE =======:
Timberwolf 3500L ID:1642; Support-VPN für ElabNET ist an.