5. Softwarebausteine Teil 1.5    Zeitschaltuhr    (Stand: 5.06.2008)   zurück zu Softwarebausteine Anfang

Schaltuhr_allgemein  Zeitschaltuhr, feste Uhrzeiten im Programm

Schaltuhr_mit_Zufallsgenerator z.B. für Rollladen oder Beleuchtung  NEU

Wochen_Schaltuhr  Schaltzeiten je Wochentag (Montag bis Samstag), Monat, Wochen-Nummer NEU

Schaltuhr_Startzeit mit Zeitbegrenzung (Einschaltdauer)

Schaltuhr_Startzeit_variabel    Wählbare Uhrzeit 

Tages-Schaltuhr mit Datum  Heizung nach dem Urlaub starten  NEU

mit Anzeige auf PC-Bildschirm und PC-Eingabe des Datums

   Weiter zu  Softwarebausteine_Teil_2

Port-Erweiterung mit I2C-Bus PCF... Station V1.1 an Ports   unveränderte Station

LCD, Temperatur-Sensor DS 1631, I2C-Bausteine (Assembler)

   Weiter zu  Softwarebausteine_Teil_3

Variable in RAM-Zelle,  freie Bytes nutzen  

EEPROM Variable, einfache oder komfortable Lösung

Werte remanent speichern, einzelne Variable, gepackte Variable, Schieberegister

Beispiele: Betriebsstunden je Tag,  je Woche oder je Monat, Daten komprimieren

   Weiter zu  Softwarebausteine_Teil_4

Bildschirm-Bedienung mit PC, Bedienmenue und Anzeige 

Tastatatur mit LED-Quittung der Station,

 LED und LCD –Anzeigen des IO-Terminals

 Einbindung Treiber IO-Teminal

Tastatur ,  Methode der Fehleranalyse und Fehlerbeseitigung

LCD-Anzeige Applikationsboard  mit Software Tastatur-Test und LCD

Fertige Programme:  Tastatur, Zeichenvorrat LCD, byte , word, HEX-Zahl, ASCII ,

                                Relais schalten, Schrittsteuerung mit Wartezeit, Text- und Zahlenausgabe


Es gibt nur einfache Lösungen. Einziges Problem:
Man muss sie finden.

 (Robert M. Pirsig, amerik. Schriftsteller)

 

5.1.0) Define    allgemein   Zeitimpulse siehe Tipps

define  Wert12             word[4]  ' = Byte 7,8 Zwischenspeicher

define  Uhrzeit              word[4]  ' wie vor, jedoch anderer Text

define  wert1                byte [7]  ' = word 4 Zwischenspeicher

define  wert2               byte [8]  ' = word 4 Zwischenspeicher

define  Minpuls            Bit [ ]   ' Bit Impuls (einmal je Minute)

define  Wartezeit          byte [ ] '

nach_oben

5.1.5) Zeitschaltuhr allgemein

(1) Die if-Abfrage  der Schaltuhr mit nur einer Zeile ist meistens fehlerhaft.

Hier zeigt sich deutlich, dass diese Zeile schwer zu lesen ist. Sie enthält außerdem Fehler (21 Uhr Aus, 13 Uhr Ein,..).

if   (hour > 6 and hour < 12 and minute < 15) or (( hour > 20 and minute> 30) and hour < 22) then goto Ein

Die folgenden einzelnen Abfragen sind strukturiert und damit einfacher zu verstehen. Sie entsprechen den „Reitern“ der mechanischen Schaltuhr.

 

(2) Die folgende Software-Schaltuhr schaltet ein von 6 Uhr bis 12 Uhr 15 und von 20 Uhr 30 bis 22 Uhr.

Außerhalb dieser Bereiche schaltet sie aus.

Der Schaltzustand bei aktueller Uhrzeit lässt sich leicht erkennen, weil vergangene Schaltzeiten nicht mehr betrachtet werden müssen.

Bei Verknüpfung mit Minute muss zusätzlich auch die folgende Stunde allein angegeben werden. Einfacher ist die Lösung (3).

Die interne Uhr hat manchmal Fehler beim Stundenwechsel z.B.:  20:59 20:00 21:00 (Rücksprung auf 20:00).

