Schalter in Abhängigkeit eines Zustandes verwenden

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von tbbear.

    Schalter in Abhängigkeit eines Zustandes verwenden

    Wie würdet Ihr folgendes Problem lösen:
    In meinem Gateway soll ein Schalter je nach Zustand einer Variablen geschaltet werden. Die Variable wird via einem Timer alle 60 sec neu ermittelt.
    Ändert sich nun die Variable (z.B. von Aus auf EIN) soll nicht sofort geschaltet werden sondern nur wenn der Zustand der Variablen min. 10 minuten
    gleich bleibt. Das gleiche gilt beim Ausschalten.
    (Hintergrund: Mein Programm steuert eine Poolpumpe in Abhängigkeit der Eigenstromproduktion meiner Solarnlage. Wenn genug Eigenstrom für mindestens
    10 min vorhanden, dann Pumpe an. Wenn Sonne weg, dann nach 10 min Pumpe aus. Ich will damit verhindern das die Pumpe wegen jeder kleinen Wolke aus
    und eingeschaltet wird.) :/
    Wenn das Update kommt, abfragen, ob sich die Variable geändert hat. Wenn ja, einen Timer mit Interval = 10 * 60 * 1000 setzen (und den alten logischerweises löschen).
    Im Elapsed Event die Pumpe triggern.
    Da du aber schon nen Timer hast, kannst du auch einfach bei UNgleichheit DateTime.Now irgendwo speichern, und danach in der Routine fragen ob DateTime.Now - lastChange >= 10min sind.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Danke für deine Anregung, würde is so gehen (leider schlechtes Wetter hier zum testen...


    If Er > Ve Then
    If lastD.AddSeconds(OnVal) > DateTime.Now Then
    If Val4Id(ID1) = "0" Then
    WriteLog(NO_ERROR, "SR-Gate", "T1_Tick", "Switch ON HeatPump")
    Set_RWE_on(ID1)
    Else
    WriteLog(NO_ERROR, "SR-Gate", "T1_Tick", "HeatPump allready ON")
    End If
    Else
    WriteLog(NO_ERROR, "SR-Gate", "T1_Tick", "No need to switch on HeatPump")
    End If
    Else
    If lastD.AddSeconds(OffVal) > DateTime.Now Then
    If Val4Id(ID1) = "1" Then
    WriteLog(NO_ERROR, "SR-Gate", "T1_Tick", "Switch OFF HeatPump")
    Set_RWE_off(ID1)
    Else
    WriteLog(NO_ERROR, "SR-Gate", "T1_Tick", "HeatPump allready OFF")
    End If
    Else
    WriteLog(NO_ERROR, "SR-Gate", "T1_Tick", "No need to switch off HeatPump")
    End If
    End If
    Wenn du Code einfügst gibt es im Editor oben links einen Button mit "VB.net" wenn du den Code innerhalb der Klammern einfügst verbessert sich die Lesbarkeit enorm.

    VB.NET-Quellcode

    1. If Er > Ve Then
    2. If lastD.AddSeconds(OnVal) > DateTime.Now Then
    3. If Val4Id(ID1) = "0" Then
    4. WriteLog(NO_ERROR, "SR-Gate", "T1_Tick", "Switch ON HeatPump")
    5. Set_RWE_on(ID1)
    6. Else
    7. WriteLog(NO_ERROR, "SR-Gate", "T1_Tick", "HeatPump allready ON")
    8. End If
    9. Else
    10. WriteLog(NO_ERROR, "SR-Gate", "T1_Tick", "No need to switch on HeatPump")
    11. End If
    12. Else
    13. If lastD.AddSeconds(OffVal) > DateTime.Now Then
    14. If Val4Id(ID1) = "1" Then
    15. WriteLog(NO_ERROR, "SR-Gate", "T1_Tick", "Switch OFF HeatPump")
    16. Set_RWE_off(ID1)
    17. Else
    18. WriteLog(NO_ERROR, "SR-Gate", "T1_Tick", "HeatPump allready OFF")
    19. End If
    20. Else
    21. WriteLog(NO_ERROR, "SR-Gate", "T1_Tick", "No need to switch off HeatPump")
    22. End If
    23. End If


    Was für eine Hardware hast du denn, die sich mit VB programmieren lässt?
    Option strict = on

    If it's stupid and it works it ain't stupid.