PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : HS-Logik programmiert ->Exceptionfehler



Benutzer
21.03.06, 15:50
Hi!
Versuch mich grad an der Programmierung eines eigenen Logikbausteins für den HS.

Jetzt hab ich folgenden Fehler von der Debugseite erhalten:

21.03.2006 15:17:09 (1)
File "/hs/compile/hs_logik.py", line 116, in addFormel
TypeError: len() of unsized object

So, und nu? Kann ich daraus irgendwie schliessen was da falsch ist?
Zumal mein Skript erst 72 Zeilen hat...

Nebenbei, gibt es auch eine andere Möglichkeit Bausteine zu testen/debuggen, ausser auf den Server zu laden und schauen wo er meckert?

Gruß
Ralf

Matthias Schmidt
21.03.06, 15:57
Nebenbei, gibt es auch eine andere Möglichkeit Bausteine zu testen/debuggen, ausser auf den Server zu laden und schauen wo er meckert?


Nö. Sowas wäre nur etwas für Weicheier :p !

Im Ernst, das Debugging kann durchaus den Familienfrieden stören.

Deine Fehlermeldung ist doch ganz eindeutig, oder nicht?

Ich baue meine Logiken Zeile für Zeile und teste auch fast nach jeder Zeile. Ist zwar langwierig, aber dafür weiß man sofort, wenn etwas hängt.

Poste doch mal deine 72 Zeilen, dann schaun wir mal.....

Benutzer
21.03.06, 16:00
Ich finde das nicht grad eindeutig...aber ok, bin noch in der Lernphase..



#_________________________________________________ ______________________________________#
# #
#Baustein zur Berechnung des Azimut und des Höhenwinkels der Sonne #
#_________________________________________________ ______________________________________#
# #
#ESCAD ENGINEERING GMBH #
#Autor: Ralf Häusler #
#(C) 2006 #
#_________________________________________________ ______________________________________#
# #
#Definition für HS Experte
#5000|"Kategorie\Bezeichung"|remanet(1/0)|Anz.Eingänge|"Bezeichung Eingänge x-mal"|Anz. Ausgänge|"Bezeichung Ausgänge x-mal"
5000|"ESCAD\Sonnenstand (Azimut+Elevation)"|1|3|"Längengrad"|"Breitengrad"|"Berechungszyklus (min)"|9|"JD"|"L"|"g"|"DELTA"|"ETA"|"ALPHA"|"RHO"|"Azimut"|"Elevation"
#Definition des Bausteins
#5001|Anzahl Eingänge|Anzahl Ausgänge|Anzahl Zeitspeicher|Anzahl Speichervariablen|Berechung bei Initialisierung(1/0)
5001|3|9|1|10|1
#Definition der Eingänge
#5002|Index|Init-Wert|Datenformat(0=Numerisch/1=Zahl)
5002|1|9.25|0
5002|2|47.9167|0
5002|3|4|0
#Definition der Speichervariable
#5003|Index|Init-Wert|Remanent(1=Ja/0=Nein)
5003|1|0|0 #Jahr manipuliert
5003|2|0|0 #Monat manipuliert
5003|3|0|0
5003|4|0|0
5003|5|0|0
5003|6|0|0
5003|7|0|0
5003|8|0|0
5003|9|0|0
5003|10|0|0
#Definition der Ausgänge
#5004|Index|Init-Wert|Runden auf binär|Ausgang-Typ(1=Send/2=SendByChange)|Datenformat(0=Numerisch/1=Zahl)
5004|1|0|0|2|0 #JD: Julianische Tageszahl
5004|2|0|0|2|0 #L: ekliptische Länge
5004|3|0|0|2|0 #g: mittlere Anomalie
5004|4|0|0|2|0 #DELTA: ekliptische Länge der Sonne
5004|5|0|0|2|0 #ETA: Schiefe der Ekliptik
5004|6|0|0|2|0 #ALPHA: Rektaszension
5004|7|0|0|2|0 #RHO: Deklination
5004|8|0|0|2|0 #Azimut
5004|9|0|0|2|0 #Elevation
#Definition einer Formelzeile
#5012|Abbruch bei !=0|Wenn!=0->Formel berechnen|Formel|Zeitbedingnung|Pin-Ausgang|Pin-Zeitspeicher|Pin-Speicher|Pin-Neg-Ausgang
#################################Julianische Tageszahl berechnen######################################
#Wenn (Monat<=2)->Jahr = JahrUTC -1;
5012|0|"(__import__('time').gmtime()[1])<=2"|"(__import__('time').gmtime()[0]-1)"|""|0|0|1|0
#Sonst Jahr = JahrUTC
5012|0|"(__import__('time').gmtime()[1])>2"|"(__import__('time').gmtime()[0])"|""|0|0|1|0
#Wenn (Monat<=2)->Monat = MonatUTC + 12;
5012|0|"(__import__('time').gmtime()[1])<=2"|"(__import__('time').gmtime()[1]+12)"|""|0|0|2|0
#Sonst Monat = MonatUTC
5012|0|"(__import__('time').gmtime()[1])>2"|"(__import__('time').gmtime()[0])"|""|0|0|2|0
#Tageszahl berechnen
5012|0|1|"abs(365.25*SN[1]+4716) + abs(30.6001*SN[2]+1) + (__import__('time').gmtime()[2]) + float(__import__('time').gmtime()[3]/24) + float(__import__('time').gmtime()[4]/60) + float(__import__('time').gmtime()[5]/1440) + abs(2-SN[1]/100 + (SN[1]/100)/4 -1524.5"|""|1|0|0|0
#Neuberechnen nach X Minuten
5012|1|"(EI or OC[1])"|""|"(EN[3]*60)"|0|1|0|0

