E- Laboratórium 3 Az ABB robotok alkalmazásai Elméleti leírás



Hasonló dokumentumok
E- Laboratórium 3 Az ABB robotok alkalmazásai Mérés menete

3. Gyakorlat Ismerkedés a Java nyelvvel

15. Programok fordítása és végrehajtása

Internet programozása. 3. előadás

1. fejezet Microsoft Excel 2010 Tartománynevek... 3

Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

5. modul - Adatbázis-kezelés

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

Lekérdezések az SQL SELECT utasítással

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Utasítások. Excel VII. Visual Basic programozás alapok. A Visual Basic-kel megoldható feladatok típusai Objektumok, változók Alprogramok

A héj vezérlő szerkezetei I.

Ködös határ (Félreértés, hiba)

Bevezetés a C++ programozásba

A BECKHOFF típusú PLC használata.

ABB Teach Pendant programozás segédlet

Bevezetés a C programozási nyelvbe. Az Általános Informatikai Tanszék C nyelvi kódolási szabványa

2.3. A C nyelv utasításai

Algoritmizálás és adatmodellezés tanítása 1. előadás

M4 TÁBLÁZATKEZELÉS ALAPJAI

Példa: Aktuális könyvtár tartalmának fájlba mentése, melynek neve az aktuális dátum és idő: ls l > `date+%f_%h-%m`.txt

INFORMATIKAI ALAPISMERETEK

4. Programozási nyelvek osztályozása. Amatőr és professzionális

Bánsághi Anna

Blonde. Szépségszalon, Szolárium, Spa, Fitness. Ügyviteli Rendszer. Funkcionális Specifikáció. Verzió 1.1

0.1. Mi az a standard be- és kimenet? A két mintafeladat leírása

% % MATLAB alapozó % % , Földváry Lóránt % Laky Piroska (kiegészítés)

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Objektumorientált programozás C# nyelven

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

HAMBURG Használati útmutató Vezérlőmodul UKSM 24VDC Cikkszám:

Apple Swift kurzus 3. gyakorlat

Szkriptnyelvek. 1. UNIX shell

XML adatkezelés. 11. témakör. Az XQuery nyelv alapjai. XQuery. XQuery célja egy imperatív lekérdező nyelv biztosítása. XQuery.

Információs Technológia

Elôszó a magyar kiadáshoz A Kiadó Elôszó

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

Operációs Rendszerek II. labor. 2. alkalom

Algoritmizálás + kódolás C++ nyelven és Pascalban

C# osztályok. Krizsán Zoltán

B IT MAN 65/1. Adatbázis Rendszerek II. Ellenőrző kérdések APLSQL B IT MAN. v:

Adatbázisok* tulajdonságai

BASH script programozás II. Vezérlési szerkezetek

C# gyorstalpaló. Készítette: Major Péter

C programnyelv 1. Kedves Kollegina, Kolléga!

Java II. I A Java programozási nyelv alapelemei

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

VISUAL BASIC ALAPISMERETEK

PROGRAMOZÁS ALAPJAI (ANSI C NYELVEN)

Régi, statikus adatok élővé tétele és vizsgálata

A PHP nyelv alapjai. Web-Sky Consulting Kft Tóth Imre 2009

INFORMATIKAI ALAPISMERETEK

7. Strukturált típusok

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

1. Előadás Matlab lényeges vonásai,

Mesterséges intelligencia 1 előadások

Budapesti Műszaki és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar Irányítástechnika és Informatika Tanszék. Önálló laboratórium

S z á m í t ó g é p e s a l a p i s m e r e t e k

Programozási nyelvek (ADA)

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

S z á m í t ó g é p e s a l a p i s m e r e t e k

INFORMATIKAI ALAPISMERETEK

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

7. Előadás. Makrók alkalmazása. Salamon Júlia. Előadás I. éves mérnök hallgatók számára

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Operációs rendszerek 2 3. alkalom - Reguláris kifejezések, grep, sed. Windisch Gergely windisch.gergely@nik.uni-obuda.hu

Bevezetés a programozásba 2

16F628A megszakítás kezelése

Készítette:

Adatok szűrése, rendezése

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

A programozás alapjai

B I T M A N B I v: T M A N

Mikrobiológiai leletfogadás az OSZIR rendszerbe

117. AA Megoldó Alfréd AA 117.

INFORMATIKAI ALAPISMERETEK

8. Laboratóriumi gyakorlat: Bevezetés a reguláris kifejezések használatába

Algoritmusok Tervezése. 4. Előadás Visual Basic 1. Dr. Bécsi Tamás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 3. előadás

Objektumorientált programozás C# nyelven III.

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

BASH SCRIPT SHELL JEGYZETEK

Számolótábla Általános ismeretek

Python tanfolyam Python bevezető I. rész

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

Objektumorientált programozás C# nyelven

XML sémanyelvek Jeszenszky, Péter

Internet technológiák

8. Mohó algoritmusok Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete

C# feladatgyűjtemény Kovács Emőd, Radványi Tibor, Király Roland, Hernyák Zoltán

Kriptográfiai algoritmus implementációk időalapú támadása Endrődi Csilla, Csorba Kristóf BME MIT

Intermec EasyCoder PM4i nyomtató programozásának alapjai Intermec Fingerprint v8.00 nyelven

Programozás alapjai. 5. előadás

ADATBÁZISKEZELÉS ADATBÁZIS

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

Powershell 1. gyakorlat

Ipari Robotok Programozása

Informatika terméktervezőknek

1. Az utasítás beolvasása a processzorba

Átírás:

E- Laboratórium 3 Az ABB robotok alkalmazásai Elméleti leírás Egy RAPID program bizonyos számú parancsból áll, amik leírják a robot működését. A különböző parancsoknak konkrét utasítások felelnek meg, mint például a robot mozgatása, a kimenet beállítása, stb. Az utasításokhoz argumentumok tartoznak, amik meghatározzák mi fog bekövetkezni egy utasítás során. Például egy kimenet alaphelyzetbe állítására vonatkozó utasítás egy olyan argumentumot tartalmaz, amely meghatározza a használt kimenetet. 1. A program logikája A program szekvenciálisan hajtódnak végre, vagyis utasításonként. Esetenként szükség van utasításokra, amelyik megszakítják a szekvenciális végrehajtást és meghívnak egy másik utasítást az esetlegesen fellépő helyzetek kezelése érdekében. Komplexebb programok esetén érdemes szabályozni, hogy melyik kód legyen végrehajtva, milyen sorrendben, és hányszor. A program menetét a következő elvek alapján lehet irányítani: Egy másik rutin meghívása által, és a rutin végrehajtása után, folytatva a végrehajtást a rutin meghívást követő utasítással. Különböző utasítások végrehajtása által, attól függően, hogy teljesül-e egy adott kondíció. Egy utasítási szekvencia bizonyos számú ismétlése által, vagy egy adott feltétel teljesüléséig. Ugyanazon rutinon belül egy címkéhez történő mozgással. A program végrehajtásának leállításával. 1.1. Egy másik rutin meghívása ProcCall CallByVar RETURN Instruction Used to: Meghív (ugrik) egy másik rutint (-hoz) Konkrét nevű meghívási folyamatok Visszalép az eredeti rutinhoz 1.2. Program irányítás a rutinon belül Utasítás Felhasználás: Compact IF Egy utasítás végrehajtása csak ha teljesül a feltétel IF Egy sor különböző utasítás végrehajtása, ha teljesül a feltétel. FOR Egy programszakasz ismétlése bizonyos alkalommal WHILE Egy sor különböző utasítás ismétlése amíg az adott feltétel teljesül TEST Különböző utasítások végrehajtása a kifejezés értékétől függően GOTO Ugrás egy címkéhez Label Egy címke megadása (sor név) 30

IF Ha a logikai feltétel az IF állításban igaz, akkor a THEN és ENDIF kulcsszavak közti kódszakasz végrehajtódik. Ha az utasítás hamis, nem hajtódik verge a kód, és a végrehajtás az ENDIF után folytatódik. Ebben a példában a string1 karakterlánc a FlexPendantra íródik ha az nem egy üres karakterlánc. Ha a string1 üres, vagyis nem tartalmaz karaktereket, nem történik semmi. VAR string string1 := "Hello"; IF string1 <> "" THEN TPWrite string1; ENDIF ELSE Egy IF állítás akkor is tartalmazhat végrehajtandó programkódot, ha a feltétel hamis. Ha az IF állításban található logikai feltétel igaz, akkor végrehajtódik a THEN és ELSE kulcsszavak közötti kód. Viszont ha a feltétel hamis, az ELSE és ENDIF közötti kód hajtódik végre. A string1 karakterlánc a FlexPendantra íródik, ha a string1 nem üres. Ha üres, akkor A string üres szöveg lesz kiírva. VAR string string1 := "Hello"; IF string1 <> "" THEN TPWrite string1; ELSE TPWrite "The string is empty"; ENDIF ELSEIF Esetenként több mint két különböző programsorunk van. Ekkor az ELSEIF-et használhatjuk több alternative felállítására. Különböző szövegeket íratunk ki a változó idő értékétől függően. VAR numtime := 38.7; IF time < 40 THEN TPWrite "Part produced at fast rate"; ELSEIF time < 60 THEN TPWrite "Part produced at average rate"; ELSE TPWrite "Part produced at slow rate"; ENDIF FOR hurok A program menetének egy másfajta irányítására szolgál egy kódsor ismétlése. A következő kód ötször fogja kiírni azt, hogy Hello : FOR i FROM 1 TO 5 DO TPWrite "Hello"; ENDFOR WHILE hurok Egy kódsor ismétlését kombinálni lehet a kódsor feltételes végrehajtásával. A WHILE hurok segítségével a program addig ismétli a kódsor amíg igaz a feltétel. A következő programkód számokat fog összeadni (1+2+3+...) amíg az eredmény el nem éri a 100-at. 31

VAR numsum := 0; VAR numi := 0; WHILE sum <= 100 DO i := i + 1; sum := sum + i; ENDWHILE 1.3. Program végrehajtásának megállítása Utasítás Stop EXIT Break SystemStopAction Felhasználás: Program végrehajtásának megállítása Program végrehajtásának megállítása amikor nem megengedett a program újraindítása Program végrehajtásának ideiglenes megállítása hibajavítási céllal Program végrehajtásának megállítása és robot mozgatása 1.4. Jelenlegi ciklus megállítása ExitCycle Utasítás Felhasználás: A jelenlegi ciklus megállítása, és a program mutatójának a fő rutin első utasításához való mozdítása. Ha a CONT végrehajtási módot kiválasztjuk, a végrehajtás a következő program ciklussal folytatódik. 2. A szintaxis elemei Az utasítások és alprogramok leírása egyszerűsített és formális szintaxis segítségével történik. Ha a FlexPendant-ot programozásra használjuk, általában csak az egyszerűsített szintaxisra less szükség, mivel a robot automatikusan megbizonyosodik arról, hogy a helyes szintaxis legyen használva. TPWrite [String := ] <expression (IN) of string> [ \ Num := <expression (IN) of num> ] [ \ Bool := <expression (IN) of bool> ] [ \ Pos := <expression (IN) of pos> ] [ \ Orient := <expression (IN) of orient> ] ; A [] szögletes zárójelek közti szöveg elhagyható. Az egymás kölcsönösen kizáró argumemntumokat, vagyis nem szerepelhetnek egyszerre az utasításban, függőleges vonal választja el. Azok az argumentumok melyek akárhányszor ismétlődhetnek, kapcsos zárójelbe kerülnek { }. A szimbólumok amelyek a helyes szintaxist szolgálják, egyszerű idézjőjelbe tesszük. Az argumentum adattípusa és más jellemzők < > jelek közé kerülnek. Részletesebb információt a rutin paraméterek leírásánál találhatunk. 32

A!-el kezdődő sorokat a robot controller nem értelmez. A kóddal kapcsolatos megjegyzések írására szolgál. 3. Utasítások Egy RAPID utasítás egy előre elkészített folyamatként működik. Egy utasítás meghívása olyan mint egy eljárás meghívás, amit argumentum értékek követnek. Az utasítások sorban hajtódnak verge, kivéve ha egy program folyamat utasítás, egy megszakítás, vagy egy hiba következtében a végrehajtás máshol folytatódik. A legtöbb utasítást egy pontosvessző zárja ;. A címkék kettősponttal végződnek :. Az utasítások egy része tartalmazhat más utasításokat, és specifikus kulcsszavak zárják őket.. 4. Kifejezések Egy kifejezés meghatározza egy érték kiértékelését. Például a következő esetekben használható: egy hozzárendelési utasításban pl. a:=3*b/c; feltételkémt egy IF utasításban pl. IF a>=3 THEN... argumentumként egy utasításban pl. WaitTimetime; argumentunként egy függvény meghívásnál pl. a:=abs(3*b); 4.1. Aritmetikai kifejezések Egy számadat kiértékelésére szolgál. 1) Az eredmény ugyanazt a típust kapja mint az operandus. Ha az operandusnak van egy alias adat típusa, az eredmény kap egy alias alap típust (num vagy pos). 2) Integer műveletek, pl. 14 DIV 4=3, 14 MOD 4=2. (A nem-integer operandusok nem megengedettek.) 3) Megtartja az integer képviseletet amíg az operandusok és az eredmények az integer a num típus integer aldomain-jén belül maradnak. 33

4.2. Logikai kifejezések A logikai kifejezéseket logikai értékek kiértékelésére használjuk. (IGAZ/HAMIS). 1) Csak érték adattípusok. Az operandusoknak azonos típusaik kell legyenek. 4.3. String kifejezések Stringeken végzett műveleteknél alkalmazhatóak. 4.4. Adatok felhasználása kifejezésekben Egy teljes változó, perszisztens, vagy konstans része lehet egy kifejezésnek. Tömbök Egy tömbként deklarált változót, perszisztenst, vagy konstanst hozzá lehet rendelni a teljes tömbhöz vagy egy eleméhez. VAR num row{3}; VAR num column{3}; VAR num value;. value := column{3}; row := column; csak egy tömb-elem a tömb összes eleme Rekordok Egy tömbként deklarált változót, perszisztenst, vagy konstanst hozzá lehet rendelni a teljes rekordhoz, vagy egy eleméhez. Egy rekord komponensre a komponens neve által lehet utalni. VAR pos home; VAR pos pos1; VAR num yvalue; 34

.. yvalue := home.y; pos1 := home; the Y component only the whole position 4.5. Aggregátumok használata kifejezésekben Az aggregátumokat rekord vagy tömb értékeknél használjuk. pos := [x, y, 2*x]; rekord aggregátum helyzet posarr := [[0, 0, 100], [0,0,z]]; tömb aggregátum helyzet Meg kell lehessen határozni egy aggregátum adattípusát a környezetből. VAR pospl; p1 :=[1, -100, 12]; aggregátum típus helyzet p1 által meghatározott IF [1, -100, 12] = [a,b,b,] THEN nem megengedett, mivel egyik aggregátum adattípusát sem lehet meghatározni a környezetből. 4.6. Függvények meghívása kifejezésekben Egy függvény meghívása elindítja egy meghatározott függvény kiértékelését, és megkapja a függvény által visszaadott értéket. sin(szög) Egy függvénymeghívás argumentumai a meghívott függvény irányába (vagy irányából) történő adatátvitelre vannak felhasználva. Egy argumentum adattípusa meg kell egyezzen a megfelelő függvény parameter típusával. A kötelező argumentumokat vessző választ el az előző argumentumtől. A hivatalos parameter neveket nem kötelező leírni. Polar(3.937, 0.785398) két kötelező argumentum Polar(Dist:=3.937, Angle:=0.785398)... a nevek leírásácal 5. Függvények A RAPID függvények hasonlítanak az utasításokra, azzak a különbséggel, hogy visszaadnak egy értéket, amit hozzá lehet rendelni egy változóhoz. 6. Változó típusok Három adattípus létezik: változók, persistent-ek és konstansok. Egy változó új értéket kaphat a program végrehajtás során. A persistentre tekinthetünk perszisztens változóként. Ez úgy valósul meg, hogy a persistent értékének frissítése a persistent deklarálási értékének frissítését okozza. A konstans statikus érték, amihez nem lehet új értéket rendelni. 6.1. Változók A változókat a VAR kulcsszóval deklaráljuk, a következő szintaxist követve: 35

VAR datatype identifier; VAR num length; VAR string name; VAR bool finished; 6.2. Persistentek A persistent változók alapjában véve megfelelnek a hagyományos változóknak, azzal a különbséggel, hogy emlékeznek a legutóbbi értékükre, akkor is ha a program újraindul. A persistenteket nem lehet a rutinon belül deklarálni, csak a modul szintjén. Persistenteket rendszer globálisként, taszk globálisként, vagy lokálisként lehet deklarálni. PERS numglobalpers := 123; TASK PERS numtaskpers := 456; LOCAL PERS numlocalpers := 789; 6.3. Konstansok A konstans, a változóhoz hasonlóan egy értéket tartalmaz, viszont ezt az értéket mindig a deklarációnál adjuk meg, és később nem lehet változtatni. CONST numpi := 3.141592654; CONST numgravity := 9.81; CONST string greating := "Hello" 7. Adatstruktúrák Sokfajta adattípust tartalmaz a RAPID program. Ezek közül három általános adattípusra fogunk koncentrálni: Num String Bool Adattípus 7.1. Adat hatásköre Leírás Numerikus adat, amely lehet integer, vagy decimális szám. Pl. 10 or 3.14159. Karakterlánc. Pl. "Ez egy string". Maximum 80 karaktert tartalmazhat. Logikai változó. Csak az IGAZ vagy HAMIS értékeket veheti fel. Leírja, milyen területen látható az adat. Egy adatdeklarálás opcionális helyi irányelve az adatot lokálisként (modulon belüli) osztályozza, ellenkező esetben az adat globális. A helyi irányelvet nem lehet a rutinon belül használni, csak a modul szintjén. LOCAL VAR numlocal_variable; VAR numglobal_variable; A rutinon kívül deklarált adatot program adatnak nevezzük. A következő hatáskör szabályok érvényesel a program adatokra: 36

Az előre meghatározott vagy globális program adatok hatásköre magában foglalhatja bármelyik modult. A lokális program adatok hatásköre tartalmazza a modult amiben elhelyezkedik. A hatáskörén belül a lokális program adatok elrejtik a velük azonos nevű globális adatot, vagy rutint (utasításokat és predefiniált rutinokat és adatokat is). A rutinon belül deklarált adatot rutin adatnak nevezzük. Megjegyezzük, hogy a rutin paramétereit is rutin adatként kezeljük. A következő hatásköri szabályok érvényesek a rutin adatokra: A rutin adatok hatásköre magában foglalja a rutint amelyben elhelyezkedik. A hatáskörén belül, a rutin adat elrejti az összes többi azonos nevű rutint vagy adatot. 7.2. Adat inicializálás Egy konstans vagy változó inicializációs értéke egy állandó kifejezés lehet. Egy persistent inicializációs értéke csak egy konkrét érték lehet Example: CONST numa := 2; CONST numb := 3;! Helyes szintaxis CONST numab := a + b; VAR numa_b := a + b; PERS numa b := 5;! Hibás szintaxis PERS numa b := a + b; 8. Program modulok Egy RAPID program egy vagy több modulból állhat. Mindegyik modul egy vagy több eljárást tartalmazhat. Egy program modul többfajta adatból és rutinból állhat. Az egyik modul tartalmazza a a bevezető eljárást, egy globális eljárást ami a main (fő) nevet viseli. A program végrehajtása nem más mint a main eljárás végrehajtása. A program számos modult tartalmazhat, de ezek közül csak egynek lesz main eljárása. 8.1 A modul felépítése A program rendszer és program modulokra bontható: 37

A modul deklaráció meghatározza a modul nevét és tulajdonságait. Ezeket a tulajdonságokat csak üzemen kívül lehet beállítani, nem a FlexPendant használatával. Néhány példa modul tulajdonságokra: Tulajdonság SYSMODULE NOSTEPIN VIEWONLY READONLY NOVIEW A modul, ha meg van adva: rendszer modul, máskülönben program modul nem lehet megadni a lépésenkénti végrehajtás közben nem lehet megváltoztatni nem lehet megváltoztatni, viszont a tulajdonságokat lehet törölni Nem lehet megtekinteni, csak végrehajtani. A grobális rutinok elérhetőek más modulokból, és mindig NOSTEPIN-ként hajtódnak verge. A globális adatokra vonatkozó jelenlegi értékek más modulokból, vagy a FlexPendant adat ablakból érhetők el. A NOVIEW csak üzemen kívül definiálható egy PC-ről. MODULE module_name (SYSMODULE, VIEWONLY)!data type definition!data declarations!routine declarations ENDMODULE Egy modulnak nem feltétlenül ugyanaz a neve mint egy másik modulnak vagy globális rutinnak/adatnak. 38

