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

OP #6264195
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 #6264212
CAPL ist event basierend, deshalb solltest Du keine blockierende 
Schleifen nehmen.

Schau dir mal das ON signal oder ON SIGNAL UPDATE in der Anleitung von 
CAPL an.
Gast #6264216
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

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.