Matthias Schmidt
21.03.06, 16:10
Ha, Sonnenstandsberechnung. Da habe ich auch 4 Wochen für meinen Baustein benötigt :mad: .


Ich schiebe es später mal auf meinen Demo-HS und schaue nach.....

Benutzer
21.03.06, 16:23
Richtig.
Danke für dein Angebot.
Dein Baustein hatte mich inspiriert, d.h. Ich habe hier den Sonnenschutz eingerichtet, aber der Bau ist nicht "eingenordet"; Schattenwurf hintereinander stehender Gebäude, Abgerundete West-Fassade bei der die hinteren Fenster vor Mai wohl keinen Sonnenschutz brauchen.
Tja, da fiel mir ein, dass ich da mal auf deiner HB was mit dieser Sonnenstandberechnung gesehen habe.
Dein Baustein passt mir allerdings so nicht. Hätte also ein riesen Logik-Netzwerk bauen müssen, oder dein Baustein abändern.
Ersteres wollte ich nicht, letzteres darf man nicht :cool: .
Ne, im Ernst, bevor ich mich in einen fremden Code rein hirne bau ich ihn lieber selber. Und der Sportsgeist ist da ja auch noch....
Formeln gabs bei Wikipedia.de und den Algo hab ich schon inVC++ erstellt. Der scheint auch zu funktionieren...
Ein VC++-HS-Konvertierer wäre nicht schlecht....

Was den Familienfrieden angeht, muss ich dir recht geben...
Bin erst seit Anfang Monat hier, aber nahezu alle kennen mich jetzt :D
Schade, dass Bekanntheit nicht unbedingt Beliebtheit ist.

Homeuser
21.03.06, 16:32
Schau mal hier:
http://www.eib-userclub.de/forum/showthread.php?t=3780

Vielleicht hilft das auch schon weiter?

Gruß
Michael

Michel
21.03.06, 16:36
Auf Anhieb fällt mir auf, daß eine Klammer in der Formel "Berechnung Tageszahl" fehlt:

+ abs(2-SN[1]/100 + (SN[1]/100)/4 -1524.5"|""|1|0|0|0Da zähle ich 2 geöffnete Klammern, jedoch nur eine geschlossene :)

Benutzer
21.03.06, 16:54
@Michel: Danke, dass war sicher falsch:) Allerdings läuft es immer noch nicht. Gleich Meldung

@HomeUser:
Danke für den Link, das Programm sieht vielversprechend aus.
Es liefert auch gleich mal zwei Fehler:

