Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > > Hallo ich benutze die Control II für die Heizungsteuerung. Die Anzeige auf dem externen LCD, die > > eigentliche Steuerung, die Zeitverwaltung, Datenspeicherung auf 4 Mbit und die Temperaturabfrage der > > 8 Temperaturmodule über den TWBus laufen in verschiedene Treads. > > > > Die Steuerung läuft tadellos bis auf die Tatsache dass nach einiger Zeit sich die Steuerung aufhängt. > > Sobald der Thread für die Temperaturerfassung nicht gestartet wird läuft die Steuerung. Wird der > > Temperaturthread gestartet steht die Steuerung ab und zu nach einigen Minuten jedoch spätestestens > > einigen Stunden. > > > > Hat jemand hierfür eine Erklärung oder ähnliche Probleme? Ich würde mich freuen wenn jemand eine > > Lösung für dieses Problem hat. Bin etwas verzweifelt da´ich schon seit ein paar Woche versuche den > > Fehler zu finden. Kann es zu Timingproblemen kommen wenn da das externe LCD auch über die Ports > > P1 gesteuert wird???? > > > > > > Hier habe ich ein Teil des Temperturthreads abgebildet. > > > > //******************************************** > > function Modemstatus() returns int > > { > > long erg; > > capture global.pf; > > twb.init(); > > erg = twbs.rw_frame(0, allg.Modem_Adresse, 0, 0, 0); > > release; > > return (erg); > > } > > > > function twb_temp(byte adr) returns int > > { > > int Temp; > > string s; > > byte i; > > > > //Temperatur über TWB abfragen > > for i = 1 ... 3 > > { > > capture global.pf; > > Temp = twbs.stemp(adr); > > release; > > if (Temp < 2000) > > break; > > } > > //Temperatur oder Fehler zurück melden > > return(Temp); > > > > } > > > > //**************************************** > > // Temperatur Thread > > //**************************************** > > thread Temperaturen > > { > > int Temp; > > byte i; > > string s1, s2; > > > > //TWB-Bus initialisieren > > Temp = sensor_prog.Modemstatus(); > > allg.anz1 = "Modemstatus:"; > > s1 = "Modemstatus:"; > > if Temp < 2000 > > { > > allg.Einst.Zustand = allg.setBit(allg.Einst.Zustand, allg.z_Twb, allg.OFF); > > allg.anz2 = " OK"; > > s2 = " OK"; > > //anzeige.ausgebenl(s1, s2); > > } > > else > > { > > allg.Einst.Zustand = allg.setBit(allg.Einst.Zustand, allg.z_Twb, allg.ON); > > //Fehlermeldung anzeigen > > allg.anz2 = sensor_prog.ERR[Temp - 2001]; > > s2 = sensor_prog.ERR[Temp - 2001]; > > allg.anz_func = 1; > > } > > > > run 1000; > > > > loop > > { > > if allg.getBit(allg.Einst.Zustand, allg.z_Simu) > > { > > //Temparaturen aus Temperaturvektor nehmen > > // nicht neu setzen > > continue; > > } > > > > if allg.getBit(allg.Einst.Zustand, allg.z_Twb) > > { > > //Temparaturen aus Temperaturvektor nehmen > > // nicht neu setzen > > continue; > > } > > > > //Hier werden die Temperaturen abgefragt und in die Globalen Variablen > > //geschrieben > > > > //Brenner abfragen > > Temp = twb_temp(allg.t_Brenner + 1); > > if Temp < 2000 > > allg.Temp[allg.t_Brenner] = Temp + allg.Einst.Tkorr_Brenner; > > > > //Vorlauf abfragen > > //twb.init(); > > Temp = twb_temp(allg.t_Vorlauf + 1); > > if Temp < 2000 > > allg.Temp[allg.t_Vorlauf] = Temp + allg.Einst.Tkorr_Vorlauf; > > > > //Aussentemperatur abfragen > > //twb.init(); > > Temp = twb_temp(allg.t_Aussen + 1); > > if Temp < 2000 > > allg.Temp[allg.t_Aussen] = Temp + allg.Einst.Tkorr_Aussen; > > > > //Brauchwasser abfragen > > //twb.init(); > > Temp = twb_temp(allg.t_Brauchw + 1); > > if Temp < 2000 > > allg.Temp[allg.t_Brauchw] = Temp + allg.Einst.Tkorr_Brauchw; > > > > //Solar abfragen > > //twb.init(); > > Temp = twb_temp(allg.t_Solar_u + 1); > > if Temp < 2000 > > allg.Temp[allg.t_Solar_u] = Temp + allg.Einst.Tkorr_Solar_u; > > //twb.init(); > > Temp = twb_temp(allg.t_Solar_o + 1); > > if Temp < 2000 > > allg.Temp[allg.t_Solar_o] = Temp + allg.Einst.Tkorr_Solar_o; > > > > //Kaminofen abfragen > > //twb.init(); > > Temp = twb_temp(allg.t_Kamin + 1); > > if Temp < 2000 > > allg.Temp[allg.t_Kamin] = Temp + allg.Einst.Tkorr_Kamin; > > > > //Heizkreis abfragen > > //twb.init(); > > Temp = twb_temp(allg.t_Heiz + 1); > > if Temp < 2000 > > allg.Temp[allg.t_Heiz] = Temp + allg.Einst.Tkorr_Heiz; > > > > > > sleep 1000; > > } > > //************************************************************ > > > Hallo Horst, > > das kann meiner Meinung eigentlich nur am capture liegen. > Ich würde da mal suchen, evtl. mal weglassen. > Man kann nicht "um Systemfunktionen herum" capturen da diese selbst capture/release benutzen. > > Grüße > Günni