Ankündigung

Einklappen
Keine Ankündigung bisher.

Tor Status funktioniert nicht mehr nach patch 2.300

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • joggele777
    antwortet
    Zitat von saft6luck Beitrag anzeigen
    Für Taster und Funk?

    Kannst du mal posten, wie das elektrisch umgesetzt ist + wann welche GA kommt? Dann ist es einfacher, den Fehler im Code/eibPC zu finden.

    Ja für Taster und Funk.

    Ist ein Hörmann Tor mit UAP1 Platine welche folgende Stati auf drei Binäreingänge ausgibt:

    Tor-fährt -> GA "Garagentor Ausgang fährt-4/0/7"
    Tor-oben -> GA "Garagentor Ausgang oben-4/0/5"
    Tor-unten -> GA "Garagentor Ausgang unten-4/0/6"

    Hast Du das gemeint?


    Ich habe daraus geschlossen wenn Tor nicht fährt und nicht oben und nicht unten ist, muss es sich in einer Zwischenstellung befinden. Daher auch die Logik für den "Halb-Status".

    Einen Kommentar schreiben:


  • saft6luck
    antwortet
    Zitat von joggele777 Beitrag anzeigen
    Dafür funktioniert aber der "Halb-Status" nicht mehr?! Wenn das Tor in einer Zwischenstellung angehalten wird sollte die Taster-LED gelb leuchten. Das funktioniert nun nicht mehr?
    Für Taster und Funk?

    Kannst du mal posten, wie das elektrisch umgesetzt ist + wann welche GA kommt? Dann ist es einfacher, den Fehler im Code/eibPC zu finden.

    Einen Kommentar schreiben:


  • joggele777
    antwortet
    So habe gestern abend den Code noch implementiert und ein wenig getestet. Sieht ganz gut aus. Habe verschiedene Kombinationen mit Taster und Funkfernbedienung durchgeführt und bin immer zum richtigen Ergebnis gekommen.

    Die Situation die ich thread zuvor angesprochen habe konnte ich nicht feststellen.

    Dafür funktioniert aber der "Halb-Status" nicht mehr?! Wenn das Tor in einer Zwischenstellung angehalten wird sollte die Taster-LED gelb leuchten. Das funktioniert nun nicht mehr?

    [highlight=epc]
    // Tor HALB - Status LED gelb
    if !Tor_fahrt and !Tor_fahrt_AUF and !Tor_fahrt_AB and !("Garagentor Ausgang oben-4/0/5") and !("Garagentor Ausgang unten-4/0/6") then {
    write ("Garagentor LED gelb-4/0/28",EIN);
    Tor_flash=AUS;
    webdisplay(32,$halb$c14,BLIND,STATE4,GREY);
    } endif
    [/highlight]


    Grüsse
    Jochen

    Einen Kommentar schreiben:


  • joggele777
    antwortet
    Zitat von saft6luck Beitrag anzeigen
    Dann würde ich da noch zusätzlich die Richtungsangabe auf AUS setzen, nur für den Fall, dass jemand am Taster einschaltet und per Funk aus. Momentan würde bei der nächsten Betätigung per Funk die alte Richtung angezeigt.

    [highlight=epc]
    // Check Tor fährt via Funk (auf/ab ==)
    if ("Garagentor Ausgang fährt-4/0/7"==EIN) and Tor_fahrt==AUS then {
    Tor_fahrt_AUF=AUS;
    Tor_fahrt_AB=AUS;
    Tor_fahrt=EIN;
    } endif
    if ("Garagentor Ausgang fährt-4/0/7"==AUS) and Tor_fahrt==EIN then Tor_fahrt=AUS; endif
    [/highlight]

    Hallo Marc,

    bin leider noch nicht dazu gekommen den Code zu implementieren. Mir ist aber noch folgendes aufgefallen. Könnte es nicht je nach Abarbeitung des Programms zu folgender Situation kommen:

    Taster für AUF oder AB wird betätigt. Somit wird ("Garagentor Ausgang fährt-4/0/7") == EIN - Tor_fahrt ist noch AUS und damit ist die Bedingung für Betätigung via Funk wahr und somit wird Tor_fahrt auf EIN gesetzt und Tor_fahrt_AUF sowie Tor_fahrt_AB auf AUS. Bedeutet ich hätte nicht das Ergebnis was gewollt wäre.

    Gruss
    Jochen

    Einen Kommentar schreiben:


  • saft6luck
    antwortet
    Zitat von joggele777 Beitrag anzeigen
    Per Funk: wenn Tor mit dem Funksender gesteuert wird kann nicht unterschieden werden ob auf oder ab Gefahren wird.
    Dann würde ich da noch zusätzlich die Richtungsangabe auf AUS setzen, nur für den Fall, dass jemand am Taster einschaltet und per Funk aus. Momentan würde bei der nächsten Betätigung per Funk die alte Richtung angezeigt.

    [highlight=epc]
    // Check Tor fährt via Funk (auf/ab ==)
    if ("Garagentor Ausgang fährt-4/0/7"==EIN) and Tor_fahrt==AUS then {
    Tor_fahrt_AUF=AUS;
    Tor_fahrt_AB=AUS;
    Tor_fahrt=EIN;
    } endif
    if ("Garagentor Ausgang fährt-4/0/7"==AUS) and Tor_fahrt==EIN then Tor_fahrt=AUS; endif
    [/highlight]

    Einen Kommentar schreiben:


  • joggele777
    antwortet
    Zitat von saft6luck Beitrag anzeigen
    [highlight=epc]

    Wenn die Reihenfolge der Ausführung nicht klar ist, kann das Rücksetzen problemlos auch mit einem after() um 1ms verzögert werden (in einer ms kann kein weiteres Telegramm eintreffen).

    Wie soll sich denn die Steuerung per Funk integrieren?

    Ps. Ist nicht compiliert oder getestet.
    Ok Super! Werde das die Tage gleich mal testen und wieder berichten.

    Per Funk: wenn Tor mit dem Funksender gesteuert wird kann nicht unterschieden werden ob auf oder ab Gefahren wird. Dann lass ich die LED auf wie ab Lila blinken. Ansonsten wenn per Taster betätigt, dann auf Grün blinken und ab rot blinken. Das ist alles.

    Gruss
    Jochen

    Einen Kommentar schreiben:


  • saft6luck
    antwortet
    [highlight=epc]
    Taster_verarbeitet=AUS;

    // Check Tor fährt AUF
    if event ("Garagentor hoch-4/0/1") and "Garagentor hoch-4/0/1"==EIN and "Garagentor Ausgang oben-4/0/5"==AUS and Tor_fahrt==AUS then {
    Tor_fahrt_AUF=EIN;
    Tor_fahrt_AB=AUS;
    Tor_fahrt=EIN;
    Taster_verarbeitet=EIN;
    } endif

    // Check Tor fährt AB
    if event ("Garagentor ab-4/0/2") and "Garagentor ab-4/0/2"==EIN and "Garagentor Ausgang unten-4/0/6"==AUS and Tor_fahrt==AUS then {
    Tor_fahrt_AUF=AUS;
    Tor_fahrt_AB=EIN;
    Tor_fahrt=EIN;
    Taster_verarbeitet=EIN;
    } endif

    // Check Tor stop
    if event ("Garagentor hoch-4/0/1") and "Garagentor hoch-4/0/1"==EIN and "Garagentor Ausgang oben-4/0/5"==AUS ) \\
    or event ("Garagentor ab-4/0/2") and "Garagentor ab-4/0/2"==EIN and "Garagentor Ausgang unten-4/0/6"==AUS ) \\
    and Tor_fahrt==EIN \\
    and Taster_verarbeitet==AUS then {
    Tor_fahrt_AUF=AUS;
    Tor_fahrt_AB=AUS;
    Tor_fahrt=AUS
    } endif

    // clear Taster event
    if event("Garagentor hoch-4/0/1") or event("Garagentor ab-4/0/2") then Taster_verarbeitet=AUS endif

    // Check Tor fährt via Funk (auf/ab ==)
    if ("Garagentor Ausgang fährt-4/0/7"==EIN) and Tor_fahrt==AUS then Tor_fahrt=EIN endif
    if ("Garagentor Ausgang fährt-4/0/7"==AUS) and Tor_fahrt==EIN then Tor_fahrt=AUS endif
    [/highlight]

    Dieser Lösungsansatz verwendet eine Freigabevariable und ändert nichts an der restlichen Logik -> erhebt nicht den Anspruch die eleganteste Lösung zu sein.

    Wenn die Reihenfolge der Ausführung nicht klar ist, kann das Rücksetzen problemlos auch mit einem after() um 1ms verzögert werden (in einer ms kann kein weiteres Telegramm eintreffen).

    Wie soll sich denn die Steuerung per Funk integrieren?

    Ps. Ist nicht compiliert oder getestet.

    Einen Kommentar schreiben:


  • joggele777
    antwortet
    Zitat von saft6luck Beitrag anzeigen
    Ja, auf die 2 Tasten kann man es aber erweitern. Kann ich dir später machen.
    Das wäre super!

    Einen Kommentar schreiben:


  • saft6luck
    antwortet
    Zitat von joggele777 Beitrag anzeigen
    Der Code von Marc funktioniert wohl für einen Taster aber eher nicht für zwei Taster wie ich es hier habe?!
    Ja, auf die 2 Tasten kann man es aber erweitern. Kann ich dir später machen.

    Einen Kommentar schreiben:


  • saft6luck
    antwortet
    IMHO sollte das 2. if gleich abgearbeitet werden, dann kommt die Rückmeldung des Antriebes und der Fahrbetrieb wird wieder angezeigt. Das ist meine Erwartungshaltung.

    Wenn jedoch Tor_fahrt_AUF auf EIN bleibt, ist das für mich nicht erklärbar. Ich würde eben das Gegenteil erwarten. Der Rest steht eh im Thread.

    Einen Kommentar schreiben:


  • joggele777
    antwortet
    Der Code von Marc funktioniert wohl für einen Taster aber eher nicht für zwei Taster wie ich es hier habe?!

    Einen Kommentar schreiben:


  • joggele777
    antwortet
    Zitat von enertegus Beitrag anzeigen
    Was mir hier auffällt: Du setzt Tor_fahrt=EIN und diese Variable steuert zwei if-Abfragen.
    Szenario: Tor_fahrt steht auf AUS, "Garagentor hoch-4/0/1" (EIN) kommt auf den Bus.
    Nun wird die erste If-Abfrage gültig, die if-Abfrage setzt Tor_fahrt=AUS, damit wird im gleichen Verarbeitungszyklus nun auch die zweite if-Abfrage gültig. Wie ist die Logik überhaupt gedacht?

    Hast recht - ist Quatsch - das kommt von der ganzen Testerei. Anfangs hatte ich das ja mit ner verschachtelten if/else Anweisung und das hat super funktioniert (siehe meinen ersten Beitrag).

    Die Logik ist wenn Taster AUF dann Tor auf, wenn dieser Taster ein zweites Mal betätigt wird dann STOP usw. Ebenso für Taster AB.

    Es kann auch Taster AUF (für AUF) und als zweites Taster AB (STOP) betätigt werden.

    Lösungsansatz von Marc scheint wohl angebracht:

    [highlight=epc]
    if (event ("Garagentor hoch-4/0/1") and ("Garagentor hoch-4/0/1"==EIN) and ("Garagentor Ausgang oben-4/0/5"==AUS)) then {
    Tor_fahrt_AUF=!Tor_fahrt;
    Tor_fahrt_AB=AUS;
    Tor_fahrt=!Tor_fahrt
    } endif
    [/highlight]


    Grüsse
    Jochen

    Einen Kommentar schreiben:


  • saft6luck
    antwortet
    Zitat von enertegus Beitrag anzeigen
    Was mir hier auffällt: Du setzt Tor_fahrt=EIN und diese Variable steuert zwei if-Abfragen.
    Szenario: Tor_fahrt steht auf AUS, "Garagentor hoch-4/0/1" (EIN) kommt auf den Bus.
    Nun wird die erste If-Abfrage gültig, die if-Abfrage setzt Tor_fahrt=AUS, damit wird im gleichen Verarbeitungszyklus nun auch die zweite if-Abfrage gültig. Wie ist die Logik überhaupt gedacht?
    Na, dass das 2. if eben nicht gleich gültig wird???

    Scheinbar wird es ja auch nicht gültig, denn Tor_fahrt_AUF bleibt laut Jochen ja auf EIN.

    Einen Kommentar schreiben:


  • enertegus
    antwortet
    Zitat von joggele777 Beitrag anzeigen
    [highlight=epc]
    // Check Tor fährt AUF
    if event ("Garagentor hoch-4/0/1") and "Garagentor hoch-4/0/1"==EIN and "Garagentor Ausgang oben-4/0/5"==AUS and Tor_fahrt==AUS then {
    Tor_fahrt_AUF=EIN;
    Tor_fahrt_AB=AUS;
    Tor_fahrt=EIN
    } endif
    if event ("Garagentor hoch-4/0/1") and "Garagentor hoch-4/0/1"==EIN and "Garagentor Ausgang oben-4/0/5"==AUS and Tor_fahrt!=AUS then {
    Tor_fahrt_AUF=AUS;
    Tor_fahrt_AB=AUS;
    Tor_fahrt=AUS
    } endif
    [/highlight]
    Was mir hier auffällt: Du setzt Tor_fahrt=EIN und diese Variable steuert zwei if-Abfragen.
    Szenario: Tor_fahrt steht auf AUS, "Garagentor hoch-4/0/1" (EIN) kommt auf den Bus.
    Nun wird die erste If-Abfrage gültig, die if-Abfrage setzt Tor_fahrt=AUS, damit wird im gleichen Verarbeitungszyklus nun auch die zweite if-Abfrage gültig. Wie ist die Logik überhaupt gedacht?

    Einen Kommentar schreiben:


  • joggele777
    antwortet
    Zitat von saft6luck Beitrag anzeigen
    Das sollte schon passen. Bist du sicher, dass nicht im restlichen Code etwas reinspielt?
    Vielleicht sehe ich ja den Wald vor lauter Bäumen nicht mehr....

    Hier mal komplett:


    [highlight=epc]
    //------------------------------------------------------------------------------------------------
    //--- [Garagentor-Status] ------------------------------------------------------------------------
    //------------------------------------------------------------------------------------------------
    //- Tor fährt auf –> LED grün blinkend
    //- Tor fährt ab –> LED rot blinkend
    //- Tor fährt Funk –> LED magenta blinkend
    //- Tor oben –> LED grün konstant
    //- Tor unten –> alle LED AUS
    //- Tor mitte –> LED gelb konstant
    //------------------------------------------------------------------------------------------------
    if after (systemstart(),1000u64) then { \\
    read ("Garagentor Ausgang unten-4/0/6"); \\
    if ("Garagentor Ausgang unten-4/0/6") then { \\
    write ("Garagentor LED magenta-4/0/29",AUS);
    write ("Garagentor LED grün-4/0/26",AUS); \\
    write ("Garagentor LED rot-4/0/27",AUS); \\
    write ("Garagentor LED gelb-4/0/28",AUS); \\
    } endif; \\
    read ("Garagentor Ausgang oben-4/0/5"); \\
    if ("Garagentor Ausgang oben-4/0/5") then {
    write ("Garagentor LED grün-4/0/26",EIN) \\
    } endif; \\
    } endif
    if InitWebserver and ("Garagentor Ausgang unten-4/0/6") then {
    webdisplay(32,$unten$c14,BLIND,INACTIVE,GREY)
    } endif
    if InitWebserver and ("Garagentor Ausgang oben-4/0/5") then {
    webdisplay(32,$oben$c14,BLIND,STATE6,GREY)
    } endif

    Tor_fahrt_AUF=AUS
    Tor_fahrt_AB=AUS
    Tor_fahrt=AUS
    Tor_flash=AUS
    // Check Tor fährt AUF
    if event ("Garagentor hoch-4/0/1") and "Garagentor hoch-4/0/1"==EIN and "Garagentor Ausgang oben-4/0/5"==AUS and Tor_fahrt==AUS then {
    Tor_fahrt_AUF=EIN;
    Tor_fahrt_AB=AUS;
    Tor_fahrt=EIN
    } endif
    if event ("Garagentor hoch-4/0/1") and "Garagentor hoch-4/0/1"==EIN and "Garagentor Ausgang oben-4/0/5"==AUS and Tor_fahrt!=AUS then {
    Tor_fahrt_AUF=AUS;
    Tor_fahrt_AB=AUS;
    Tor_fahrt=AUS
    } endif
    // Check Tor fährt AB
    if event ("Garagentor ab-4/0/2") and "Garagentor ab-4/0/2"==EIN and "Garagentor Ausgang unten-4/0/6"==AUS and Tor_fahrt==AUS then {
    Tor_fahrt_AUF=AUS;
    Tor_fahrt_AB=EIN;
    Tor_fahrt=EIN
    } endif
    if event ("Garagentor ab-4/0/2") and "Garagentor ab-4/0/2"==EIN and "Garagentor Ausgang unten-4/0/6"==AUS and Tor_fahrt!=AUS then {
    Tor_fahrt_AUF=AUS;
    Tor_fahrt_AB=AUS;
    Tor_fahrt=AUS
    } endif
    // Check Tor fährt via Funk (auf/ab ==)
    if ("Garagentor Ausgang fährt-4/0/7"==EIN) and !Tor_fahrt then Tor_fahrt=EIN endif
    if ("Garagentor Ausgang fährt-4/0/7"==AUS) and Tor_fahrt then Tor_fahrt=AUS endif
    // Millisekungen Timer für Blinkgeschwindigkeit
    if Tor_fahrt==EIN then Tor_flash=EIN endif
    if after(Tor_flash==EIN,700u64) and Tor_fahrt==EIN then Tor_flash=AUS endif
    if after(Tor_flash==AUS,700u64) and Tor_fahrt==EIN then Tor_flash=EIN endif
    if after(Tor_fahrt==AUS,800u64) then Tor_flash=AUS endif
    // Tor fährt AUF - Status LED grün/blinkend
    if Tor_fahrt and Tor_fahrt_AUF and Tor_flash then write("Garagentor LED grün-4/0/26",EIN) endif
    if Tor_fahrt and Tor_fahrt_AUF and !Tor_flash then write("Garagentor LED grün-4/0/26",AUS) endif
    if Tor_fahrt and Tor_fahrt_AUF then webdisplay(32,$fährt auf$c14,UP,ACTIVE,GREY) endif
    // Tor fährt AB - Status LED rot/blinkend
    if Tor_fahrt and Tor_fahrt_AB and Tor_flash then write("Garagentor LED rot-4/0/27",EIN) endif
    if Tor_fahrt and Tor_fahrt_AB and !Tor_flash then write("Garagentor LED rot-4/0/27",AUS) endif
    if Tor_fahrt and Tor_fahrt_AB then webdisplay(32,$fährt ab$c14,DOWN,ACTIVE,GREY) endif
    // Tor fährt via Funk (auf/ab ==) - Status LED magenta/blinkend
    if Tor_fahrt and !Tor_fahrt_AB and !Tor_fahrt_AUF and Tor_flash then write("Garagentor LED magenta-4/0/29",EIN) endif
    if Tor_fahrt and !Tor_fahrt_AB and !Tor_fahrt_AUF and !Tor_flash then write("Garagentor LED magenta-4/0/29",AUS) endif
    if Tor_fahrt and !Tor_fahrt_AB and !Tor_fahrt_AUF then webdisplay(32,$fährt$c14,PLAY,ACTIVE,GREY) endif
    // Tor OBEN - Status LED grün
    if delay("Garagentor Ausgang oben-4/0/5",350u64) then {
    Tor_fahrt=AUS;
    Tor_fahrt_AUF=AUS;
    Tor_fahrt_AB=AUS;
    Tor_flash=AUS;
    write ("Garagentor LED grün-4/0/26",EIN);
    webdisplay(32,$oben$c14,BLIND,STATE6,GREY);
    } endif
    // Tor UNTEN - Status LED alle AUS
    if delay("Garagentor Ausgang unten-4/0/6",200u64) then {
    Tor_fahrt=AUS;
    Tor_fahrt_AUF=AUS;
    Tor_fahrt_AB=AUS;
    Tor_flash=AUS;
    } endif
    if delay("Garagentor Ausgang unten-4/0/6",750u64) then {
    write ("Garagentor LED magenta-4/0/29",AUS);
    write ("Garagentor LED grün-4/0/26",AUS);
    write ("Garagentor LED rot-4/0/27",AUS);
    write ("Garagentor LED gelb-4/0/28",AUS);
    webdisplay(32,$unten$c14,BLIND,INACTIVE,GREY);
    } endif
    // Tor HALB - Status LED gelb
    if !Tor_fahrt and !Tor_fahrt_AUF and !Tor_fahrt_AB and !("Garagentor Ausgang oben-4/0/5") and !("Garagentor Ausgang unten-4/0/6") then {
    write ("Garagentor LED gelb-4/0/28",EIN);
    Tor_flash=AUS;
    webdisplay(32,$halb$c14,BLIND,STATE4,GREY);
    } endif
    // Tor via web button steuern auf/ab
    if webbutton(33)==1 then write("Garagentor hoch-4/0/1",EIN) endif
    if webbutton(33)==2 then write("Garagentor ab-4/0/2",EIN) endif
    //--- [Garagentor-Status] end --------------------------------------------------------------------

    [/highlight]

    Einen Kommentar schreiben:

Lädt...
X