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

Re: Stack Overflow Kategorie: Programmierung (von Karl - 6.12.2011 19:06)
Als Antwort auf Re: Stack Overflow von nitraM - 5.12.2011 11:36
Ich nutze:
C-Control II Station, OSOPT V3.1
Okay hier der code... bestehend aus 3 Modulen, zunächste das mainmodule:
byte min, tim;
int button;


thread eins
{
button=stkeyb.get(); //function input(byte maxziff, long default, long timeout) returns long
if button == 10
{
halt zeitschaltuhr.relaiseins;
stports.togRel(1);
min= system.hour();
wait min == system.hour()+1;
resume zeitschaltuhr.relaiseins;
}
}
thread zwei
{
button=stkeyb.get(); //function input(byte maxziff, long default, long timeout) returns long
if button == 11
{
halt zeitschaltuhr.relaiszwei;
stports.togRel(2);
tim= system.minute();
wait tim == system.minute()+10;
resume zeitschaltuhr.relaiszwei;
}
}


thread drei
{
min=system.second();
button=stkeyb.get(); //function input(byte maxziff, long default, long timeout) returns long
if button == 12
{
stports.togLCDlight();
sleep 300;
}
}


thread main

{
stports.LCDlight(1);
byte knopf, temp;
int a, b, c;
long timeset;
lcdext.init();
lcdext.clear();

  lcdext.print("ZEIT EINSTELLUNG");
    lcdext.line(2);
    lcdext.print("BITTE  EINGEBEN");
    sleep 2000;
    lcdext.clear();
    lcdext.print("     STUNDE     ");
    sleep 2000;
    lcdext.clear();
    timeset=stkeyb.input (2, 2, 5000);
    a=timeset;
    lcdext.clear();
    lcdext.print("     MINUTEN    ");
    sleep 2000;
    lcdext.clear();
    timeset=stkeyb.input (2, 2, 5000);
    b=timeset;
    c=00;
    system.settime(a, b, c);
        lcdext.clear();
    lcdext.print("DATE EINSTELLUNG");
      lcdext.line(2);
      lcdext.print("BITTE  EINGEBEN");
      sleep 2000;
      lcdext.clear();
      lcdext.print("      JAHR      ");
    sleep 2000;
    lcdext.clear();
    timeset=stkeyb.input (4, 4, 5000);
    a=timeset;
    lcdext.clear();
    lcdext.print("  MONAT NUMMER  ");
    sleep 2000;
    lcdext.clear();
    timeset=stkeyb.input (2, 2, 5000);
    b=timeset;
    lcdext.clear();
    lcdext.print("      TAG       ");
    sleep 2000;
    lcdext.clear();
    timeset=stkeyb.input (2, 2, 5000);
    c=timeset;
    lcdext.clear();
    system.setdate(a, b, c);
    lcdext.clear();
    sleep 2000;
    lcdext.print("DATE AND TIME");
      lcdext.line(2);
      lcdext.print("ERFOLGREICH");
    sleep 2000;
    lcdext.clear();

run zeit_anzeige.Zeit;
run zeitschaltuhr.Zeitschaltuhr;
run zeitschaltuhr.relaiseins;
run zeitschaltuhr.relaiszwei;
run eins;
run zwei;
run drei;
halt;
}


dann zweites das Zeit anzeige Modul:
thread Zeit
{byte second;
  stports.init();
  lcdext.init();

  lcdext.print("   AQUARIUM     ");
  lcdext.line(2);
  lcdext.print("   STEUERUNG    ");
  sleep 1000;
  lcdext.clear();

  loop
  {
   second=system.second();
   lcdext.line(1);
   lcdext.time(1);
   lcdext.line(2);
   lcdext.date(1);
   sleep 500;
   lcdext.goto(1,2);
   lcdext.put(' ');
   lcdext.goto(1,5);
   lcdext.put(' ');
   wait second!=system.second();//Auf Sekundenwechsel warten
  }
}

und zu guterletzt, das Zeitschaltuhr Modul:

