- Fundamenty automatyki: Systemy sterowania wymagają niezawodnej wymiany danych w trudnych warunkach.
- CAN (Controller Area Network): Standard czasu rzeczywistego, stworzony dla motoryzacji.
- Modbus: Najbardziej rozpowszechniony protokół przemysłowy na świecie.
- Cel wykładu: Zrozumienie fizyki sygnałów, mechanizmów arbitrażu oraz różnic między magistralami i siecią Ethernet.
- Porównamy determinizm z przepustowością i nauczymy się diagnozować najczęstsze błędy.
- Rok 1983: Robert Bosch GmbH rozpoczyna prace nad systemem komunikacji „wewnątrzsamochodowej".
- Problem: Rosnąca liczba sterowników (ECU) i czujników prowadziła do powstawania ogromnych wiązek kabli (kilometry przewodów).
- Koncepcja: Stworzenie jednej magistrali, do której każdy może się podłączyć, zamiast połączeń punkt-punkt.
- 1986: Oficjalna prezentacja CAN na kongresie SAE w Detroit. Pierwszy chip stworzony wspólnie z Intelem (82526).
- Rok 1991: Mercedes Klasy S (W140) staje się pierwszym samochodem seryjnym z CAN Bus.
- Zastosowanie: Połączenie sterownika silnika, skrzyni biegów i układu klimatyzacji.
- Skalowanie: Sukces Mercedesa sprawił, że CAN stał się standardem de facto w motoryzacji.
- 1993: Protokół zostaje ustandaryzowany jako ISO 11898. Standard definiuje napięcia: stan recesywny (0V różnicy) i dominujący (~2V różnicy).
- Rok 1979: Firma Modicon (dziś Schneider Electric) projektuje protokół dla swoich sterowników PLC.
- Założenia: Prostota implementacji, niskie wymagania sprzętowe i darmowy standard.
- Ewolucja: Zaczynał jako protokół szeregowy (Modbus RTU), ewoluował do wersji sieciowej (Modbus TCP).
- Dlaczego przetrwał? Ponieważ jest przewidywalny i niemal każde urządzenie na rynku go obsługuje.
- Magistrala składa się z pary skręconych przewodów: CAN_High i CAN_Low.
- Stosowana jest transmisja różnicowa – odporna na zakłócenia elektromagnetyczne (EMI).
- Każde zakłócenie indukuje się w obu przewodach jednocześnie, a odbiornik mierzy tylko różnicę napięć między nimi.
- Wymagana terminacja: rezystory 120 Ω na obu końcach magistrali (zapobieganie odbiciom fal).
- Stan recesywny (logic 1): CAN_H = 2.5V, CAN_L = 2.5V. Różnica = 0V.
- Stan dominujący (logic 0): CAN_H ≈ 3.5V, CAN_L ≈ 1.5V. Różnica ≈ 2.0V.
- Węzły realizują logiczne OR na magistrali – jeśli ktokolwiek wyśle „0", magistrala przechodzi w stan dominujący.
- To pozwala na implementację arbitrażu bez kolizji.
- CSMA/CA (Carrier Sense Multiple Access with Collision Avoidance): Dostęp wielokrotny z nasłuchem i unikaniem kolizji.
- Kiedy dwa sterowniki zaczynają nadawać jednocześnie, porównują to, co wysłały, z tym, co widzą na linii.
- Jeśli sterownik wysłał „1" (recesywny), ale widzi „0" (dominujący), oznacza to, że ktoś inny nadaje i ma wyższy priorytet.
- Sterownik natychmiast przerywa nadawanie i czeka na koniec ramki zwycięzcy.
- To ID ramki decyduje o jej priorytecie.
- Im niższa wartość binarna ID, tym wyższy priorytet (ponieważ zawiera więcej zer dominujących na początku ID).
- ID 0x000 ma najwyższy możliwy priorytet.
- W samochodzie najwyższy priorytet mają dane z czujników silnika i hamulców, a linie „komfortowe" (np. klimatyzacja) – niższy.
- SOF: Start of Frame (1 bit dominujący).
- Identifier: 11 bitów adresu.
- RTR: Request for Remote Transmission.
- DLC: Data Length Code (ile bajtów danych wysyłamy: 0-8).
- Data Field: Maksymalnie 8 bajtów danych.
- CRC: Suma kontrolna zapobiegająca przekłamaniom.
- ACK: Potwierdzenie otrzymania przez inne węzły.
- Wprowadzenie 29-bitowego identyfikatora zamiast 11-bitowego.
- Pozwala na zaadresowanie znacznie większej liczby typów wiadomości (ponad 500 milionów).
- Stosowane głównie w protokole J1939 (ciężarówki, autobusy, maszyny budowlane).
- Standardowy i rozszerzony CAN mogą współistnieć na tej samej magistrali.
- Suma CRC: Odbiornik oblicza sumę i porównuje z tą wysłaną przez nadawcę.
- Potwierdzenie ACK: Nadawca wysyła bit recesywny w polu ACK. Jeśli jakikolwiek węzeł odebrał ramkę poprawnie, „nadpisuje" ten bit stanem dominującym.
- Jeśli nadawca nie zobaczy potwierdzenia (ACK Error), automatycznie ponawia transmisję.
- Error Frames: Specjalne ramki wymuszające na wszystkich węzłach odrzucenie błędnych danych.
- Zalety klasycznego CAN (8 bajtów danych, 1 Mbps) stały się wąskim gardłem.
- CAN FD wprowadza rewolucję: przyspiesza transmisję tylko w fazie przesyłania danych (do 8-10 Mbps).
- Zwiększa payload z 8 do 64 bajtów w jednej ramce.
- Zmniejsza ryzyko „zapełnienia" magistrali w nowoczesnych pojazdach elektrycznych.
- Sam CAN definiuje tylko warstwy fizyczną i łącza danych (warstwy OSI 1-2, jak kable i sygnały).
- J1939: Standard określający, co oznaczają poszczególne ID i dane w pojazdach ciężkich (np. ID 0xF004 to obroty silnika).
- CANopen: Stosowany w automatyce przemysłowej, medycynie (MRI) i windach. Wprowadza pojęcia SDO (Service Data Objects) i PDO (Process Data Objects).
- Architektura oparta na zapytaniach: klient (master) pyta, serwer (slave) odpowiada.
- Serwer nigdy nie inicjuje rozmowy sam z siebie (w przeciwieństwie do CAN).
- Pozwala to na budowę stabilnych systemów, gdzie jeden sterownik zarządza setkami czujników.
- Wspólna przestrzeń adresowa (0-65535) ułatwia integrację.
- Dane przesyłane binarnie, najczęściej przez RS-485.
- Stosowana suma kontrolna 16-bitowa (CRC).
- Wydajny na długich dystansach (do 1200m) przy niskich prędkościach (np. 9600 bps).
- Bardzo tani w implementacji w mikrosterownikach.
- Ramka Modbus zostaje opakowana w nagłówek MBAP i wysłana przez standardową sieć IP.
- Wykorzystuje port TCP 502.
- Brak sumy CRC wewnątrz ramki (za błędy odpowiada warstwa TCP/IP).
- Pozwala na dostęp do urządzeń przemysłowych przez internet (z odpowiednim zabezpieczeniem).
- Zamiast danych binarnych, przesyła znaki czytelne dla człowieka (np. ':0103...').
- Mniej wydajny niż RTU (używa dwa razy więcej bajtów), ale łatwiejszy do podsłuchania zwykłym terminalem.
- Rzadko spotykany w nowoczesnych maszynach, ale nadal obecny w starszych systemach HVAC.
- Wykorzystuje bajty LRC do kontroli błędów.
- Discrete Inputs: 1-bitowe, tylko odczyt (np. łącznik krańcowy).
- Coils (cewki): 1-bitowe, odczyt/zapis (np. załączenie pompy).
- Input Registers: 16-bitowe, tylko odczyt (np. poziom napięcia).
- Holding Registers: 16-bitowe, odczyt/zapis (np. nastawa temperatury).
- W dokumentacjach rejestry często zaczynają się od adresu 40001.
- Jednak w ramce binarnej adres fizyczny to 0.
- Błąd przesunięcia o jeden (off-by-one error) jest najczęstszym powodem nieudanych wdrożeń Modbus.
- Zawsze sprawdzaj, czy Twój program kliencki indeksuje od 0 czy od 1.
- FC 01: Czyta bity wyjściowe (coils).
- FC 03: Czyta rejestry konfiguracyjne (holding registers). Najczęściej używana funkcja.
- FC 04: Czyta dane z czujników (input registers).
- Master podaje adres startowy i liczbę elementów do pobrania.
- FC 05: Zapis pojedynczego bitu.
- FC 06: Zapis pojedynczego rejestru 16-bitowego.
- FC 16 (0x10): Zapis wielu rejestrów jednocześnie (rekomendowane dla oszczędności czasu).
- Jeśli serwer ma problem, zwraca kod błędu (exception code), np. 0x02 – nieprawidłowy adres.
- Modbus RTU nie ma bajtu startu. Ramkę poznaje się po ciszy na magistrali.
- Przerwa między ramkami musi trwać co najmniej czas potrzebny na przesłanie 3.5 znaku.
- Przerwa wewnątrz ramki nie może przekroczyć 1.5 znaku.
- Systemy Windows (ze względu na multitasking) często mają problem z precyzyjnym zachowaniem tych czasów.
- Ethernet: Skupia się na przepustowości. Pakiety wysyłane są „najszybciej jak się da".
- CAN Bus: Skupia się na determinizmie. Wiemy dokładnie, kiedy wiadomość dotrze (gwarantowany czas odpowiedzi).
- Ethernet przy dużym obciążeniu generuje nieprzewidywalne opóźnienia. CAN dzięki arbitrażowi bitowemu zawsze „puszcza" najważniejszą daną przodem.
- Ethernet (CSMA/CD): Collision Detection. Po kolizji oba urządzenia „milkną" na losowy czas. To niszczy przewidywalność.
- CAN (CSMA/CA): Collision Avoidance. Nikt nie milknie – dane o wyższym priorytecie przepływają bez zakłóceń.
- To dlatego hamulec w samochodzie musi być na CAN, a Netflix na Ethernet.
- Modbus TCP to protokół warstwy aplikacji (layer 7). On nie zastępuje Ethernetu – on go używa.
- Zaleta: Dowolna infrastruktura IT zadziała z Modbus TCP (switche, routery, WiFi).
- Wada: Brak rzeczywistego determinizmu bez stosowania Industrial Ethernet (np. EtherCAT, Profinet).
- Zasięg: CAN (do 1 km), Modbus RS485 (1.2 km), Ethernet (100 m / światłowód).
- Topologia: CAN (magistrala), Modbus (magistrala), Ethernet (gwiazda).
- Prędkość: CAN (1 Mbps), Modbus RTU (115 kbps), Ethernet (10 Gbps).
- Payload: CAN (8B), Modbus (250B), Ethernet (1.5kB).
- Gniazdo OBD-II (pod kierownicą) to bezpośrednie wyjście magistrali CAN.
- Diagnosta wysyła zapytanie na ID 0x7E0, a sterownik silnika odpowiada na ID 0x7E8.
- Dzięki temu w czasie rzeczywistym widzimy ciśnienie doładowania, temperaturę czy błędy (DTC).
- Inwertery solarne zazwyczaj udostępniają dane przez Modbus TCP.
- Master (np. system SCADA lub smart home), co minutę pobiera rejestry: aktualna moc produkowana, napięcie paneli, stan izolacji.
- Modbus pozwala na łatwe łączenie urządzeń od różnych producentów w jeden system monitoringu.
- Problem: Zarówno klasyczny CAN, jak i Modbus powstały w czasach bez hakerów.
- Brak szyfrowania, brak uwierzytelniania.
- Jeśli wpięto się fizycznie w kable, można przejąć pełną kontrolę nad maszyną.
- Współcześnie stosuje się Modbus Secure (TLS) oraz zabezpieczone bramy (gateway).
- Najlepszym narzędziem do pracy z tymi sieciami jest analizator logiczny lub oscyloskop cyfrowy.
- Widzimy wtedy fizyczne poziomy napięć i błędy takie jak bit-stuffing error w CAN czy błędy CRC w Modbus.
- Częstym problemem są pętle masy oraz brak uziemienia ekranu przewodu.
- Tradycyjne magistrale są wypierane przez Automotive Ethernet.
- Wprowadzana jest architektura strefowa (ang. zonal architecture) – Ethernet jako szkielet, CAN/Modbus jako lokalne dojścia do czujników.
- Technologia TSN (Time Sensitive Networking) pozwala Ethernetowi stać się tak deterministycznym jak CAN.
- CAN Bus: Król czasu rzeczywistego i bezpieczeństwa. Najważniejszy w pojazdach i systemach krytycznych.
- Modbus: Król kompatybilności. Niezbędny w przemyśle i budynkach.
- Ewolucja dąży do łączenia tych światów poprzez sieć IP i Industrial Ethernet.
- Zawsze pamiętaj o terminacji i poprawnym uziemieniu!