If second = 0 or second = 59 then goto Ende ' (verhindert Fehler beim Stundenwechsel)

Achtung: Die Reihenfolge der Schaltzeiten (Beginn mit spätester Zeit) muss eingehalten werden. 

if  hour >= 22 then goto  Aus

if  hour >= 21 then goto Ein ' Die volle Stunde muss auch angegeben werden.
if  hour >= 20 and minute >= 30 then goto  Ein

if  hour >= 13 then goto Aus ' Die volle Stunde muss auch angegeben werden.
if  hour >= 12 and minute >= 15 then goto Aus

if  hour >= 6 then goto Ein

' Aus ab Uhrzeit 00:00

#Aus

K1 = OFF
goto Ende
#Ein
K1 = ON
#Ende


 (3) Einfache Zeitschaltuhr

Einfach und sicher ist die Zusammenfassung von hour und minute.

Dabei wird die if-Abfrage  leicht lesbar (2030 für 20 Uhr 30).

 If second = 0 or second = 59 then goto Ende ' (verhindert Fehler beim Stundenwechsel)   

 Uhrzeit = hour *100 + minute ' aktuelle Uhrzeit zwischenspeichern für die Auswertung

Achtung: Die Reihenfolge der Schaltzeiten (Beginn mit spätester Zeit) muss eingehalten werden.

if  Uhrzeit >= 2200  then goto  Aus

if  Uhrzeit >= 2030  then goto  Ein '  Uhrzeit 20:30 lässt sich minutengenau vorgeben

if  Uhrzeit >= 1205  then goto  Aus

if  Uhrzeit >= 1137  then goto  Ein '  Uhrzeit 11:37 lässt sich minutengenau vorgeben

if  Uhrzeit >=    710  then goto  Aus
if  Uhrzeit >=    600  then goto  Ein
' EIN ab Uhrzeit 6:00

' Aus ab Uhrzeit 00:00

#Aus

K1 = OFF
goto Ende
#Ein
K1 = ON
#Ende

Mit dem Vergleich   >=   wird sichergestellt, dass auch bei größerem Zeitwert der Uhr z.B. bei Start des Programms um 8 Uhr eingeschaltet wird.

Vor 6 Uhr läuft obiges Programm in die Ausschaltposition.

Soll über Mitternacht (z.B. Beleuchtung) eingeschaltet sein, lauten die Schaltzeiten:

if  Uhrzeit >= 2030  then goto  Ein  '  Uhrzeit  20:30  EIN
if  Uhrzeit >=   700  then goto  Aus
'  Uhrzeit   7:00  AUS
if  Uhrzeit >=       0  then goto  Ein  
'  Uhrzeit 00:00  bleibt EIN

Oder Programmteil #Ein wird vor #Aus gesetzt.

(4) Sekunden werden beigefügt bei Abweichung von 0 Sekunden (nur bei Aus):

if  Uhrzeit >= 2031  then goto  Aus '  (AUS  ab neuer Minute sicherstellen)

if  Uhrzeit >= 2030 and second >= 37  then goto  Aus '  Uhrzeit lässt sich sekundengenau vorgeben
if  Uhrzeit >= 2030   then goto  Ein
'  Einschaltung von 0 bis 37 Sekunden Uhrzeit

oder früher  einschalten (2028 anstelle 2030)

if  Uhrzeit >= 2028   then goto  Ein '  Einschaltung 2 Minuten  37 Sekunden 

 

(5) Sonderfall  Abweichung von 0 Sekunden (bei Ein und Aus innerhalb derselben Minute):

if  Uhrzeit >= 2031  then goto  Aus '  (AUS  ab neuer Minute sicherstellen)

if  Uhrzeit >= 2030 and second >= 37  then goto  Aus '  Uhrzeit lässt sich sekundengenau vorgeben
if  Uhrzeit >= 2030 and second >= 15  then goto  Ein
'  Einschaltung von 15 bis 37 Sekunden Uhrzeit 

if  Uhrzeit >= 2030  then goto  Aus '  (AUS  bis 15 Sekunden Uhrzeit sicherstellen)

 

(6) Sonderfall   Abweichung von 0 Sekunden (bei Ein und Aus über mehrere Minuten):

