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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Zeeshan K. (zee3010)


Bewertung
0 lesenswert
nicht 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ß

von Dirk (Gast)


Bewertung
1 lesenswert
nicht lesenswert
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.

von Honigmensch (Gast)


Bewertung
1 lesenswert
nicht 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.

von Dirk (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hier gibt es auch schöne Tipps und Tricks:

https://kb.vector.com/entry/875/

von Zeeshan K. (zee3010)


Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antwort.

Aber wie baue ich das Ereignis on signal und on timer zusammen, damit 
das Ereignis on signal ausgeführt wird, während der Timer läuft?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.