Re: Zeituhr für Heizung Kategorie: Programmierung (von Guido, http://ferienwohnung-wiekert.de - 8.07.2003 22:12) | |
Als Antwort auf Re: Zeituhr für Heizung von André H. - 8.07.2003 22:02
| |
Haloo André ich danke Dir für deine schelle Antwort und werde Deine Tips befolgen. Bin ja noch Anfänger;-) Mfg Guido > Hallo Guido, > > > ach ja welche Module benotige ich nochmal für das Relaisboard I²C??? > > Das ist das Modul pcf.c2 . > > > function kennl(int Tout, int steigung, int parallel) returns int// ermittlung der Zeit > > // ermittlung der Vorlauftemp in Abhängigkeit der Zeit > > { > > long TSoll; > > TSoll=getSoll(Tout,steigung,parallel); > > std=system.hour(); > > min=system.minute(); > > if ((std == 22)and(min == 30))or((std == 8)and(min==00)); > > { > > a=constant.ON; > > } > > if ((std == 6)and(min==00))or((std==15)and(min==30)); > > { > > a=constant.OFF; > > } > > if a==constant.ON ; > > { > > TSoll=TSoll-300; > > } > > if a==constant.OFF; > > { > > TSoll=TSoll; > > } > > return TSoll; > > } > > Also, fangen wir mal an: > Als erstes sehe ich, da� Du einen Grundlegenden Fehler im Syntax machst. > Und zwar bei den if-Abfragen ! Diese dürfen nicht mit einen Semikolon enden ! > Es wird sonst das nachstehende in den geschweiften Klammern immer ausgeführt, > da dies dann nicht mehr als if-bedingte Anweisung behandelt wird. > Bsp.: > > if Bedingung ; Anweisung; > ist gleichbedeutend mit > if Bedingung { } > Anweisung; > Hier sieht man, da� die Anweisung nichts mehr mit der If-Abfrage zu tun hat. > Kurz, entferne die Semikolons hinter den If-Abfragen ! > Der Korrekte Syntax lautet: > if Bedingung Anweisung; > oder > if Bedingung { Anweisung_1; Anweisung_2; ... ; Anweisung_n} > Das zum Syntax. > > Nun zur Routine selbst: > Im Prinzip funktioniert es so (, wenn die Semikolons bei den Ifs entfernt werden). > Jedoch kann der direkte Zeitvergleich zu Problemen führen. > Um einen Vergleich zu Analogen Schaltuhren zu machen: > Du hast die Routine so aufgebaut, wie eine Schaltuhr mit steckbaren Reitern. > Es wird zu einer bestimmten Zeit das flag gesetzt und irgendwann anders wieder > zurückgesetzt. > Im Normalbetrieb funzt dies auch, jedoch kann es passieren, da� Schaltzeiten > einfach übersprungen werden, wenn z.B. selbige geändert werden oder sich die > Zeit selbst durch ein Einstellen (So/Wi, DCF-Sync etc.) ändert. > Hier ist es besser, mit einer Abfrage zu prüfen, ob die aktuelle > Uhrzeit sich im vorgegebenen Zeitraum befindet. > Dazu ist es sinnvoll, sich ein Time-Serial-Format zu bilden. > Das einfachste wäre hhmm: > Bsp.: > time=hour*100 + minute > Aus 15:08 wird dann 1508 . > Eleganter wäre es natürlich, statt mit hunndert, mit 60 zu multiplizieren: > time=hour*60 + minute > Aus 15:08 wird dann 908 . > > Die komplette Abfrage kann dann so aussehen: > > if (time>=SU1ein and time<SU1aus) or (time>=SU2ein and time<SU2aus) > flag=1; > else > flag=0; > > Allerdings gibt es hier ein anderes Problem: Der Tageswechsel ! > Dieses Zeitformat fängt um 0:00 mit 0 an und geht bis 1439 um 23:59 . > Um dies zu lösen gibt es ettliche Ansätze. > Das einfachste wäre natürlich dafür zu sorgen, da� es nie dazu kommt, > da� über den Tageswechsel etwas geschalten wird. > In Deinem Fall wäre dies sogar recht einfach. Du setzt Dein Flag, wenn > es zu einer Nachtabsenkung kommen soll. Drehst Du das Ganze um, > dann funzt die obige Abfrage. Das löst aber das Problem nicht wirklich. > > Eine weitere Möglichkeit wäre folgende: > > if (SU1aus - SU1ein) >=0 > term1=not (time<SU1ein and time>=SU1aus); > else > term1=time>=SU1ein and time<SU1aus; > > if (SU2aus - SU2ein) >=0 > term2=not (time<SU2ein and time>=SU2aus); > else > term2=time>=SU2ein and time<SU2aus; > > if term1 or term2 > flag=1; > else > flag=0; > > Es gibt aber noch X weitere Lösungsansätze. > Aber jetzt alle aufzulisten, würde zu lange dauern. > > MfG André H. Meine Seite: http://ferienwohnung-wiekert.de | |
Antwort schreiben Antworten: Re: Zeituhr für Heizung korrekt ? (von Milf. - 12.07.2003 23:06) Re: Zeituhr für Heizung korrekt ? (von André H. - 13.07.2003 9:17) |