Matej Umek
RPK, 2000
Mentor, Janez Vrhovec
This program makes calculation of key by standard DIN 6884. User must write diameter of shaft, select lenght of key, select number of keys (if there are more of them), load and select material for shaft. Program makes control on maximum side pressure. Then it draws key connection with support of PHIGS library. Finally, it makes file for 3D model of key in VRML language.
Predmet prikaza je gred in z moznično gredno vezjo nanjo vezan obroč. Moznik je ploščat in klinaste oblike z nosom po standardu DIN 6884. Program naj izriše gredno vez s pomočjo knjižnice PHIGS in datoteko za izris 3D moznika s pomočjo VRML jezika.
Program je namenjen preračunavanju zagozde po standardu DIN 6884.
Program je sestavljen iz dveh oken. V levem oknu se izpisujejo vsi podatki o zagozdi interaktivno, na koncu pa si uporabnik lahko skopira podatke v datoteko. Postopek preračuna poteke tako, da uporabnik vnese premer gredi v dovoljenih mejah, nato pa izbere dolžino zagozde. Potrebno je še izbrati, koliko zagozd je v spoju. Nato sledi izbor tipa obremenitve, s tem pa dobimo meje, v katerih mora biti faktor Cb. Ta faktor nato po želji vpišemo, vendar mora biti v predpisanih mejah. Tu je potrebno podati še moment, s katerim je obremenjena gredna vez. Sledi izbor materiala, čemur sledi avtomatsko kontrola na bočni tlak. Pred tem se izpiše tudi meja elastičnosti za izbrani material in faktor zmanjšanja, ki ju lahko po želji spremenimo, pri tem pa se zopet avtomatsko izvede kontrola. Če pa spremenimo kak drug parameter, pa moramo za izračun klikniti gumb Calculate.
Sledi grafičen del programa. Tu najprej s klikom na gumb DRAW dobimo 2D sliko gredne vezi, ki jo lahko po želji premikamo, rotiramo in skaliramo. Za obnovitev slike pa ponovno kliknemo gumb za izris DRAW. Sledi še predstavitev 3D modela zagozde, kjer je uporabljen jezik VRML. S klikom na gumb Make VRML file dobimo v novem oknu programsko kodo za izris, ki jo na nek način shranimo v datoteko. Tu dobimo datoteko za 3D prikaz zagozde.
S klikom na povezavo Preračun v kazalu najprej dobimo datoteko calculation.html, v kateri nam programska koda razdeli zaslon na dva okna z ukazom "FRAMESET".
Levo okno dobimo iz datoteke data.html, kjer tvorimo tekstovno polje "TEXTAREA" z imenom param. V to polje se izpisujejo posamezni parametri, ki so pomembni pri konstruiranju, risanju in preračunu zagozde in gredne vezi.
Desno okno pa vsebuje vso programsko kodo in objekte za celoten potek preračuna. Izhaja iz datoteke interface.html.
Program od nas zahteva najprej premer gredi v mm. Ko odmaknemo kurzor iz vnosnega polja, program izvede funkcijo thickness(), ki najprej preveri, če je premer v predpisanem območju in opozori, če premer ni ustrezen. Sledi izbor parametrov zagozde (b, h, f1 in f2) in tvori naziv zagozde v polju descriptionKey. Na koncu pokliče še funkcijo otherFrame(), ki naredi zapis parametrov v levo okno v tekstovno polje param.
Naslednji korak je izbor dolžine zagozde iz seznama standardnih dolžin s pomočjo obrazca "SELECT". Z izborom dolžine iz seznama pokličemo funkcijo len(), ki nam določi vrednost za dolžino s pomočjo stavka if...then....else in ponovno pokliče funkcijo thickness(), da doda k opisu zagozde in v levo okno dolžino.
S pomočjo obrazca tipa radio izberemo število zagozd v gredni vezi. Izbiramo lahko med eno ali dvema zagozdama. V primeru, da privzetega izbora ena ne spremenimo, se ne izvede nobena funkcija, če pa izberemo dva, se izvede funkcija noOfKey(), ki s pomočjo pogojnega stavka if določi parametra n in fi in pokliče funkcijo otherFrame(), da osveži seznam parametrov. V primeru, ko ne spremenimo izbora, se te funkcije izvedejo pri določevanju faktorja Cb.
Sledi odsek o obremenitvi. Tukaj najprej izberemo pogoje, v katerih obratuje gredna vez s pomočjo padajočega seznama "SELECT" in s tem pokličemo funkcijo factorCb(this.form). Če izbora ne spremenimo, se ta funkcija izvede v naslednjem koraku, ko vpišemo faktor Cb. Funkcija factorCb() torej najprej določi meje za faktor Cb in jih zapiše v polje bound ter s pomočjo pogojnega stavka pogleda, če je polje cb polno. V tem primeru ugotovi, če je število v polju cb v mejah in v primeru napake opozori z oknom alert in v to polje vpiše faktor, ki je aritmetična sredina zgornje in spodnje meje. Na koncu pokliče še že omenjeno funkcijo noOfKey(), ki ugotovi število zagozd. Vpišemo še moment v Nm, s katerim je obremenjena gredna vez in s tem pokličemo že omenjeno funkcijo za obnovitev parametrov v levem oknu.
Kot zadnje je potrebno s seznama izbrati material, iz katerega je pesto. V seznamu je navedeno le nekaj materialov, možno pa je dodajati nove. Ko izberemo material, pokličemo funkcijo mat(), ki nam določi mejo elastičnosti (Re) za ta material in ga vpiše na seznam v levem oknu. Funkcija nam pokliče še funkcijo za kontrolo bočnega tlaka calc() in izpiše podatek o meji el. v polje mElas, kjer jo lahko po želji tudi spremenimo. Spremenimo pa lahko tudi faktor zmanjšanja vF. S spremembo katerega od teh dveh parametrov se ponovno pokliče funkcija calc() za ponovno kontrolo.
Funkcija calc() pa najprej izračuna dopustni bočni tlak pzul in ga zapiše v polje pZul. Za izračun dopustnega bočnega tlaka uporabimo enačbo:
Za izračun dejanskega bočnega tlaka pa uporabimo enačbo:
Rezultat zapiše program v polje pAct. Nato s pomočjo pogojnega if stavka naredimo kontrolo in glede na rezultat dobimo izpis ali zagozda ustreza ali ne. Rezultat se izpiše v pogovornem oknu tipa alert in v polju rez. Sledi še klic funkcije, ki osveži podatke v levem oknu. Če želimo na koncu spremeniti katerega od parametrov, to lahko storimo in naredimo ponovno kontrolo s klikom na gumb Calculate
Najpomembnejši del programa pa je izris gredne vezi. Pri tem uporabimo grafično knjižnico PHIGS, ki nam omogoča izris daljic in teksta. Tu moramo upoštevati vsa pravila za delo s to knjižnico. Podatke o zagozdi pa dobimo s pomočjo vnosnih in skritih polj v zgornjem delu programa. V programsko HTML kodo moramo vključiti to knjižnico in podati zahtevane parametre.
Na začetku programske kode moramo definirati nekaj globalnih spremenljivk, kot so:
degrees (pretvorba kotnih stopinj v radiane),
point (vozlišča za izris),
tPoint (vozlišča, ki se ne rotirajo),
vPoint (začetna vozlišča za izpis VRML datoteke),
unit (približna pretvorba mm v tocke),
nrad (seštevek kotov za rotacijo) in
rd1 (polmer zaokrožitve).
Izris začnemo s klikom na gumb DRAW, ki nam pokliče funkcijo Draw(). Ta nam najprej postavi kot rotacije na 0 in zažene funkcijo calcPoints(), ki nam izračuna koordinate posameznih točk za izris. Računanje poteka s pomočjo podatkov o geometriji zagozde in gredne vezi. Na koncu te točke pomnoži s spremenljivko unit, da dobimo primerno velikost slike. To naredimo s pomočjo zanke for, v kateri tudi prepišemo to bazo točk v bazo tPoint in vPoint. Na koncu sledi še izračun radija zaokrožitve, ki je globalna spremenljivka in klic funkcije transform(....), s pomočjo katere izrišemo risbo, postavljeno v center področja.
Funkcija transform(....) najprej inicializira knižnjico z ukazi:
popen_phigs("error.txt", 0) popen_ws(step, conect, tip) popen_struct(Key)vstopajoči parametri, ki jih potrebuse ta funkcija, so: rotacija; translacija v smeri osi x; translacija v smeri osi y; in faktor skaliranja. V naslednjem koraku se izvede funkcija koordinatKross(), ki nam izriše koordinatni križ, nato pa sledi izračun kota, pod katerim leži risba in skaliranje radija zaokrožitve, da dobimo ustrezno velikost. Sledi klic funkcije za transformacijo točk transformation(....), v katero podamo že prej omenjene parametre in nato klic funkcije nDraw() za izris slike. Po končanem izrisu je potrebno knjižnico zapreti z ukazi:
pclose_struct() ppost_struct(step, Key, 1.0) pclose_ws(step) pclose_phigs()
ppolyline(koord_kross)kjer je koord_kross polje točk. Nastavljamo lahko tudi barvo črte z ukazom:
pset_line_colr_ind(2)in barvo teksta z ukazom:
pset_text_colr_ind(2)Vstavljanje teksta pa naredimo z ukazom ptext
tPoint[j].x=tPoint[j].x+tranX tPoint[j].y=tPoint[j].y+tranY tPoint[j].x=tPoint[20].x+(tPoint[j].x-tPoint[20].x)*scal tPoint[j].y=tPoint[20].y+(tPoint[j].y-tPoint[20].y)*scal var ang=Math.atan((tPoint[j].y-tPoint[20].y)/(tPoint[j].x-tPoint[20].x)) point[j].x=tPoint[20].x+((tPoint[j].x-tPoint[20].x)*(Math.cos(ang+rot))/(Math.cos(ang))) point[j].y=tPoint[20].y+((tPoint[j].y-tPoint[20].y)*(Math.sin(ang+rot))/(Math.sin(ang)))tu vidimo, da se točke tPoint le skalirajo in premaknejo, na koncu pa se izračuna nov set point, ki se tudi zarotira okoli točke 20. Na podlagi zadnjega seta se naredi tudi izris. Funkcija nDraw() pa nam izrisuje daljice med posamezne točke. Izris poteka na podoben način, kot kordinatni križ. Izrisujemo vsak poligon posebej. pri tem pa mu podajamo ustrezne točke. Na koncu se izvrši še funkcija za izris zaokrožitve radij(rX, rY, rd1, 5, (nrot+270), 90), v katero podamo x in y koordinato središča, polmer, natančnost izrisa, začetni kot in kot loka. Na podlagi natančnosti izrisa in objemnega kota izračuna število potrebnih točk, nato pa s pomočjo zanke for računa koordinati točke za vsak inkrement kota. Izris poteka na enak način kot prej in sicer, risanje daljic med posameznimi točkami. Če je gostota točk dovolj velika, dobimo kročni lok, sestavljen iz ravlnig črt.
Kot zadnji del programa je na voljo izpis datoteke v VRML jeziku. Datoteko izrišemo s klikom na gumb Make VRML file. Pri tem se začne izvajati funkcija vrmlMake(). Tu so uporabljeni ukazi, ki izpisujejo tekst v novo okno. Najprej je potrebno z ukazom open() odpreti novo okno, posamezne vrstice pa izpisujemo z ukazom writeln(). Tako najprej izpišemo začetne ukaze, ki so obvezen del datoteke, nato definiramo Material in barvo, nato pa izpišemo koordinate točk, ki jih potrebujemo. Z ukazom:
IndexedFaceSetnato definiramo posamezne ploskve. To naredimo tako, da zapišemo zaporedje indeksov koordinat, posamezne ploskve pa ločimo z indeksom -1. Dobljeno okno ne moremo direktno zapisati na server, zato kodo na nek način shranimo na disk. Lahko jo zapišemo direktno z ukazom File/Save As... v brskalniku, ali pa jih s pomočjo odložišča shranimo v npr. NotePad-u.
Pri tej vaji je bilo potrebno izdelati program za preračun in grafično predstavitev gredne vezi. Glavni namen seminarja je bil spoznati osnove programiranja in izdelave strani v jeziku HTML. Za nekoliko bolj zahtevne oparacije pa sem spoznal delo v programskem jeziku Java Script. Potrebno je bilo spoznati osnove jezika in nato narediti uporaben program. Bistven del seminarja pa je spoznavanje grafične knjižnice PHIGS in tvorjenje VRML datoteke za predstavitev 3D modela.