if  Uhrzeit >= 2034  then goto  Aus '  (AUS  ab neuer Minute sicherstellen)

if  Uhrzeit >= 2033 and second >= 37  then goto  Aus '  Uhrzeit lässt sich sekundengenau vorgeben

if  Uhrzeit >= 2031  then goto  Ein ' Fortsetzung Einschaltung in den nachfolgenden Minuten 
if  Uhrzeit >= 2030 and second >= 15  then goto  Ein
'  Einschaltung von 15  Sekunden Uhrzeit 

if  Uhrzeit >= 2030  then goto  Aus '  (AUS  bis 15 Sekunden Uhrzeit sicherstellen)

nach_oben

5.1.6) Einfache Zeitschaltuhr mit Zufallsgenerator

Ein- oder Ausschaltzeiten können auch variiert werden, um z.B. Rollladen oder Beleuchtung während des Urlaubs nicht täglich zum gleichen Zeitpunkt zu schalten.

(1) mit Zufallsgenerator Befehl RAND

define Zufallszahl   byte

Randomize = 255

In dem folgenden Beispiel sorgt eine Zahl des Zufallsgenerators für unregelmäßiges Ein- und Ausschalten.

Für Ausschalten muss eine eigene Zufallszahl_Aus gebildet werden, wenn die Einschaltdauer zufällig sein soll.

If second = 0 or second = 59 then goto Ende ' (verhindert Fehler beim Stundenwechsel)   

Uhrzeit = hour *100 + minute ' aktuelle Uhrzeit zwischenspeichern für die Auswertung

Achtung: Die Reihenfolge der Schaltzeiten (Beginn mit spätester Zeit) muss eingehalten werden.

if  Uhrzeit >= 2200   then goto  Aus

if  Uhrzeit >= 2100 + Zufallszahl   then goto  Ein '  Schaltzeit 21:00 bis 20:14
if  Uhrzeit >= 1215  then goto  Aus
if  Uhrzeit >=   600 + Zufallszahl   then goto  Ein

#Aus '  Bildung der Zufallszahl an der Aus-Flanke von K1

if K1 = ON then Zufallszahl = RAND MOD 15 '  Zufallszahl wird 0 bis 14 für Ein

K1 = OFF
goto Ende
#Ein
K1 = ON

#Ende

(2) Ein- und Ausschaltzeiten variiert je Tag

Einfacher ist dieses Beispiel. Die folgenden Pseudo-Zufallszahlen sind für unregelmäßiges Schalten besser geeignet als Zahlen vom Zufallsgenerator, weil immer ein großer Abstand zum Vortag gebildet wird und nicht zufällig die gleiche Zahl entstehen kann.

5 * DAY MOD 13 bildet die Reihe 5, 10, 2, 7, 12, 4,   9, 1,   6, 11,   3, 8, 0, (5, 10,.....) 

7 * DAY MOD 13 bildet die Reihe 7,   1, 8, 2,  9,  3, 10, 4, 11,   5, 12, 6, 0, (7, 1,.....)

Diese Zahl je Tag sorgt für unregelmäßiges Einschalten und Ausschalten.

If second = 0 or second = 59 then goto Ende ' (verhindert Fehler beim Stundenwechsel)   

Uhrzeit = hour *100 + minute ' aktuelle Uhrzeit zwischenspeichern für die Auswertung

Achtung: Die Reihenfolge der Schaltzeiten (Beginn mit spätester Zeit) muss eingehalten werden.

if  Uhrzeit >= 2200 + 5 * DAY MOD 13   then goto  Aus '  Schaltzeit 22:05, 22:10, 22:02,..., 22:00
if  Uhrzeit >= 2101 + 7 * DAY MOD 13   then goto  Ein  
'  Schaltzeit 21:08. 21:02. 21:09,… 21:01
if  Uhrzeit >= 1215 + 5 * DAY MOD 13   then goto  Aus
if  Uhrzeit >=   600 + 7 * DAY MOD 13   then goto  Ein

#Aus

K1 = OFF
goto Ende
#Ein
K1 = ON

#Ende

nach_oben

5.1.7) Wochentag-Schaltuhr , Monats-Schaltuhr, Wochen-Nummer-Schaltuhr

