Verzögerung in CAPL

Gast #4369855
Lesenswert?
• ▲
▼
So viel ich weiß, gar nicht. Dafür ist, finde ich, CAPL nicht ausgelegt. 
Wie du es machen kannst, bzw. ich mache. Du schickst die Nachricht zum 
Laden, startest einen Timer und der Handler schickt die Nachricht zum 
Entladen.

Sowas wie delay(xx) habe ich mal gesucht, aber nie gefunden. Du könntest 
sonst das mit C/Matlab, ... nutzen, da sollte das gehen. Bei CAPL dürfen 
die Funktionen nicht blockieren.
Gast #4369914
Lesenswert?
• ▲
▼
Danke für die Antworten.
Ich wollte dass die Entladung sich für 5s verzögert aber ich kriege das 
nicht hin.

Das Programm sieht so aus:

char Hochladen = 0;
char Entladen = 0;

on timer t1
{

/*Lade_spannung hoch*/
 if (t <= 10)
  {
    setTimer (t1 , 10);
    t+=0.01;
    y = ymax*(1-exp(-t));


 /*Entlade Spannung*/
  }else
  {

    Hochladen = 0;
    if ($Botschaft_1::Signal_1 == 0)
    {
      setTimer(t2,10);
      t = 0;
      Entladen = 1;
    }
  }
}

on timer t2
{
 if (t <= 5)
  {
    setTimer (t2 , 10);
    t+=0.01;
    y = ymax*(exp(-t));
  }else
  {
    Entladen = 0;
  }

}

on timer Entladeverzoegerung
{
  ?
}
Gast #4370045
Lesenswert?
• ▲
▼
Es wurde doch schon 2x geschrieben wie man einen Timer in CAPL 
programmiert.

Läuft deine Simulation? Teste mal folgenden Code. Dann Taste 'a' 
drücken.

msTimer tmrTest;

on key 'a'
{
  setTimer(tmrTest, 5000);
}

on timer tmrTest
{
  write("Timer abgelaufen");
}
#4370049
Lesenswert?
• ▲
▼
Du brauhst nur einen Timer. Etwa so:
1
ladestatus = 0; // 0 = laden, 1 = warten, 2 = entladen
2

3
on timer t1
4
{
5
  if(ladestatus == 0) /* bin beim laden */
6
  {
7
    if( /* laden noch nicht fertig */ )
8
    {
9
      /* lade weiter */
10
      setTimer (t1, 10)
11
    } 
12
    else
13
    {
14
       /* laden fertig - jetzt 5 sek warten */
15
       ladestatus = 1
16
       setTimer(t1, 5000)
17
    }
18
  }
19
  else if (ladestatus == 1) /* warten */
20
  {
21
    /* warte timer abgelaufen - jetzt entladen */
22
    ladestatus = 2
23
    setTimer(t1, 10)
24
  }
25
  else if(ladestatus == 2) /* jetzt entladen */
26
  {
27
    if( /* entladen noch nicht fertig */ )
28
    {
29
      /* entlade weiter */
30
      setTimer (t1, 10)
31
    } 
32
    else
33
    {
34
       /* entladen fertig */
35
    }
36
  }
37
  else
38
  {
39
     /* Ungültige ladestatus- Fehler melden! */
40
  }
41
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.