Ankündigung

Einklappen
Keine Ankündigung bisher.

Zuweisung im HS-Baustein funktioniert nicht

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

  • GKap
    antwortet
    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

    Einen Kommentar schreiben:


  • NilsS
    antwortet
    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.

    Einen Kommentar schreiben:


  • GKap
    antwortet
    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

    Einen Kommentar schreiben:


  • TRex
    antwortet
    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

    Einen Kommentar schreiben:


  • makki
    antwortet
    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

    Einen Kommentar schreiben:


  • GKap
    hat ein Thema erstellt HS/FS Zuweisung im HS-Baustein funktioniert nicht.

    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
Lädt...
X