If second = 0 or second = 59 then goto Ende ' (verhindert Fehler beim Stundenwechsel)

Uhrzeit = hour *100 + minute ' aktuelle Uhrzeit zwischenspeichern für die Auswertung

Dow = Dow MOD 7 ' Festlegung Sonntag = 0 bis Samstag = 6

1)      'Verzweigung Wochentag

ON Dow  goto Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag

'FehlerNr = 1  ' Dow Zahl falsch (Kontrolle)

goto Ende

#Sonntag

'Achtung: Die Reihenfolge der Schaltzeiten (Beginn mit spätester Zeit) muss eingehalten werden.

if  Uhrzeit >= 2230  then goto  Aus

if  Uhrzeit >=  810  then goto   Ein

goto Aus

#Montag

if  Uhrzeit >= 2230  then goto  Aus '  Uhrzeit 22:30 lässt sich minutengenau vorgeben

if  Uhrzeit >=  730  then goto  Ein

goto Aus

#Dienstag

if  Uhrzeit >= 1900  then goto  Aus

if  Uhrzeit >=  730  then goto  Ein

goto Aus

#Mittwoch

usw.

#Aus

K1 = OFF
goto Ende
#Ein
K1 = ON
#Ende

2)      Monat statt Wochentag

ON Month  goto Januar, Januar, Februar, Maerz, usw.

3)      Wochen-Nummer (Errechnen siehe Kapitel Tipps)

ON WochenNummer goto Woche1, Woche1, Woche2, Woche3, usw.

nach_oben

5.1.8) Zeitschaltuhr  Startzeit und Zeitbegrenzung

Beispiel: Beregnungsanlage (Zeitimpulse siehe oben)

Anmerkung:  Messung der Erdfeuchte (Bodenfeuchte) siehe Regeltechnik

Der Minuten-Impuls verhindert den Uhrenfehler (z.B. 16:59 16:00 17:00) beim Stundenwechsel.

Außerdem stellt er sicher, dass nur einmal innerhalb der Minute eingeschaltet wird.

(1)   Einfache Schaltuhr mit einer Einschaltdauer im Sekundenbereich

If K1 = ON then goto EIN 'wenn EIN, dann wird die Zeitbegrenzung bearbeitet

if MinPuls = OFF then goto weiter1 '(K1 ist aus) wenn Minuten-Impuls aus, dann weiter Ende Schaltuhr

'Startzeiten hhmm

Uhrzeit = hour*100 + minute

if Uhrzeit =   600 then goto Ein 'dort 30 Sekunden Einschaltdauer

if Uhrzeit = 1030 then goto Ein

if Uhrzeit = 1645 then goto Ein

goto weiter1

#EIN

'Zeitbegrenzung  1 bis 55 Sekunden möglich (Einschaltdauer)

K1 = (second  < 30) 'z.B. EIN solange Uhrzeit kleiner 30 Sekunden

#weiter1

Weitere Variante

Zeitbegrenzung im Programm durch einstellbare Variable vorgeben

K1 = (second  < Variable) 'EIN, solange Uhrzeit kleiner als variable Sekunden (1 bis 55)

(2)   Einfache Schaltuhr mit einer Einschaltdauer im Minutenbereich

Die Schaltuhr startet z.B. 10:30 und wird bei Zeitbegrenzung  z.B. 5  Minuten abgeschaltet.

If K1 = ON then goto EIN  'wenn EIN, dann wird die Zeitbegrenzung bearbeitet

If second = 0 or second = 59 then goto Ende ' (verhindert Fehler beim Stundenwechsel)

'Startzeiten hhmm

Uhrzeit = hour*100 + minute

if Uhrzeit =   600 then goto Ein '  dort Minuten Einschaltdauer

if Uhrzeit = 1030 then goto Ein

if Uhrzeit = 1610 then goto Ein

goto weiter2

#EIN

'Zeitbegrenzung 1 bis 9 Minuten möglich (bei Startzeiten 10 Minutenraster)

K1 = (minute MOD 10  < 5) 'Ein solange Uhrzeit kleiner 5 Minuten

#weiter2

Weitere Variante

Zeitbegrenzung im Programm durch einstellbare Variable vorgeben

