MODUL 4 · UPOZNAVANJE I OSNOVE RADA U ROBOTSKOM SIMULACIJSKOM OKRUŽENJU
Nastavna jedinica 4.3
Mehanizmi rada s funkcijama i parametrima
Program koji raste u dužinu postaje nečitljiv i težak za izmjenu. Rješenje je staro koliko i samo programiranje: dio posla koji se ponavlja izdvaja se u imenovanu cjelinu kojoj se pri pozivu predaju podaci. Za robote to znači da se isti niz gibanja izvodi nad različitim točkama, a isti izračun nad različitim brojevima.
- razlikovati potprogram od funkcije i objasniti kada se koji koristi
- napisati poziv s predavanjem parametara i protumačiti redoslijed argumenata
- objasniti razliku između predavanja po vrijednosti i po referenci
- objasniti pojam povratne vrijednosti i njezinu uporabu u izrazu
- razlikovati lokalne, globalne i trajne varijable prema dosegu i vijeku
- napisati funkciju koja iz rednog broja pozicije i broja sloja vraća točku odlaganja
Potprogram i funkcija
Dva su osnovna oblika izdvojenog dijela programa. Potprogram obavlja radnju i ne vraća vrijednost: zatvara hvataljku, odvozi robot u sigurnu točku, ispisuje poruku. Funkcija obavlja izračun i vraća jednu vrijednost pozivatelju, pa se njezin poziv može upotrijebiti u izrazu kao da je broj ili položaj.
| Potprogram | Funkcija | |
|---|---|---|
| Svrha | izvesti radnju | izračunati i vratiti vrijednost |
| Povratna vrijednost | nema je | ima je, jednog zadanog tipa |
| Tipičan primjer | uzmiObradak, odloziNa, uSigurno | tockaOdlaganja, brojSlojeva, duljinaPuta |
| Mjesto poziva | samostalna naredba | unutar izraza ili pridruživanja |
| Smije li gibati robot | da, to mu je najčešća zadaća | u pravilu ne, samo računa |
Podjela nije samo formalna. Funkcija koja usput pomiče robot teško se ispituje, jer je njezin rezultat nemoguće provjeriti bez pokretanja stanice. Funkcije se zato pišu tako da samo računaju, a gibanje ostaje u potprogramima. Takav se izračun može provjeriti ispisom vrijednosti, bez ijednog pokreta.
Poziv i predavanje parametara
Pri pozivu se vrijednosti iz pozivatelja predaju u imenovane parametre pozvanog dijela programa. Redoslijed argumenata mora odgovarati redoslijedu parametara u deklaraciji, a tipovi se moraju podudarati. Mnogi jezici dopuštaju i imenovane argumente, kod kojih se uz vrijednost navodi i naziv parametra, čime poziv postaje čitljiviji.
! deklaracija potprograma s tri parametra
PROC odloziNa(robtarget cilj, num brzina, bool zadnji)
MoveJ Offs(cilj, 0, 0, 120), v800, z20, alat;
MoveL cilj, brzina, fine, alat;
SetDO hvataljka, 0;
MoveL Offs(cilj, 0, 0, 120), v400, z20, alat;
IF zadnji THEN TPWrite "Paleta je puna"; ENDIF
ENDPROC
! pozivi istog potprograma s različitim podacima
odloziNa mjesto1, v200, FALSE;
odloziNa mjesto2, v150, TRUE;Bez parametara bi se isti niz od pet naredbi morao prepisati za svako mjesto na paleti. S parametrima postoji jednom, a mijenja se na jednom mjestu. Kada se promijeni visina prilaza, dovoljno je ispraviti broj u potprogramu i izmjena vrijedi za sve pozive.
Po vrijednosti i po referenci
Dva su načina na koja parametar može stići u potprogram. Kod predavanja po vrijednosti pozvani dio dobiva vlastitu presliku podatka. Mijenja li tu presliku, izvornik u pozivatelju ostaje nepromijenjen. Kod predavanja po referenci pozvani dio dobiva pristup samom izvorniku, pa svaka promjena ostaje i nakon povratka.
| Po vrijednosti | Po referenci | |
|---|---|---|
| Što se predaje | preslika podatka | pristup izvornoj varijabli |
| Promjena u pozvanom dijelu | ne vidi se izvana | ostaje i nakon povratka |
| Tipična uporaba | ulazni podaci izračuna | brojila i zajednička stanja |
| Prednost | sigurnost, nema neželjenih učinaka | jedan poziv može vratiti više vrijednosti |
| Opasnost | veći podaci se nepotrebno umnožavaju | teško praćenje tko je promijenio vrijednost |
! brojilo se predaje po referenci i uvećava u potprogramu
PROC uvecajBrojilo(INOUT num brojilo)
brojilo := brojilo + 1;
ENDPROC
VAR num odlozeno := 0;
uvecajBrojilo odlozeno; ! nakon poziva odlozeno je 1Zapamtite
Predavanje po referenci koristite samo ondje gdje promjena zaista mora ostati vidljiva pozivatelju, najčešće za brojila i zajedničke oznake stanja. Za sve ostalo predajte po vrijednosti; program je tada lakše pročitati jer se vidi tko što mijenja.
Povratna vrijednost
Funkcija završava naredbom povratka kojom se pozivatelju predaje izračunata vrijednost. Tip te vrijednosti navodi se pri deklaraciji i mora se podudarati s onim što se vraća. Poziv funkcije tada se ponaša kao vrijednost tog tipa i smije se upotrijebiti svugdje gdje je takva vrijednost dopuštena.
FUNC num visinaSloja(num sloj, num debljina, num zracnost)
RETURN (sloj - 1) * (debljina + zracnost);
ENDFUNC
! poziv u izrazu
cilj := Offs(ishodiste, 0, 0, visinaSloja(3, 140, 5));Funkcija smije imati više naredbi povratka, po jednu u svakoj grani, ali mora vratiti vrijednost na svakom putu kroz kod. Put kroz funkciju koji završi bez povratka pogreška je koju neki prevoditelji prijavljuju, a neki ne, pa se u tom drugom slučaju vraća neodređena vrijednost i robot odlazi na besmislenu točku.
Doseg i vijek varijabli
Doseg govori odakle je varijabla vidljiva, a vijek koliko dugo čuva vrijednost. Lokalna varijabla postoji samo unutar svog potprograma i nestaje pri povratku. Globalna je vidljiva iz cijelog programa. Trajna zadržava vrijednost i nakon gašenja upravljačkog sustava, jer se zapisuje u memoriju koja se ne briše.
| Vrsta | Vidljiva iz | Vrijednost nakon ponovnog pokretanja | Tipična uporaba |
|---|---|---|---|
| lokalna | samo iz svog potprograma | ne čuva se | pomoćni izračun, brojilo petlje |
| globalna | iz cijelog programa | vraća se na početnu | stanje ciklusa, zajednički parametri |
| trajna | iz cijelog programa | čuva se | broj odloženih komada, redni broj palete |
Za paletizaciju je razlika presudna. Ako se broj odloženih komada čuva u običnoj globalnoj varijabli, nestanak napajanja vraća brojilo na nulu i robot počinje slagati preko već odloženih komada. Isti podatak u trajnoj varijabli preživi ponovno pokretanje, pa ciklus može nastaviti ondje gdje je stao.
Pažnja
Trajne varijable imaju i lošu stranu. Ako se paleta zamijeni ručno, a brojilo ne poništi, robot će nastaviti brojati od stare vrijednosti. Svaki program s trajnim brojilom mora imati i postupak poništavanja, dostupan operateru.
Primjer: funkcija za točku odlaganja
Zadatak je iz rednog broja pozicije i podataka o paleti izračunati točku odlaganja. Funkcija prima redni broj, broj mjesta u redu, broj redova i odmake, a vraća položaj. Cijela se logika svodi na dvije operacije: cjelobrojno dijeljenje daje red i sloj, a ostatak dijeljenja daje mjesto u redu.
FUNC robtarget tockaOdlaganja(num n, num stupaca, num redova)
VAR num i;
VAR num poSloju;
VAR num sloj;
VAR num u;
VAR num redak;
VAR num stupac;
i := n - 1; ! brojanje od nule
poSloju := stupaca * redova;
sloj := i DIV poSloju;
u := i MOD poSloju;
redak := u DIV stupaca;
stupac := u MOD stupaca;
RETURN Offs(ishodistePalete,
stupac * dx,
redak * dy,
sloj * dz);
ENDFUNCPrednost ovakvog zapisa je u tome što glavni program više ne zna ništa o rasporedu palete. On samo broji pozicije i za svaku traži točku. Promjena rasporeda s tri na četiri reda mijenja jedan argument, a ne niti jednu naredbu gibanja.
Prikaz izvodi isti izračun kao funkcija iz prethodne sekcije. Ishodište palete je u točki (400, -300, 150), a redni broj pozicije broji se od jedinice.
Ključni pojmovi
| Pojam | Značenje |
|---|---|
| Potprogram | Imenovani dio programa koji izvodi radnju i ne vraća vrijednost. |
| Funkcija | Imenovani dio programa koji vraća jednu vrijednost zadanog tipa. |
| Parametar | Imenovani podatak koji pozvani dio programa prima pri pozivu. |
| Predavanje po vrijednosti | Pozvani dio dobiva presliku podatka; izvornik ostaje nepromijenjen. |
| Predavanje po referenci | Pozvani dio pristupa izvornoj varijabli; promjena ostaje nakon povratka. |
| Doseg varijable | Dio programa iz kojeg je varijabla vidljiva. |
| Trajna varijabla | Varijabla koja zadržava vrijednost i nakon ponovnog pokretanja kontrolera. |
Provjeri se
Kratka provjera prije prelaska na sljedeću jedinicu. Odgovor se potvrđuje klikom, a obrazloženje se prikazuje odmah.
Pitanje 1 od 3
Razlika između funkcije i potprograma jest u tome što funkcija:
Funkcija vraća jednu vrijednost zadanog tipa, pa se poziv može upotrijebiti u izrazu.
Pitanje 2 od 3
Brojilo odloženih komada koje mora preživjeti nestanak napajanja deklarira se kao:
Samo trajna varijabla zadržava vrijednost nakon ponovnog pokretanja upravljačkog sustava.
Pitanje 3 od 3
Parametar predan po vrijednosti znači da:
Pri predavanju po vrijednosti pozvani dio dobiva presliku, pa promjene ne izlaze iz njega.
Odgovoreno 0 od 3.