Forum

Forum index -> SCADA - Editor -> C#, Timer, Sequenz? GA soll, wenn 24h keine Präsenz erkannt wurde 'false' werden
LuHo85 C#, Timer, Sequenz? GA soll, wenn 24h keine Präsenz erkannt wurde 'false' werden
User
Registered at: 16.08.2020
Messages: 5

Hallo,

ich habe folgendes Problem (und einige Verständnisfragen):

Alle Präsenzkanäle des Hauses sollen über ein logisches Oder verknüpft werden. Ist der Output des Oder länger als 24h 'false', so soll die GA "Anwesenheit" von 'true' auf 'false' gesetzt werden. Wird Präsenz erkannt soll der 24h Zähler jedes mal wieder resettet werden und die GA verbleibt auf 'true'. Hiermit soll automatisch erkant werden, falls sich niemand mehr im Haus befindet. Über Abend/Nacht ist es aber durchaus möglich, dass 8h keine Präsenz erkannt wird (keine Präsenzmelder in den Schalfräumen).

Ich habe bereits versucht die Logik über den "Multikonverter" in C# abzubilden (Value des Keys "PraesenzImHaus" ist der Ausgang der Oder-Verknüpfung). Allerdings führt folgender Code zum "Absturz", d.h. keine Reaktion der Komponenten des Eisbär mehr.

public override void Parse( string sInputName, Hashtable htInputValues, Hashtable htOutputValues, System.Collections.Generic.List<string> OutputNames = null )
{
try{
        int StundenZaehler = 0;
        htOutputValues["AnwesenheitStatus"] = true;

        while (!Convert.ToBoolean(htInputValues["PraesenzImHaus"]))
        {
            for (int n = 1; n <= (60 * 60); n++) //Warte 1h; Pausiere den Thread aber jeweils nur für 1 Sekunde  
            {
                System.Threading.Thread.Sleep(1000);
            }
            StundenZaehler += 1;

            if (StundenZaehler > 24)
                htOutputValues["AnwesenheitStatus"] = false;
            else
                htOutputValues["AnwesenheitStatus"] = true;
        }
    }
    catch (Exception) { } 
}

Anschließend habe ich es mit dem Timer versucht. Dieser scheint bei der Impulsdauer aber auf 18h beschränkt zu sein, da es mir nicht möglich war hier größere Werte einzutragen. Beim Timer hätte sich die "Abwesenheit" über Nacht zum retriggern des Timers angeboten, da ein "Dauer-True" ebenfalls zum Ablauf der Impulsdauer führt.

Was ist der "goldene" Weg zur Lösung der Aufgabenstellung? Können neben der Parse-Methode im Multikonverter weitere Methoden hinzugefügt werden (die sich ggf. gegenseitig aufrufen?) Gibt es zur Erlaubten Syntax des Multikonverters eine Doku?

 

Vielen Dank und viele Grüße,

Lukas

17.11.2020 18:59
DanielBack Re: C#, Timer, Sequenz? GA soll, wenn 24h keine Präsenz erkannt wurde 'false' werden
User
Registered at: 16.11.2017
Messages: 164

Hallo Lukas,

Den Multikonverter können Sie in diesem Fall nicht einsetzen. Wird der Multikonverter-Code vom EisBär aufgerufen, wird dieser erst vollständig abgearbeitet und springt dann erst wieder zurück zur eigentlichen EisBär-Funktion.

Ich würde die Komponente "Automatisch rücksetzen" verwenden. In den Eigenschaften können Sie dann die Laufzeit auf 86400 Sekunden einstellen und das Retriggern aktivieren. Auch haben Sie dann den Vorteil, dass die Restlaufzeit angezeigt werden kann.

Alternative dazu wäre es auch mit der Sequenz realisierbar.

Mit freundlichen Grüßen,

Daniel Back


Mit freundlichen Grüßen, Daniel Back
18.11.2020 14:00
LuHo85 Re: C#, Timer, Sequenz? GA soll, wenn 24h keine Präsenz erkannt wurde 'false' werden
User
Registered at: 16.08.2020
Messages: 5

Hallo Herr Back,

 

vielen Dank für die schnelle Beantwortung.

Wann wird beim Multikonverter die Ausführung des Codes gestartet? Ich nehme an, sobald sich einer der Eingangs-Values ändert? Dann wird der Code einmal durchlaufen und zurück "in den Eisbär gesprungen". Bis ber nächsten Änderung eines Eingangs-Values die Funktion wieder aufgerufen wird... Heißt das im Umkehrschluss, dass der Code des Multikonverters nicht allzu komplex werden sollte, da es sonst Performance-Probleme geben könnte?

 

Viele Grüße,

Lukas Holl

18.11.2020 20:04
DanielBack Re: C#, Timer, Sequenz? GA soll, wenn 24h keine Präsenz erkannt wurde 'false' werden
User
Registered at: 16.11.2017
Messages: 164

Hallo Herr Holl,

Ja, es ist genau so, wie Sie es beschreiben. Durch Änderungen an einem beliebigen Eingang der Komponente, wird der Code ausgeführt. Der EisBär bietet so viele Möglichkeiten, dass ein Multikonverter nur in seltenen Fällen zum Einsatz kommen muss.

 


Mit freundlichen Grüßen, Daniel Back
19.11.2020 08:56
Log in