Hallo, wie kann man in CAPL zwischen zwei Ereignissen eine Verzögerung für ein paar Sekunden realisieren? Ich wollte eine Spannung hochladen und nach 5s wieder entladen. könntet ihr mir bitte helfen? Danke! Gruß
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.
Das geht in CAPl sehr einfach. Bist du in einem Testmodul oder in einem Netzwerkknoten? Testmodul: Funktion TestWaitForTimeout(...) benutzen. Netwerkknoten: - Mit setTimer(t1, 5000) einen Timer aufziehen. - Mit on timer t1 { ... } einen Event-Handler implementieren.
Markus schrieb: > wie kann man in CAPL zwischen zwei Ereignissen eine Verzögerung für ein > paar Sekunden realisieren? * timer definieren * Beim 1. Ereignis timer starten * Wenn timer abläuft (on timer xyz ...) 2. Ereignis losschicken.
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 { ? }
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"); }
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 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.