\[ Y1 = \overline{(S1 \lor S3)} \land S2 \]
\[ Y2 = S1 \land \overline{S2} \]
Zależności logiczne realizowane przez program
Tabela wyników testu działania programu
| Stan | S1 | S2 | S3 | Y1 | Y2 |
|---|---|---|---|---|---|
| 1 | 0 | 0 | 0 | 0 | 0 |
| 2 | 0 | 0 | 1 | 0 | 0 |
| 3 | 0 | 1 | 0 | 1 | 0 |
| 4 | 0 | 1 | 1 | 0 | 0 |
| 5 | 1 | 0 | 0 | 0 | 1 |
| 6 | 1 | 0 | 1 | 0 | 0 |
| 7 | 1 | 1 | 0 | 0 | 0 |
| 8 | 1 | 1 | 1 | 0 | 0 |
W wyniku testowania działania programu, otrzymano wyniki zapisane w tabeli. Który stan wskazuje na błąd w programie, jeżeli powinien on realizować zależności logiczne?
Stan 6
Stan 4
Stan 3
Stan 5
Pytanie z egzaminu CKE, styczeń 2019 (arkusz E.19-X-19.01).
Stan 6 jest tym miejscem, w którym tabela wyników nie zgadza się z podanymi zależnościami logicznymi. Dla tego stanu mamy S1 = 1, S2 = 0 oraz S3 = 1. Liczymy więc wyjścia według programu: Y1 = ¬(S1 OR S3) AND S2, czyli ¬(1 OR 1) AND 0 = ¬1 AND 0 = 0 AND 0 = 0. To się zgadza z tabelą. Natomiast Y2 = S1 AND ¬S2, czyli 1 AND ¬0 = 1 AND 1 = 1. W tabeli dla stanu 6 wpisano jednak Y2 = 0, więc właśnie tu jest błąd. W praktyce PLC taki przypadek może oznaczać pomyłkę w styku normalnie zamkniętym, złe przypisanie adresu wejścia, błąd w negacji sygnału albo literówkę w bloku FBD/LD. Moim zdaniem to dobry przykład, że przy testowaniu programu nie wystarczy patrzeć tylko na jedno wyjście, trzeba spokojnie przeliczyć całą tablicę prawdy. W automatyce przemysłowej taka kontrola jest zgodna z dobrą praktyką uruchomieniową: najpierw weryfikacja logiki na sucho, potem testy na sterowniku, a dopiero później podłączanie elementów wykonawczych.
W tym zadaniu najłatwiej pomylić się wtedy, gdy patrzy się tylko na to, że w tabeli gdzieś pojawia się jedynka albo zero, zamiast konsekwentnie przeliczyć równania logiczne. Stany 3, 4 i 5 wyglądają podejrzanie tylko na pierwszy rzut oka, ale po podstawieniu wartości wejść okazuje się, że są zgodne z założeniami programu. Dla stanu 3 mamy S1 = 0, S2 = 1, S3 = 0. Wyjście Y1 powinno mieć wartość 1, bo ani S1, ani S3 nie są aktywne, a S2 jest aktywne. Tabela pokazuje Y1 = 1, więc tu błędu nie ma. Dla stanu 4 sygnał S3 = 1 powoduje, że część ¬(S1 OR S3) daje 0, więc Y1 też musi być 0, nawet jeśli S2 = 1. To jest zgodne. Dla stanu 5 wyjście Y2 powinno być równe 1, ponieważ S1 = 1 i jednocześnie S2 = 0, a więc ¬S2 = 1. Tabela też pokazuje 1. Typowy błąd myślowy polega tu na tym, że ktoś traktuje negację jak zwykłe pominięcie sygnału albo zapomina, że operator AND wymaga spełnienia wszystkich warunków naraz. W programowaniu PLC, szczególnie w języku drabinkowym LD, odpowiada to sytuacji, gdzie styki szeregowe muszą być jednocześnie w stanie przewodzenia. Z mojego doświadczenia najlepiej rozpisać sobie każdy stan wejść i osobno policzyć Y1 oraz Y2, bo wtedy od razu widać, że rozjeżdża się tylko stan 6, a nie te pozostałe przypadki.