Treść zadania
Zadaniem zespołu było napisanie programu symulującego pracę robota obsługującego 3 stanowiska obróbkowe oraz platformę załadowczą i wyładowczą. Robot miał zdejmować pojawiające się na stanowiskach obróbkowych przedmioty oraz przenosić je na platformę wyładowczą.
Algorytm programu
Program mógł być na bieżąco sprawdzany w dostępnym symulatorze pracy robota co znacznie ułatwiało pracę. W ogólności; kod programu był liniową sekwencją zdań logicznych określających stan pracy efektorów (silników) poprzez odpowiednie stany sensorów i markerów (swoistych zmiennych ułatwiających pisanie kodu i pracę programu). Do wyboru były dostępne operatory sumy, iloczynu oraz negacji logicznej.
Algorytm programu przestawiał się następująco:
Oczekiwanie robota w punkcie postojowym (nad stanowiskiem załadowczym) na pojawienie się przedmiotu na którymś ze stanowisk obróbkowych.
Dojazd po pierwszego, najbliższego robotowi, stanowiska zawierającego przedmiot.
Uchwycenie przedmiotu przez chwytak.
Dojazd do stanowiska wyładowczego.
Odłożenie przedmiotu.
Powrót do punktu postojowego; powrót do punktu 1).
Kod programu
# Warunek ruchu w prawo/utrzymania pozycji prawej ramienia # poziomego
e3:(s2*s11)+(s3*s12)+(s4*s13)+e2+(s1*(e5+s10))+!(s7+s8)
# Stany markerow skladajacych sie na ruch robota po belce do gory
m0:!(s1+s2+s3+s4)*!e5*s5
m1:s1*(s11+s12+s13)*!e5*s5
m2:s2*!s11*!e5*s5
m3:s3*!s12*!e5*s5
m4:s4*!s13*!e5*s5
#Warunek jazdy robota po belce do gory
e1:m0+m1+m2+m3+m4
#Warunek ruchu w dol/utrzymania pozycji dolnej ramienia pionowego
e4:(s6*!e5*((s2*s11)+(s3*s12)+(s4*s13)))+(s1*e5)
#Stany markerow skladajacych się na ruch robota po belce w dol
m8:s2*e5
m9:s3*e5
m10:s4*e5
m11:!s1*!(s2+s3+s4)*e5
#Warunek jazdy robota po belce w dol
e2:(m8+m9+m10+m11)*s7
#Warunek zamkniecia/utrzymania zamkniecia chwytaka
e5:(s8+e2+(s1*e4)+!e1*((s2*!s11)+(s3*!s12)+(s4*!s13)))*!s10
Ocena programu
Kod programu został napisany na tyle poprawnie, że w warunkach symulacji robot spełniał bez błędów powierzone mu zadanie. Prostota zadania oraz konieczność pracy poprzez stany logiczne zadecydowały o niezwykłej „oszczędności” kodu. De facto kod mógł składać się tylko z pięciu linijek określających warunki pracy efektorów. Oczywiście wykorzystanie markerów wzmogło przejrzystość kodu oraz, co najważniejsze, pozwoliło na szybsze poprawki w razie błędnego działania.
Wnioski
Konieczność pisania kodu w oparciu o stany logiczne zaowocowała prostotą i przejrzystością programu.
Dużym zagrożenieniem było wykorzystanie stanów jednych efektorów przy określaniu stanów innych. W przypadku awarii rzeczywistego układu, fakt ów mógłby spowodowować nieprzewidziane, a przez to niebezpieczne, skutki.
Największym utrudnieniem dla programistów okazał się brak możliwości wykorzystanie podstawowych instrukcji sterujących, znanych chociażby z języka C++ (przede wszystkim instrukcja „do...while”). Z drugiej strony, konieczność korzystania tylko z jednej, głównej pętli programu wymusiła na wykonawcach liczne modyfikacje prowadzące do prostoty kodu.
Trudno ocenić, na ile dobrze właśnie taki sposób programowania (poprzez stany logiczne) odnalazłby się w przypadku bardziej skomplikowanych zadań. Wydaje się, choć jest to tylko intuicja, że w przypadku bardziej złożonych sytuacji mógłby on okazać się zbyt „ubogi” w narzędzia, co prowadziłoby do znacznego wydłużenia czasu programowania, a może i długości kodu.