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
[ ] '
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)
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
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.
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
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
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