K1 = (minute MOD 10  < Variable) 'Ein solange Uhrzeit kleiner als variable Minuten (1 bis 9)

(3)   Schaltuhr mit  Einschaltdauer wählbar im Sekunden- und Minutenbereich

If K1 = ON then goto Zeitbegrenzung 'wenn EIN, dann wird die Zeitbegrenzung bearbeitet

if MinPuls = OFF then goto weiter '(K1 ist aus) wenn Minuten-Impuls aus, dann weiter Ende Schaltuhr

'Startzeiten hhmm

Uhrzeit = hour*100 + minute

if Uhrzeit =   600 then goto Ein24       '24 Sekunden Einschaltdauer

if Uhrzeit = 1030 then goto Ein120   '120 Sekunden

if Uhrzeit = 1645 then goto Ein24     '24 Sekunden

if Uhrzeit = 2015 then goto Ein1020 '1020 Sekunden (max 17 Minuten)

goto weiter

'Einschaltzeiten Sekunden (Zeitbegrenzung)

#Ein24

Wartezeit = 6 ' x4 Sekunden (wegen 4-Sec-Impuls)

goto EIN

#Ein120

Wartezeit = 30 ' x4 Sekunden

goto EIN

#Ein1020 'Maximalzeit wegen Byte

Wartezeit = 255 ' x 4 Sekunden (= 17 Minuten)

#EIN

K1 = ON

goto weiter

#Zeitbegrenzung  ' (Einschaltdauer)

if wartezeit = 0 then goto AUS  'wenn Wartezeit abgelaufen, dann Ausschalten

if sek4Puls = Off then goto weiter

Wartezeit = Wartezeit –1 ' Wartezeit läuft rückwärts

goto weiter

#AUS

K1 = OFF

#weiter

nach_oben

5.1.9) Zeitschaltuhr  Startzeit aktuelle Uhrzeit mit Zeitbegrenzung

Vorteil: Die Schaltzeiten können vom Programm variabel vorgegeben werden.

Beispiel: Zeitbegrenzung (möglich ist auch Einschaltverzögerung)

Durch Startsignal z.B. Tastschalter wird Relais K1 eingeschaltet. Nach einigen Stunden soll es wieder ausgeschaltet werden (Zeitbegrenzung).

Die Uhrzeit zum Abschalten darf den Tag überschreiten, z.B. 23 Uhr + 4 Stunden ergibt 27 Uhr. Bei Tagwechsel werden also 24 Stunden abgezogen, dadurch entsteht die richtige Abschaltzeit 3 Uhr.

Define SchaltUhrzeit word

If second = 0 or second = 59 then goto weiter ' (verhindert Fehler beim Stundenwechsel)   

(1)   Einfache Schaltuhr für zeitbegrenztes Einschalten maximal 23 Stunden

If K1 = ON then goto Zeitbegrenzung1 'wenn EIN, dann wird die Zeitbegrenzung bearbeitet

If  StartTaster = OFF then goto weiter1

K1 = ON        'Start der zeitbegrenzten Einschaltung

'Schaltzeit hhmm setzen, hier fest 4 Stunden statt einer Variablen.

SchaltUhrzeit  = (hour + 4) *100 + minute ' Uhrzeit für Abschalten (Zeitbegrenzung)
Goto weiter1

#Zeitbegrenzung1

if MinPuls = OFF then goto weiter1 '  Minuten-Impuls erfolgt bei 5 Sekunden (siehe Zeittakte)

' Bei Tagwechsel werden gegebenenfalls 24 Stunden abgezogen
if hour > 0 or minute > 0 then goto   weiterZeit1   ' kein Tagwechsel
' Beim Tagwechsel wird geprüft, ob 24 Stunden abgezogen werden müssen

' if SchaltUhrzeit > 23 * 100 + 59 then SchaltUhrzeit = SchaltUhrzeit 24 *100

if SchaltUhrzeit > 2359 then SchaltUhrzeit = SchaltUhrzeit – 2400

#weiterZeit1

Uhrzeit = hour *100 + Minute 'aktuelle Uhrzeit
if Uhrzeit <  SchaltUhrzeit  then goto weiter1 'ohne Abschaltung
'Schalten bei Erreichen der Schalt-Uhrzeit
K1 = OFF ' Abschalten von K 1
#weiter1

(2)   Schaltuhr für zeitbegrenztes Einschalten in Stunden und Minuten

Stunden und Minuten sind beliebig wählbar, also auch z.B. 72 Minuten (max 23 Stunden 59 Minuten).

If K1 = ON then goto Zeitbegrenzung2 'wenn EIN, dann wird die Zeitbegrenzung bearbeitet

If  Start = OFF then goto weiter2

K1 = ON        'Start der zeitbegrenzten Einschaltung

'Schaltzeit hhmm setzen, hier fest 4 Stunden und 37 Minuten statt Variable

wert2 = minute + 37 ' wenn 59 überschritten werden, wird korrigiert

wert1 = hour + 4 + wert2 / 60 ' z.B. Uhrzeitminute 40 +37 ( 77/60 = 1 Stunde, Rest 17)  

wert2 = wert2 MOD 60 ' z.B. 17 Minuten

SchaltUhrzeit  = wert1*100 + wert2 ' Uhrzeit für Abschalten (Zeitbegrenzung)
Goto weiter2

#Zeitbegrenzung2

if MinPuls = OFF then goto weiter2 '  Minuten-Impuls erfolgt bei 5 Sekunden (siehe Zeittakte)

' Bei Tagwechsel werden gegebenenfalls 24 Stunden abgezogen
if hour > 0 or minute > 0 then goto   weiterZeit2   ' kein Tagwechsel
' Bei jedem Tagwechsel wird geprüft, ob 24 Stunden abgezogen werden müssen
if SchaltUhrzeit > 2359 then SchaltUhrzeit = SchaltUhrzeit - 2400

#weiterZeit2

Uhrzeit = hour *100 + Minute 'aktuelle Uhrzeit
if Uhrzeit <  SchaltUhrzeit  then goto weiter2 'ohne Abschaltung
'Schalten bei Erreichen der Schalt-Uhrzeit
K1 = OFF
' Abschalten von K 1
#weiter2

 nach_oben

5.1.10) Tages-Schaltuhr mit wählbarem Datum

Beispiel: Die Heizung soll am Ende des Urlaubs automatisch einschalten.

Der Start-Tag (Datum) wird mit Tastatur des PCs gewählt. Jahresüberlauf bei Eingabe automatisch.

Die Daten werden im EEPROM gespeichert. Bausteine zu EEPROM siehe Teil 3

Status Urlaub und Start Datum wird angezeigt.

(1)   Definitionen

Define  wert12             word [4]

Define  wert1               byte  [7]

Define  wert2               byte  [8]

Define  Key_Ext          byte

Define  AnzeigeNr       byte

Define  Urlaub             Bit [ ]

Define  HeizStartbit      Bit [ ]

Define SollUrlaub 15   'Grad

Define Zeiger               byte [ ] ' Zeiger für Schreiben und Lesen EEPROM-Speicherplatz

 ' EEPROM Belegung Platz

' 66 = Tag

' 68 = Jahr , Monat

#Anfang

(2)   Bildschirmanzeige

Print "Urlaub ";

wert2 = Urlaub : gosub PrintEinAus

Zeiger = 66 : input# wert12 ' Tag holen

print "   Start ";wert2;

input# wert12  ' Jahr , Monat holen

print ".";wert2;".0";wert1;"   "

(3)    Bildschirm-Bedienung (siehe auch Teil 4)

'Abfrage Tastatur PC-Befehl

if not RXD then goto EndePC  'keinEmpfang

GET Key_Ext  'Zeichen empfangen

if Key_Ext = 91 then goto PfeilTasten

'Zifferabfrage 0 bis 9   Menue-Wahl (Anzeige-Nr)

if Key_Ext >= &H30 and Key_Ext <= &H39 then AnzeigeNr = Key_Ext and &H0F  'Maskierung Ziffer

'----------------------------

if Key_Ext     = &H75 then Urlaub = not Urlaub  'u   Taste  Urlaub Ein-Aus

if Key_Ext     = &H68 then gosub DatumHeute    'h   Taste  Datum heute setzen

goto EndePC

#PfeilTasten

if not RXD then goto EndePC 'kein 2. Zeichen empfangen

