ich bin ein Neuer (alter) und möchte mich kurz vorstellen: ich hatte im aktiven Leben etwas mit IT-Organisation zu tun, ich hab' mir auch seinerzeit privat eine Branchenlösung in FoxPro gebaut, die seitdem im Einsatz ist.
Vor ca. 30 Jahren hab' ich auch ein Saunasteuergerät auf Basis einer Conrad C-Control (mit Tastatur + LCD-Anzeige) gebaut und dieses programmiert, d.h. ich hab' mir im Netz Bausteine zusammen gesucht und das Steuerprogramm in Basic geschrieben. Läuft seitdem klaglos.
Problem: jetzt hätte ich gerne in das Basic-Programm der Saunasteuerung noch eine neue Funktion drinnen gehabt - ich bin aber total überfordert :-( , d.h. ich kann teilweise nicht nachvollziehen, was da im Programm abläuft.
Frage: gibt's hier jemand, der eventuell mit Rat & Tat helfen könnte?
Problem: jetzt hätte ich gerne in das Basic-Programm der Saunasteuerung
noch eine neue Funktion drinnen gehabt - ich bin aber total überfordert
:-( , d.h. ich kann teilweise nicht nachvollziehen, was da im Programm
abläuft.
Das ist ein schönes Beispiel dafür, dass sich nicht existente Dokumentation nie bei der Erstellung, sondern erst Jahre, manchmal viele Jahre später rächt. Insofern hält es sich an das Prinzip, dass Rache stets kalt serviert werden sollte.
Ist immer schwierig wenn man etwas erweitern will dass man vorher nur
per Copy&Paste zusammenstückelt hat, ohne es verstanden zu haben.
Damals hatte ich es ja so halbwegs verstanden ... ist halt schon ca. 30 Jährchen her...
Ich beschreibe mal was es tut:
Nach Drücken eines Tasters (Eingang1) läuft der Ofen + die Kontroll-LED schaltet sich ein (je nachdem ob grad geheizt wird oder nicht)
Bis 60° läuft 'SaunaOfen' Vollgas
über 60° taktet selbiger (weil die 9 kW zu viel sind für die kleine Sauna)
Um Überschwingen zu vermeiden wird 4° früher abgedreht (Zeile 260)
'SollTemp' = 95° (Zeile 89)
nach 4 Stunden (Zeile 112) wird automatisch abgedreht.
Weiters gibt's eine Temperatur-Änderungsmöglichkeit im LOOP (Zeile 106): durch nacheinander Drücken von z.B. ' * 8 5 # ' => wird die 'SollTemp' auf 85° gesetzt.
Weil meine sportliche Aktivität outdoor ca. 2-3 Stunden benötigt, ich die Sauna vor dem Verlassen des Hauses aufdrehen muss, selbige aber nur 45 Minuten zum Aufheizen benötigt, würde ich mir noch eine Zeitverzögerung (in Minuten) wünschen. D.h. die Sauna soll erst mal warten, bis sie aufzuheizen beginnt. Die Wartezeit möchte ich eingeben können ... eventuell so:
z.B. ' 0 5 0 * ' (0 zum Aktivieren der Eingabe (?), 50 = Minuten Einschaltverzögerung, # zum Abschließen der Eingabe)
Ginge das halbwegs problemlos einzubauen, ohne dass da viel umgestrickt werden muss?
Ist immer schwierig wenn man etwas erweitern will dass man vorher nur
per Copy&Paste zusammenstückelt hat, ohne es verstanden zu haben.
Damals hatte ich es ja so halbwegs verstanden ... ist halt schon ca. 30
Jährchen her...
Dein Programm ist ziemlich gut strukturiert und dokumentiert. Das sinnlose Gemotze bestimmter Leute hier mußt du ignorieren.
Weil meine sportliche Aktivität outdoor ca. 2-3 Stunden benötigt, ich
die Sauna vor dem Verlassen des Hauses aufdrehen muss, selbige aber nur
45 Minuten zum Aufheizen benötigt, würde ich mir noch eine
Zeitverzögerung (in Minuten) wünschen. D.h. die Sauna soll erst mal
warten, bis sie aufzuheizen beginnt. Die Wartezeit möchte ich eingeben
können ... eventuell so:
z.B. ' 0 5 0 * ' (0 zum Aktivieren der Eingabe (?), 50 = Minuten
Einschaltverzögerung, # zum Abschließen der Eingabe)
Wir sehen deinen Hardware nicht, siehe Netiquette. Wie es scheint, hast du einer numerische Tastatur mit 12 Tasten, 0-9 + * + ???
Stimmt das?
Ginge das halbwegs problemlos einzubauen, ohne dass da viel umgestrickt
werden muss?
Vermutlich schon. Das Problem ist eher das Testen. Da wir keine Hardware haben, musst du das machen und das wird einige Durchläufe brauchen.
Sorry - es ist die uralte C-Control I von Conrad-Elektronic, die es in den 90ern gab. Dazu ein 2-zeiliges LCD-Display und eine Folientastatur. Ich hab' mal ein Foto (vom Gehäuse) angehängt.
Wo die drang hängt(?) ... dazu müsste ich sie mal aufschrauben ... melde mich wieder. Aber wozu ist das wichtig?
So - an oberen markierten Anschluss hängt das Display, am unteren markierten die Tastatur.
Na dann werd' ich mal ein Kabel suchen, um das Ding ggf. programmieren zu können...
===================
NACHTRAG: ein Käbelchen zum Programmieren über die Serielle hätte ich gefunden. Wenn ich mich richtig erinnere, muss ich noch die Autostart-Funktion abschalten, damit ich programmieren kann ... ich such' mal die Anleitungen durch, wie das geht bzw. wo der dazugehörige Jumper sitzt.
===================
NACHTRAG-2: zum Foto: ich hab' eruiert, dass der linke Teil die aufgesteckte C-Control-I ist - sie steckt auf einem C-Control-Applicationboard (rechter Teil).
Hmm. Ich hab mir das mal angeschaut. Da gibt es ein kleines Problem. Im Moment ist die Software so, daß man die Solltemperatur nur einstellen kann, wenn die Sauna aktiv ist! Das ist aber gerade beim Timer unpraktisch. Man will VORHER die Solltemperatur einstellen und DANACH soll der Timer die Sauna automatisch einschalten.
Mein Vorschlag. Man kann mit der *-Taste zwei Modi umschalten.
Eingabe Solltemperatur
Eingabe Timer für Autostart
Das geht IMMER, egal ob die Sauna an oder aus ist. Natürlich mit Anzeige im Display.
Die einprogrammierte default-Solltemperatur wird praktisch NIE verstellt ... üblicherweise starte ich mit dem Taster und gut ist's - das sollte auch so bleiben. D.h. Taster drücken = startet sofort + mit der default-Temperatur.
Erst wenn a.) ein Zeitverzug oder b.) eine Temperaturänderung einzugeben ist, sollte die Änderungs-Routine aufgerufen werden müssen.
Vielleicht nur die Änderungsroutine erweitern(?) sodass BEIDE Werte in der Routine gesetzt werden, also z.B. ' * 8 5 # 1 2 0 # ' = die Temperatur auf 85 Grad + eine Heizpause von 120 min? Dann müsste man halt bei (nur) einer Temperaturänderung auch noch die 0 für KEINE Pause mit eingeben, also so: ' * 8 5 # 0 # ' für 85 Grad. Wobei dieses mittlere Sonderzeichnen natürlich auch der * sein könnte.
Konnte ich mich verständlich ausdrücken?
===================
NACHTRAG: oder Deine Variante OHNE Eingabeverpflichtung:
*) Taster einschalten = geht 2 Minuten in einen Wartemodus
*) während dieser 2 Minuten KANN ich die Verzögerungszeit eingeben - wird nix gemacht, wird praktisch mit 2 Minuten Verzögerung zu heizen begonnen.
Die einprogrammierte default-Solltemperatur wird praktisch NIE verstellt
... üblicherweise starte ich mit dem Taster und gut ist's - das sollte
auch so bleiben. D.h. Taster drücken = startet sofort + mit der
default-Temperatur.
Wie wäre es mit einer einfachen analogen Zeitschaltuhr für das verzögerte Timing?
Anbei der neue Quelltext. Ich hab relativ viel geändert, damit es passt und ich nich zuviel Murksen muss. Mal sehen wie es reagiert. Es wäre ein Wunder, wenn es auf Anhieb sofort läuft. Also viel testen. Anbei auch das Zustandsdiagramm.
Erst mal vielen Dank! Ich muss allerdings um Geduld ersuchen (zumindest heute bin ich weitgehend verplant). Und natürlich versuche ich zu verstehen wie Du das gelöst hast.
Noch ein Hinweis. Die Kennlinie vom Temperatursensor ging nur bis 118°C! Die Notabschaltung reagiert in der Software aber erst ab 120°C! Hier solltest du nochmal prüfen, welche Spannung dein Temperatursensor WIRKLICH liefert. Ich hab den letzten Kennlinienpunkt auf 120°C verschoben, damit zumindest theoretisch eine Übertemperaturabschalung funktioniert. So wirklich gut ist das aber nicht. Der Sensor sollte am Ende der Kennlinie wenigsten 10°C mehr messen können, also erst bei 130°C den ADC-Wert 255 ergeben. Klar kann man die Notabschaltung auch runter setzen, aber wenn 115°C der Maimalwert im Normalbetrieb sind, sollte man da ein wenig Luft lassen, damit die Übertemperaturabschaltung nicht immer kurz vorm Abschalten ist.
Ist aber nicht kritisch - die "richtige" Notabschaltung ist unabhängig von der C-Control und funktioniert mit einer Thermosicherung (130 Grad) und dem Hauptrelais. D.h. im Fall, dass das taktende Relais "picken" bleibt oder die C-Control "spinnt", gibt's das Hauptrelais über die Thermosicherung, das die ganze Geschichte abschalten kann.
Diesmal leider nicht. Ich habe Reinhard 3-4 neue Versionen geschickt, die hatten Probleme und liefen nicht so wie erwartet. Dann hatte er keine Lust oder Zeit mehr für weitere Tests. Es will es in der Winterzeit selber versuchen. Thema beendet.
Falk war so nett und hat sich meines Problems angenommen - und es "gut gemeint": er hat da viel um- und neugestrickt mit dem Effekt, dass ich einiges nicht nachvollziehen konnte, und Dinge, die vorher jahrzehntelang tadellos funktioniert haben, gingen nicht mehr. Und alles müsste von vorne durchgetestet werden - das war jetzt nicht das, was ich eigentlich wollte. Notbremse, ich hab' mich bei Falk höflich bedankt (er dürfte aber doch etwas angesäuert sein ... sorry, nochmals, Falk).
Habe nun selbst eine einfache Lösung gefunden und einen Timer mit einer fixen Zeitvorgabe von 60 Minuten eingebaut: beim Programmstart MIT gedrücktem Taster (Eingang1) führt das Programm einen 60-min-Timer aus. Funktioniert bestens - und ich muss nicht mal die Tastatur bemühen = praktisch ... damit sind 95% meines Bedarfes abgedeckt :-) . Könnte eigentlich so bleiben...
... nur mal interessehalber ;-) ... natürlich wäre es eleganter, wenn man die Zeit bis zum Einschalten über die Tastatur eingeben könnte - ich hab' das versucht, bin dabei auch recht weit gekommen - allerdings hängt's noch an einer Kleinigkeit(?), die ich nicht lösen konnte.
Habe das Unterprogramm jetzt mal angehängt ... die Eingabe des Timerwertes XXX mit ' * x x x # 'funktioniert, es kommt nach jeder Taste der Bestätigungs-Peep, das Programm verzweigt richtig nach #TIMER_WAIT, es schreibt mir die richtigen Sekunden über die Serielle raus, es hält auch das Programm die erforderliche Zeit an ('PAUSE TempTimer') - nur das Zurückspringen ins Hauptprogramm krieg' ich nicht richtig hin.
Dazu: dieses testweise 'GOTO WEITERGEHTS' bringt das Programm zwar zurück ins Hauptprogramm - ist natürlich völlig unsauber (ab dann funtioniert die LCD-Anzeige nämlich nicht mehr), da müsste ich mit einem RETURN zurück. PROBLEM: wie verschachtle ich den Loop (warten auf Tastatureingabe) richtig, wenn dieses uralte BASIC der uralten CControl-I kein mehrzeiliges IF (und damit kein ELSE) und auch kein DO WHILE kennt...?
Falls jemand eine Möglichkeit sieht, wie ich den Tastatureingabe-Loop mit den rudimentären Möglichkeiten der alten CControl BASIC umbauen müsste, damit ich nach dem 'PAUSE TempTimer' sauber zurück ins Hauptprogramm komme ... ? Eilt nicht - ich kann mich ohnedies erst am WE wieder drum kümmern.
Auch negative Diskussionen sind sehr anregend das Problem dann selbst zu erledigen.
Es ist auch ein Zeichen das man selbst sein Wissen und Können nicht unter den Scheffel stellen sollte.
;--))