Dziś zajmiemy się czymś bardziej praktycznym, niż ostatnio 🙂
Na początek zadajmy sobie pytanie:
Jak testować system wbudowany, przeznaczony do samochodu… bez samochodu?
Każda osoba zajmująca się tworzeniem oprogramowania wie, jak istotne w procesie developmentu są testy jednostkowe, komponentowe czy integracyjne. Pozwalają one bardzo wcześnie wychwycić sporą część błędów powstałych na etapie pisania kodu. Zapewniają również tzw. regresję – w przyszłości weryfikują czy istniejąca funkcjonalność nie zostaje naruszona przez nowe fragmenty kodu.
O tym jak ważną rolę pełnią testy świadczy fakt, iż jedna z metodologii (którą notabene osobiście bardzo lubię) zachęca wręcz aby pisanie kodu rozpoczynać od… wymyślenia i napisania testów. Mam tu na myśli oczywiście TDD (ang. Test Driven Development).
A jak to się ma do systemów wbudowanych? Otóż wszelkie zagadnienia testowania oprogramowania typowo komputerowego (do poziomu komponentu) można bez większych przeszkód przenieść również na grunt oprogramowania wbudowanego. Nieco trudniej przedstawia się sprawa testowania integracyjnego, gdzie siłą rzeczy potrzebujemy wszystkich sąsiadów naszego systemu, z którymi prowadzi on interakcję. W naszym przypadku będzie to całkiem spory kawałek elektryki samochodowej. Pierwszym pomysłem jest oczywiście zabranie naszego urządzenia, podłączenie go w aucie i rozpoczęcie zabawy! Bierzemy więc laptopa i idziemy odwiedzić…
Samochód w garażu
Wsiadamy do auta i niemal natychmiast pojawia się pewne “ale”… Pod względem komfortu pracy, wnętrze samochodu dalekie jest od ideału (czyli naszego biurka). Brakuje dużego monitora, nawet z laptopem w fotelu kierowcy jest dość ciasno, kierownica przeszkadza w wygodnym rozłożeniu matrycy, wpisywanie czegokolwiek jest bardzo niewygodnie, a używanie myszki – praktycznie niemożliwe. Zbyt długie testy kończą się rozładowaniem akumulatora w samochodzie lub baterii w laptopie. Niezmiernie trudno jest wymusić również niektóre błędy/usterki, np. niski poziom płynu chłodniczego lub zużyty klocek hamulcowy. Rozwiązaniem naszych problemów jest …
Samochód na biurku
Czyli próba odwzorowanie najważniejszych fragmentów instalacji elektrycznej, tak aby zmieściła się na naszym standardowym stanowisku pracy. Czego będziemy potrzebować? Na początek wystarczy zestaw wskaźników – w końcu to jest nasz główny obiekt zainteresowań 🙂 W przyszłości, w miarę potrzeb, można uzupełnić go sterownikiem ECU, modułem komfortu i innymi urządzeniami.
Aby ożywić licznik na biurku będziemy potrzebować:
- wyłącznik zasilania (kontakt 30),
- wyłącznik zapłonu (kontakt 15),
- czujniki: temperatury zewnętrznej, temperatury płynu, poziomu płynu spryskiwaczy, płynu chłodniczego, klocków hamulcowych, itd.
- połączenie CAN między zestawem wskaźników a sterownikiem silnika,
- połączenie CAN między zestawem wskaźników a modułem komfortu,
- złącze diagnostyki OBD
A więc do dzieła! Pierwszym elementem układanki będą odpowiednie wiązki z wtyczkami.
Kilka wyłączników, które będą “symulować” odpowiednie czujniki oraz stacyjkę. Całość zamknięta zostanie w plastikowej obudowie, a wszystkie przewody zostaną ujęte w elastyczne odgiętki.
Wyłączniki ułożyłem w jednej linii, dość wysoko, tak aby przy ewentualnej rozbudowie można było nawiercić drugi rząd otworów. Z lewej strony wyprowadzone zostały przewody prowadzące do złącza diagnostycznego oraz kable zasilające +12V. Dwie zielone diody LED sygnalizują włączenie zasilania (kontakt 30) i przekręcenie stacyjki (kontakt 15).
Trzy przełączniki chwilowe udają manetkę MFA, zaś po ich lewej stronie znajdują się niewielkie, precyzyjne potencjometry montażowe symulujące czujniki: poziomu paliwa (500ohm), temperatury płynu (2k) oraz temperatury otoczenia (5k).
Z tyłu obudowy znalazły się dwa złącza DB-9. Lewe w przyszłości posłuży do podłączenia dodatkowych sterowników. Zawiera następujące sygnały:
- CAN silnika,
- CAN komfortu
- linia diagnostyki (K)
- masa sygnałowa (GND)
Prawe gniazdo będzie stanowić źródło sygnałów dla naszego urządzenia, zanim zostanie ono zabudowane we wnętrzu licznika. Znajdują się na nim:
- CAN silnika,
- CAN komfortu
- linia diagnostyki (K)
- masa sygnałowa (GND)
- +12V po stacyjce
W ten sposób niewielkim kosztem udało się nam stworzyć namiastkę samochodu, którą można z powodzeniem zmieścić na biurku. W przyszłości na pewno zostanie ona rozbudowana, jednak już w obecnym stanie znacząco ułatwia testowanie naszego urządzenia bez konieczności biegania do garażu.
Szersze spojrzenie
Z punktu widzenia inżynierii oprogramowania, to co dziś stworzyliśmy jest swego rodzaju wewnętrznym narzędziem. Budują je sami developerzy, aby ułatwić sobie pisanie kodu, testowanie czy wdrażanie. Zazwyczaj wiąże się to ze sporą inwestycją czasu, i stąd postrzegane jest często jako coś zbędnego czy wręcz szkodliwego. W ostatecznym rozrachunku niemal zawsze tego typu narzędzia znacząco poprawiają efektywność pracy, ułatwiają wczesne wykrycie błędów oraz pomagają w ich późniejszym naprawianiu.