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

Re: threads stoppen?? Kategorie: Programmierung (von nitraM - 26.11.2006 19:46)
Als Antwort auf threads stoppen?? von Markus - 26.11.2006 15:48
Ich nutze:
C164CI-ControllerBoard, eigenes Board, OSOPT V3.0
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: