Táblázatok

Minden, amit a vezérlésekről tudni lehet...
Avatar
go98admin
Adminisztrátor
Hozzászólások: 376
Csatlakozott: 2016.08.18. 23:17

Táblázatok

HozzászólásSzerző: go98admin » 2016.08.21. 23:39

Táblázatok használata HEIDENHAIN vezérlésekben
Az okosabb HEIDENHAIN vezérlésekben (TNC426/430, iTNC530) lehet táblázatokat használni.
Első lépésként nézzük meg, hogyan lehet létrehozni egy táblázatot.
Járjunk el úgy, mintha egy új NC programot akarnánk kezdeni, de a kiterjesztésre írjunk .tab-ot. Például így: proba.tab.
A TNC létrehozza a proba.tab táblázatot és rögtön rákérdez, hogy milyen típusú legyen. A TNC-ben van néhán alap formátum, de minden bizonnyal egyik sem felel meg a céljainknak, ezért válasszunk egyet találomra a felkínáltak közül.
Valami ilyesmi fog megjelenni a képernyőn:
Kép
Nyomjuk meg a FORMÁTUM SZERK. funkciógombot. A képernyő most a táblázat formátumát (oszlopainak definícióit) mutatja, ami maga is egy táblázat:
Kép
A első oszlopban vannak felsorolva a táblázatunkat alkotó oszlopok nevei (NAME), a másodikban a típusuk (TYP), a harmadikban az oszlop szélessége (WIDTH), a negyedikben a tizedesjegyek száma (DEC), majd jönnek különböző nyelveken az oszlopok elnevezései (a végén megtaláljuk a magyart is).
Mivel egy új formátumú táblázatot akarunk létrehozni, ezért a SOR TÖRLÉSE funkcióbillentyűvel töröljük ki valamennyit.
A SOR BEILLESZTÉSE funkcióbillentyűvel adjunk egy új sort a fromátumot leíró táblázathoz, majd töltsük ki azt a következőképpen.
A NAME oszlopba írjuk be a nevet. Legyen ez COMMENT. A TYP oszlopba írjunk C-t, ezzel jelezzük, hogy a táblázatunk első oszlopa szöveget fog tartalmazni. Az N betű numerikus (szám, pozíció) oszlopot jelölne. A WIDTH oszlopban adjuk meg azt, hogy az előzőekben definiált mező milyen széles legyen. Példánkban ez legyen 9, azaz legfeljebb 9 karakternyi szöveget írhatunk a táblázatunk első oszlopába. Ha numerikus mezőt adunk meg a TYP-nél, akkor a következő oszlopban a DEC alatt adjuk meg a tizedesjegyek számát (ez mindenképpen kisebb legyen a WIDTH oszlopban látható értéknél). Ha szöveg mezőt adtunk meg, akkor ide írjunk 0-t. Végezetül adjuk meg azt a szöveget a kívánt nyelveken, amit a TNC kiírjon, amikor az adott mezőt szerkesztjük.
Munkánk eredményeképpen ezt láthatjuk a képernyőn:
Kép
A fenti képernyőképen látható, hogy a COMMENT oszlop után még létrehoztuk az ID numerikus mezőt (mivel a WIDTH=5 és DEC=0, ezért ebbe az oszlopba majd legfeljebb ötjegyű egészeket írhatunk), valamint a H és W mezőket melyekbe méreteket, pozíciókat írhatunk majd (WIDTH=9 és DEC=4, tehát bármilyen ésszerű méret vagy pozícióértéknek van hely).
Ne feledkezzünk meg a magyar párbeszédek kitöltéséről sem (HUNGARIA oszlop):
Kép
Ha a fentiekkel végeztünk, akkor a formátum szerkesztésből kilépve a kívánt táblázat jelenik meg a képernyőn. Ha esetleg lennének benne adatok (a találomra kiválasztott eredeti táblázatformátumban kezdőértékek is szerepeltek), töröljük azokat, majd töltsük fel a táblázatot például így:
Kép
A fent ismertetett módon lehet létrehozni tetszőleges táblázatokat a HEIDENHAIN vezérlésekben.
Ha egy HEIDENHAIN vezérlésben lehet táblázatokat létrehozni és szerkeszteni, akkor biztosak lehetünk abban, hogy az NC programból is elérhetjük a táblázat adatait és felhasználhatjuk azokat.
A paraméteres programozás menüjében (Q gomb a numerikus billentyűzeten) az EGYÉB MŰVELETEK almenü második sorában meg is találhatjuk azt a három funkciót, ami a táblázatok kezeléséhez kell.
Az FN 26: TABOPEN utasítással megnyitható a kívánt táblázat. Ha az NC program a táblázattal azonos könyvtárban van, akkor elegendő ennyit beírni:
FN 26: TABOPEN proba.tab
Amennyiben egy másik könyvtárban van, akkor be kell írni a teljes elérési utat:
FN 26: TABOPEN TNC:\MASIK\proba.tab
Csak a megnyitott táblázatba lehet beleírni, illetve onnan kiolvasni adatot. A program végén a TNC automatikusan lezárja a táblázatot, a lezárásra nincs külön utasítás.
A táblázatba beírni a FN 27: TABWRITE funkcióval lehet. Például így:
FN 27: TABWRITE 2 /H = Q23
A fenti sor hatására a megnyitott táblázat második (2) sorának H oszlopába beíródik a Q23 paraméter értéke. A beírás során számos nyilvánvaló és kevésbé feltünő hibát ejthetünk.
A táblázat adatait a FN 28: TABREAD funkcióval érhetjük el. Itt is álljon egy példa:
FN 28: TABREAD Q4 =1 /ID
A fenti mondat a megnyitott táblázat első (1) sorának ID oszlopából másolja az adatot a Q4 paraméterbe.
Mindkét funkcióban lehet Q paraméter írni a sor számának megadásához, például így:
FN 27: TABWRITE Q3 /H = Q23
FN 28: TABREAD Q4 =Q7 /ID
Bosszankodva fedeztem fel, hogy nem fogalmaztam egyértelműen az előzőekben. Nevezetesen arról van szó, hogy a táblázat soraira hivatkozva például az első (1) sor valójában a táblázat második sora, mivel a táblázat a 'nulladik' (0) sorral kezdődik. A továbbiakban tehát a 0-ás sort fogom első sornak nevezni, az 1-es sort a másodiknak és így tovább. Példának okáért ha a táblázat első (0-ás sorszámú) sorából akarjuk kiolvasni mondjuk a H oszlop értékét, akkor ezt kell írnunk:
FN 28: TABREAD Q11=0 /H
Ennyi pontosítás után nézzük, hogyan lehet a proba.tab táblázatban megkeresni egy megadott ID számú sort és beolvasni onnan a H és W oszlop adatait.
Írjuk be ezt az egyszerű programot:
0 BEGIN PGM tab_1 MMprogram kezdete
1 Q0 = 5120gyártandó típus megadása
2 FN 26: TABOPEN proba.tabtáblázat megnyitása
3 Q1 = - 1sorszámláló kezdőértéke
4 LBL 1
5 Q1 = Q1 + 1sorszámláló növelése
6 FN 28: TABREAD Q5 =Q1 /IDazonosító beolvasása
7 FN 10: IF +Q5 NE +Q0 GOTO LBL 1ha nincs meg a keresett típus, vissza...
8 FN 28: TABREAD Q6 =Q1 /W,Hértékek kiolvasása a táblázatból
9 ;megmunkálás a táblázat adatai alapjána W (Q6) és H (Q7) adatokat használó program, például egy zsebmarási ciklus
10 END PGM tab_1 MMprogram vége
Az 1 Q0 = 5120 sorban megadjuk, hogy a táblázat melyik ID azonosítójú sorát keressük. A következőekben megnyitjuk a táblázatot, a Q1 számlálót feltöltjük a -1 kezdőértékkel, majd a LBL 1 címke után rögtön növeljük a Q1 értékét eggyel, így 0 lesz. A 6 FN 28: TABREAD Q5 =Q1 /ID sorban beolvassuk a Q1-es (most a legelső 0-ás) sor ID oszlopának értékét. Ha a beolvasott érték nem egyezik a keresett értékkel, akkor ugrunk vissza a LBL 1 címkére és a Q1-et ismét növeljük eggyel, így lépünk a következő sorra és ismét beolvassuk az ID oszlop értékét. Amennyiben megtaláltuk a keresett azonosítót (Q5 egyezik Q0 értékével), akkor a 8-as sorban beolvassuk a táblázat W és H oszlopából a keresett értékeket ezzel az egyetlen sorral:
8 FN 28: TABREAD Q6 =Q1 /W,H
Itt egy kis magyarázattal tartozom. Az előzőekben nem említettem, hogy az FN 28: TABREAD funkcióval nem csak egy, hanem legfeljebb 8 tetszőleges oszlop adatait tudjuk kiolvasni. A fenti sorban a W,H azt jelenti, hogy a W és a H oszlop értékét is beolvassa. A kérdés az, hogy melyik változóba, hiszen csak a Q6 van megadva. A megoldás az, hogy az elsőként megadott W oszlop adata kerül a Q6-ba, a másodiknak megadott H oszlop adata pedig a következő Q7-es paraméterbe. Amennyiben további oszlopokra is hivatkoznánk, akkor rendre a Q8, Q9, Q10 stb. paraméterekbe töltődnének az adatok. Vegyük még észre, hogy az oszlopokra tetszőleges sorrendben hivatkozhatunk (a táblázatban a H megelőzte a W-t, mégis a W értéke került a Q6-ba és a H értéke a Q7-be).
A fentiek érvényesek a TABWRITE funkcióra is, tehát ott is egyszerre legfeljebb 8 táblázati értéket tudunk beírni.
Kanyarodjunk vissza a tab_1 példaprogramhoz. Látszólag helyesen működik, de mi a helyzet akkor, ha egy nemlétező ID számot adunk meg? Ebben az esetben a programunk a 942-es A megadott érték téves hibaüzenettel megáll a 6 FN 28: TABREAD Q5 =Q1 /ID sornál, amikor a Q1 eléri a 3-at és emiatt egy nemlétező sorból próbál olvasni.
Hogyan lehet ezt elkerülni, és hogyan lehet egy szerencsésebb hibaüzenetet küldeni?
Lássuk hogyan lehet kivédeni a túlolvasást táblázatot használó programunknál. Mivel a HEIDENHAIN nem biztosít eszközt a táblázat hosszának lekérdezéséhez (a 34049x-03 verziótól az FN 18: SYSREAD Qn = ID56 NR4 funkcióval lekérdezhető a megnyitott táblázat hossza), ezért fűzzünk még egy sort a proba.tab-hoz és az ID oszlopba írjunk egy olyan azonosítót, amit sohasem használnánk. Legyen ez most a 0 érték.
Kép
Továbbá módosítsuk az NC programot az alábbira:
0 BEGIN PGM tab_2 MMprogram kezdete
1 Q0 = 5121gyártandó típus megadása
2 FN 26: TABOPEN proba.tabtáblázat megnyitása
3 Q1 = - 1sorszámláló kezdőértéke
4 LBL 1
5 Q1 = Q1 + 1sorszámláló növelése
6 FN 28: TABREAD Q5 =Q1 /IDazonosító beolvasása
7 FN 9: IF +Q5 EQU +0 GOTO LBL 99ha a táblázat végére ért, hiba...
8 FN 10: IF +Q5 NE +Q0 GOTO LBL 1ha nincs meg a keresett típus, vissza...
9 FN 28: TABREAD Q6 =Q1 /W,Hértékek kiolvasása a táblázatból
10 ;megmunkálás a táblázat adatai alapjána W (Q6) és H (Q7) adatokat használó program, például egy zsebmarási ciklus
11 M30program stop
12 LBL 99
13 FN 14: ERROR= 1004hibaüzenet kiírása
14 END PGM tab_2 MMprogram vége
Mint látható az ID értékének beolvasása után megvizsgáljuk, hogy 0-e (a táblázat végére értünk), mert akkor ugrunk a LBL 99 címre.
A 13 FN 14: ERROR= 1004 sorral kiírunk a képernyőre egy hibaüzenetet. A vezérlésben van néhány előre beállított üzenet (az összes támogatott nyelven, ezért nem gond, ha a kijelzés nyelvét átváltják), melyekre az 1000...1090 számokkal hivatkozhatunk. Az 1004 a Tartománytúllépés szöveget takarja. A többi szöveget az iTNC Kezelési Leírás 11.8 fejezete tartalmazza. Amennyiben nem találunk a listában megfelelőt, vagy teljesen egyéni hibaüzenetre vágyunk, akkor egy segédprogrammal szerkeszthetők a 0...299 tartományba eső felhasználói szövegek, ám ez esetben a programunk nem lesz hordozható a különböző gépek között. A 300...999 közötti számok a PLC hibaüzeneteit aktiválják.
Végezetül egy megjegyzés. A 11 M30 sor azért fontos, mert nélküle a program a feladat végrehajtása után ráfutna a hibaüzenet kiírására, ami nem lenne szerencsés.
A fenti program mintájára egyszerűen megoldható az olyan alkatrészcsaládok gyártása, ahol az alkatrészeknek van egyértelmű azonosítójuk. Elegendő csak az azonosító megadása az NC program első sorában, a többi adat a táblázatból jön. Rendkívül egyszerű további alkatrészek felvétele (további sorok beszúrása a táblázatba) és minimális a tévedés lehetősége (csak létező azonosítót fogad el a program).
Egyetlen funkció alaposabb tárgyalását hagytunk még ki, a táblázatba való írást. Az alábbiakban megnézzük, például hogyan tarthatjuk nyilván az egyes típusokból legyártott munkadarabok számát a táblázatba való írással.
A feladat a következő; a legyártott munkadarabok számát a táblázat egy külön oszlopában fogjuk nyilvántartani.
Előkészületképpen a táblázatba egy új oszlopot hozunk létre a FORMÁTUM SZERK. funkcióval. Az oszlop azonosítója legyen WP, típusa N, hossza 5 a tizedesjegyek száma 0. Ne feledkezzünk meg a dialógusok kitöltéséről sem (legalább magyar nyelven).
Az eredmény így fest a képernyőn:
Kép
Az új WP oszlop üres, ezért fel kell azt tölteni a kezdőértékekkel, írjunk mindenhová nullát:
Kép
Ezt követően módosítsuk a programot úgy, hogy a megmunkálás után olvassa ki a WP oszlop tartalmát, növelje az értékét, majd írja vissza a táblázatba.
0 BEGIN PGM szamol MMprogram kezdete
1 Q0 = 5118gyártandó típus megadása
2 FN 26: TABOPEN proba.tabtáblázat megnyitása
3 Q1 = - 1sorszámláló kezdőértéke
4 LBL 1
5 Q1 = Q1 + 1sorszámláló növelése
6 FN 28: TABREAD Q5 =Q1 /IDazonosító beolvasása
7 FN 9: IF +Q5 EQU +0 GOTO LBL 99ha a táblázat végére ért, hiba...
8 FN 10: IF +Q5 NE +Q0 GOTO LBL 1ha nincs meg a keresett típus, vissza...
9 FN 28: TABREAD Q6 =Q1 /W,Hértékek kiolvasása a táblázatból
10 ;megmunkálás a táblázat adatai alapján
11 FN 28: TABREAD Q0 =Q1 /WPaktuális munkadarabszám kiolvasása
12 Q0 = Q0 + 1érték növelése
13 FN 27: TABWRITE Q1 /WP = Q0munkadarabszám visszaírása
14 M30program stop
15 LBL 99
16 FN 14: ERROR= 1004hibaüzenet kiírása
17 END PGM szamol MMprogram vége
A 11, 12 és 13 sorok oldják meg a kitűzött feladatot (feltételeztük, hogy a Q1 változó értékét a megmunkáló rész nem módosította és még mindig a táblázat kívánt sorára mutat). Ha a programot futtatjuk, akkor a WP oszlop megfelelő sorának értéke minden egyes alkalommal növekszik. Látszólag elértünk célunkat, de programteszt üzemmódban kellemetlen meglepetés érhet: minden teszt futtatás is növeli a legyártott munkadarabok számát. Ezt jó volna elkerülni.
A megoldás a következő:
0 BEGIN PGM auto_szamol MMprogram kezdete
1 Q0 = 5120gyártandó típus megadása
2 FN 26: TABOPEN proba.tabtáblázat megnyitása
3 Q1 = - 1sorszámláló kezdőértéke
4 LBL 1
5 Q1 = Q1 + 1sorszámláló növelése
6 FN 28: TABREAD Q5 =Q1 /IDazonosító beolvasása
7 FN 9: IF +Q5 EQU +0 GOTO LBL 99ha a táblázat végére ért, hiba...
8 FN 10: IF +Q5 NE +Q0 GOTO LBL 1ha nincs meg a keresett típus, vissza...
9 FN 28: TABREAD Q6 =Q1 /W,Hértékek kiolvasása a táblázatból
10 ;megmunkálás a táblázat adatai alapján
11 FN 18: SYSREAD Q0 = ID990 NR2 IDX16üzemmód lekérdezése
12 FN 10: IF +Q0 NE +1 GOTO LBL 90ha nem automata, ugrik LBL 90-re...
13 FN 28: TABREAD Q0 =Q1 /WPaktuális munkadarabszám kiolvasása
14 Q0 = Q0 + 1érték növelése
15 FN 27: TABWRITE Q1 /WP = Q0munkadarabszám visszaírása
16 LBL 90
17 M30program stop
18 LBL 99
19 FN 14: ERROR= 1004hibaüzenet kiírása
20 END PGM auto_szamol MMprogram vége
A módosított programban az FN 18 funkció szorul magyarázatra, különösen azért, mert az iTNC 530 kezelési leírása a 11.8 fejezetben ugyan tárgyalja, de a 990-es rendszeradat ott nincs ismertetve. Röviden annyit érdemes tudni, hogy a 11 FN 18: SYSREAD Q0 = ID990 NR2 IDX16 rendszeradat olvasással megtudhatjuk, hogy a program automata üzemmódban fut-e (ebben az esetben a Q0 paraméterbe 1 kerül).
Még egy fontos kiegészítés a táblázatba írás funkcióhoz. Régebbi TNC-knél a táblázatba csak olyan számokat lehet beírni, aminek elegendő hely van biztosítva (WIDTH és DEC). Tehát például a WP oszlopba csak egész számokat írhatunk, míg a W és H oszlopokba legfeljebb 4 tizedesjeggyel rendelkezőt. Szerencsére a legújabb szoftverben az automatikus kerekítés már része a beírásnak, de a régebbi vezérlésekben erre érdemes odafigyelni. Például ha a Q9 paraméterben egy számítás (osztás) eredménye van és nem vagyunk biztosak a tizedesjegyek számában, akkor célszerű elvégezni a
Q9 = ( INT ( Q9 * 10000 ) ) / 10000
műveletet, mielőtt egy olyan oszlopba akarjuk beírni, ahol a DEC értéke 4.