Ankündigung

Einklappen
Keine Ankündigung bisher.

Zuweisung im HS-Baustein funktioniert nicht

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

    HS/FS Zuweisung im HS-Baustein funktioniert nicht

    Hallo alle!

    Beim Versuch, einen HS-Baustein zu schreiben, bin ich auf ein mir unerklärliches Verhalten gestossen. Nach viel Probieren habe ich das Problem zwar umgehen können, aber Erklärung habe ich keine gefunden:

    Eine Zeile sollte wie folgt funktionieren: Wenn ein Telegramm auf Eingang5 eintrifft und Speicher1 > Eingang2: Eingang2 in Speicher1 schreiben.

    Das habe ich so versucht:
    5012|0|"EC[5] and (SN[1]>EN[2])"|"EN[2]"|""|0|0|1|0
    Das funktioniert aber nicht, Speicher1 bleibt unverändert!

    Folgende Zeile funktioniert aber:
    5012|0|"EC[5] and (SN[1]>EN[2])"|"EN[2]+0"|""|0|0|1|0
    Das +0 macht den Unterschied - wie kann das sein? Wo liegt hier das Problem?

    fragt
    GKap

    #2
    Da müsste man das ganze sehen; Datentypen am Eingang, was wurde vorher in SN1 geschrieben, wie wird es danach ausgewertet usw.
    Das "+0" forciert AFAIK letztendlich eine Interpretation der Variable als Zahl, das wird hier den Unterschied machen.
    Tipp: einfach mal in der python idle-shell das zuweisen und auswerten von EN5, SN1,2 usw. nachspielen.

    Makki
    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
    -> Bitte KEINE PNs!

    Kommentar


      #3
      ich glaube, daß Du ja am E2 keinen "Event" bekommst, deshalb steht da nix drin. Versuch mal den E2 Remanent zu machen, dann gehts vermutlich
      never fummel a running system...

      Kommentar


        #4
        Universal-Zählerbaustein

        Hallo!

        Es handelt bei dem Betreffenden Baustein um einen Auf-/Ab-Zähler ähnlich dem Baustein "Zählerbaustein". Bei meinem Zähler kann man jedoch:
        - Min- und Max-Werte angeben, der Ausgangswert geht nie über diese Grenzen hinaus
        - beliebige Inkrement und Dekrementwerte angeben
        Reset und Ein/Aus habe ich nicht implementiert, das habe ich bisher noch nicht gebraucht.

        Ich poste mal hier den ganzen Baustein, Wer ihn probieren oder benutzen möchte kann das gerne tun.

        Code:
        5000|"! Eigene Bausteine\Universalzähler"|1|6|"E1 Minimalwert"|"E2 Maximalwert"|"E3 Inkrementwert"|"E4 Dekrementwert"|"E5 +Zählerstand"|"E6 -Zählerstand"|2|"A1 Zählerstand"|"A2 Zählerstand (sbc)"
         
        5001|6|2|Z|1|1
         
        5002|1|0|0 # E1 Minimalwert
        5002|2|2147483647|0 # E2 Maximalwert
        5002|3|1|0 # E3 Inkrementwert
        5002|4|1|0 # E4 Dekrementwert
        5002|5|0|0 # E5 +Zählerstand
        5002|6|0|0 # E6 -Zählerstand
         
        5003|1|0|1 # S1 Zähler
         
        5004|1|0|0|1|0 # A1 Zählerstand
        5004|1|0|0|2|0 # A2 Zählerstand (sbc)
         
        ################################################################################
         
        # Zählerstand erhöhen
         
        5012|0|"EC[5] and (SN[1]<EN[2])"|"SN[1]+EN[3]"|""|0|0|1|0
        # Wenn Telegramm auf E5 eintrifft und S1 < E2: S1 um E3 erhöhen, in S1 schreiben
         
        5012|0|"EC[5] and (SN[1]>EN[2])"|"EN[2]+0"|""|0|0|1|0
        # Wenn Telegramm auf E5 eintrifft und S1 > E2: E2 in S1 schreiben
         
        5012|0|"EC[5]"|"SN[1]"|""|1|0|0|0
        # Wenn Telegramm auf E5 eintrifft: S1 auf A1 ausgeben
         
        5012|1|"EC[5]"|"SN[1]"|""|2|0|0|0
        # Wenn Telegramm auf E5 eintrifft: S1 auf A1 ausgeben, beenden
         
        ################################################################################
         
        # Zählerstand erniedrigen
         
        5012|0|"EC[6] and (SN[1]>EN[1])"|"SN[1]-EN[4]"|""|0|0|1|0
        # Wenn Telegramm auf E6 eintrifft und S1 > E1: S1 um E4 erniedrigen, in S1 schreiben
         
        5012|0|"EC[6] and (SN[1]<EN[1])"|"EN[1]+0"|""|0|0|1|0
        # Wenn Telegramm auf E6 eintrifft und S1 < E1: E1 in S1 schreiben
         
        5012|0|"EC[6]"|"SN[1]"|""|1|0|0|0
        # Wenn Telegramm auf E6 eintrifft: S1 auf A1 ausgeben
         
        5012|1|"EC[6]"|"SN[1]"|""|2|0|0|0
        # Wenn Telegramm auf E6 eintrifft: S1 auf A1 ausgeben, beenden
         
        ################################################################################
         
        #Init
         
        5012|0|"EI"|"SN[1]"|""|1|0|0|0
        # Bei Init: S1 auf A1 ausgeben
         
        5012|1|"EI"|"SN[1]"|""|2|0|0|0
        # Bei Init: S1 auf A2 ausgeben, beenden
         
        ################################################################################
        Der Baustein ist m.E. relativ einfach und seit ich das "+0" drin habe funktioniert auch alles wie erwartet. Trotzdem möchte ich der Sache gerne auf den Grund gehen, denn das "+0" kann doch nur ein Workaround sein!

        Zitat von makki Beitrag anzeigen
        Da müsste man das ganze sehen; Datentypen am Eingang, was wurde vorher in SN1 geschrieben, wie wird es danach ausgewertet usw.
        Eine Zeile vor der fraglichen Zeile wird S1+E3 in S1 geschrieben, das ist eine Zahl. Dieses Ergebnis kann den Maximalwert überschreiten, das soll in der fraglichen Zeile korrigiert werden.
        Der Vergleich in der fraglichen Zeile funktioniert korrekt, das habe ich herausgefunden durch probeweises angeben eines festen Wertes anstelle von E2.
        E2 ist in meinem Projekt mit einem Festwert (Ganzzahl) befüllt. An diesem Eingang treffen also niemals Telegramme ein.


        Zitat von makki Beitrag anzeigen
        Tipp: einfach mal in der python idle-shell das zuweisen und auswerten von EN5, SN1,2 usw. nachspielen.
        Ich habe leider mit Python (ausser beim HS) keine Erfahrung und kenne auch die Entwicklungsumgebung nicht. Werde das mal probieren...

        Zitat von TRex Beitrag anzeigen
        ich glaube, daß Du ja am E2 keinen "Event" bekommst, deshalb steht da nix drin. Versuch mal den E2 Remanent zu machen, dann gehts vermutlich
        Das ist richtig, auf E2 gibt es keine Events.
        Aber einen Eingang kann man doch nicht remanent machen - oder??

        PS: Das gleiche Verhalten tritt analog auch im unteren Teil des Bausteins ("Zählerstend erniedrigen") auf.

        Gruß
        GKap

        Kommentar


          #5
          Versuch mal den Logik Debugger
          https://knx-user-forum.de/knx-eib-fo...-debugger.html

          Installier dir einfach Python von hier.
          http://www.python.org/ftp/python/2.4.4/python-2.4.4.msi

          einfach alles so durchklicken.

          kopier den LogikGen.py und deine hsl in den Ordner c:\python24

          Klick - START - -> Ausführen -> "cmd"

          jetzt tippst du
          Code:
          cd \python24
          Code:
          python.exe -d -i 10666_deineLogik.hsl
          jetzt befindest du dich im Debugger.
          tippe
          Code:
          run
          um die erste ausführung durchlaufen zu lassen (EI=1)
          jetzt kannst du mit
          Code:
          names
          dir die Ein/Ausgänge anzeigen lassen
          und z.B.
          Code:
          EN[5]=5000
          um eine 5000 an Eingang 5 zu schicken.
          Die wird jetzt aber noch nicht ausgeführt, sondern erst wenn du erneut
          Code:
          run
          eingibst.
          jetzt kannst du z.B.
          Code:
          show
          benutzen, um alle Variablen und ihre Werte zu sehen.
          Nils

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

          Kommentar


            #6
            Problem gelöst!

            Hallo alle!

            Mit Hilfe von NilsS' Debugger habe ich das Problem mit der fehlerhaften Zuweisung lösen können:

            In meinem Baustein habe ich 2 Schreibfehler drin gehabt:
            - Beim Satz 5001 ist mir ein "Z" reingerutscht
            - Den 2. Ausgang habe ich - typischer copy/paste-Fehler - nochmals als 1. Ausgang angelegt.

            Beides sind Fehler, die den Baustein eigentlich syntaktisch falsch machen. Der Experte hat nicht gemeckert und auch in der Debug-Liste waren keine Auffälligkeiten - ist schon ein bisschen schwach...
            NilsS' Debugger hat's aber bemerkt!

            Nach Ausbessern der Fehler ist der Baustein auch ohne "+0" wie erwartet gelaufen. Wieso sich diese Fehler so ausgewirkt haben, kann ich mir zwar nicht erklären, aber immerhin ist das Problem nun gelöst!

            Gruß
            GKap

            Kommentar

            Lädt...
            X