Re: threads stoppen?? Kategorie: Programmierung (von nitraM - 26.11.2006 19:46) | ||
Als Antwort auf threads stoppen?? von Markus - 26.11.2006 15:48 | ||
| ||
Hallo Markus, ich habe mir jetzt deinen Text drei mal durchgelesen, und muss erlich sagen: Ich versteh nur Bahnhof! Sei mir nicht böse, aber deine Programmkomentare sagen sogut wie nichts aus, was du machen willst! Wenn du noch ein wenig mehr hinter die Codezeilen schreiben würdest, könnte man dir viel leichter helfen..... So sehen meine Programme aus, mehr Komentar und wenig Code, das kann sogar mein Bruder verstehen, der keine Ahnung von der CC2 hat.... thread init {byte i; // Zähler byte x; // Zähler byte adr; // Hilfsvariable Adresse byte dig; // Hilfsvariable Digit string s; // Hilfsvariable /******************************************************************************/ /* Variablen mit Defaultwert setzen */ /******************************************************************************/ global.M1_lz = global.M_LZ; // Laufzeit Mischer 1 auf max. setzen global.M2_lz = global.M_LZ; // Laufzeit Mischer 2 auf max. setzen /******************************************************************************/ /* Startet benötigte Threads */ /******************************************************************************/ run spannungsreglung.spannungsreglung;// Spannungsreglung starten run pt1000.pt1000; // Start der Temperaturmessung run strom_ac_messung.strom_ac; // Start der AC-Strommessung run heizkurve.heizkurve_1; // Start der Heizkurvenberechnung 1 /******************************************************************************/ /* Init der RS232 Schnittstellen */ /******************************************************************************/ swcom.init(); // SW-COM initialisieren swcom.setspeed(5); // SW-COM auf 9600 Baud umstellen swcom.flush(); // Empfangspuffer der SW-COM löschen swcom.ret(); // CR und LF - Befehl senden sleep 250; // kurze Pause swcom.flush(); // Empfangspuffer der SW-COM löschen hwcom.init(); // HW-COM initialisieren hwcom.setspeed(6); // HW-COM auf 19200 Baud umstellen hwcom.flush(); // Empfangspuffer der HW-COM löschen sleep 250; // kurze Pause hwcom.flush(); // Empfangspuffer der HW-COM löschen cap.Capture(global.I2C_Cap); // I²C Bus sperren /******************************************************************************/ /* Initialisierung Real Time Clock 8583 */ /* Option: => setzen der CC2-Uhr mit PCF8583-Zeit wenn ungleich */ /* => automatisches Stellen der PCF8583-Uhr mit der DCF77-Zeit */ /* => Watchdogtimeout setzen */ /* => beim Drücken der Hosttaste: Watchdog deaktiviert */ /* Hostmode eingeleiten */ /******************************************************************************/ pcf8583.init(1,1,1,global.I2C_Timeout,1); // Init des PCF 8583 /******************************************************************************/ /* Initialisierung LCD-Display */ /******************************************************************************/ pcflcd.setpcf(global.Adr_LCD_Display);// LCD Displayadresse auswählen pcflcd.init(); // LCD Display initialisieren pcflcd.setLight(0); // Hintergrundbeleuchtung ausschalten /******************************************************************************/ /* Initialisierung SAA1064 */ /******************************************************************************/ for adr = 0...3 // Schleife für Adressen {saa1064.init(adr,global.LED_Strom,4);// SAA1064 Init im Multiplexbetrieb } for adr = 0...3 // Schleife für Adressen {for dig = 0...3 // Schleifen für Digits {for i = 0...6 // Schleife für Segmente {saa1064.put(adr,dig,(0b1 shl i)); // Ausgabe des Segments (Test) sleep 50; // kurze Pause } saa1064.put(adr,dig,0); // Ausschalten des Segments } } nitraM > 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: |