Notaussteuerung Museumsbahn

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Notaussteuerung Museumsbahn

      Hallo,

      habe nun doch eine Frage zu unserer Schaltung:

      Der Notaus erfolgt über die Zugschleife mit einem geschlossenen Kontakt am Zugende.
      Die Wagen sind mit 7pol Steckern verbunden.Nun kann es passieren das durch rütteln bei der Fahrt
      ganz kurz mal eine Unterbrechung auftritt,die zum sofortigen Notaus führt.
      Die Idee wäre nun : Sekunden ist als Byte verfügbar.
      if Sekunden kleiner als 5 dann tue nichts
      if Sekunden größer 5 dann gehe in den Notaus.Für offene Kontakte habe ich einiges gefunden,aber nicht für geschlossene.
      Kann man das auch mit einem Timer erledigen,wobei Timer1 bereits belegt ist.
      Habe versucht ,den Port und Sekunden mit AND zu verknüpfen,das ignoriert das Programm aber.

      Bitte um einen Tip
      Gruß
      Jürgen
      Files
    • Der Timer 1 hat ja bereits einen Sekundentakt?

      Also warum nicht nutzen.

      Du könntest 2 Variablen anlegen (NotausCount und NotausMax).
      NotausMax auch als Konstante, wo du den gewünschten Wert (5 Sekunden) einträgst, nachdem der Notaus aktiv werden soll.
      Mit NotausCount werden die Sekunden durch den Interrupt gezählt.

      In der Timer1-ISR schreibst du zusätzlich rein,

      BASCOM Source Code

      1. If NotausCount<NotausMax then
      2. If pinKontakt=OK then ' wenn Kontakt in ordnung, dann
      3. NotausCount=0 ' Zähler Rücksetzen
      4. Else
      5. Incr NotausCount ' sonst Zähler erhöhen
      6. End If
      7. End If

      Das zählt die Sekundenticks.

      Und in der Hauptschleife prüfst du einfach, ob die Bedingung

      BASCOM Source Code

      1. If NotausCount=NotausMax then
      2. ' jetzt den Notaus veranlassen.
      3. ' evtl. noch NotausCount löschen, wenn das Programm weiter laufen soll.
      4. End If
      erfüllt ist und löst den Notaus aus.
    • Mitch64 wrote:

      If NotausCount=NotausMax then
      Ich würde da aus reiner Sicherheitsüberlegung auf >= (größer gleich) prüfen.
      Denn wenn aus irgend einem blöden Umstand heraus diese Abfrage erst eine Sekunde später erfolgt (weil z.B. in der Hauptschleife irgend etwas "eckt"), hat der IRQ diese Variable bereits weiter gezählt und die Bedingung wird dann erst sehr viel später wieder wahr.
      Man könnte auch bereits im IRQ mitprüfen und schon da zumindest den entsprechenden Port schalten der z.B. die Stromversorgung der HW steuert und hat dann noch immer zeit genug in der Hauptschleife weitere Maßnahmen auszulösen.
      Bei einer Notausfunktion wäre es sehr fatal wenn die eben nicht sofort was tut.