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

Re: tägliche Ansteuerung Kategorie: Programmierung (von André H. - 3.01.2012 1:25)
Als Antwort auf Re: tägliche Ansteuerung von Rene - 26.12.2011 13:14
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, C-Control II Station, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.1
Hallo Rene,


> also ich habe das jetzt geändert, die Sekunden werden
> aber immer noch nicht geschalten, ich vermute langsam das
> die C2 das garnicht hinbekommt.

Natürlich bekommt das die CC2 hin.
Es ist aber natürlich einfacher, den Fehler in der Hardware zu suchen.


Jörg hat Dir zwar auf das meiste geantwortet, aber hier noch ein paar Ergänzungen:

> > > 1)  time=system.hour()*10000 + system.minute()*100 + system.second();
> > > Wenn du system.hour mal 100 nimmst, kommst Du nie über 8259 (2300+5900+59) hinaus.

Eine Multiplikation mit einem zu erwartendem Ergebnis von über 32767 funktioniert
nur, wenn einer der beiden Operanden mindestens vom Typ Long ist.
Ansonsten wird als Integer gerechnet.
Wenn keiner der Operanden dem Wertebereich des zu erwartendem Ergebnisses entspricht,
mu� man im Programm eine Berechnung in einem höherem Variabeltyp erwingen.
Dafür gibt es hier zwei Möglichkeiten:
1. Einen Wert in eine Long-Variable zwischenspeichern.
z.B.:
long hour;
hour=system.hour();
 time=hour*10000 ...


2. Den Variabeltyp erwingen:
time=cast.intLong(system.hour())*10000 ...

Der Umgang mit Variabeltypen und derren Wertebereiche sind absolute Grundlagen, in
nahezu jeder Programmiersprache.


> > > 3) Bedingungen einklammern:
> > > if (time >= 220010  and time <= 222555) or (time >= 222905 and time <= 230148)
> > > Besser ist dass...

Von der Ã?bersichtlichkeit ist das zu bevorzugen.
Allerdings haben Und-Verknüpfungen eine höhere Priorität als Oder-Verknüpfungen.
Eine Tabelle mit der Rangfolge der Operatoren befindet sich im Umschlag
des CC2-Unit-Handbuchs.

> > > Zu Deiner zweiten Frage:
> > > Wenn der thread dauerhaft läuft, sollte er auch seine tägliche Arbeit verrichten.
> > > Zum Starten der threads: Starte diese in main, jedoch vor dem loop.

Das gilt aber nur für Threads die dauernd laufen sollen.
Wo ein Thread sinnvoll gestartet wird, hängt vom Programm ab.
Es gibt auch Anwendungen für Threads, bei denen diese nur zu bestimmten "Zeiten"
laufen sollen.


> > > > ich habe zwei Probleme mit der Zeitsteuerung.

Das Problem ist nicht die Zeitsteuerung, sondern das Grundverständnis
der Datentypen, derren Anwendungen, und wie man einen seriellen Zeitstempel erstellt.

> > > > thread regen
> > > > {
> > > >   byte port;
> > > >   byte rel;
> > > >   byte hour, min, sec;
> > > >   int  state;
> > > >   int  time;


Mit Integer als Datentyp bist Du auf Werte von -32768 bis +32767 begrenzt.
D.h. die höchts darstellbare Zeit im Format hhnnss wäre 3 Uhr 27 Minuten und 67 Sekunden.
Ein Long-Integer ist hier zwingend erforderlich.


> > > > time=system.hour()*100 + system.minute()*100 + system.second();

Das kann nicht funktionieren, da Du Stunde und Minute addierst. Das macht irgendwie
keinen Sinn.
Wenn time eine Longvariable ist, muÃ? es folgendermaÃ?en aussehen:
time=cast.intLong(system.hour())*10000 + system.minute()*100 + system.second();

Die restlichen Kleinigkeiten lasse ich mal aus.

MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: