1. 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ą.

  1. 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:

  1. Oczekiwanie robota w punkcie postojowym (nad stanowiskiem załadowczym) na pojawienie się przedmiotu na którymś ze stanowisk obróbkowych.

  2. Dojazd po pierwszego, najbliższego robotowi, stanowiska zawierającego przedmiot.

  3. Uchwycenie przedmiotu przez chwytak.

  4. Dojazd do stanowiska wyładowczego.

  5. Odłożenie przedmiotu.

  6. Powrót do punktu postojowego; powrót do punktu 1).

  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

  1. 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.

  1. Wnioski

  1. Konieczność pisania kodu w oparciu o stany logiczne zaowocowała prostotą i przejrzystością programu.

  2. 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.

  3. 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.

  4. 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.