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 !  

> 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&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