#5002|Index|Init-Wert|Datenformat(0=Numerisch/1=Text)
5002|1|9.25|0
5002|2|47.9167|0

Es meckert an den Zahlen 9.25 und 47.9167 rum
"Für das Datenformat 0(Nummerisch) ist dies kein legaler Wert"

Mit Komma frisst er nicht, und in Hochkommata auch nicht.


edit:
Hab die Werte einfach mal auf 1 gesetzt, und es funktioniert.
Es liegt also definitiv an den beiden Zahlen.
Warum?
Und wie hätte ich das aus der Debugmeldung rauslesen können. ich seh da keinen Zusammenhang.

Matthias Schmidt
21.03.06, 17:10
Die beiden Zahlen sind sicher nicht das Problem, solche Initwerte funktionieren bei mir....

Benutzer
21.03.06, 17:37
Das komische ist, dass ich die Eingänge ja noch gar nicht zur Berechung benutzt habe, Die stehen also nur da.
Ich beschalte sie auch nicht im Logik-Editor.
Ich hänge da lediglich 4byte Interne Variablen an, und gib die in Archivlisten aus.

:confused: HS = Head-Shake :confused:

JensD
21.03.06, 18:27
Hallo,

der Fehler liegt vermutlich in der Zeile:


#Tageszahl berechnen
5012|0|1|"abs(365.25*SN[1]+4716) + abs(30.6001*SN[2]+1) + (__import__('time').gmtime()[2]) + float(__import__('time').gmtime()[3]/24) + float(__import__('time').gmtime()[4]/60) + float(__import__('time').gmtime()[5]/1440) + abs(2-SN[1]/100 + (SN[1]/100)/4 -1524.5"|""|1|0|0|0


Und zwar muss die Zeile wie folgt lauten:
5012|0|"1"|...

oder

5012|0|""|...

Wichtig dabei sind die Hochkommas, diese dürfen nicht fehlen, da der HS hier ein Textfeld erwartet. Ist das Feld leer, wird die Formel ebenfalls ausgeführt.

Gruss Jens

Matthias Schmidt
21.03.06, 18:27
#5012|0|1|"abs(365.25*SN[1]+4716) + abs(30.600....

Die Zeile ist das Problem. Wie lautet denn da die Formel?

Michel
21.03.06, 18:40
#5012|0|1|"abs(365.25*SN[1]+4716) + abs(30.600....

Die Zeile ist das Problem. Wie lautet denn da die Formel?Ich tippe mal auf diese hier: http://www.zum.de/Faecher/A/Sa/LB2/A11G.HTM


<CENTER>Berechnung der Julianischen Tageszahl, der Ortssternzeit und des Stundenwinkels
</CENTER><CENTER>(geeignete Variante für programmierbare Taschenrechner und Computer)
</CENTER><CENTER>k = 1.0027379093 (Länge eines Sonnentages in Sterntage)
</CENTER><CENTER>a = 10000 * Jahr + 100 * Monat + Tag
</CENTER><CENTER>wenn Monat <= 2 , dann Monat = Monat + 12 und Jahr = Jahr - 1
</CENTER><CENTER>wenn a <= 15821004.1 , dann b = 2 + ganzzahliger Anteil von ((Jahr + 4716) / 4) - 1179
</CENTER><CENTER>sonst b = ganzzahliger Anteil von (Jahr / 400) - ganzzahliger Anteil von
</CENTER><CENTER>(Jahr / 100) + ganzzahliger Anteil von (Jahr / 4)
</CENTER><CENTER>a = 365 * Jahr - 679004
</CENTER><CENTER>MJD = a + b + ganzzahliger Anteil von (30.6001 * (Monat + 1)) + Tag + Stunde / 24
</CENTER>

Gaston
21.03.06, 21:49
Auf Anhieb fällt mir auf, daß eine Klammer in der Formel "Berechnung Tageszahl" fehlt:
Da zähle ich 2 geöffnete Klammern, jedoch nur eine geschlossene :)

Oh, dazu fällt mir ein dass mein Syntaxchecker jetzt auch die Klammern in den Formeln kontrolliert. Muss mal ein update hochschieben :D

Gruss,
Gaston

Benutzer
22.03.06, 08:27
So, erst mal danke für all eueren Hirnschmalz.

@Gaston: Super Tool! da findet mal zumindest mal die groben schnitzer

@JensD: Stimmt, das hatt der Gaston's Tool auch gesagt

@all
Ich hab mich in der Formel vertippt bzw. nicht richig die klammern gesetzt.
Hab es gestern noch hin bekommen, dass es die Julianische Zahl richtig berechnet.
Allerdings funktioniert es nur wenn ich die Eingänge nicht mit 9.25 bzw. 47.9167 initiiere.

Denk also net, dass es nun noch an der Formel liegen kann
Hier der neue Code:


#_________________________________________________ ______________________________________#
# #
#Baustein zur Berechnung des Azimut und des Höhenwinkels der Sonne #
#_________________________________________________ ______________________________________#
# #
#ESCAD ENGINEERING GMBH #
#Autor: Ralf Häusler #
#(C) 2006 #
#_________________________________________________ ______________________________________#
# #
#Definition für HS Experte
#5000|"Kategorie\Bezeichung"|remanet(1/0)|Anz.Eingänge|"Bezeichung Eingänge x-mal"|Anz. Ausgänge|"Bezeichung Ausgänge x-mal"
5000|"ESCAD\Sonnenstand (Azimut+Elevation)"|1|3|"Längengrad"|"Breitengrad"|"Berechungszyklus (min)"|15|"JD"|"L"|"g"|"DELTA"|"ETA"|"ALPHA"|"RHO"|"Azimut"|"Elevation"|"Debug 1"|"Debug 2"|"Debug 3"|"Debug 4"|"Debug 5"|"Debug 6"
#Definition des Bausteins
#5001|Anzahl Eingänge|Anzahl Ausgänge|Anzahl Zeitspeicher|Anzahl Speichervariablen|Berechnung bei Initialisierung(1/0)
5001|3|15|1|10|1
#Definition der Eingänge
#5002|Index|Init-Wert|Datenformat(0=Numerisch/1=Text)
5002|1|1|0 #Längengrad
5002|2|1|0 #Breitengrad
5002|3|4|0 #Berechungszyklus (min)
#Definition der Speichervariable
#5003|Index|Init-Wert|Remanent(1=Ja/0=Nein)
5003|1|0|0 #Jahr manipuliert
5003|2|0|0 #Monat manipuliert
5003|3|0|0
5003|4|0|0
5003|5|0|0
5003|6|0|0
5003|7|0|0
5003|8|0|0
5003|9|0|0
5003|10|0|0
#Definition der Ausgänge
#5004|Index|Init-Wert|Runden auf binär|Ausgang-Typ(1=Send/2=SendByChange)|Datenformat(0=Numerisch/1=Zahl)
5004|1|0|0|2|0 #JD: Julianische Tageszahl
5004|2|0|0|2|0 #L: ekliptische Länge
5004|3|0|0|2|0 #g: mittlere Anomalie
5004|4|0|0|2|0 #DELTA: ekliptische Länge der Sonne
5004|5|0|0|2|0 #ETA: Schiefe der Ekliptik
5004|6|0|0|2|0 #ALPHA: Rektaszension
5004|7|0|0|2|0 #RHO: Deklination
5004|8|0|0|2|0 #Azimut
5004|9|0|0|2|0 #Elevation
5004|10|0|0|2|0 #Debug 1
5004|11|0|0|2|0 #Debug 2
5004|12|0|0|2|0 #Debug 3
5004|13|0|0|2|0 #Debug 4
5004|14|0|0|2|0 #Debug 5
5004|15|0|0|2|0 #Debug 6
#Definition einer Formelzeile
#5012|Abbruch bei !=0|Wenn!=0->Formel berechnen|Formel|Zeitbedingnung|Pin-Ausgang|Pin-Zeitspeicher|Pin-Speicher|Pin-Neg-Ausgang
#################################Julianische Tageszahl berechnen######################################
#Wenn (Monat<=2)->Jahr = JahrUTC -1;
5012|0|"(__import__('time').gmtime()[1])<=2"|"(__import__('time').gmtime()[0]-1)"|""|0|0|1|0
#Sonst Jahr = JahrUTC
5012|0|"(__import__('time').gmtime()[1])>2"|"(__import__('time').gmtime()[0])"|""|0|0|1|0
#Wenn (Monat<=2)->Monat = MonatUTC + 12;
5012|0|"(__import__('time').gmtime()[1])<=2"|"(__import__('time').gmtime()[1]+12)"|""|0|0|2|0
#Sonst Monat = MonatUTC
5012|0|"(__import__('time').gmtime()[1])>2"|"(__import__('time').gmtime()[1])"|""|0|0|2|0
#Tageszahl berechnen
5012|0|""|"int(365.25*(SN[1]+4716)) + int(30.6001*(SN[2]+1)) + (__import__('time').gmtime()[2]) + float(__import__('time').gmtime()[3])/float(24) + float(__import__('time').gmtime()[4])/float(1440) + float(__import__('time').gmtime()[5])/float(86400) + int(2-SN[1]/100 + (SN[1]/100)/4) -1524.5"|""|1|0|0|0
#DEBUG-START
5012|0|""|"int(365.25*(SN[1]+4716))"|""|10|0|0|0
5012|0|""|"int(30.6001*(SN[2]+1))"|""|11|0|0|0
5012|0|""|"float(__import__('time').gmtime()[3])/float(24) + float(__import__('time').gmtime()[4])/float(1440) + float(__import__('time').gmtime()[5])/float(86400)"|""|12|0|0|0
5012|0|""|"int(2-SN[1]/100 + (SN[1]/100)/4)"|""|13|0|0|0
#DEBUG-ENDE
#Neuberechnen nach X Minuten
5012|1|"(EI or OC[1])"|""|"(EN[3]*60)"|0|1|0|0

