Kontynuując nasz cykl stworzenia prostego projektu w CANoe, jedziemy dalej. Na początek kilka słów o tym czym są zmienne systemowe:
Zmienne Systemowe są ustawiane nadrzędnie w środowisku CANoe. Są widoczne dla wszystkich nodów CAPLowych, paneli, a także można się do nich dostać spoza CANoe przez odpowiednie API.
Dzięki temu możemy nie tylko wymieniać dane pomiędzy różnymi węzłami ale nawet kontrolować symulację za pomocą zewnętrznego sekwencera.
Stwórzmy więc dwie zmienne systemowe, które będą sterować zachowaniem BCM-a:

Otwieramy Environment -> System Variables, a następnie tworzymy dwie zmienne systemowe. Zwróć uwagę na to, że możemy zmienne grupować w foldery nadrzędne, co ułatwia ich uporządkowanie.

Następnie stworzymy pierwszy panel. Panele to forma GUI lub HMI – forma graficznego przedstawienia danych wraz z możliwością ich łatwej modyfikacji bez zaglądania do kodu.
Ma to duże znaczenie np. wtedy, gdy wysyłamy klientowi prototyp urządzenia do przetestowania wraz z symulacją, która w prosty sposób umożliwia zmianę parametrów (np. prędkość pracy silniczka).

W programie Panel Designer tworzymy prosty panel – dwa checkboxy oraz odpowiednik diody LED.

Następnie prawoklikiem przypisujemy odpowiednio Variable dla checkboxów, oraz Signal dla diody.
Checkboxy przypisujemy do zmiennych systemowych, które właśnie stworzyliśmy. Diodę możemy przypisać np. do sygnału Turn Signal


Zmodyfikujemy teraz fragement kodu CAPL do obsługi BCM-a.
Dodane zostaną dwa warunki if, które zmienią działanie kodu w zależności od stanu zmiennych systemowych, a więc w praktyce od zmiany stanu checkboxów.
on timer CyclicFrameTransmission {
if (1 == sysGetVariableInt(sysvar::BCM_configuration::CounterNormalIncrementation)) { /* wykona się tylko gdy będzie zaznaczony drugi checkbox */
MessageCounter = (MessageCounter+1) & 0xFF; //świadomie kontrolujemy przepełnienie jednego bajtu - bierzemy samą końcówkę
BCM_status_variable.Counter = MessageCounter;
}
if (1 == sysGetVariableInt(sysvar::BCM_configuration::FrameTransmission)) {
/* wykona się tylko gdy będzie zaznaczony pierwszy checkbox */
output(BCM_status_variable);
}
setTimer(CyclicFrameTransmission, 1);
}
W końcu nadszedł czas, żeby zobaczyć nasze zmiany w praktyce 🙂

Startujemy symulację, a następnie otwieramy panel z menu Home -> Panel

Sprawdź, jak zmiana stanu checkboxów wpływa na to co widać w Trace’ie.
Zadania dla Ciebie:
- Dodaj możliwość zmiany wartości sygnału Turn Signal z panelu
- Dodaj dodatkowe panele dla pozostałych węzłów na magistrali.
Dodaj komentarz