Nyt on CNC-foorumin tukeminen helppoa!
Maksu onnistuu PayPalin kautta myös kortilla
Konemies kiittää

Makrot BOSS 5:ssa

Aloittaja senaattori, 31.07.12 - klo:21:25

« edellinen - seuraava »

0 Jäsenet ja 1 Vieras katselee tätä aihetta.

senaattori

Huhheijaa,
muistaako kukaan joka joskus olis käyttäny BOSS 5 järjestelmää ja osais selittää missä tilantees käytetään makro-ohjelmia (ymmärtääkseni se on aliohjelma joka voi sisältää muuttujia???) Täs systeemis voi käyttää myös looppeja, sen mää jotenki oo saanu mahtumaan ajatusmaailmaani. Manuaali kertoo et voi olla sisäkkäisiä makroja jopa neljässä tasossa ja ne voi sisältää useita looppeja.
Ettei sen vaikeempaa,  :-\
Ohjekirjasta lainattua:Makro-ohjelmat tarjoavat ohjelmoijalle mahdollisuuden ohjelmoida osoitteellisen parametrin arvon muutos, ja suorittaa aliohjelma joka koostuu ryhmästä lauseita joissa on muuttuvia parametrejä.....
täytyy sannoo et kivääri sulkuväli säätö o helpompaa ko tää teksti ymmärtämine.....
Reijo Martinpoika Tuomala

Kremmen

Jos otetaan vähän vauhtia ihan perinteisestä ATK-ohjelmoinnista, niin siellä sanalle "makro" on ihan yksikäsitteinen merkitys.
Ensinnäkin, onhan aliohjelman käsite tuttu; eli aliohjelma on pätkä ohjelmakoodia, joka on jollain kieleen kuuluvalla rakenteella pakattu laatikkoon jolla on nimi. Aliohjelmalle voidaan toimittaa argumentteja eli parametreja jotka ohjaavat sen toimintaa. Ehkä esimerkki valaisee, tässä C-kielinen, mutta ei anneta sen häiritä:

C-kielessä aliohjelma (josta yleisesti käytetään nimitystä "funktio" tai "proseduuri") määritellään tähän tyyliin:

int MysteeriFunktio(int Eka_argumentti, float Toka_argumentti)
{
    int Tulos;
    Tulos = Eka_argumentti * Toka_argumentti;
    return Tulos;
}


Eli tuossa olisi nyt koodinpätkä joka tekee simppelin kertolaskun käyttäen argumentteja "Eka_argumentti" ja "Toka_argumentti" hyväkseen.
C-kielessä varattu sana "int" tarkoittaa kokonaislukutyyppistä muuttujaa, "float" liukulukua (ei mennä siihen nyt syvemmälle). Aliohjelman nimi on "MysteeriFunktio" ja nimen edessä oleva "int" tarkoittaa, että aliohjelma palauttaa kokonaisluvun joka oletettavasti on sen tekemän laskennan tulos. Nimen jälkeen suluissa on mielivaltaisen pitkä lista tyypitettyjä argumentteja jotka välitetään aliohjelmalle.

C-kielessä tuota aliohjelmaa käytettäisi näin:

int JokuMuuttuja;      //esitellään jokin integer-tyyppinen muuttuja

... ohjelmakoodia...'
JokuMuuttuja = MysteeriFunktio( 1 , 3.14159 );
...ohjelmakoodia...


Kun tämmöinen ohjelma käännetään binäärikoodiksi C-kääntyrillä, kääntäjä huomaa Mysteerifunktion kutsun tuossa ohjelmanpätkässä. Se pakkaa argumentit (siis 1, ja tuo pii) nippuun, merkkaa muistiin missä kohdassa ohjelmaa ollaan menossa, ja siirtää suorituksen tuonne Mysteerifunktion alkuun. Siellä argumentit ensin puretaan paketista ja sitten suoritetaan aliohjelmassa oleva koodi. Kun tullaan loppuun, katsotaan tuo merkkaus mistä aliohjelmaan tultiin, ja palataan samaan paikkaan mistä suoritus jatkuu. Näin tuota yhtä aliohjelmaa voidaan käyttää vaikka kuinka monesta kohtaa pääohjelmaa, ja juuri se on tarkoituskin. Vältetään siis kirjoittamasta samaa koodia moneen kertaan ympäriinsä. Mikä tärkeintä, jos aliohjelmassa olisi virhe niin virheen korjaaminen kertaalleen aliohjelmassa on merkittävästi helpompaa kuin kaikkien kopioiden jahtaaminen ympäri pääohjelmaa, mikäli aliohjelmia ei käytettäisi.

