
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Hallo, ich habe es etwas aufwendiger gemacht. Ich habe mehrere ineinander geschachtelte Zyklen konstruiert: Schneller Zyklus -> Sekundenzyklus -> Minutenzyklus -> Stundenzyklus -> Tageszyklus ' Anlaufteil ' |<----------------------------------------+ ' Tagesbearbeitung | ' |<-------------------------------------+ | ' Stundenbearbeitung | | ' |<----------------------------------+ | | ' Minutenbearbeitung | | | ' |<-------------------------------+ | | | ' Sekundenbearbeitung | | | | ' | | | | | ' aktuelle_sekunde = second | | | | ' |<----------------------------+ | | | | ' Schneller Zyklus fĂŒr PC-Eingaben | | | | | ' | | | | | | ' aktuelle_sekunde = second? -- J --+ | | | | ' | N | | | | ' second >= 0? -- N -------------------+ | | | ' | J | | | ' minute >= 0? -- N ----------------------+ | | ' | J | | ' hour >= 0? ---- N -------------------------+ | ' | J | ' Tagesbearbeitung 0:00 Uhr | ' | | ' +-----------------------------------------+ UrsprĂŒnglich hatte ich das ĂŒber einen 'pause'-Befehl von einer Sekunde gemacht: 'pause 50'. Das hat den Nachteil, dass bei Bedienungen vom PC aus u.U. 1 sek Totzeit auftritt. AuĂerdem ist das Programm gelegentlich (selten) undefiniert ausgestiegen, warum ist mir bis heute nicht klar - nur Neustart schaffte Abhilfe. Dann habe ich auf die vorgenannte Struktur umgestellt, auf eine Abfrage der Echtzeituhr, mit einem schnellen Zyklus, der mit ca. 75 Hz lĂ€uft. Seitdem, 2 Jahre, lĂ€uft es enwandfrei, auf PC- und andere Eingaben reagiert das Programm praktisch sofort, die Zyklen sind exakt auf die Echtzeituhr synchronisiert. Hier der (fast) vollstĂ€ndige Code: b1_i1, letzte_sekunde usw. sind Bytevariablen. '---------------------------------------------------------------------------------------- 'Minuten-, Stunden-, Tageswechsel bearbeiten '---------------------------------------------------------------------------------------- 'ACHTUNG: 'Die Uhrzeit lĂ€uft in der MC-Hardware unabhĂ€ngig vom Programm, 'daher nicht auf 'second = 0', 'minute = 0', 'hour = 0' prĂŒfen, da 'diese Werte ĂŒbersprungen werden können. 'Das wurde in div. Testreihen festgestellt, 2 - 3 mal am Tag war 'minute = letzte_minute oder minute = letzte_minute + 2, im zweiten Fall 'ist also ein Minutenwert ĂŒbersprungen worden. Die Stundenbearbeitung wĂŒrde 'dann ausfallen, u. U. auch die Tagesbearbeitung. 'WEITERHIN: 'Die Zeitwerte dĂŒrfen nur genau einmal gelesen werden, da diese sich zwischen zwei 'LesevorgĂ€ngen Ă€ndern können: letzte_sekunde = 58, second = 59, die Abfrage 'ergibt noch keine "Sekundenbearbeitung", genau danach wechselt second = 0, 'wenn jetzt letzte_sekunde = second gesetzt wird, wird das nĂ€chste Mal 'letzte_sekunde = 0 mit second = 1 verglichen ... die Minutenbearbeitung 'fĂ€llt wieder aus. Wenn das die minute = 0 ist, fĂ€llt auch die 'Stundenbearbeitung aus usw. 'Minuten-, Stunden- oder Tagesbearbeitung dĂŒrfen aber auf keinen Fall 'ausfallen, da davon alle Steuerungen abhĂ€ngen. 'WENN nicht Minutenwechsel, dann nĂ€chster Sekundenzyklus ... b1_i1 = second b2_i1 = letzte_sekunde letzte_sekunde = b1_i1 if b1_i1 >= b2_i1 then goto sekunden_bearbeitung '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> '---------------------------------------------------------------------------------------- '... SONST in die Minutenbearbeitung, WENN nicht Stundenwechsel, dann nĂ€chster Minutenzyklus ... b1_i1 = minute b2_i1 = letzte_minute letzte_minute = b1_i1 if b1_i1 >= b2_i1 then goto minuten_bearbeitung '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> '---------------------------------------------------------------------------------------- '... SONST in die Stundenbearbeitung, WENN nicht Tageswechsel, dann nĂ€chster Stundenzyklus, ... 'Nach der Stundenbearbeitung lĂ€uft automatisch auch die Minutenbearbeitung b1_i1 = hour b2_i1 = letzte_stunde letzte_stunde = b1_i1 if b1_i1 >= b2_i1 then goto stunden_bearbeitung '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> '---------------------------------------------------------------------------------------- '... SONST in die Tagesbearbeitung. 'Ein Teil ist hier ("Tagesbearbeitung 0:00 Uhr"), einer vorne nach dem Anlauf. 'Der Teil hier soll NICHT nach einem Anlauf laufen! 'Nach der Tagesbearbeitung laufen automatisch auch Stunden- und Minutenbearbeitung goto tages_bearbeitung '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Wenn noch Fragen sind ... Gruss laika |
| Antwort schreiben |