@Michel:
Meine Formel zur Berechung des JD von http://de.wikipedia.org/wiki/Julianisches_Datum

wenn Monat>2 dann Y = Jahr, M = Monat
sonst Y = Jahr-1, M = Monat+12

D = Tag

H = Stunde/24 + Minute/1440 + Sekunde/86400

wenn Gregorianischer_Kalender dann A = Int(Y/100), B = 2 - A + Int(A/4) // Gregorianisch
sonst B = 0 // Julianisch

JD = Int(365,25*(Y+4716)) + Int(30,6001*(M+1)) + D + H + B - 1524,5


Wie gesagt, die Berechung funktioniert und stimmt auch meines erachtens.

Soweitmal
Gruß
Ralf

Benutzer
22.03.06, 09:04
Hi! Nochmal ich!

Also, der obige Code funktioniert so, auch mit den 9.25 hab es grad nochmal richtig getestet. (Hab gestern abend nur mit ganzzahligen Inits gerechnet und ging dann als es funktioniert einfach heim:rolleyes: )

Das einzige Problem ist noch, dass Gaston's Tool, dies als Fehler anzeigt.

@Gaston: Kleines Addon für die Bugliste :D

Vielen Dank für euere Hilfe!

Gruß
Ralf

Gaston
22.03.06, 10:20
Hi! Nochmal ich!

@Gaston: Kleines Addon für die Bugliste :D


Ähm, ja, das mit den Fliesskommazahlen in der Initliste ist mir bekannt. Ich schau danach. Ist mir letzte Woche auch aufgefallen als ich an meinem Sonnenauf/untergangs baustein gebastelt habe.

Ich muss mal schauen ob ich das irgendwie schnell verbesserkann, denn eigentlich bin ich an einem weiteren Feature am Arbeiten und zwar um Eingänge, und Ausgänge automatisch einzufügen. Z.B Baustein mit 10 Eingängen, möchte ich einen hinzufügen aber am besten wäre es wenn er als EN[3] fungieren würde. Das Tool soll dann alle EN[3-10] nach EN[4-11] veschieben einschlieeslich der Referenzen darauf, und dann E[3] definieren.

Gruss,
Gaston