threads stoppen?? Kategorie: Programmierung (von Markus - 26.11.2006 15:48) | ||
| ||
Hallo, nachdem ich die 8574 dazu bewegen konnte als gemischte I/O zu arbeiten - hier ein Dank an nitraM für die Hilfestellung habe ich ein weiteres Problem mit dem Programm. Ich starte das Prg und alles funktioniert wie es soll. nach einer Zeit x ( +/- 2 std) werden in die sollwerte Variablen für Sonnenaufgang nicht nachvollziebare Werte geschrieben die im Bereich des Sonnenuntergangs liegen und alle Rollos fahren zu. (Auswertung des Sollwerts ist ok) Wenn ich das Prg am Abend starte und über Nacht laufen lasse fällt der Fehler erst einmal nicht auf. Sehe ich mir morgens die Steuerung an stelle ich fest, das diverse Threads stehen geblieben sind z.b. das Display. Die Uhrzeit ist stehengeblieben und zwar immer um 05:59:59 Aber die Funktionen der Rollos sind voll funktionsfähig - soll heissen sie öffnen zur angegebenen Zeit. Hier der Code mit dem ich Quasi eine Zufallsreihenfolge für die Rollobetätigung erzeuge. Im ersten Teil habe ich einen Port der öfters betätigt wird dazu benutzt eine Zeitdifferenz zu erzeugen. Mit der Funktion Sonne werden die Zeiten für Sonnen-auf und -untergang in Integer umgerechnet. in der Funktion Sasudiff wir die Betätigungszeit für jedes Rollo berechnet. Die Funktion Sonne wird beim Start und um 0:00 Uhr auf- gerufen. Die Funktion Sasudiff wird beim Start für und um 0:00 Uhr für alle Rollos aufgerufen und bei �nderung der Differenz für das entsprechende Rollo aufgerufen. Wenn ich den Code aus der Funktion Sasudiff auf Kommentar setze läuft das Prg ohne Mängel durch. if ports.get(8)==0 // Wenn Wasserzapf In an { if var.RChg==0 // Und neuer Zapf {var.RChg=1; // Merker für Zapf aktiv var.PNum=var.PNum+1; // Aktuelles Rollo um 1 erhöhen if var.PNum>16 // Wenn Aktuelles Rollo 16 {var.PNum=1;} // Rollo auf 1 zurücksetzen if system.second()<30 // Wenn Sekunde kleiner 30 {var.RDiff[var.PNum]=system.second();} // Sekude als diff nehmen else // wenn grö�er 30 {var.RDiff[var.PNum]=system.second()-30;} // 30 abziehen und nehmen wait cfc.SaSuDif(var.PNum); sleep 500*var.RDiff[var.PNum]; } } else // wenn Zapf Aus {var.RChg=0;} // neuer Zapf zurücksetzen function Sonne() returns int // Zeiten für Sonnenauf - untergeng in Interger Umrechnen { var.SaZ=var.Sa.H*60+var.Sa.M; // Sonnenaufgang var.SuZ=var.Su.H*60+var.Su.M; // Sonnenuntergang return 1;} function SaSuDif (int din) returns int // Differenz pro Rollo für Sonnen - Auf und Untergang { var.SonneAuf[din]=var.SaZ+var.RDiff[din]-15; // Sonnenaufgang pro Rollo berrechnen var.SonneZu[din]=var.SuZ+var.RDiff[din]-15; // Sonnenuntergang pro Rollo berechnen while var.SonneAuf[din]<var.AufVorZ // Wenn Rollozeit vor Auf Vor {var.SonneAuf[din]=var.SonneAuf[din]+15;} // 15 min später while var.SonneAuf[din]>var.AufNachZ // Wenn Rollozeit nach Auf Nach {var.SonneAuf[din]=var.SonneAuf[din]-15;} // 15 min früher while var.SonneZu[din]<var.ZuVorZ // Wenn Rollozeit vor Zu Vor {var.SonneZu[din]=var.SonneZu[din]+15;} // 15 min später while var.SonneZu[din]>var.ZuNachZ // Wenn Rollozeit nach Zu Nach {var.SonneZu[din]=var.SonneZu[din]-15;} // 15 min früher return 1;} Hat jemand eine Idde was das sein könnte? Gru� Markus | ||
Antwort schreiben Antworten: Re: threads stoppen?? (von nitraM - 26.11.2006 19:46) |