Ankündigung

Einklappen
Keine Ankündigung bisher.

Logik Variablen

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

    HS/FS Logik Variablen

    Hallo,

    ich hab eine Frage zur Programmierung von Logikbausteinen:

    Wann nimmt man EC wann EN. Gibt es irgendwo eine Erklärung für die Programmierung, die von Dacom ist ein bischen dürftig.

    Was verwende ich wenn ich immer nur die Änderung eines Eingangs betrachten will??
    Mehrere Gruppenadressen gehen auf einen Eingang, mich interessiert zum starten der Logik immer nur das letzte Telegramm, egal ob 0 oder 1

    Beispiel: Am Eingang 1 sind 4 Gruppenadressen angeschlossen. Immer wenn ein neues Telegramm kommt soll der Baustein neu berechnet werden, aber nur dann, sollte an einer Gruppenadresse dauerhaft 1 liegen soll das ignoriert werden.
    Dafür brauche ich am Eingang 3 als Beispiel, dass die 1 die dauerhaft anliegt in der Berechnung berücksichtigt wird.

    Danke
    Christian

    #2
    Tipp: analysiere Bausteine, deren Funktion und Verhalten Du z. B. aus häufiger Verwendung in Deinen Logikblättern gut kennst, etwa die, die in der logik.dat stehen. Das hilft beim Verständnis. Die Doku ist aber an der Stelle doch ok:

    "EN - Der aktuelle Wert des Eingangs."
    "EC - Boolean - Am Eingang ist ein Telegramm eingetroffen. Das Eingangstelegramm hat die Berechnung ausgelöst."

    In Pseudocode also zum Beispiel:
    "wenn EC[1], dann rechne EN[2] plus EN[3]"


    Deine Randwünsche sind immer erfüllt: jedes neu ankommende, insbesondere also das letzte, Telegramm triggert den Baustein, und es wird bei EN[...] der Wert genommen, der dort eben anliegt.
    Gruß, Rainer

    Kommentar


      #3
      Und EA[] ist der Wert des Eingangs vor dem letzten TZelegramm:

      EA[1]==0 and EN[1]==1 würde beispielsweise eine positive Flanke bedeuten:

      Alter Wert = 0 und neuer Wert = 1
      Gruß Matthias
      EIB übersetzt meine Frau mit "Ehepaar Ist Beschäftigt"
      - PN nur für PERSÖNLICHES!

      Kommentar


        #4
        Hallo,

        wie kann ich folgende Formel für Eingang 1 und 2 flankengesteuert machen:
        5012|0|"EN[1] and (not EN[2]) and (not EN[3]) and (not EN[4])"|"2"|""|1|0|0|0

        Problem: Der Eingang 1 und 2 bekommen von mehreren GA die Telegramme, E2 ist immer das umgekeherte Telegramm von E1.

        Kommentar


          #5
          Zitat von be1001 Beitrag anzeigen
          Hallo,

          wie kann ich folgende Formel für Eingang 1 und 2 flankengesteuert machen:
          5012|0|"EN[1] and (not EN[2]) and (not EN[3]) and (not EN[4])"|"2"|""|1|0|0|0

          Problem: Der Eingang 1 und 2 bekommen von mehreren GA die Telegramme, E2 ist immer das umgekeherte Telegramm von E1.
          Wie du eine Flanke abfragst hat Matthias die ja schon geschrieben. Du musst Dir allerdings bewusst dein dass der Baustein bei jedem Aufruf nur ein Siignal verarbeitet und die Reihenfolge ist nicht garantiert.

          Wenn also z.B. ein 1-bit telkegram an E1 liegt und das gleiche signal durhc einen inverter an E2 (als beispiel). Nun kommt ein 1-Telegramm (vorher war 0, also E1=0 E2=1), dann wird der baustein einmal aufgerufen mit

          EA[1]=0 EN[1]=1 EA[2]=1 EN[2]=1 dann
          EA[1]=0 EN[1]=1 EA[2]=1 EN[2]=0

          oder aber

          EA[1]=0 EN[1]=0 EA[2]=1 EN[2]=0 dann
          EA[1]=0 EN[1]=1 EA[2]=1 EN[2]=0

          Kommentar


            #6
            Hallo,

            ich habe nochmal zwei Fragen: was bedeutet folgende Fehlermeldung?

            Exceptions
            01.11.2009 21:58:49 (1)
            File "/hs/compile/hs_baum.py", line 67, in workRecv
            error: (104, 'Connection reset by peer')
            ---------------------------------------------------------------

            Zweite Frage: Wie kann ich den Ausgang von Baustein 2 in dem Fall der zweite Ausgang, auf die Eingänge von Baustein 1 im neuen Baustein bringen. Ich möchte alles in einen Baustein einbinden. Geht das über Variablen??

            Danke



            Wie kann ich die folgede Logik in einen Baustein durch Variablen verbinden:

            Baustein 1:

            5001|5|1|0|0|0
            # Eingänge EN[x]
            5002|1|0|0 # Standby
            5002|2|0|0 # Komfort
            5002|3|0|0 # Nacht
            5002|4|0|0 # Frost
            5002|5|0|0 # Reglerstatus
            # Ausgänge
            5004|1|0|0|1|0 # Reglerbetriebsmodus

            # Komfort
            5012|0|"EN[2] and (not EN[3])"|"1"|""|1|0|0|0
            5012|0|"EN[2] and EN[3]"|"1"|""|1|0|0|0
            # Nacht
            5012|0|"(not EN[2]) and EN[1] and EN[3]"|"3"|""|1|0|0|0

            # Standby
            5012|0|"EN[1] and (not EN[2]) and (not EN[3])"|"2"|""|1|0|0|0

            und

            Baustein 2:

            5001|1|4|0|0|0
            # Eingänge
            5002|1|0|0 # Reglerstatus
            # Ausgänge
            5004|1|0|0|1|0 # Standby
            5004|2|0|0|1|0 # Komfort
            5004|3|0|0|1|0 # Nacht
            5004|4|0|0|1|0 # Frost
            #Regerstatus
            5012|0|"(EN[1] == 1)"|"1"|""|2|0|0|0
            5012|0|"(EN[1] <> 1)"|"0"|""|2|0|0|0
            Angehängte Dateien

            Kommentar


              #7
              weiss niemand wie ich die beiden Bausteine in einem Baustein verknüpfen kann??

              Danke

              Kommentar


                #8
                Hallo,
                Zitat von be1001 Beitrag anzeigen
                weiss niemand wie ich die beiden Bausteine in einem Baustein verknüpfen kann??
                Also da faellt mir jetzt nix ein. Du kannst die Bausteine schon zusammenwürfeln, aber dann wird eben ein völlig neuer Baustein draus und du musst sicherstellen, dass da Variablen/Ein/Ausgänge nicht kollidieren.

                Ansonsten ist doch ein Logikblatt deine Anwendung: Da sind dann beide Baustein drauf und du kannst diese wie wild verknüpfen....

                mfg Swen
                2 Objekte, 6 Linien + KNX/IP-Bereich, HS 3 SW 2.8, Visu mit 2x 15"-Touch, Softwaregateway KNX/IP für 2x Novelan Wärmepumpe, viele Ideen und wenig Zeit

                Kommentar


                  #9
                  Bei mehrern RTR's wers schon schön wenn man z.B. für die Tritons einen Baustein hätte der.

                  E1. 1Byte Status
                  E2. Komfort
                  E3. Standby
                  E4. Nacht
                  E5. Frost
                  E5. Komfortverlängerung (Komfort+Nacht)

                  A1: 1Byte Status
                  A2: Komfort
                  A3: Standby
                  A4: Nacht
                  A5: Frost

                  hätte der auch wüsste das von Komfort zu Nacht, erst Komfort=0 und dann Nacht=1 gesendet werden muss.

                  Damit das keinen Loop verursacht muss das aber über die internen SN Variablen gespeichert und verglichen werden und gesperrt werden.
                  Wenn Komfort=1 und Befehl Nacht=1 kommt rein, muss erstmal die weitere Verarbeitung weiterer Befehle angehalten werden.
                  z.B.
                  SN[1] = soll
                  SN[2] = ist
                  das sollte am besten dann das 1Byte objekt sein.

                  Also wenn Nacht=1 an E1, dann erstmal das richtige Statusbyte erzeugen und Eingänge mit Aufrag sperren bis SN[1]==SN[2] AND EC[n]<>0
                  dann erstmal alle auf Komfort=0 auser E5(Komf.Verl.) oder E2(Komfort)
                  eine weitere Formelzeile mit
                  SN[1]<>SN[2] AND EC[n]<>0 schreibt nur auf SN[2] das Statusbyte wie es jetzt gerade ist. Und triggert den Bitweisen vergleich von SN[1] mit SN[2] um die fehlenden Bits auf die Ausgänge zu senden.
                  Nils

                  aktuelle Bausteine:
                  BusAufsicht - ServiceCheck - Pushover - HS-Insight

                  Kommentar


                    #10
                    Also bis auf das mit den loops verstehe ich in dieser Beschreibung nur Bahnhof. Ich habe keine Ahnung was genau Du erreichen möchtest.

                    Sprechen wir hier wirklich vom Status Byte, oder vom Betriebsmodus ?

                    Und warum benötigst Du beide Umwandelungen ? Einer von beiden ist doch immer bekannt (Byte oder bits) und muss legedlich in den anderen umgewandelt werden.

                    Wenn beide gleichzeitig verwendet werden, also sowohl byte und bits im Eingang auf byte oder bits gewandelt werden sollen (aber warum status byte ???) dann besteht ja noch ein anderes Problem, welches hat Vorrang ?

                    Gruss,
                    Gaston

                    Kommentar


                      #11
                      Wenn du ein Steuerelement für die Visu hast das mit dem 1Byte RTR-Status arbeitet dann willst du ja
                      A) den jetzigen Zustand angeziegt bekommen 4x 1Bit auf 1 Byte
                      B) mit dem Bedienelement auch in einen Betriebsmodi schalten. z.B. Nacht
                      das geht aber nicht einfach nur indem man auf Nacht eine 1 sendet also ein einfacher 1byte->8bit, da du ja zuerst Komfort=0 oder Standby=1 senden damit du nicht in der Komfortverlägerung bist.

                      Mit dem Statusbyte weißt du genau in welcher Betriebsart du dich befindest. Mit den Bits nicht, ich kann zwar jedesmal beim Nachtschalten Komfort=0 und Nacht=1 senden, das halte ich aber für unsauber.
                      Ich hatte da auch vor ein xxAPI RTR zu machen der dann nur noch mit diesem RTR-Statusbyte verbunden werden muss, das erspart dann das erstellen von Popup-Seiten.
                      Nils

                      aktuelle Bausteine:
                      BusAufsicht - ServiceCheck - Pushover - HS-Insight

                      Kommentar

                      Lädt...
                      X