Fragment programu ma realizować klasyczną funkcję START/STOP dla silnika: naciśnięcie START ustawia wyjście (M) na pracę, a naciśnięcie STOP zatrzymuje napęd. W języku ST (Structured Text) kluczowe jest to, że konstrukcja typu IF … ELSE IF/ELSIF … działa wykluczająco: po spełnieniu pierwszego warunku kolejne gałęzie nie są już sprawdzane.
To prowadzi do problemu w sytuacji konfliktowej, gdy oba sygnały są aktywne jednocześnie (S=TRUE i ST=TRUE). Wtedy wykonywana jest tylko pierwsza gałąź z ustawieniem M := TRUE, a część odpowiadająca STOP nie ma szans zadziałać. W efekcie logika nadaje priorytet START.
Z punktu widzenia praktyki przemysłowej i bezpieczeństwa często przyjmuje się zasadę: STOP ma mieć priorytet nad START. Oznacza to, że przy jednoczesnych sygnałach układ powinien przejść w stan zatrzymania. Aby to uzyskać, typowym podejściem jest sprawdzenie STOP jako pierwszego warunku (najpierw "reset", potem "set") albo użycie elementów pamiętających stan, np. przerzutnika SR/RS, które mają zdefiniowany priorytet.
Dlaczego pozostałe propozycje odpowiedzi są problematyczne?
- Stwierdzenie, że nie ma błędu, pomija przypadek brzegowy S=ST=TRUE oraz aspekt priorytetów.
- Uwagi o stanie początkowym zwykle nie są sednem w PLC, bo wyjścia po uruchomieniu programu często mają stan zainicjalizowany (w wielu praktycznych zastosowaniach FALSE), a problem dotyczy logiki warunków.
- Twierdzenie o braku obsługi sytuacji "żaden przycisk nie jest naciśnięty" nie musi być błędem: zachowanie zatrzaskowe (utrzymanie ostatniego stanu M) jest typowe dla START/STOP.
Wskazówka egzaminacyjna: analizuj zawsze przypadki skrajne (TRUE/TRUE, TRUE/FALSE, FALSE/TRUE, FALSE/FALSE) i sprawdzaj, czy w konflikcie sygnałów logika zachowuje się bezpiecznie oraz jednoznacznie.