CANoe część 3: programowanie w CAPL i uruchomienie symulacji

Cześć!

Mam na imię Wojtek i jestem inżynierem od testowania Systemów Wbudowanych.

Zachęcam do kupienia mojego kursu Wszystko o magistrali CAN

Po dwóch pierwszych częściach przygód z CANoe czas w końcu na napisanie kodu. Zaimplementujemy prostą funkcjonalność dla węzła Body Computer. Komputer będzie nadawał jedną ramkę, w której dwa sygnały będą miały stałą, określoną wartość, zaś trzeci sygnał (Counter) będzie się inkrementował za każdym wysłaniem ramki.

W rzeczywistości countery (liczniki) są często stosowane w ramkach nadawanych cyklicznie. Pozwala to wykryć przez odbiorcę zgubienie ramek lub nadejście ich w niepoprawnej kolejności.

Aby przejść do edytora CAPL należy kliknąć dwukrotnie bloczek w Simulation Setup. Oto kod, który możesz wkleić do węzła. Polecam Ci go jednak przepisać ręcznie – abyś lepiej uświadomił sobie co tu robimy.

Jeśli nigdy nie programowałeś w CAPLu i nie czytałeś mojego wpisu o podstawach programowania w CAPL, zrób sobie przerwę na lekturę zanim przejdziesz dalej.

/*@!Encoding:1250*/
includes
{  
}

variables
{
 int MessageCounter = 0;
 
 timer CyclicFrameTransmission;          /* timer do cyklicznego nadawania ramki */
 
 message BCM_Status BCM_status_variable; /* zmienna typu message - ramka od BCM */
} 


on start {

  setTimer(CyclicFrameTransmission, 1);       /* zaczynamy kręcić timerem */  
  BCM_status_variable.HeadLightStatus = 0x11; /* określamy wartości sygnałów */
  BCM_status_variable.TurnSignal      = 0x7;
}

on timer CyclicFrameTransmission {
 MessageCounter = (MessageCounter+1) & 0xFF;  /*świadomie kontrolujemy przepełnienie jednego bajtu - bierzemy samą końcówkę */
 BCM_status_variable.Counter = MessageCounter;
 output(BCM_status_variable);                 /* wysłanie ramki na magistralę */
  
 setTimer(CyclicFrameTransmission, 1);        /* timer wywołuje sam siebie za 1s */
}

Pokażę Ci teraz jedną rzecz. W trakcie pisania kodu zauważysz, że dzięki podpięciu bazy danych DBC możesz podejrzeć elementy składowe (np. sygnały) zawarte w obiekcie ramki typu BCM_status i możesz bezpośrednio do niej wpisywać wartość.

Code completion podpowiada elementy składowe i atrubuty obiektu

Ogarnęliśmy temat dla pierwszego węzła. Zanim pójdziemy dalej odpalmy symulację, żeby sprawdzić, czy ramki rzeczywiście się nadają.

W pierwszej części pisałem, że niewielu z opcji CANoe będziesz naprawdę potrzebował. No więc kolejną rzeczą, która Ci się na pewno przyda jest trace (Analysis -> Trace). Jest to okienko pokazujące listę ramek pojawiających się na magistrali.

Trace jest z pewnością jednym z narzędzi, które na pewno przyda Ci się w CANoe

Jeśli to Twoje pierwsze spotkanie z Tracem, polecam teraz zrobić pauzę i poświęcić chwilę na podejrzenie sobie co robią te wszystkie przyciski na górze. Nie będę tego opisywał, bo wierzę że lepszy efekt osiągniesz badając to samodzielnie.

Co widzimy w trace’ie?

Kolejne ramki wysyłane zostają co 1 sekundę. Wartość na pierwszym bajcie jest inkrementowana z każdym kolejnym wystąpieniem ramki, zaś bajty 2 i 3 się nie zmieniają.

CANoe wyszarza te części ramki, które nie zmieniają swojej wartości od dłuższego czasu. Jest to genialna funkcjonalność, ponieważ pozwala skupić się jedynie na tych bajtach, które wnoszą zmianę.

Dalsze kroki dla Ciebie

Zanim przejdziemy dalej, mam dla Ciebie zadanie.

Stworzyliśmy skrypt jedynie dla pojedynczego węzła. Twoim zadaniem jest zaprogramowanie pozostałych dwóch węzłów według własnego uznania i upewnienie się, że poprawnie nadają swoje ramki na magistralę.

zobacz także:

https://systemywbudowane.pl/canoe-czesc-1-wprowadzenie/
https://systemywbudowane.pl/canoe-czesc-2-ramki-sygnaly-baza-danych-dbc/

Opublikowano

w

przez

Tagi:

Komentarze

2 odpowiedzi na „CANoe część 3: programowanie w CAPL i uruchomienie symulacji”

  1. Awatar Slawomir
    Slawomir

    Cześć, ciekawy artykuł. Mam pytanie jak uruchomić symulacje skoro nie mam Vector boxa? Generalnie mogę mieć możliwość podpiecia boxa ale artykuł jest napisane pod kątem treningu na demo Canoe wiec uruchomienie rozumiem ze też powinno zadziałać za free. Można tą symulacje uruchomić bez Vector boxa? Pozdrawiam

    1. Awatar admin

      Cześć Sławomir.
      Generalnie jest tak: demo pozwala na wszystko, poza podpięciem fizycznego sprzętu.
      Jeśli chcesz podpiąć sprzęt potrzebujesz jedną z licencji CANoe: Full, Run albo Pex. Takie licencje można mieć na donglu USB lub mogą być wbudowane w vector boxa.
      W przypadku dalszych pytań dawaj znać,
      pozdrawiam
      Wojtek

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *