Preskoči na sadržaj
FORTRONIQ

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.

Moći ću:
  • 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.

PotprogramFunkcija
Svrhaizvesti radnjuizračunati i vratiti vrijednost
Povratna vrijednostnema jeima je, jednog zadanog tipa
Tipičan primjeruzmiObradak, odloziNa, uSigurnotockaOdlaganja, brojSlojeva, duljinaPuta
Mjesto pozivasamostalna naredbaunutar izraza ili pridruživanja
Smije li gibati robotda, to mu je najčešća zadaćau 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 vrijednostiPo referenci
Što se predajepreslika podatkapristup izvornoj varijabli
Promjena u pozvanom dijelune vidi se izvanaostaje i nakon povratka
Tipična uporabaulazni podaci izračunabrojila i zajednička stanja
Prednostsigurnost, nema neželjenih učinakajedan poziv može vratiti više vrijednosti
Opasnostveći podaci se nepotrebno umnožavajuteš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 1

Zapamtite

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.

VrstaVidljiva izVrijednost nakon ponovnog pokretanjaTipična uporaba
lokalnasamo iz svog potprogramane čuva sepomoćni izračun, brojilo petlje
globalnaiz cijelog programavraća se na početnustanje ciklusa, zajednički parametri
trajnaiz cijelog programačuva sebroj 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);
ENDFUNC

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

paleta 4 × 3123456789101112ishodište (mjesto 1)izračun za n = 12i = n − 1 = 11sloj = i DIV 12 = 0u = i MOD 12 = 11redak = u DIV 4 = 2stupac = u MOD 4 = 3sloj 1, redak 3, stupac 4
Slika 4.3 — Cjelobrojno dijeljenje i ostatak pretvaraju redni broj pozicije u sloj, redak i stupac na paleti.
Iz rednog broja pozicije u točku odlaganjaRačunski prikaz

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.

Sloj—
Redak i stupac—
Točka odlaganja (x, y, z)—mm

Ključni pojmovi

PojamZnačenje
PotprogramImenovani dio programa koji izvodi radnju i ne vraća vrijednost.
FunkcijaImenovani dio programa koji vraća jednu vrijednost zadanog tipa.
ParametarImenovani podatak koji pozvani dio programa prima pri pozivu.
Predavanje po vrijednostiPozvani dio dobiva presliku podatka; izvornik ostaje nepromijenjen.
Predavanje po referenciPozvani dio pristupa izvornoj varijabli; promjena ostaje nakon povratka.
Doseg varijableDio programa iz kojeg je varijabla vidljiva.
Trajna varijablaVarijabla 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.