No nyt päästään makroon ja miksi sellaisia on. Aliohjelmalla on yksi haittapuoli. Yllä yksinkertaistin hieman ja todellisuudessa tuo aliohjelman kutsuminen, eli suorituksen siirto sinne, ja palautus taas takaisin kutsuvaan kohtaa on suhteellisen raskas manööveri. Prosessorin rekisterit joudutaan tallettamaan pinomuistiin ja purkamaan sieltä paluun yhteydessä. Tämä voi aiheuttaa melkoisen määrän ylimääräistä työstöä jos kyseessä on hyvin pieni ja yksinkertainen aliohjelma. Joku simppeli bitin kääntö jossain voi olla kiva esittää aliohjelmana, mutta näin tehden voi ylimääräinen homma olla paljon isompi kuin varsinainen hyötykoodi. Jos aliohjelma sen sijaan määriteltäisi makroksi (eli makrokäskyksi koko nimellään) niin sen sijaan että aliohjelmaa kutsutaan, sen koodi kopioidaan jokaiseen kohtaa jossa aliohjelmaa käytetään. Tällöin ei synny mitään hyppyä aliohjelmaan ja sitten takaisin ja melkein kaikki "ylimääräinen" koodi säästyy.
C-kielessä makro määriteltäisi näin:

#define MysteeriMakro(Eka_argumentti,Toka_argumentti) Eka_argumentti * Toka_argumentti

Jos tätä makroa nyt "kutsuttaisi" vaikka näin:

JokuMuuttuja = MysteeriMakro( 1 , 3.14159 );

niin kääntäjäpä ei teekään mitään aliohjelman argumentien pakkausta ja kutsua, vaan sijoittaa tuolla ylempänä määritellyn makron tekstin suoraan makron nimen tilalle. Tässä tapauksessa kopioiden argumentit vielä lauseseen jolloin lopputuloksena kääntäjä näkee pääohjelman ikäänkuin näin:

JokuMuuttuja = 1 * 3.14159;

Ja tuo lause käännetään. Eli makron koodi on suoraan kopioitu siihen kohtaan jossa makro on mainittu.

Senaattorin siteeraamassa tekstissä oli sanottu: "...ja suorittaa aliohjelma joka koostuu ryhmästä lauseita joissa on muutuvia parametrejä". Se on juuri tämä asia, vaikka BOSS 5:n kielioppi on varmaan erilainen kuin C-kielen mistä syystä makro näyttää silmään erilaiselta. Samaa asiaa se kuitenkin tekee.

Selvensikö vai hämmensikö lisää?  :P :P
Nothing sings like a kilovolt
Dr W. Bishop

senaattori

No siinäpäs tuli tietoa kertaheitolla aimo annos, täytyypi vähän sulatella ja koittaa testiesimerkin kautta. :)
Reijo Martinpoika Tuomala

Adeina

BOSS 5:stä en tiedä mitään, mutta meillä töissä käytetään makroja helpottamaan ohjelmointia. Eli meillä on esim. valmiina makro, joka tekee annetulla säteella ympyrän ja sitä käytetään o-renkaiden jyrsintään kun on helppovaan kutsua makroa ja syöttää sille haluttu säde.

Mä koodaan makrot lähinnä käsin. Meillä on työstökeskuksia jolla  ohjauksena fanuc15 ja siitä uudempia sinne fanuc31 asti. Jonkun verran noita joutuu säätääk eri ohjauksille.

Powered by EzPortal
SMF spam blocked by CleanTalk