byte ZSU[1], ZSSU[1], flag; // Anzahl der Zeitschaltuhren beginnend mit '0' !!!
thread Zeitschaltuhr
{
byte min, day, Nr, No;
int time;

min = system.minute();
wait system.minute() != min;
time=system.hour()*100 + system.minute();
day=system.dow();

capture flag;

//-------------------- Zeitschaltuhr (ZSU) 0 --------------------

Nr = 0; // Zeitschaltuhr (ZSU) Nr.

// Es wird jeden Tag geschaltet

if time >= 700  and time < 1200
   or time >= 1500 and time < 2145  // zwischen 6:00 und 22:00
   //or time>= 1328 and time < 1329


   ZSU[Nr] = 1; // EIN
else
   ZSU[Nr] = 0; // AUS

//-------------------- Zeitschaltuhr (ZSU) 0 Ende --------------------



//-------------------- Zeitschaltuhr (ZSU) 1 --------------------

No = 0; // Zeitschaltuhr (ZSU) Nr.

// Es wird jeden Tag geschaltet

if time >= 700  and time < 745
   or time>= 830 and time < 1000  // zwischen 6:00 und 22:00
   or time>= 1200 and time < 1330
   or time>= 1430 and time < 1530
   or time>= 1830 and time < 1945
   or time>= 2030 and time < 2130


   ZSSU[No] = 1; // EIN
else
   ZSSU[No] = 0; // AUS
release;
}
//-------------------- Zeitschaltuhr (ZSU) 1 Ende --------------------

thread relaiseins
{
capture flag;
if ZSU[0] == 1 // WENN Zeitschaltuhr '0' EIN
       {
       stports.setRel (1,1); //anschalten Relais 0
       }
       else
       {
       stports.setRel (1,0); //auschschalten Relais 0
       }
release;
}
thread relaiszwei
{
capture flag;
if ZSSU[0] == 1 // WENN Zeitschaltuhr '1' EIN
       {
       stports.setRel (2,1); //anschalten Relais 1
       }
       else
       {
       stports.setRel (2,0); //auschschalten Relais 1
       }
release;
}



Bei dem hats auch schon zu problemen geführt, wenn ich mit einem Array
arbeite und (beispielsweise ZSU[1]) damit schalten will, dann geht das
irgendwie nicht...

Hoffe der Code hilft euch...
BTW: die Funktionen zur manuellen Bedienung funktionieren,
aber danach spinnt das ganze System und die Steuerung macht irgenwie was
sie will...

Liebe Grü�e

Karl









> Hallo Karl,
> einen Stackoverflow hatte ich noch nicht, aber wie schaut denn dein Programm aus?
> Vieleicht stellst du es einfach mal hir ein...
>
> nitraM
>
>
>
>
> > Hallo an alle,
> >
> > wollte mal fragen ob auch andere schon mit dem Stack overflow zu kämpfen hatten. Habe bei meinen
> > Programmen wenn ich sie testweise ausführe schon öfters einen Stackoverflow bekommen.
> > Je öfter ich dann das Programm simulieren will desto höher ist die ebene die angezeigt wird,
> > also z.B. Stack overflow (ebene 1).
> > Habe das gefühl, dass das sehr zufällig und sporadisch auftaucht. Finde nämlich nicht, dass mein
> > Programm da jetzt zu groÃ? ist. Schalte im Prinzip nur relais zeitgesteuert, dann habe ich display
> > ansteuerung vom licht und eine manuelle schaltmöglichkeit(die aber noch nicht so wirklich
> > klappt).
> > Hatte das hier schonmal jemand?
> >
> > Grü�e
> >
> > Karl


    Antwort schreiben


Antworten:

Re: Stack Overflow (von André H. - 6.12.2011 20:45)
    Re: Stack Overflow (von Karl - 7.12.2011 0:25)
        Re: Stack Overflow (von nitraM - 8.12.2011 9:11)
            Re: Stack Overflow (von Rene Schulz - 2.01.2012 22:15)
                Re: Stack Overflow (von André H. - 3.01.2012 1:47)