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
Ankündigung
Einklappen
Keine Ankündigung bisher.
Zuweisung im HS-Baustein funktioniert nicht
Einklappen
X
-
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
jetzt befindest du dich im Debugger.Code:python.exe -d -i 10666_deineLogik.hsl
tippe
um die erste ausführung durchlaufen zu lassen (EI=1)Code:run
jetzt kannst du mit
dir die Ein/Ausgänge anzeigen lassenCode:names
und z.B.
um eine 5000 an Eingang 5 zu schicken.Code:EN[5]=5000
Die wird jetzt aber noch nicht ausgeführt, sondern erst wenn du erneut
eingibst.Code:run
jetzt kannst du z.B.
benutzen, um alle Variablen und ihre Werte zu sehen.Code:show
Einen Kommentar schreiben:
-
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.
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!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 ################################################################################
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.Zitat von makki Beitrag anzeigenDa müsste man das ganze sehen; Datentypen am Eingang, was wurde vorher in SN1 geschrieben, wie wird es danach ausgewertet usw.
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.
Ich habe leider mit Python (ausser beim HS) keine Erfahrung und kenne auch die Entwicklungsumgebung nicht. Werde das mal probieren...Zitat von makki Beitrag anzeigenTipp: einfach mal in der python idle-shell das zuweisen und auswerten von EN5, SN1,2 usw. nachspielen.
Das ist richtig, auf E2 gibt es keine Events.Zitat von TRex Beitrag anzeigenich glaube, daß Du ja am E2 keinen "Event" bekommst, deshalb steht da nix drin. Versuch mal den E2 Remanent zu machen, dann gehts vermutlich
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:
-
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:
-
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:
-
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


Einen Kommentar schreiben: