PLC Test Harness
TDD dla automatyki przemysłowej
Definiuj scenariusze testowe, wykonuj je w PLCSim Advanced i otrzymuj natychmiastowe werdykty PASS/FAIL. Testy jednostkowe dla logiki PLC — tak samo, jak inżynierowie oprogramowania testują swój kod.
Testowanie PLC jest wciąż manualne
Każda zmiana w kodzie to hazard bez zautomatyzowanych testów
Brak testów regresyjnych
Modyfikujesz blok funkcyjny i modlisz się, aby nic innego się nie zepsuło. Bez zautomatyzowanych testów każda zmiana niesie ryzyko wprowadzenia cichych błędów, które ujawnią się dopiero na hali produkcyjnej.
Weryfikacja manualna
Testowanie oznacza ręczne wymuszanie wejść w PLC lub PLCSim, obserwowanie zmian wyjść i sprawdzanie wartości ręcznie. Żmudne, podatne na błędy i niemożliwe do powtarzalnego wykonania.
Brak dokumentacji testowej
Jak udowodnisz, że Twój program działa poprawnie? Procedury testowe istnieją w dokumentach Word lub w głowie inżyniera. Brak standaryzowanych, wykonywalnych specyfikacji testowych, które podróżują wraz z projektem.
AI nie może zweryfikować własnego kodu
AI generuje kod PLC, ale skąd wiesz, że działa? Bez zautomatyzowanego testowania kod generowany przez AI trafia do produkcji nietestowany. Test Harness domyka pętlę.
Jak działa PLC Test Harness
Strukturalny framework testowy dla logiki PLC, dostępny przez MCP, Copilot i REST API
Definiuj scenariusze testowe
Każdy test to sekwencja kroków: ustaw wejścia, poczekaj na reakcję PLC, a następnie zweryfikuj, czy wyjścia są zgodne z oczekiwaniami. Testy są przechowywane jako pliki .test.json obok projektu TIA Portal.
4 typy asercji
Dokładne dopasowanie dla typów boolean i integer. Tolerancja dla wartości zmiennoprzecinkowych (±0.1). Zakres dla kontroli min/max. Not-equal aby sprawdzić, czy wartość uległa zmianie. Obsługuje każdy typ danych PLC.
Setup & Teardown
Każdy test zaczyna się od fazy setup (inicjalizacja tagów do znanego stanu) i kończy się fazą teardown (resetowanie tagów do zera), nawet jeśli test się nie powiedzie. Gwarancja czystego stanu.
Uruchom jeden lub wszystkie
Uruchom pojedynczy test po nazwie, przekaż test inline lub użyj symbolu wieloznacznego (*), aby uruchomić cały zestaw testów. Wyniki są zapisywane w last-results.json do wglądu.
Pełna ścieżka audytu
Każde uruchomienie testu generuje szczegółowy raport: które kroki przeszły, które zawiodły, wartości oczekiwane vs rzeczywiste oraz znaczniki czasu wykonania. Eksportuj lub sprawdzaj wyniki w dowolnym momencie.
Cykl TDD napędzany przez AI
Połączony LLM może pisać kod, tworzyć testy, kompilować, pobierać do PLCSim, uruchamiać testy i naprawiać błędy — wszystko autonomicznie. Red → Green → Refactor, dla PLC.
Cykl TDD dla PLC
Od definicji testu do zatwierdzonej logiki PLC
1. Napisz test
Zdefiniuj oczekiwane zachowanie: gdy Start_Button zostanie naciśnięty, Motor_Running powinien mieć wartość true w ciągu 500ms. Utwórz test za pomocą plc_test_create.
2. Uruchom w PLCSim
Uruchom test za pomocą plc_test_run. T-IA Connect zapisuje wejścia do PLCSim, czeka na określone opóźnienie, a następnie odczytuje i sprawdza wyjścia. Werdykt: PASS lub FAIL.
3. Napraw i iteruj
Jeśli krok się nie powiedzie, zobaczysz dokładnie, co poszło nie tak: oczekiwano Motor_Running = true, otrzymano false. Napraw program PLC, skompiluj ponownie, pobierz i uruchom test jeszcze raz.
4. Zbuduj swój zestaw testów
Gromadź testy w miarę rozwoju. Uruchamiaj pełny zestaw po każdej zmianie, aby wyłapać regresje. Testy podróżują z projektem w .tia-connect/tests/.
Typy asercji w szczegółach
Pokrycie każdego typu danych PLC z odpowiednim porównaniem
Dokładne dopasowanie
Dla typów boolean i integer. Motor_Running musi być dokładnie true. Counter musi wynosić dokładnie 5. Bez marginesu błędu.
Tolerancja (±)
Dla wartości REAL i LREAL. Speed musi wynosić 50.0 ± 0.1. Uwzględnia precyzję zmiennoprzecinkową i szumy pomiarów analogowych.
Zakres (min/max)
Wartość musi mieścić się w określonym zakresie. Temperatura między 10.0 a 100.0. Idealne dla wejść analogowych i wartości procesowych.
Nierówne (Not Equal)
Zweryfikuj, czy wartość zmieniła się w stosunku do stanu początkowego. Counter nie może być równy 0 — potwierdzenie, że logika liczenia faktycznie zadziałała.
5 narzędzi w 3 kanałach
Dostępne przez MCP, Copilot (wbudowany asystent) i REST API
plc_test_create
Zapisz definicję przypadku testowego z setup, krokami (wejścia → opóźnienie → asercje) i teardown. Przechowywane jako plik .test.json w .tia-connect/tests/.
plc_test_run
Uruchom test po nazwie, przekaż jeden inline lub użyj *, aby uruchomić wszystkie testy. Asynchronicznie przez REST (zwraca jobId). Wyniki zapisane w last-results.json.
plc_test_list
Lista wszystkich zapisanych przypadków testowych wraz z ich nazwami i opisami. Szybki przegląd pokrycia testami Twojego projektu.
plc_test_delete
Usuń przypadek testowy po nazwie. Czyść przestarzałe testy w miarę rozwoju projektu.
plc_test_get_results
Pobierz wyniki ostatniego uruchomienia testu: status PASS/FAIL dla każdego kroku, wartości oczekiwane vs rzeczywiste, czas wykonania i ogólny werdykt.
Często zadawane pytania
Czy to wymaga PLCSim Advanced?
Tak. Test Harness zapisuje wejścia i odczytuje wyjścia przez interfejs symulacji PLCSim Advanced. Nie działa z rzeczywistymi PLC (byłoby to niebezpieczne dla zautomatyzowanego testowania). PLCSim Advanced zapewnia bezpieczne, powtarzalne środowisko.
Czy AI może autonomicznie tworzyć i uruchamiać testy?
Absolutnie. Połączony LLM (przez MCP lub Copilot) może pisać kod PLC, tworzyć testy za pomocą plc_test_create, kompilować i pobierać do PLCSim, uruchamiać testy, sprawdzać wyniki i naprawiać kod w przypadku niepowodzenia. Pełny cykl TDD bez ingerencji człowieka.
Gdzie są przechowywane testy?
W folderze .tia-connect/tests/ obok projektu TIA Portal. Każdy test to plik .test.json. Wyniki znajdują się w last-results.json. Testy podróżują z projektem — zarchiwizuj projekt, zarchiwizuj testy.
Jak długo trwa uruchomienie testu?
To zależy od opóźnień zdefiniowanych w krokach testowych (czasu danego PLC na reakcję). Typowy test z 3-5 krokami i opóźnieniami 200-500ms trwa 1-3 sekundy. Uruchomienie pełnego zestawu 20 testów zajmuje zazwyczaj mniej niż minutę.