Problem mit Taster

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

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Hm, wird vielleicht ein Alarm in messen_b ausgelöst, der durch einen Alarm in regelung wieder zurück gesetzt wird?
      Das toggeln von Alarm finde ich nicht so praktisch, wenn Alarm, dann Alarm=1, kein Alarm, dann Alarm=0. 2* Alarm immer noch Alarm, 2*Alarm toggeln, kein Alarm. Verständlich?
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Ja - OK das mit dem toggeln ist Geschmackssache, hat aber nichts direkt mit dem nicht Auslösen des Alarms zu tun!
      Ich kann mir nicht vorstellen des es mit der Regelung zusammenhängt.
      Ich bin am Ende meiner Weisheit!
      Warum funktioniert der Alarm wenn ich eine Sub (Fehler) mit "If Err = 1" aus der main aufrufe?
      Funktioniert natürlich übrigens auch wenn ich die Sub (Fehler) aus der main mit "If Fehler.0 = 1" aufrufe!
    • In der sub vergleich kann Alarm wieder getoggelt werden, in der sub regelung nicht, hast Recht. Die sub sensor ersetzt doch jetzt die sub fehler. Die wird doch nirgens aufgerufen, oder ich hab's übersehen.

      Jetzt mach mal einen Test: setze in der sub messen_b nach dem toggle Alarm mal ein wait 5 ein. Sollte ein Fehler aufgetreten sein, dann wird Alarm gegeben und 5 Sekunden gewartet. Würde jetzt in der später folgenden sub vergleich der Alarm getoggelt werden, weil da auch auf einen Fehler reagiert wird, dann wird der Alarm nicht gleich dadurch ausgeschaltet.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Ja die Sub Sensor ist derzeit "Ausser Dienst" Es müsste aber trotzdem ein Alarm durch die sub messen_b ausgelöst werden wenn ich den Sensor ausstecke!
      Die Sub Fehler habe ich auf Sub Sensor umbenannt weil ich sonst die flag "Dim fehler as bit" nicht machen hätte können!
      OK den Test mit dem Wait 5 mache ich morgen .... und melde mich dann wieder was dann passiert.
      Danke und gute Nacht für heute
    • Danke für die Idee mit dem Programmablaufplan! Habe zwar kein Tool aber ich habe nur mal auf Papier die Sub Messen_b aufgezeichnet.
      Dann war mir klar dass das so nicht funktionieren kann.
      Habe nun das ganze anders gelöst - und - bis jetzt funktioniert es prima!
      Ich kann ja nur den Sensor ausstecken und nach etwa 4 Sekunden ertönt der Alarm mit der Meldung dass der Sensor fehlt bzw. nicht reagiert!
      Aber wie kann ich Testen ob bei falscher Checksum auch Alarm ausgelöst würde? (Unabhängig davon ob sinnvoll oder nicht)

      Hier die neue Variante des Programms
      Heizen_Kuehlen_0910.bas
    • avralfred schrieb:

      Danke für die Idee mit dem Programmablaufplan! Habe zwar kein Tool...

      Tool zum Erstellen von Struktogrammen (Nassi-Shneiderman-Diagrammen)

      zu deinem Programm
      In der sub messen_b wird versucht, den Fühler auszulesen, wenn es klappt, dann alles ok, wenn nicht, wird erst beim nächsten Durchlauf nochmals versucht. Derweil zählst du woanders (timerinterrupt sekunden_tick) bis 5, wenn ein Fehler aufgetreten ist und reagierst dann. Ist irgendwie unübersichtlich.
      Um die checksum zu testen könntest du den Übertragungsweg 'schlechter' machen, den pullup vergrößern, oder einen Widerstand in die Leitung einbauen. Irgendwann wird die Übertragung nicht mehr klappen, aber ob das dann an einer falschen checksum liegt, oder der Fühler nicht mehr erkann wird, keine Ahnung.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Ein kleiner Fehler hat sich noch eingeschlichen gehabt: Wenn die Checksum nicht gepasst hat ist der Zähler "Versuche" gestartet
      und hat auch nicht mehr aufgehört wenn beim nächsten durchlauf die Checksum wieder gepasst hat!
      Nun läuft das System Stabil und ohne "Fehlalarme"

      Quellcode

      1. Sub Messen_a
      2. 1wreset 'Bus Initialisieren / Zurücksetzen
      3. 1wwrite &HCC 'Skip ROM = Alle Slaves/Sensoren ansprechen
      4. 1wwrite &H44 'Messvorgang anstossen
      5. End Sub
      6. Sub Messen_b
      7. 1wreset 'Bus Initialisieren / Zurücksetzen
      8. 1wverify Dsid1(1) 'prueft ob ID des Sensors verfuegbar ist
      9. If Err = 1 Then 'wenn nicht verfuegbar dann
      10. Flag_versuche.0 = 1 'Fehler aufgetreten, bit 0 setzen
      11. Else 'Sensor ist wohl vorhanden
      12. 1wwrite &HBE 'Auslesen des Scratchpads
      13. Sc(1) = 1wread(9) 'Daten in ein Array lesen, beschreibt Sc(1) bis Sc(9)
      14. If Sc(9) = Crc8(sc(1) , 8) Then 'wenn Checksum passt die jeweilige Funktion ausführen
      15. Flag_versuche.0 = 0 'und bit 1 zuruecksetzen
      16. If Dsid1(1) = 16 Then Dg = Dg_ds18s20() '=10h Familie
      17. If Dsid1(1) = 40 Then Dg = Dg_ds18b20() '=28h Familie
      18. Dg_s1 = Dg / 10 'in Dezimalgrad umwandeln
      19. 'Dg_s1 = Dg_s1 + 0.1 'ev. Korrekturwert
      20. If Sc(9) <> Crc8(sc(1) , 8) Then
      21. Flag_versuche.1 = 1
      22. End If 'Checksum passt nicht - Fehler, bit 1 setzen
      23. End If
      24. End If
      25. 'Minimum- und Maximumwert der Wassertemperatur "merken"
      26. If Min1 > Dg_s1 Then Min1 = Dg_s1
      27. If Max1 < Dg_s1 Then Max1 = Dg_s1
      28. If Flag_versuche.0 = 1 Or Flag_versuche.1 = 1 Then
      29. Incr Versuche
      30. Else
      31. Versuche = 0
      32. End If
      33. If Versuche > 5 Then Versuche = 0
      34. End Sub
      Alles anzeigen
    • Oder besser so?

      Quellcode

      1. Sub Messen_a
      2. 1wreset 'Bus Initialisieren / Zurücksetzen
      3. 1wwrite &HCC 'Skip ROM = Alle Slaves/Sensoren ansprechen
      4. 1wwrite &H44 'Messvorgang anstossen
      5. End Sub
      6. Sub Messen_b
      7. 1wreset 'Bus Initialisieren / Zurücksetzen
      8. 1wverify Dsid1(1) 'prueft ob ID des Sensors verfuegbar ist
      9. If Err = 1 Then 'wenn nicht verfuegbar dann
      10. Flag_versuche.0 = 1 'Fehler aufgetreten, bit 0 setzen
      11. Else 'Sensor ist wohl vorhanden
      12. 1wwrite &HBE 'Auslesen des Scratchpads
      13. Sc(1) = 1wread(9) 'Daten in ein Array lesen, beschreibt Sc(1) bis Sc(9)
      14. If Sc(9) = Crc8(sc(1) , 8) Then 'wenn Checksum passt die jeweilige Funktion ausführen
      15. Flag_versuche.0 = 0 'und bit 1 zuruecksetzen
      16. If Dsid1(1) = 16 Then Dg = Dg_ds18s20() '=10h Familie
      17. If Dsid1(1) = 40 Then Dg = Dg_ds18b20() '=28h Familie
      18. Dg_s1 = Dg / 10 'in Dezimalgrad umwandeln
      19. 'Dg_s1 = Dg_s1 + 0.1 'ev. Korrekturwert
      20. Else
      21. If Sc(9) <> Crc8(sc(1) , 8) Then
      22. Flag_versuche.1 = 1
      23. End If
      24. End If 'Checksum passt nicht - Fehler, bit 1 setzen
      25. End If
      26. 'Minimum- und Maximumwert der Wassertemperatur "merken"
      27. If Min1 > Dg_s1 Then Min1 = Dg_s1
      28. If Max1 < Dg_s1 Then Max1 = Dg_s1
      29. If Flag_versuche.0 = 1 Or Flag_versuche.1 = 1 Then
      30. Incr Versuche
      31. Else
      32. Versuche = 0
      33. End If
      34. If Versuche > 5 Then Versuche = 0
      35. End Sub
      Alles anzeigen
    • Was im Bereich des else ist, gilt sowieso für den Fall, das die checksum nicht stimmt. Also brauchst du das nicht mehr mit den if..überprüfen. Ist nur doppeltgemoppelt.
      Raum für Notizen

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

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