GET Key_Ext ' 2. empfangen (1.Zeichen Pfeil verwerfen)

'if AnzeigeNr = 1  then goto PC1'

if AnzeigeNr = 2  then goto PC2'  Ziffer 2 gewählt: Datum Urlaub

#PC1

'Sollwert Heizen

goto EndePC

#PC2

'Urlaub:  Start-Tag nach Urlaub

if Key_Ext     = 65 then gosub TagPlus            'Taste Pfeil oben  

if Key_Ext     = 66 then gosub TagMinus         'Taste Pfeil unten

if Key_Ext     = 67 then gosub MonatPlus        'Taste Pfeil rechts

if Key_Ext     = 68 then gosub MonatMinus     'Taste Pfeil links

#EndePC

(4)   Hauptprogramm

if Urlaub then  gosub u1Urlaub 'aktualisieren

if VorlaufTemp <= SollUrlaub then HeizStartbit = EIN  'Frostschutz

if urlaub = AUS then goto weiter111 ' Betrieb nach dem Urlaub

if Schritt > 2 or HeizStartbit = EIN   then goto weiter1 ' Betrieb bei Frost

K1 = AUS  ' Abschaltung Brenner bis Start-Datum

' Betrieb der Pumpe im Urlaub, Ein bei 15+5 Grad, zusätzlich stündlich 1 Minute

K2 = (VorlaufTemp <= SollUrlaub + 5) or minute < 1 '

goto Ende12 'Ende Schrittregister

#weiter111

usw.

goto Anfang

(5)   Unterprogramme (Bausteine)

'  Unterprogramme  Urlaub aktualisieren  -----------------

#u1Urlaub

Zeiger = 68 : input# wert12 ' Jahr , Monat

if wert1 > year then Return

if wert2 > month then return

Zeiger = 66 : input# wert12 ' Tag

if wert2 > day then return 'Start-Tag erreicht? nein -->

Urlaub = Aus

Return

 

'  Unterprogramme  Datum stellen  ------------------------

#DatumHeute

' Datum = heute setzen --- PC-Taste h -----------

Zeiger = 66 : print# day ' Schreibe aktuellen Tag auf Platz 66

wert1 = year : wert2 = month

print# wert12   ' Jahr und Monat auf Platz 68 (= Zeiger)

Urlaub = Aus   ' Bit Urlaub

Return

#TagPlus 'Urlaubstag einstellen

Urlaub = EIN

Zeiger = 66 : input# wert12 'Tag Urlaub

wert12 = wert12 + 1

if wert12 >= 32 then wert12 = 1

Zeiger = 66 : print# wert12

Return

#TagMinus ' einstellen

Zeiger = 66 : input# wert12  'Tag Urlaub

wert12 = wert12 - 1

if wert12 <= 0 then wert12 = 31

Zeiger = 66 : print# wert12

Return

#MonatPlus 'Urlaubsmonat einstellen

Urlaub = EIN

Zeiger = 68 : input# wert12 '

wert2 = wert2 + 1 ' Monat

if wert2 <= 12 then goto JahrMonatp

wert2 = 1 : wert1 = wert1 + 1 ' Jahr +1

#JahrMonatp

Zeiger = 68 : print# wert12

Return

#MonatMinus ' einstellen

Zeiger = 68 : input# wert12 '

wert2 = wert2 - 1 ' Monat

if wert2 >= 1 then goto JahrMonatm

wert2 = 12 : wert1 = wert1 - 1 ' Jahr -1

#JahrMonatm

Zeiger = 68 : print# wert12

Return

'  Unterprogramme  Bildschirm  ----------------------------------

#PrintEinAus

if (wert2 = 0) then goto printAus

put 27:print "[0;4;30;43m";' Farbe

print "Ein ";

put 27:print "[0m";' Farbe reset

return

#printAus

put 27:print "[0;4;30;45m";' Farbe

print "Aus ";

put 27:print "[0m";' Farbe reset

return

 

'-------  Ende Schaltuhr --------------------

 -------------------------------------  zurück zu   Softwarebausteine Teil 1   ------------      nach_oben

Fortsetzung   Softwarebausteine_Teil_2                             Startseite

Kostenlose Zähler und Statistiken für Ihre Website bei www.motigo.com