8.2. Rendszer modulok A rendszer modulokat általános, rendszer-specifikus adatok és rutinok (pl. eszközök) definiálására használjuk. Nem szerepelnek a program mentésénél, ami azt jelenti, hogy bármilyen frissítése a rendszer modulnak befolyásolni fog minden, a jelenleg, vagy később a memóriába töltött programot. 8.3. Struktúra alrutinok Három fajta rutin (alprogram) létezik: eljárások (procedures), függvények (functions) és csapdák (traps). Az eljárások nem adnak vissza értéket, és az utasítások keretében használjuk őket. A függvények visszadnak egy bizonyos típusú értéket, és a kifejezések keretében használjuk őket. A csapda rutinok egy eszközt biztosít a megszakítások kezelésére. Egy csapda rutint hozzá lehet rendelni egy bizonyos megszakításhoz, és amikor bekövetkezik ez a megszakítás, automatikusan végrehajtódik. Trap routines provide a means of dealing with interrupts. A trap routine can be associated with a specific interrupt and then, if that particular interrupt occurs at a later stage, will automatically be executed. Egy csapda rutint nem lehet explicit módon meghívni a programból. 8.3.1. A rutin hatásköre Leírja, milyen területen látható a rutin. Egy rutindeklarálás opcionális helyi irányelve a rutin lokálisként (modulon belüli) osztályozza, ellenkező esetben a rutin globális. LOCAL PROC local_routine (... PROC global_routine (... A következő hatásköri szabályok érvényesek a rutinokra: Egy globális rutin hatásköréhez tartozhat bármilyen modul a taszkon belül Egy lokális rutin hatásköréhez tartozik a modul amiben elhelyezkedik. A hatáskörén belül, egy lokális rutin elrejt bármilyen azonos nevű. A hatásköréne belül, egy rutin elrejti az azonos nevű utasításokat, előre meghatározott rutinokat és adatokat. 8.3.2. Paraméterek Egy rutin deklaráció parameter listája meghatározza az argumentumokat (valós paramétereket) amelyek meg kell legyenek adva a rutin meghívásánal.. Négy típusú paraméter létezik (a hozzáférési módban): Alapesetben a parameter csak inputként van használva, és rutin változóként van kezelve. A változó megváltoztatása nem változtatja a megfelelő argumentumot. Az INOUT paraméter meghatározza, hogy egy megfelelő argumentum változó kell legyen (teljes, elem vagy komponens) vagy egy teljes persistent amelyet a rutin megváltoztathat. A VAR paraméter leszögezi, hogy egy megfelelő argumentum változó kell legyen (teljes, elem vagy komponens) amelyet a rutin megváltoztathat. 39

A PERS paraméter leszögezi, hogy egy megfelelő argumentum egy teljes persistent kell legyen amelyet a rutin megváltoztathat. Ha egy INOUT, VAR vagy PERS paraméter új értéket kap, azt jelenti, hogy az argumentum is új értéket kap, vagyis lehetővé teszi argumentumok használatát értékek visszaadására a meghívó rutinnak. PROC routine1 (num in_par, INOUT num inout_par, VAR num var_par, PERS num pers_par) A switch típust csak opcionális paraméterekhez lehet rendelni, és lehetővé teszi a switch argumentumok használatát (amelyek csak nevek, nem értékek határoznak meg). Egy switch paraméter nem kaphat értéket. Csak a jelenléte ellenőrzésével lehet használni a switch parameter, a present funkció segítségével. PROC routine4 (\switch on switch off)... IF Present (off ) THEN... ENDPROC 8.3.3. Rutin lezárása Egy eljárás végrehajtása vagy explicit módon, a RETURN utasítás segítségével, vagy implicit módon ér véget, amikor eléri az eljárás végét (ENDPROC, BACKWARD, ERROR vagy UNDO). Egy függvény végrehaktásának a RETURN utasítással lehet véget vetni. 8.3.4. Rutin deklarálás Egy rutin tartalmazhatja a következőket: deklarálás (beleértve a paramétereket), adatok, törzs, visszafelé irányuló kezelő (csak eljárások), és hibakezelő. A rutin deklarációk nem lehetnek beágyazva, vagyis van lehetőség rutin deklarálására egy rutinon belül. Eljárás deklarálása Egy számtömb elemeinek szorzása egy számmal. PROC arrmul( VAR num array{*}, num factor) FOR index FROM 1 TO dim( array, 1 ) DO array{index} := array{index} * factor; ENDFOR ENDPROC Függvény deklarálás Egy vektor hosszának kiszámítása. FUNC num veclen (pos vector) RETURN Sqrt(Pow(vector.x,2)+Pow(vector.y,2)+Pow(vector.z,2)); ENDFUNC 40

Csapda deklarálása Feeder empty megszakításra való válasz. TRAP feeder_empty wait_feeder; RETURN; ENDTRAP 8.3.5. Eljárás meghívása Egy eljárás meghívásánál, az eljárás paramétereinek megfelelő argumentumokat használjuk: - Meg kell adni a kötelező paramétereket a helyes sorrendbenr. - Az opcionális paramétereket el lehet hagyni. - A feltételes argumentumokat fel lehet használni a paraméterek átviteléhez egyik rutinból a másikba. 41