Lüftersteuerung will nicht so wie ich will

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Lüftersteuerung will nicht so wie ich will

      Hallo Männer!
      Habe meine Aquariumsteuerung inzwischen etwas erweitert. Bis auf die Erweiterung der Lüftersteuerung passt alles.
      Folgende Aufgabenstellung:
      Die Ventilatoren sollen sich zweimal pro Tag für mind. 1 Stunde einschalten. Sinn und Zweck ist dass das in der Abdeckung gesammelte Kondenswasser entfernt wird. (Funktioniert auch)
      Gleichzeitig habe ich aber die Lüfter vorgesehen um bei zu hoher Wassertemperatur diese dadurch wieder zu senken. (Funktioniert auch)
      Nun mein Problem:
      Ich schaffe es einfach nicht dass diese beiden Funktionen einwandfrei miteinander Funktionieren!
      Derzeit ist es so dass wenn die Wassertemperatur nicht zu hoch ist, dann schalten sich die Ventilatoren zu den vorgesehenen Zeiten gar nicht ein! Ist mir auch klar warum!
      Wenn ich es so programmiere dass die Ein- und Ausschaltzeiten richtig funktionieren, dann wird die Fan_off Temperatur ignoriert.
      Das heisst:
      Bei 25,6 °C werden die Vantilatoren eingeschaltet und bei 25,5 °C wieder aus. Nicht wie vorgesehen bei der Fan_off Temperatur von 25,4 °C (= Solltemperatur)
      Desshalb schaltet sich der Fan andauerd ein und aus. Hat ja nun keine Hysterese mehr!
      Hat jemand eine Lösung für mein Problem?
      Es ist warscheinlich nur eine Kleinigkeit, aber ich sitze seit zwei Tagen und komm nicht auf die Lösung!!!
      AQ_anti_Schimmel.bas
    • Quellcode

      1. Fansteuerung:
      2. If _hour >= Hour_ein_3 And _hour < Hour_aus_3 Or _hour >= Hour_ein_4 And _hour < Hour_aus_4 Then
      3. Fan = 1
      4. Else
      5. If Dg >= Fan_on_i Then
      6. Fan = 1
      7. Else
      8. Fan = 0
      9. End If
      10. End If
      11. Return
      Alles anzeigen
      Wo kommt nun die Ausschalttemperatur hinein?
      Weil ohne Berücksichtigung der Ausschalttemperatur habe ich wieder keine Hysterese!

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von avralfred ()

    • avralfred schrieb:

      Wo kommt nun die Ausschalttemperatur hinein?
      Ich komm mit deinem Aküfi nicht zurecht, ichversuch das mal mit sprechenden Namen.

      Quellcode

      1. If (die Zeit in der die Lüfter 1h laufen sollen) Then
      2. Fan = 1
      3. Else
      4. If Ist_Temperatur > Einschalttemperatur Then
      5. Fan = 1
      6. End If
      7. If Ist_Temperatur < Ausschalttemperatur Then
      8. Fan = 0
      9. End if
      10. End If
      Als Einschalttemperatur legst du 25,6 und als Ausschalttemperatur deine 25,4 fest, oder was du als Hysterese willst.

      Natürlich solltest du dein Programm erstmal aufräumen, Return z.B. mitten im If-Else geht nicht gut, das gehört ans Ende der Sub.
    • avralfred schrieb:

      Die Hauptschleife ist auch eine Sub! Main:
      Die Hauptschleife ist eine Hauptschleife und keine Sub. Also lass das Main: und Return weg.

      Mein Ansatz wäre folgender:

      BASCOM-Quellcode

      1. Dim Stunde As Word , Fan_on As Bit , Fan_one_hour As Bit
      2. Stunde = 3600 'In Sekunden
      3. Fan_one_hour = 0
      4. Fan_on = 0
      5. Do
      6. If _hour = _hour_ein And _min = 0 And _sec = 0 Then
      7. Stunde = 3600
      8. Fan_one_hour = 1
      9. End If
      10. If Stunde = 0 Then Fan_one_hour = 0
      11. If Ist_temp > Soll_temp Then Fan_on = 1
      12. If Ist_temp <= Soll_temp Then Fan_on = 0
      13. If Fan_one_hour = 1 Or Fan_on = 1 Then
      14. Fan = 1
      15. Else
      16. Fan = 0
      17. End If
      18. Loop
      19. End
      20. Sectic:
      21. If Fan_one_hour = 1 Then Decr Stunde
      22. Return
      Alles anzeigen
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Keine Ahnung wo ich das mit dem "Delay" her hatte???
      War der Meinung damit kann ich mir das waitms 50 zur Tastenentprellung "sparen"- und macht doch viel mehr her!

      Nun habe ich in der Hilfe gelesen:

      Use DELAY to wait for a short time.
      The delay time is ca. 1000 microseconds.

      Also habe ich jetzt "Delay" wieder durch "waitms 50" ersetzt und dabei gleich welche entfernt die sinnlos waren.

      Das Config Debounce = 30 brauche ich in diesem Forum sicher nicht erklären!

      Michael schrieb:

      Ich würde Zeile 1424 und Zeile 1425 tauschen. Damit der Wert erst begrenzt wird und danach ausgegeben.
      Im Betrieb fällt es zwar nicht wirklich auf dass die beiden Zeilen vertauscht sind, aber dein Vorschlag macht Sinn!

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von avralfred ()

    • avralfred schrieb:

      Also habe ich jetzt "Delay" wieder durch "waitms 50" ersetzt und dabei gleich welche entfernt die sinnlos waren.

      Das Config Debounce = 30 brauche ich in diesem Forum sicher nicht erklären!
      Das verstehe ich jetzt nicht. Config Debounce = 30 sind 30ms Prellzeit.
      Config debounce = 50 sind 50ms Prellzeit,damit entfällt Waitms 50
      zB. Waitms:

      If Pina.1 = 0 Then
      Waitms 50
      if Pina.1 = 0 Then "Gosub machwas"
      End if
      Also Debounce oder Waitms zur Tasterentprellung.
    • djmsc schrieb:

      Nein. Du musst doch nach der Wartezeit prüfen, ob dein Taster immer noch NULL ist.
      Das ist Ansichtssache!
      Muss man nicht unbedingt Prüfen! - Kann man aber!
      Eine Taste die kürzer als 50 ms gedrückt wird gilt bei mir nicht als wirklich gedrückt. Das würde ich dann eher als kurz unabsichtlich berührt einstufen.
      Aber das ist wie gesagt Geschmackssache.
      Ich mache es jedenfalls immer so und bin mehr als zufrieden damit!
    • Das Entprellen ist doch nur interessant wenn der folgende code so kurz ist, dass er ein weiteres Mal durchlaufen werden könnte, wenn nach der Flanke gefragt wird. Im Normalfall mache ich nach dem code, den der Tastendruck auslöst, eine Abfrage, ob die Taste wieder losgelassen wurde, dann ist Entprellen auch kein Thema, der code wird dann pro Tastendruck durchlaufen.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch schrieb:

      Im Normalfall mache ich nach dem code, den der Tastendruck auslöst, eine Abfrage, ob die Taste wieder losgelassen wurde, dann ist Entprellen auch kein Thema, der code wird dann pro Tastendruck durchlaufen.
      Ja - in den meisten Fällen ist das wohl die beste Lösung!
      Wenn man aber z.B. einen Wert um VIEL erhöhen will und bei jedem Tastendruck der Wert um 1 erhöht wird, ist es praktischer wenn man gleich auf der Taste bleiben kann bis der gewünschte Wert erreicht ist.
      Da funktinoniert diese Methode nicht - oder?
    • Debounce bietet erst mal keine repeat-Funktionalität. Da wird wirklich geprüft, ob die Taste wieder losgelassen wurde, bevor der code erneut ausgeführt wird. Wenn man das selbst in der Hand hat, ist man natürlich flexibler.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------