Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> 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&lt;SU1aus) or (time>=SU2ein and time&lt;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: > > <font face="courier new" size=2>if (SU1aus - SU1ein) >=0 > term1=not (time&lt;SU1ein and time>=SU1aus); > else > term1=time>=SU1ein and time&lt;SU1aus; > > if (SU2aus - SU2ein) >=0 > term2=not (time&lt;SU2ein and time>=SU2aus); > else > term2=time>=SU2ein and time&lt;SU2aus; > > if term1 or term2 > flag=1; > else > flag=0; > </font> > Es gibt aber noch X weitere Lösungsansätze. > Aber jetzt alle aufzulisten, würde zu lange dauern. > > MfG André H.
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB