- CNC programok (FANUC 210 MB rendszerben) -
Egyedi- és sorozatgyártó programrendszer

 

Tartalomjegyzék

- Még semmi -

Előre kell bocsájtanom: programjaimért és működésükért semmilyen felelősséget nem vállalok! Ha összetöröd vele a géped, vagy magadat, vagy mást... Te gondod. Kivéve, ha engem törsz össze. Vannak hibák, buktatók, hiányosságok, érzékeny, gyenge pontok a rendszerben. Ezeket igyekszem jelezni.

A munkámhoz használt gép fajtája:

Excel PMC 5V T20

Az enyém nem olyan lepusztult, mint ami a képeken van, de azért hasonló. (A festék jobban lekopott, több a fémtiszta felület, melytől már nem tűnik ennyire ütött-kopottnak.) A vezérlő agya nem túl gyors, sem túl nagy, de lehet vele okosságokat csinálni. Ezekből szándékszom pár dolgot feltenni. Kísérletezésem során bizonyos irányítási, működési szint alá nem megyek, nem használom ki a vezérlő nyújtotta összes lehetőséget, továbbá biztosan lehetne összetettebb, miközben egyszerűbb kódot is írni. De én most itt tartok.

Programozással először számítógépen találkoztam, ez jó alapozásnak bizonyult a CNC-zéshez. (A számítógépes 3D-s grafikázás pedig a rajzolvasáshoz.) Ösztönző elvem a programozó egyik hajtóereje: (nem a lustaság, hanem) a kényelmesség. Ha már egyszer megírtam egy programot egy munkadarabra, ne kelljen még egyszer. Szerszámüzemben dolgozom, sok egyedi alkatrészt gyártok. Igen ritka, hogy kétszer ugyanazt kelljen megcsinálni, és általában azok nem is bonyolult alkatrészek, újraírni a programokat nem telne sok időbe. De az ember egy idő után el kezd unatkozni. És ahelyett, hogy a telefonom nyomkodnám, vagy átjárogatnék a szomszéd gépekre beszélgetni, mely tevékenységek egyrészt nem kötnek le, másrészt a főnökök nem szeretik látni, inkább azt választottam, hogy elkezdem egyszerűsíteni (külső szemlélő számára bonyolítani) azt a rendszert, melyben dolgozom. Így létrejött a saját virtuális munkakörnyezetem, melyet a váltóim nem tudnak használni, így bele sem mernek piszkálni.

Mint említettem, az erőforrások szűkössége bekorlátozza az embert. 99 (100?) program írható mindössze 64 Kb-nyi memóriába. Ebből kell gazdálkodni. Okosan. Ugyanakkor ez előny is, mert a programozó rá van kényszerítve a tömörítésre. Van egy főprogramom, mely a következő szerkezetű:


%
O0401 (PETI FOPROGRAMJA) (V1406241827)
#1=1 (MEGMUNKALO PROGRAM)
#2=102 (PROGRAM SZAKASZ)
(N1) (VEGYES)
(N2) (PROGRAM 2.)
(N3) (DATUMBELYEGZOK)
(N4) (PROGRAM 4.)

IF [#2LT10000] GOTO98
IF [FIX[#2/10000]NE#1] GOTO3014
GOTO99
N98
IF [#2LT1000] GOTO98
IF [FIX[#2/1000]NE#1] GOTO3014
GOTO99
N98
IF [FIX[#2/100]NE#1] GOTO3014
N99
M98 P402 (FOPROGRAM INIT)
G54
GOTO#1 (MUNKADARAB MUVELETEK)

/-----/

N1 (VEGYES)
GOTO#2
N101
G65 P441 T0 (T0-ROL SOHA NEM ATIRNI)
G65 P410 M101 X180 T35 R-10.25 Q-0.25 Z-13 S1100 F2000

GOTO999

N102
(ROBOT MEGFOGOKAR)
G65 P441 T2
G66 P481 R-33 Z-36
G65 P445 I11
N103
G65 P441 T3
G66 P483 D5.1 R-33 Z-55
G65 P445 I11
N104
G65 P441 T4 S3500 F1500
G66 P471 U0 D9 R-33.8 Q-0.2 Z-39
G65 P445 I11
GOTO999

N105
G65 P441 T0 S1100 F1600
G65 P410 M102 T35 X70 Y24 R0 Q-0.25 Z-1.75
GOTO999

N106
G65 P441 T0 S3600 F1000
G65 P471 U0 D9 R0 Q-0.2 Z-8

GOTO999
/-----/

N2
GOTO#2
N201
G65 P441 T0 S6000 F1000
GOTO999

N211
G65 P441 T2 S2000 F2000

GOTO999
/-----/

N3
GOTO#2
N301 (KIS DAT.BELY.)
(SIK)
/M00 (*** Z0 KESZMERETEN ***)
/G65 P441 T2 S3200 F600
G65 P441 T0 S3200 F600
G65 P410 M101 X200 I-90 T6 R0.5 Q-0.1 Z0 (10 DB)
G65 P410 M102 X200 Y4.5 I-90 T6 R0 Q-0.01 Z0
/G65 P410 M101 X110 I-50 T10 R0.7 Q-0.1 Z0 (6 DB)
/G65 P410 M101 X80 I-30 T6 R0.7 Q-0.1 Z0(4 DB)
N302 (HORONY)
/G65 P441 T3 S6000 F300
G65 P441 T0 S6000 F300
G65 P410 M102 X200 Y0.25 I-90 T0.5 R0 Q-0.05 Z-1 (10 DB)
/G65 P410 M102 X120 Y0.25 I-50 T0.5 R0 Q-0.05 Z-1 (6 DB)
/G65 P410 M102 X80 Y0.25 I-30 T0.5 R0 Q-0.05 Z-1 (4 DB)
/N3025
/G65 P441 T0 S6000 F300
/G65 P410 M102 X72 Y0.25 I-30 T0.5 R0 Q-0.05 Z-1
GOTO999

N303 (NAGY DAT.BELY)
(SIK) (** Z0 KESZMERETEN **)
G65 P441 T0 S3200 F600
G65 P410 M102 X240 Y4.5 I-105 T6 R0.3 Q-0.1 Z0
N304 (HORONY)
G65 P441 T0 S6000 F300
G65 P410 U1 M101 X240 I-105 T0.5 R0 Q-0.05 Z-1
N305
G65 P441 T0 S6000 F150
G66 P444 U31 R0 Q-0.05 Z-0.3
G65 P445 I31

GOTO999

N306 (BMW)
(NAPSUGI)
G65 P441 T0
G66 P16
G65 P445 I31
GOTO999
N307
(FEJ PEREM)
G65 P441 T0 S6000 F400
G66 P471 U10 D10.65 R0 Q-0.05 Z-1
G65 P445 I31

GOTO999
/-----/

N4
GOTO#2
N401
G65P441T0

GOTO999
/-----/

N3014 #3000=14 (PROGRAM SZAKASZ CIMKE HIBA)
N999
M98 P403
M30
%


Ebből nem kell első körben mindent megérteni. Veszem részletesen:

- A programom elnevezem egy megjegyzést jelentő zárójelben. A "Directory" menüben a programszám után közvetlenül levő első zárójeles megjegyzés megjelenik, ez (főleg kezdetben) segítséget jelenthet. A váltóim mindenféle számmal jelzett programot használhatnak, azonban hallgatólagos egyezmény szerint a P400-P599-ig az én programjaim vannak.

O0401 (PETI FOPROGRAMJA) (V1406241827)

Az évek során programozói és adatrendezgetős tapasztalatom többször megerősített, hogy igen érdemes változat címkéket elhelyezni, ahol egy összefüggő rendszert akarok kiépíteni. Ez jelen esetben, mint az előző programrészletben látszik is, a következőképp néz ki: (V1406241827) - azaz 2014. június 24-e, du. 6 óra 27 perckor létrehozott változat. Ez a jelölés azért is jó, mert ha a Világegyetemben folytatott ez életi, Gáll Péter névhez köthető működésem összes számítógépes tevékenységét összesíteni akarom, ezek a címkék akkor is egyediek lesznek, hiszen egy percen belül nem valószínű, hogy két dologból is létrehozok egy olyan gyökeresen új változatot, melyet új változat címkével lenne érdemes jelölni. Ha valaki mégis ilyen nagyon gyorsan dolgozna, és biztosra akarna menni, biggyesszen utána még két számjegyet, melyek a másodpercet jelölik!

- Vannak programok és program szakaszok. Ezen programok virtuálisak, a főprogramon belüli fő szakaszokat értem alatta. A főprogramon belüli egyedi sorszámokat csatolok hozzájuk. Alakja: N[n], azaz N1-N9-ig terjedő sorszámok lehetnek, így összesen kilenc ilyen programot lehet a főprogram fájlba sűríteni. Ami tán kevésnek tűnik, mégis értelmetlenül soknak bizonyult, hisz váltóim, s az én egyéb programjaimmal együtt nem is jut elegendő memória ennyi megmunkáló program megírására. Épp ezért mást kellett kitalálnom arra, hogyan menthetek el tetszőleges számú megmunkáló programot. Ehhez már egy számítógép is kell, és a V24 nevezetű program. Erről tán később.
Egy megmunkáló programon belül programszakaszok vannak, általában szerszámváltásonként kezdődik új szakasz. Egy szakaszon belül azonban nem dolgozhat két szerszám. A szakasz mindig szerszámváltással kell kezdődjön. Ha ez nem jár tényleges szerszámváltással, akkor vagy értelmi, vagy külön futtatható egységekre akarom bontani az adott szerszámmal történő megmunkálást, vagy az adott szerszámhoz más korrekciós értékeket akarok behívni. Ezen megkötéseket érdemes megtartani a biztonság és áttekinthetőség érdekében.
A programszakasz címkeformátuma N[nnn], ahol az első számjegy a megmunkáló program száma, a második lehet a megmunkáló program egy adott része, a harmadik pedig a szakasz tényleges sorszáma.

#1=1 (MEGMUNKALO PROGRAM)
#2=102 (PROGRAM SZAKASZ)

Vagyis: ha a megmunkáló programom #1=1, akkor a futtatandó program szakaszom nem lehet #2=301, csak #2=100 - #2=199. Mivel a Fanuc vezérlőt nem érdeklik az én kis szabályaim, ő nem fogja ellenőrizni. Ezeket nekem kell felépítenem, betartanom, és a programjaimba ezek betartását ellenőrző kódrészeket írnom. Mégpedig azért van ezen aprócska részlet-szabályokra szükség, nehogy eltévedjek (bármilyen hihetetlen). Adjon egy keretet, ugyanakkor szabadságot minél több, és minél több féle program megírásához.
A második és harmadik számjegy nem kötött. Van úgy, hogy #2=101-ről kezdem a szakaszok számozását, és sok szerszám dolgozik, sok művelet van, és elmegyek például #2=116-ig. Utána biggyesztek egy "GOTO999"-et, ami a program végére  való ugrást jelenti, hogy ne folyhassak bele a megmunkáló program további részébe. Mert aztán #2=120-tól már a vas alulról való megmunkálását, a következő felfogás műveleteit írom meg. Ha egy másik esetben előzőleg csak #2=108-ig tartott megírni a műveleteket, utána #2=110-el folytatom a második felfogás megírását.

- Egy kis segítő szakasz következik, ahol jegyzem magamnak, mely megmunkáló programot mihez írtam. Az N1-est ideiglenesnek használom, olyan MDI-szerű bevitel gyanánt, mely programokról tudom, hogy valószínűleg csak egyszer fogom használni.

(N1) (VEGYES)
(N2) (PROGRAM 2.)
(N3) (DATUMBELYEGZOK)
(N4) (PROGRAM 4.)

- Aztán jön egy kis kriksz-kraksz, ami a #1 és #2 változók tartalmát hivatott ellenőrizni, hogy ne írhassak következetlenséget a lefuttatandó programszakaszhoz.

IF [#2LT10000] GOTO98
IF [FIX[#2/10000]NE#1] GOTO3014
GOTO99
N98
IF [#2LT1000] GOTO98
IF [FIX[#2/1000]NE#1] GOTO3014
GOTO99
N98
IF [FIX[#2/100]NE#1] GOTO3014
N99

- Külön programba írtam meg a programok előtt és után futtatandó alaphelyzetbe állító parancssorokat (O0402, O0403), hogy bármilyen programból meghívhassam őket, tehát egy újonnan létrehozott programot is egyszerűen tudhassak biztonságos főprogramként futtatni, és főprogramnak kikiáltott programjaim kezdő és vég működését egyszerre tudjam változtatni. Majd külön beállítom a nullpont koordinátarendszert, utána a megadott megmunkáló programhoz ugrok. (Egyszerűbb lett volna a #1 és #2 változók összehangolgatása, ellenőrizgetése helyett az alábbi programrészlet harmadik sora helyett azt írni, hogy "GOTO[FIX[#2/100]]", vagy simán csak "GOTO#2", kihagyva a majdan következő, a megmunkáló program elején levő második ugrást. Nem emlékszem már, hogy miért nem így csináltam...)

M98 P402 (FOPROGRAM INIT)
G54
GOTO#1 (MUNKADARAB MUVELETEK)

- Jön a megmunkáló program rész. "GOTO #2" - ugrás a megadott program szakaszhoz. Az O0441-es makró program kezeli a szerszámváltást. Az én gépemen a szerszámtár nem jó (illetve naggyon jó, csak már nem működik), így minden esetben kézzel váltok - ezért is volt érdemes egy külön programot írnom erre.

/-----/

N2
GOTO#2
N201
G65 P441 T0 S6000 F1000
GOTO999

N211
G65 P441 T2 S2000 F2000

GOTO999
/-----/

- Lezárás. Előbb a hibakezelő rész következik. Egyes alprogramjaimban ez elég hosszúra tud nyúlni, sőt létrehoztam egy hibakezelő makrót is az "egyszerűség" kedvéért. Ha az #1 és #2 változók értékében következetlenséget találna a főprogram első harmadában levő ellenőrző eljárás, ide ugrik. Majd a megmunkáló részből való "kilépési pont", az N999 jön. Aztán a lezáró alprogram, mely G54-et visszaállít, elforgatást, eltolást, nyújtást kivesz, miegymás, majd az asztallal kiáll. Program vége.

N3014 #3000=14 (PROGRAM SZAKASZ CIMKE HIBA)
N999
M98 P403
M30

- Nem is olyan bonyolult, igaz? Még egyszer, lecsupaszítva:

%
O0401 (PETI FOPROGRAMJA) (V1406241827)
#1=1 (MEGMUNKALO PROGRAM)
#2=102 (PROGRAM SZAKASZ)
(N1) (VEGYES)
(N2) (PROGRAM 2.)
(N3) (DATUMBELYEGZOK)
(N4) (PROGRAM 4.)

IF [#2LT10000] GOTO98
IF [FIX[#2/10000]NE#1] GOTO3014
GOTO99
N98
IF [#2LT1000] GOTO98
IF [FIX[#2/1000]NE#1] GOTO3014
GOTO99
N98
IF [FIX[#2/100]NE#1] GOTO3014
N99
M98 P402 (FOPROGRAM INIT)
G54
GOTO#1 (MUNKADARAB MUVELETEK)

/-----/

N2
GOTO#2
N201
G65 P441 T0 S6000 F1000
GOTO999

N211
G65 P441 T2 S2000 F2000

GOTO999
/-----/

N3014 #3000=14 (PROGRAM SZAKASZ CIMKE HIBA)
N999
M98 P403
M30
%

A kényelmes, és menthető munkához létrehoztam pár makró programot és alprogramot. Három alap program van, melybe minden esetben egyedi tartalom kerül, tehát érdemes őket számítógépre elmenteni:

O0401 - főprogram
O0444 - körvonal (kontúr) makró
O0445 - furatkép makró

A körvonalak makró programba való gyűjtése azért is előnyös, mert különféle forgácsolási értékekkel lehet ugyanazt a körvonalat futtatni anélkül, hogy a kódba belenyúlnánk. Például általában ugyanazt a körvonalat "hívom meg" háromszor: nagyoláshoz, símításhoz, letöréshez/lekerekítéshez.
A furatkép makróba - a neve elárulja - furat helyzeteket írok csoportokba, melyekre egy újabb makró program hívódik meg (általában fúróciklusok, spirál).
A makróprogramok működését később részletezem.