Überprüfen Sie die Antwort eines Steuergeräts, während ein Timer in CAPL (CANoe) läuft.

OP #6264195
Lesenswert?

Hallo Zusammen

Ich leite ein Skript in CAPL, wo ich eine Änderung des Wertes eines
Signals (z. B. Signal B) bemerken soll, das vom Steuergerät kommt. Am
Anfang des Timers ändere ich den Wert eines anderen Signals (z. B.
Signal A) und sende es über CAN-Bus an das Steuergerät. Während der
Timer läuft, möchte ich den veränderten Wert des Signals B vom
Steuergerät als Antwort auf den veränderten Wert des Signals A sehen.
Nachdem der Timer abgelaufen ist, möchte ich das Signal A wieder auf
seinen ursprünglichen Wert zurücksetzen.

*Hinweis: Ich habe die verschiedenen Signale nur als Signal A und Signal
B bezeichnet, um die Frage klarer zu verstehen.

Signal A ändert den Wert von 2 auf 0.
Signal B hat einen Originalwert von 61, und der geänderte Wert kann eine
beliebige Zahl zwischen 0 und 60 sein.
Timer läuft für 4 Sekunden.
Ich verwende while loop und command (isTimerActive (timer) ==1), um die
Änderung des Wertes von Signal B zu überprüfen, wenn der Timer läuft.


//Unten ist der beigefügte Code ->

variables
{
 msTimer Execute;
}

on key 'c'
{
 setTimer(Execute,4000);
 Write("Test Gestartet");
 SetSignal(Signal A, 2);
while (isTimerActive(Execute)==1)
{
 if ($Signal B != 61)
    {
     Write("Test Erfolgreich");
     }
    else
    {
      Write("Test Gescheitert");
    }
}
}

on timer Execute
{
  write("Test Vorbei");
  setSignal(Signal A, 0);
}

Ich führe diesen Code aus und der Wert von Signal A ändert sich auf 2,
aber es gibt keine Änderung im Wert von Signal B. Ich benutze den
(isTimerActive (Timer) ==1) in der while-Schleife, ist das der richtige
Befehl für mein Problem? Auch wenn ich laufe (isTimerActive (timer) ==1)
in der while-Schleife, wird CANoe inaktiv und ich muss CANoe mit dem
Taskmanager stoppen.

Irgendwelche Ideen wie kann ich meinen Code korrigieren und die
gewünschte Antwort erhalten?

Danke und Gruß
Gast #6264216
Lesenswert?

So eine while-Schleife blockiert die komplette Eventverarbeitung von 
CANoe, da dein CAPL Skript im gleichen Thread wie diese ausgeführt wird. 
Das sollte man also tunlichst unterlassen! :-)

Löse das am besten Event-basiert. D.h. du machst dir OnSignal-Handler, 
die den ankommenden Wert prüfen und ggf. ein Flag setzen. Wenn dein 
Timer durch ist, prüfst du die Flags und handelst entsprechend.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren