Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Programm bleibt stehen Kategorie: Programmierung (von Horst - 3.01.2005 20:57)
Ich nutze:
C164CI-ControllerBoard, CC2-Application-Board, OSOPT V3.0
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;
   }
//************************************************************


    Antwort schreiben


Antworten:

Re: Programm bleibt stehen (von André H. - 4.01.2005 16:39)
    Re: Programm bleibt stehen (von Horst - 4.01.2005 19:39)
        Re: Programm bleibt stehen (von André H. - 4.01.2005 20:35)
Re: Programm bleibt stehen (von M.Seidel - 4.01.2005 10:28)
    Re: Programm bleibt stehen (von Horst - 4.01.2005 19:41)
Re: Programm bleibt stehen (von Thomas - 4.01.2005 10:01)
    Re: Programm bleibt stehen (von Horst - 13.01.2005 13:26)
Re: Programm bleibt stehen (von Günni - 4.01.2005 9:47)
    Re: Programm bleibt stehen (von Horst - 13.01.2005 13:27)