Re: Programm bleibt stehen Kategorie: Programmierung (von Günni - 4.01.2005 9:47) | ||
Als Antwort auf Programm bleibt stehen von Horst - 3.01.2005 20:57 | ||
| ||
> 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 | ||
Antwort schreiben Antworten: Re: Programm bleibt stehen (von Horst - 13.01.2005 13:27) |