Ostatnie artykuły

według kategorii

Główna

Left Banner

Potrzebujesz pomocy?

Ostatnie artykuły

WEcabin Designer #2 - Magistrala CAN i tagi
Autor      07/01/2026 13:20:00
WEcabin Designer #2 - Magistrala CAN i tagi

Magistrala CAN i tagi w WEcabin Designer

Tagi są jednym z najważniejszych elementów całego projektu w WEcabin Designer. To właśnie za ich pomocą panel HMI komunikuje się z elektroniką pojazdu. Prawie każdy widget umieszczony na ekranie korzysta z jednego lub kilku tagów.

Definicja: Tag jest nazwą przypisaną do konkretnego sygnału lub wartości przesyłanej pomiędzy panelem a modułem zewnętrznym.

Transmisja ta w większości motoryzacyjnych przypadków jest realizowana poprzez magistralę CAN. CAN to standard komunikacyjny stosowany głównie w pojazdach, umożliwiający mikrokontrolerom i komputerom pokładowym wymianę wielu danych za pomocą dwóch przewodów: CAN high oraz CAN low.

Każde urządzenie podłączone do magistrali wysyła lub odbiera wiadomości zwane ramkami CAN. Zawierają one identyfikator oraz dane reprezentujące np. prędkość pojazdu, poziom paliwa, temperatury płynów czy ciśnienie oleju.

  • Ramka (FRAME): Reprezentuje całą wiadomość CAN odebraną z magistrali.

  • Zmienna (VAR): Reprezentuje pojedynczą wartość znajdującą się wewnątrz tej wiadomości. Jedna ramka może zawierać wiele zmiennych.

Panel HMI odbiera te wiadomości, dzięki uprzedniej konfiguracji przypisuje je do tagów i prezentuje w formie graficznej. Może również wysyłać informacje sterujące, takie jak wciśnięcie przycisku na ekranie czy ustawienie konkretnej wartości.


Konfiguracja protokołu komunikacji i tworzenie tagów

Aby utworzyć nowy tag, należy najpierw dodać protokół komunikacji. W tym celu przechodzimy na stronę Configuration → Protocols, a następnie klikamy ikonę „+”.

Z listy wybieramy opcję CAN Direct. W porównaniu do standardu CANopen HMI, wymaga ona indywidualnej konfiguracji każdej ramki, ale w zamian daje całkowitą swobodę i nie potrzebuje wyboru konkretnego sterownika PLC.

W kolejnym kroku należy wybrać konkretny port CAN oraz szybkość transmisji, która musi być identyczna dla obu komunikujących się ze sobą urządzeń.

Po utworzeniu protokołu, tworzenie nowych tagów odbywa się w ścieżce Configuration → Tags w drzewie projektu.

Aby poprawnie utworzyć i skonfigurować nowy tag, należy najpierw zdefiniować ramkę CAN. W jednej ramce CAN może znajdować się jeden sygnał lub wiele sygnałów, z których każdy definiuje się jako osobną zmienną (VAR). W praktyce używa się wielu ramek, ponieważ jednostka sterująca zbiera informacje z wielu modułów pojazdu oraz z różną częstotliwością.

Definicja ramki (FRAME) — Parametry

Parametr

Opis

1. Type

Określa, czy definiowany jest obiekt typu FRAME (cała ramka CAN), czy VAR (pojedyncza zmienna znajdująca się w ramce).

2. Datatype

Rodzaj danych definiujących ramkę – unsignedByte lub unsignedInt[].

3. CAN frame ID

Identyfikator ramki CAN zapisywany w formie dziesiętnej lub szesnastkowej. Dzięki niemu odbiornik wie, czy dane dotyczą silnika, hydrauliki, oświetlenia czy innego modułu. Musi być zgodny z konfiguracją urządzenia wysyłającego dane.

4. Frame Length

Określa wielkość ramki w bajtach (domyślnie wynosi 8).

5. Mux Info

Jeśli ramka jest multipleksowana (zawiera dane zmieniające znaczenie w zależności od wartości MUX). Bity 0-15 określają pozycję multipleksera w ramce, bity 16-21 rozmiar w bitach (1-63), a bit 22 definiuje typ big-endian. Domyślnie parametr wynosi 0 (brak multipleksowania).

6. Frame MODE

Określa kierunek przesyłu danych: RX (odbierana), TXall (wysyłana po nadpisaniu wszystkich zmiennych), TXany (wysyłana po nadpisaniu jakiejkolwiek zmiennej), TXperiod (wysyłana okresowo).

7. Time

Dla ramki RX – częstotliwość [ms] sprawdzania (odbioru) danych; dla TX – częstotliwość [ms] wysyłania ramki.

Definicja zmiennej (VAR) — Parametry

Parametr

Opis

1. Datatype

Typ zmiennej, np. boolean, short, int, unsignedInt, float, string itp.

2. Conversion

Opcja służąca do konwersji danych, np. zamiana kolejności pół bajtów (AB→BA – swapnibbles), zamiana kolejności bajtów (ABCD→CDAB – swap2) lub negacja.

3. CAN frame ID

Identyfikator ramki, do której ma być przypisana definiowana zmienna.

4. Mux Val

Określa, dla jakiej wartości MUX dana zmienna jest przesyłana (w przypadku ramek multipleksowanych).

5. Start in frame

Określa, od którego bitu w ramce zaczyna się wartość definiowanej zmiennej. Przykładowo dla ramki 8-bajtowej: [Bajt0] [Bajt1] [Bajt2] ... [Bajt7]:

  • Wartość temperatury (Bajty 0-1) → Start in frame = 0 (pierwszy bit bajtu 0).

  • Wartość ciśnienia (Bajty 2-3) → Start in frame = 16 (pierwszy bit bajtu 2).

6. Bit size of field

Wielkość zmiennej w bitach. Zależy od wybranego typu (np. boolean – 1 bit, short signed integer – 8 bitów, double integer – 32 bity).

7. Flags

Bit 0 określa, czy zmienna jest multipleksowana; bit 1 określa, czy zmienna jest typu big-endian.


Endianowość (Big Endian i Little Endian)

Podczas przesyłania danych składających się z więcej niż jednego bajtu (np. liczb 16-bitowych lub 32-bitowych) kluczowa jest kolejność, w jakiej bajty są zapisane w ramce CAN. Sposób ten nazywany jest endianowością.

  • Big Endian: Najbardziej znaczący bajt (MSB) znajduje się na początku.

    Przykład dla liczby 0x1234: Bajt0 = 0x12, Bajt1 = 0x34. Odczytana wartość wynosi 0x1234.

  • Little Endian: Najmniej znaczący bajt (LSB) znajduje się na początku.

    Przykład dla liczby 0x1234: Bajt0 = 0x34, Bajt1 = 0x12. Odczytana wartość wynosi 0x1234.

W obu przypadkach wynik końcowy jest identyczny tylko wtedy, gdy odbiornik dokładnie zna zastosowany sposób zapisu danych.


Przykład praktyczny: Odbiór temperatury oleju oraz ciśnienia w jednej ramce

Aby odebrać te dwie informacje (założenie: obie to 16-bitowe zmienne typu unsignedInt) w ramach jednej wiadomości:

1. Definiujemy ramkę (FRAME):

    • Ustawiamy typ jako FRAME, Datatype na unsignedInt[] z wielkością tablicy (Arraysize) równą 8, Frame Length - 8 oraz ID ramki np. 0x100.

2. Tworzymy zmienne (VAR) przypisane do tej ramki:

    • temperatura_oleju: Typ danych unsignedInt, wielkość bitowa (Bit size of field) = 16, parametr Start in frame = 0.

    • cisnienie_oleju: Typ danych unsignedInt, wielkość bitowa = 16. W tym przypadku parametr Start in frame ustawiamy na 16, ponieważ poprzednia zmienna zajęła już bity od 0 do 15.


Podsumowanie

Konfiguracja komunikacji CAN w środowisku WEcabin Designer opiera się na trzech kluczowych krokach:

  1. Konfiguracja protokołu komunikacyjnego.

  2. Zdefiniowanie ramek CAN (FRAME).

  3. Utworzenie zmiennych (VAR) wskazujących konkretne dane znajdujące się wewnątrz tych ramek.

Tak przygotowane zmienne mogą być bezpośrednio przypisywane do widgetów graficznych, systemów alarmowych oraz logiki całej aplikacji. Dzięki temu panel HMI jest w stanie nie tylko wyświetlać bieżący stan pojazdu, ale też wysyłać polecenia sterujące do innych kontrolerów w sieci CAN.

Poprzednia część kursu - WEcabin Designer #1

Następna część kursu    - WEcabin Designer #3