
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo, siehe Einfügungen. MfG ManfredW > Ich -- leider Anfänger -- habe folgendes Programm in "Basic ++" für meine C-Control I Station 2.0 (Version 2.06) mit angeschlossener DCF-Uhr geschrieben. Unter "CC Basic 2.0" lief´s so leidlich; jetzt nicht mehr.(Uhrzeit u. Datum sollen ausgegeben werden, und es soll zeit-, tages- und monatsabhängig ein Relais geschaltet werden.) > Leider gibt es in "Basic ++" keine Simulationsmöglichkeit, sonst könnte ich es vielleicht selber rauskriegen. Ich teste immer nur mit Hardware. Du musst das Programm Stück für Stück aufbauen und testen. > > Von "Conrad" existiert das Programm "11_ECHTZEITUHR_1.bas", das ich in mein Programm eingebaut habe, aber > zum 1. > zeigt die LCD-Anzeige permanent in der 1. Zeile "00:00:00" > und in der 2. Zeile "Mo 1.1.2004" an; > > zum 2. schaltet das Relais nicht.(Nur 1x, wenn ich das Programm vom PC zur Station übertrage) > > Kann einer von Euch einmal über das Programm "gucken" und mir sagen, was ich falsch gemacht habe ? > Und noch eine Bitte habe ich: > Wie kann ich durch Drücken z. B. der Taste F1 erreichen, dass das Programm für "heute" aussetzt und "morgen" wieder normal startet? Ich weiß, das funktioniert mit irgendwelchen "aus-" u. "einbits", aber das ist zu hoch für mich. Im Voraus vielen Dank! Friedel :-) Wegen Tasten und Bits schau auf meine homepage. Für Basic++ musst Du allerdings anpassen. Bei Drücken der Taste F1 kannst Du z.B. ein Bit setzen oder ein Byte und die Ausführung sperren. Bei Tageswechsel lässt Du es auf Null setzen. > ----------------------------------------------------------------------------------------------------------------------------------------------- > > attributes 'brauche ich das überhaupt? > ccproject 'brauche ich das überhaupt? > ccproject 'brauche ich das überhaupt? > end ccproject 'brauche ich das überhaupt? > end attributes 'brauche ich das überhaupt? > > define LIGHT as port[16] > define REL1 bit[21] 'Küche > define STATION_IO byte[3] 'brauche ich das überhaupt? > define EXTPORT byteport[4] 'brauche ich das überhaupt? > > define aktuelleZeit word > define a word > a = 1500 'Einschaltzeit > define b word > define d word > define c word > c=2200 'Ausschaltzeit > > define OLDSEC as byte > > #INIT > LIGHT=on > LCD.INIT > LCD.CLR > '-------- WILLKÜRLICHE VOREINSTELLUNG ------------- > hour=23 > minute=59 > second=58 > day=31 > month=12 > year=3 Bei Deiner obigen Voreinstellung ist nach 2 Sekunden 00:00:00 1.1.2004 (ich vermute ein Donnerstag) Nimm doch zum Test eine andere Uhrzeit. Ist die Zeit dann auch 2 Sekunden weiter? Zum Testen (Voreinstellung) ist es besser bei Uhrzeit nicht Nullen anzeigen zu lassen. > > #LOOP > '------- AUF DEN SEKUNDENWECHSEL WARTEN ---------- > if OLDSEC=SECOND then goto LOOP > OLDSEC=SECOND > pause 5 Was soll diese Pause bewirken? > '------- ZEIT AUF LCD AUSGEBEN ------------------- > LCD.POS 1,5 > if HOUR<10 then LCD.PRINT "0" 'FÜHRENDE NULL SCHREIBEN > LCD.PRINT HOUR 'STUNDEN AUSGEBEN > LCD.PRINT ":" 'TRENNZEICHEN SCHREIBEN > if MINUTE<10 then LCD.PRINT "0" 'FÜHRENDE NULL SCHREIBEN > LCD.PRINT MINUTE > LCD.PRINT ":" 'TRENNZEICHEN SCHREIBEN > if SECOND<10 then LCD.PRINT "0" 'FÜHRENDE NULL SCHREIBEN > LCD.PRINT SECOND > LCD.PRINT " " > '--------- DATUM AUF LCD AUSGEBEN ---------------- > LCD.POS 2,1 > > SELECT CASE dow 'WOCHENTAG ZUWEISEN > CASE 1 > LCD.PRINT "MO" > CASE 2 > LCD.PRINT "DI" > CASE 3 > LCD.PRINT "MI" > CASE 4 > LCD.PRINT "DO" > CASE 5 > LCD.PRINT "FREI" > CASE 6 > LCD.PRINT "SA" > CASE 7 > LCD.PRINT "SO" > END SELECT > '------------------------------------------------- > LCD.PRINT " " > LCD.PRINT DAY > LCD.PRINT "." > LCD.PRINT MONTH > LCD.PRINT "." > LCD.PRINT "200" > LCD.PRINT YEAR > LCD.PRINT " " > '------------------------------------------------- > 'Hier erscheint eigenes Programm > aktuelleZeit = Hour * 100 + Minute > if month = (1 or 12) then b = a 'Januar od. Dez. > if month = (2 or 11) then b = a + 100 'Febr. od. Nov. > if month = (3 or 10) then b = a + 200 'März od. Okt. > if month = (4 or 9) then b = a + 300 'April od. Sept. > if month = (5 or 8) then b = a + 400 'Mai od. Aug. > if month = (6 or 7) then b = a + 500 'Juni od. Juli > > if dow > 6 then dow = 0 'dient dazu, einen bug zu umgehen > if dow = 1 then d = 10 'Montag > if dow = 2 then d = 20 'Dienstag > if dow = 3 then d = 15 'Mittwoch > if dow = 4 then d = 4 'Donnerstag > if dow = 5 then d = 0 'Freitag > if dow = 6 then d = 17 'Samstag > if dow = 0 then d = 11 'Sonntag > > 'Küche > if aktuelleZeit = (b + 30 + d) and (second =1) then goto schaltenRel1 'Licht einschalten Nur bei Sekunde = 1 wird der Sprung ausgeführt. Ist sicher, dass an dieser Stelle nach dem obigen Sekundenwechsel noch Sekunde = 1 ist? > if aktuelleZeit = (b + 35 + d) and (second =1) then goto schaltenRel1 'Licht ausschalten Du springst zur gleichen Sprungmarke bei Licht ein bzw. aus > if aktuelleZeit = (b + 41 + d) and (second =1) then goto schaltenrel1 'Licht einschalten > if aktuelleZeit = (c + 5 + d) and (second =1) then goto schaltenrel1 'Licht ausschalten > '........................................ > > goto LOOP > > #schaltenRel1 'Küche > rel1=ON > EXTPORT=STATION_IO 'ZUSÄTZLICH EXTERNEN PORT BESCHREIBEN; brauche ich das überhaupt? Das muss Du in der Anleitung suchen. > pause 25 > rel1=OFF > EXTPORT=STATION_IO 'ZUSÄTZLICH EXTERNEN PORT BESCHREIBEN; brauche ich das überhaupt? > pause 25 goto LOOP Dieser Befehl ist notwendig, damit das Programm weiter läuft. Meine Homepage: http://manfred.wilzeck.de |
| Antwort schreiben |