KÉSZÍTETTE Kőrössy Norbert
Transcript of KÉSZÍTETTE Kőrössy Norbert
MISKOLCI EGYETEM
GÉPÉSZMÉRNÖKI ÉS INFORMATIKAI KAR
SZERSZÁMGÉPEK TANSZÉKE 3515 Miskolc-Egyetemváros
SZAKDOLGOZAT
Feladat címe:
Szerszámgép főorsó elemzése
KÉSZÍTETTE:
Kőrössy Norbert
BSc szintű, gépészmérnök szakos
Szerszámgépészeti és Mechatronikai szakirányos hallgató
TERVEZÉSVEZETŐ:
Dr. Szilágyi Attila
egyetemi docens
KONZULENS:
Dr. Hegedűs György
egyetemi docens
2018. Május
2
EREDETISÉGI NYILATKOZAT
NÉV: _________________________________________________________________________
NEPTUNKÓD: ____________________________________________________________________
SZAKDOLGOZAT CÍME: ______________________________________________________________
Fent nevezet büntetőjogi és fegyelmi felelősségem tudatában kijelentem, hogy
szakdolgozatomban minden szövegrész, ábra és táblázat – a megfelelően hivatkozott részek
kivételével – a saját munkám eredménye, a dolgozat más dokumentumra − beleértve korábbi
szakdolgozatom/diplomamunkám szakmai részeit is – nem támaszkodik.
Tudomásul veszem, hogy szakdolgozat esetén plágiumnak számít:
− szószerinti idézet közlése idézőjel és hivatkozás megjelölése nélkül;
− tartalmi idézet hivatkozás megjelölése nélkül;
− más publikált gondolatainak saját gondolatként való feltüntetése.
Alulírott kijelentem, hogy a plágium fogalmát megismertem, és tudomásul veszem, hogy
plágium esetén szakdolgozatom visszautasításra kerül, és fegyelmi eljárás megindítását
vonhatja maga után.
Kijelentem továbbá, hogy szakdolgozatom nyomtatott és elektronikus (CD-n benyújtott, az
Egyetem honlapjára feltöltött) példányai formailag, szerkezetileg és tartalmilag megegyeznek.
Kelt, …………………
………………………………..
Hallgató aláírása
3
Idegen nyelvi összefoglaló
My thesis consists of writing a program which is able to calculate how much a spindle
bends when outside sources apply forces and torques to it. The program allows the user
to place any number of said forces and torques on the spindle and two or three bearings.
Any results are displayed on the user interface which consists of an overall view of the
spindle and all elements placed on it, and a diagram showing the changing of torque
alongside of aforementioned spindle. The user is provided with the option of calculating
in X-Z and Y-Z planes at the same time. The user interface is empty at first with all the
necessary input functions and a Refresh button located in the top left corner. The input
functions are behind an Add button which shows a dropdown menu once pressed. The
options here are the following:
1. Constrains
2. Torque
3. Force
4. Spindle data
5. Place to inspect
The Constrains tab allows the user to add one or two bearings which are capable of
moving on the spindle and one bearing which has a fixed position. At least one moving
bearing is necessary to be added.
The Torque tab holds the options to add torques on the spindle, providing their location
and extent on the X-Z and Y-Z planes or erase every torque added. All options must be
filled when adding torques, even if said option would be 0.
The Force tab is similar to the Torque tab, the user can add forces here or erase them
all. It is not necessary to provide forces or torques, the program can calculate the results
if one category or both are missing.
The Spindle data tab consists of the options to provide the spindle’s geometric
properties, such as length, outer diameter, spindle bore diameter or the elastic modulus
which is a material property.
The Place to inspect button brings up the window where we can provide the place to
calculate the spindle’s bending. All data must be in metric system.
Once the user provides the program with all necessary data they can make the diagrams
appear with the press of the Refresh button. If any data is incorrect or not provided but
needed, then an error message warns the user of the problem. The program also
displays the forces on bearings, so it can also be used in similar statics problems.
4
Tartalom
EREDETISÉGI NYILATKOZAT ........................................................................................................... 2
Idegen nyelvi összefoglaló ............................................................................................................ 3
Bevezetés ...................................................................................................................................... 5
1. 1. A szakdolgozat célja .......................................................................................................... 5
1. 2. A pontosság, mint szerszámgép követelmény .................................................................. 5
1. 3. A pontosságot befolyásoló tényezők ................................................................................ 5
1. 4. A főorsó merevségét befolyásoló tényezők ...................................................................... 6
2. Jellemző erők és azok leküzdésére jellemző csapágyak ............................................................ 7
3. Szerszámgépekre jellemző paramétertartományok ................................................................. 9
3. 1. Esztergák jellemző paramétertartományai ....................................................................... 9
3. 2. Marógépek jellemző paramétertartományai .................................................................. 11
3. 3. Köszörűgépek jellemző paramétertartományai .............................................................. 12
4. Merevség számítása ................................................................................................................ 13
5. A főorsó merevség számító program ismertetése .................................................................. 15
5. 1. Felhasználói felület .......................................................................................................... 15
5. 2. Adatok bekérése ............................................................................................................. 17
5. 3. A számítások .................................................................................................................... 18
6. Grafika ..................................................................................................................................... 34
Összegzés .................................................................................................................................... 38
Irodalomjegyzék .......................................................................................................................... 39
5
Bevezetés
A szerszámgépek a legigényesebb gépek. Ahhoz, hogy pontosan tudják elkészíteni a
gyártmányt ő maguknak is pontosnak kell lenniük. Évtizedek óta megy a verseny ezen
tulajdonság javításáért. A pontosság növelése érdekében a legfontosabb témák közé
tartozik a hőtágulásra odafigyelés a tervezéskor, rezgések csillapítása és a főorsó
merevsége. Számunkra az utóbbi lesz lényeges ebben a szakdolgozatban. A főorsók
mechanikai elemzésére alkalmas tételek már régóta elérhetőek, viszont a velük való
számítás hosszadalmas és nehéz. A technológia fejlődésének iránya manapság az
automatizálás felé halad, ebbe beletartozik az ilyen számítások elvégzése is.
Programozási nyelvek segítségével lehetőségünk van a hosszadalmas számításokat a
gépre bízni, ami elvégzi azokat a másodperc töredéke alatt. A mechanikai merevség
számítása is automatizálható, mivel a hozzá szükséges számítások levezethetőek
emberi beavatkozás nélkül, nem úgy, mint egy gép tervezésekor.
Egy ilyen fontos számítást rábízni egy programra viszont csak akkor lehet, ha az a
program minden lehetséges esetre tesztelve lett. A gyártáskor nagy veszteségek
léphetnek fel, ha egy hibás programra hagyatkozva végezzük azt.
1. 1. A szakdolgozat célja
Ennek a szakdolgozatnak a témája egy MATLAB program írása, ami alkalmas főorsók
merevségének számítására és a program működésének elmagyarázása. Mindenek előtt
szükséges megtennünk pár lépést, mint a szerszámgépek főorsójának elemzése: az azt
befolyásoló hatások vizsgálata és a főorsó kialakításának jellemzői és okai.
1. 2. A pontosság, mint szerszámgép követelmény
A szerszámgépek fő követelményei közé tartozik a termelékenység, nagy mozgási
jellemző tartomány (például esztergánál fordulatszán), gazdaságos kivitel, jó hatásfok,
megmunkálási dimenziók száma és a nekünk ezen elemzésben legfontosabb: a
pontosság.
1. 3. A pontosságot befolyásoló tényezők
A pontosság alatt azt értjük mennyire tudja megközelíteni az ideális méretet a
megmunkálás a munkadarabon. Befolyásolják az eredményt a szerszámgéptől származó
tényezők: kialakuló rezgések, a főorsó alakváltozása mechanikai (merevség) és hő
(hőtágulás) okozta forrásokból, főorsó munkatér felé kinyúló részének geometriai
pontossága, csapágyak játéka, felfogási felületek geometriai pontossága, szerszám
kialakítás, kopás és egyéb szerszámhoz köthető eltérés okozók (élrátét, alakváltozás
stb.), CNC gép esetén program helyes beállítása (koordináták) stb.
6
A munkadarabhoz köthető pontosság befolyásoló tényezők az előgyártmány felfogási
felületének pontossága, megmunkálás okozta utólagos alakváltozások (például titánnál
az anyag „feldagad” a megmunkálás hatására ezért többször kell megmunkálni a
felületet).
A szerszámgép és a munkadarab egyenként rendelkezik olyan eltérés okozókkal, amiket
a másik fél ki tud javítani, mint nem elegendő maximális fordulatszám: ilyenkor nem
biztos, hogy tudunk keményfém szerszámot alkalmazni, kevésbé „problémás”
munkadarab anyagokat kell alkalmaznunk, vagy ha pont a munkadarab anyaga nehezen
megmunkálható, kialakítása miatt felfogása nehézkes, akkor a szerszámgép
adottságainak kell jobbnak lennie, hogy ez ne jelentsen gondot.
Továbbá eltérést okozhat külső tényező is: az előgyártmány rossz felfogása a dolgozó
által, a CNC program írásakor nem gondol a személy minden eshetőségre (sorja,
szerszám korrekció).
Mi a főorsó mechanikai okokból eredő alakváltozásait elemezzük, a főorsó merevségét.
1. 4. A főorsó merevségét befolyásoló tényezők
Amikor a főorsó merevségéről beszélünk, arra gondolunk, hogy az egyes pontjai
mekkora mértékben mozdulnak el mechanikai hatásokra, a tengely vonala mekkora
mértékben szenved el szögelfordulást a vizsgálati síkra merőleges tengely körül. Ezen
mechanikai hatások forrása lehet a főorsó előtti tengelyről fogaskerékkel beérkező
nyomaték és erő, illetve a megmunkálás terébe kivezetett részre visszaható forgácsolási
erők és nyomatékok.
7
2. Jellemző erők és azok leküzdésére jellemző csapágyak
A behatások ellen különféle csapágyakkal biztosítjuk az alakváltozás mérsékeltségét (1.
ábra). Főként radiális irányú erőhatásokról beszélhetünk, de jelen vannak axiális irányú
erők is a főorsó vonalán. Egyes csapágyak alkalmasabbak axiális erők felvételére,
ilyeneket szoktunk alkalmazni a vezetőcsapágy szerepében, más csapágyak, mint a
legtöbb hengergörgős csapágy, alkalmatlanok axiális irányú erők leküzdésére. Láthatjuk
tehát, hogy jelentős mértékben megszabják a csapágyazás típusát a főorsóra ható erők.
1. ábra. A főorsó merevségének növeléséhez több csapággyal is megtámasztják [1].
Ezeket az erőket viszont az határozza meg, hogy a főorsót milyen módon hajtjuk meg és
a szerszámgép milyen típusú, mennyire jellemző a megmunkálási módjára az egyes
irányú erők. Ha helyezünk egy jobbsodrású koordináta rendszert a főorsóra, amiben a Z
tengely párhuzamos a főtengely vonalával, akkor egy ferde fogazatú fogaskerekes
meghajtás esetén a koordináta rendszer mind három irányában jelenik meg erő
komponens valamekkora mértékben, az X, Y irányú erőkomponenseket radiális irányú
erőknek besorolva, a Z irányú erőkomponenst axiálisnak.
Ezenkívül a megmunkálási térből a főorsóra visszaható erő is lehet axiális és radiális:
esztergára és palást köszörűre jellemzőbb a kisebb axiális irányú erő és nagyobb radiális,
míg marógépre és homlok köszörűre jellemzőbb a nagyobb axiális irányú erő.
Mi azonban a főorsó részeinek radiális irányú elmozdulását vizsgáljuk, amit az axiális
irányú erők nem befolyásolnak, így azokat csak a csapágyazás fontossága miatt figyeljük
meg. Befolyásolja még a radiális irányú elmozdulást a csapágy játéka is, illetve a
csapágyakkal érintkező felületek megmunkálásának pontossága (2. ábra).
8
2. ábra. Csapágyazott alkatrészek illesztése.
Korábban említve voltak, hogy az egyes irányú erőket milyen csapágyak képesek
felvenni. Míg egy a tengellyel párhuzamos görgőjű hengergörgős csapágyak tényleg nem
alkalmasak axiális irányú erők felvételére, egy beálló hengergörgős csapágy vagy
kúpgörgős csapágy már alkalmas [3]. Ezenkívül a golyóscsapágyak is képesek
tengelyirányú erők felvételére, de ha nem elegendő mértékben, akkor beálló
golyóscsapágy alkalmazható. Ezenkívül vannak axiális golyóscsapágyak, illetve
hengergörgős csapágyak, amik alkalmatlanok radiális irányú erők felvételére, de
tengelyirányúra annál inkább.
1. táblázat. Csapágyak terhelhetősége [2].
Radiális teherbírás
közepes közepes közepes nagy nagyon
nagy nagy nincs
Axiális teherbírás
kicsi nagy
1 irányú nagy közepes nincs nagy
nagyon nagy
9
3. Szerszámgépekre jellemző paramétertartományok
3. 1. Esztergák jellemző paramétertartományai
Az esztergáknál fontos tényező a fordulatszám, előtolás, teljesítmény és maximális
elérhető nyomaték. Ezek olyan változatosak, mint az eszterga típusok: eltérő lehet
egyetemes esztergánál, CNC esztergáknál és megmunkáló központoknál, karusszel
esztergánál, nagysebességű forgácsolásra tervezett esztergáknál, ultraprecíziós
forgácsolásra tervezett esztergáknál és egyéb változatoknál.
Néhány példa esztergák paraméter tartományaira híres szerszámgép gyártó cégek
termékeiből:
a.) DMG CLX 350 CNC eszterga
b.) DMTG 6130 i CNC eszterga
3. ábra. Példák eszterga megmunkáló központokra [4][5].
A 3. ábra látható DMG márkájú eszterga maximális teljesítménye 11 kW, ez a
tulajdonsága megegyezik a DMTG márkájú esztergáéval. A DMTG márkájú esztergának
viszont a főorsó fordulatszám tartománya csak 40 − 1000 𝑓𝑜𝑟𝑑𝑢𝑙𝑎𝑡
𝑚𝑖𝑛, míg a DMG
márkájúnak akár 5000 𝑓𝑜𝑟𝑑𝑢𝑙𝑎𝑡
𝑚𝑖𝑛 is lehet. Látható, hogy a motornak és a főhajtóműnek
köszönhetően nagy eltérés lehet a különböző kaliberű szerszámgépeknél. Annak
ellenére, hogy a nagysebességű forgácsolásra készült esztergáknak van a legnagyobb
kerületi sebességük, nem feltétlen nekik van a legnagyobb forgácsolóerejük, mivel igen
kicsi fogásvétellel működnek és tárcsa jellegű alkatrészek megmunkálására alkalmasak
csak. A tárcsajellegű alkatrészek viszont azt is jelentik, hogy nagyobb kerületi sebesség
mellé kisebb fordulatszám is elég, mert a megmunkált rész úgy is óriási sebességgel
találkozik a munkadarabbal. Az sem egyértelmű, hogy mekkorának számít a
nagysebesség forgácsolásnál, szakirodalmanként változnak a tartományok határai.
10
4. ábra. Az egyes szerszámgépek forgácsolási sebességének tartományai különböző ezzel foglalkozó egyén szerint.
Az alsó skála mutatja a m/s –os mértékeket [6].
Az 4. ábra láthatjuk, hogy a diagramok 𝑚
𝑠-ban vannak megadva. Említettük, hogy a
nagysebességű forgácsolás csak tárcsa jellegű alkatrészek esetén alkalmazható. Ez azt
jelenti, hogy egy 500 mm-es átmérőjű munkadarabon 100 𝑚
𝑠-os forgácsolási sebesség
megfeleltethető 100
𝑚
𝑠
0,5 𝑚 ·𝜋= 63,662
1
𝑠= 3819
1
min -es fordulatszámnak. Ez a
fordulatszám nem túl nagy, de a munkadarab megmunkált felületének pontjainak relatív
mozgása a szerszámhoz képest mégis nagy. Ha a munkadarabon befelé haladunk ez a
kerületi sebesség csökken, ezért szükséges lehet a fordulatszám további növelése, ami
egy ekkora méretű munkadarabnál nem egyszerű feladat.
11
3. 2. Marógépek jellemző paramétertartományai
Míg az esztergánál jellemzően a munkadarab mozgását hozta létre a főorsó, addig a
marógépeknél a szerszám mozgását valósítja meg. A mozgasd a kisebbet elve szerint ez
előnyös, azonban az összetett mozgások megbonyolíthatják a helyzetet. A maró
szerszáma általában bonyolultabb, összetettebb, több éllel is forgácsolhat egyszerre.
Emiatt a forgácsolóerő nagyobb mértékű lehet, mint egyéb megmunkálási
módszereknél.
Néhány példa marógépek paraméter tartományaira híres szerszámgép gyártó cégek
termékeiből:
a.) DMG DMU 50 3rd Generation
b.) DMTG XD Series Vertical CNC
Milling Machine
5. ábra. Példák marógépekre [7][8].
Az 5. ábra bemutatott DMG márkájú marógép 35 kW teljesítménnyel képes üzemelni a
DMTG 11 kW-os teljesítményével szemben és a DMTG marógép főorsója így csak
8000 𝑓𝑜𝑟𝑑𝑢𝑙𝑎𝑡
𝑚𝑖𝑛-re képes a DMF 20000
𝑓𝑜𝑟𝑑𝑢𝑙𝑎𝑡
𝑚𝑖𝑛-ével szemben. Mint az esztergánál, itt is
hasonló adatokkal találkozhatunk. A 4. ábra visszatekintve látni lehet, hogy
marógépeknél a nagysebességű forgácsolás legfeljebb 70 𝑚
𝑠 –os forgácsolási sebességet
mutat a szerszámon. A nagysebességű marásnál a szerszám igen kicsi, 6 mm és 16 mm
közé tehető.
12
3. 3. Köszörűgépek jellemző paramétertartományai
A köszörűgépek főleg befejező megmunkálásra használatosak, de egy mértékig
nagyolásra is alkalmasak. A főorsó jellemzően a munkadarabot hajtja meg köszörülésnél,
a szerszám mozgását különálló egység valósítja meg. A fogásmélység igen kicsi, de nagy
erővel kell a köszörűkorongot a felülethez nyomni, ezért a passzív erő nagy. A kicsi
fogásmélység jelentéktelen axiális irányú erőt eredményez palást köszörülést
feltételezve. Homlokköszörűnél axiális irányba ad át erőt, radiálisan nem terheli a
korong a munkadarabot.
Az utóbbi eset számunkra kevésbé érdekes feltéve, hogy kis karon adódik át a felületről
a nyomaték homlokfelület köszörülésekor, de a palástfelületnél a nagy radiális irányú
erő jelentősen terhelheti a főorsót, eltorzulást eredményezve a munkadarabban a
megmunkálás során.
Néhány példa köszörűgépek paraméter tartományaira híres szerszámgép gyártó cégek
termékeiből:
a.) Studer External cylindrical grinding machine S121 Radius
b.) Mikrosa Kronos dual
6. ábra. Példák köszörűgépekre [9][10].
A 6. ábra látható Studer márkájú köszörűgép 3 kW teljesítménye mellett képes 1 −
1500 𝑓𝑜𝑟𝑑𝑢𝑙𝑎𝑡
𝑚𝑖𝑛 tartományban működtetni a fóorsóját, míg a Mikrosa márkájúnak 12 kW
maximális teljesítménnyel az 5 − 300 𝑓𝑜𝑟𝑑𝑢𝑙𝑎𝑡
𝑚𝑖𝑛 elérhető mindössze.
13
4. Merevség számítása
A főorsó jellemzően a legnagyobb átmérőjű tengely a hajtóműben, mivel azt terhelik a
legjobban mechanikai igénybevételek. A merevség és pontosság biztosítása céljából
több ponton is csapágyazzák a főorsókat, mint a többi tengelyen, ahol inkább a hatásfok
leromlása miatt kell aggódni. A főorsó házból kivezetett részét olyan kúp illesztéséhez
tervezik, ami jellemző az adott szerszámgépre. A főorsó tervezésekor ügyelni kell arra,
hogy mivel többnyire a kivezetett résznek van a legnagyobb átmérője, csak egy irányból
szerelhető a főorsó. A bázis ez az átmérőhöz tartozó felület lesz, ami azt jelenti, hogy az
erre felfektetett elemek száma nagyobb lesz, pontatlanságuk összeadódik. Ez is
drágábbá teszi ezen rész kialakítását. Ezenkívül a főorsó átmérőjét nem szabad nagyobb
beszúrásokkal gyengíteni. Könnyíti a tervezést, hogy csapágy választásakor nem kell
annyira tartani azok élettartamától, mert az ott előforduló csapágy méretek és a több
csapágyas támasztás miatt messze felülmúlják a többi tengely csapágyainak
élettartamát. Ezenkívül előforduló kialakítások még főorsókon a reteszhornyok és külső
menetek is hornyos csapágyanyákhoz.
Az erők és nyomatékok okozta energiák és a Betti tétel segítségével állapítjuk meg, hogy a főorsó vizsgált pontja mekkora mértékben hajlik le [11]. A Betti tétel 1-es és 2-es erőrendszerekbe osztja a nyomatékokat és erőket, amikkel hat a két rendszer egymásra, majd kiszámolja az említett erők és nyomatékok okozta elmozdulások és szögelfordulásokkal a munkát. Nekünk viszont nem ismert az elmozdulás, se a szögelfordulás, ezért a munka megállapításához az energiaváltozásokra lesz szükségünk.
𝑊11 =1
2· ∑[𝐹𝑖
(1)⃑⃑ ⃑⃑ ⃑⃑ ⃑𝑛
𝑖=1
· 𝑢𝑖(1)⃑⃑ ⃑⃑ ⃑⃑ ⃑
+ 𝑀𝑖(1)⃑⃑ ⃑⃑ ⃑⃑ ⃑⃑
· 𝛹𝑖(1)⃑⃑ ⃑⃑ ⃑⃑ ⃑⃑
]
𝑊12 = ∑[𝐹𝑖(1)⃑⃑ ⃑⃑ ⃑⃑ ⃑
𝑛
𝑖=1
· 𝑢𝑖(2)⃑⃑ ⃑⃑ ⃑⃑ ⃑
+ 𝑀𝑖(1)⃑⃑ ⃑⃑ ⃑⃑ ⃑⃑
· 𝛹𝑖(2)⃑⃑ ⃑⃑ ⃑⃑ ⃑⃑
]
𝑊22 =1
2· ∑[𝐹𝑖
(2)⃑⃑ ⃑⃑ ⃑⃑ ⃑𝑛
𝑖=1
· 𝑢𝑖(2)⃑⃑ ⃑⃑ ⃑⃑ ⃑
+ 𝑀𝑖(2)⃑⃑ ⃑⃑ ⃑⃑ ⃑⃑
· 𝛹𝑖(2)⃑⃑ ⃑⃑ ⃑⃑ ⃑⃑
]
𝑊12 az 1-es rendszerről a 2-es rendszerre ható erők (𝐹𝑖(1)⃑⃑ ⃑⃑ ⃑⃑ ⃑
) és nyomatékok (𝑀𝑖(1)⃑⃑ ⃑⃑ ⃑⃑ ⃑⃑
) okozta
energia változás mértéke, 𝑢𝑖(2)⃑⃑ ⃑⃑ ⃑⃑ ⃑
az első erőrendszer okozta elmozdulások és 𝛹𝑖(2)⃑⃑ ⃑⃑ ⃑⃑ ⃑⃑
az első erőrendszer okozta szögelfordulások a második erőrendszerben. 𝑊11 , 𝑊21 és 𝑊22 ugyanígy értendő.
𝑊𝐾𝐴 = 𝑊11 + 𝑊12 + 𝑊22
𝑊𝐾𝐵 = 𝑊22 + 𝑊21 + 𝑊11
𝑊𝐾𝐴 és 𝑊𝐾
𝐵 a külső erők munkájának összege, a különbség köztük, hogy milyen sorrendben lettek az erőrendszerek erői és nyomatékai a másik (vagy saját) erőrendszerre helyezve. Akármilyen sorrendben helyeződnek egymásra az erőrendszerek, a végeredmény meg kell, hogy egyezzen, ezért a kettő értéke is azonos kell, hogy legyen:
14
𝑊𝐾𝐴 = 𝑊𝐾
𝐵
Így pedig az egymásra ható erőrendszerek munkája is megegyezik:
𝑊12 = 𝑊21 = 𝑈12 = 𝑈21
Az energia változását a következőképpen számolhatjuk:
𝑈 = ∫(𝑁(1) + 𝑁(2))
2
2 · 𝐴 · 𝐸(𝐿)
𝑑𝑠 + ∫(𝑀ℎ1
(1)+ 𝑀ℎ1
(2))2
2 · 𝐼1 · 𝐸(𝐿)
𝑑𝑠 + ∫(𝑀ℎ2
(1)+ 𝑀ℎ2
(2))2
2 · 𝐼2 · 𝐸(𝐿)
𝑑𝑠
+ ∫𝐾1̃ · (𝑇1
(1)+ 𝑇1
(2))2
2 · 𝐴 · 𝐺(𝐿)
𝑑𝑠 + ∫𝐾2̃ · (𝑇2
(1)+ 𝑇2
(2))2
2 · 𝐴 · 𝐸(𝐿)
𝑑𝑠 + ∫(𝑀𝐶
(1)+ 𝑀𝐶
(2))2
2 · 𝐼𝐶 · 𝐺(𝐿)
𝑑𝑠
𝑈12 = ∫𝑁(1) · 𝑁(2)
𝐴 · 𝐸(𝐿)
𝑑𝑠 + ∫𝑀ℎ1
(1)· 𝑀ℎ1
(2)
𝐼1 · 𝐸(𝐿)
𝑑𝑠 + ∫𝑀ℎ2
(1)· 𝑀ℎ2
(2)
𝐼2 · 𝐸(𝐿)
𝑑𝑠 + ∫𝐾1̃ · 𝑇1
(1)· 𝑇1
(2)
𝐴 · 𝐺(𝐿)
𝑑𝑠
+ ∫𝐾2̃ · 𝑇2
(1)· 𝑇2
(2)
𝐴 · 𝐸(𝐿)
𝑑𝑠 + ∫𝑀𝐶
(1)· 𝑀𝐶
(2)
𝐼𝐶 · 𝐺(𝐿)
𝑑𝑠
Ahol U12 az energia változása, miközben az egyes rendszer hat a kettes rendszerre. N, T, Mh és Mc rendre a húzóerők, nyíróerők, hajlítónyomatékok és csavarónyomatékok, A, E, K, G, I és IC anyag és geometria jellemzők.
Nekünk a nyíróerő és a hajlítónyomaték elegendő, mert csak azok okoznak a vizsgált irányban elmozdulást és a nyíróerőnek csak az általa okozott hajlítónyomatékát vesszük figyelembe, mert a közvetlen okozott energia elhanyagolhatóan kicsi.
Az integrálásokat a Simpson formulával végezzük el, ami a következőképpen néz ki [11]:
𝑈12 = ∑[li6
⋅ (
𝑛
𝑖=1
𝑓𝑏𝑖(1)
⋅ 𝑓𝑏𝑖(2)
+ 4 ⋅ 𝑓𝑘𝑖(1)
⋅ 𝑓𝑘𝑖(2)
+ 𝑓𝑗𝑖(1)
⋅ 𝑓𝑗𝑖(2)
)]
Ahol U12 az energiaváltozás, li az i. szakasz hossza a nyomatéki ábrán, 𝑓𝑏𝑖(1)
az egyes
erőrendszer erői és nyomatékai okozta hajlítónyomatéki ábra bal oldali pontjának
értéke, 𝑓𝑘𝑖(1)
a középsőé és 𝑓𝑗𝑖(1)
a jobboldalinak, ahogy a 7. ábra is mutatja. Ennek
megfelelően 𝑓𝑏𝑖(2)
, 𝑓𝑘𝑖(2)
és 𝑓𝑗𝑖(2)
rendre megegyeznek a kettes erőrendszerre.
7. ábra. Példa hajlítónyomatéki ábrára és az említett 3 pontra
15
5. A főorsó merevség számító program ismertetése
Eleinte Visual Basicben készítettem a programot, de kiderült, hogy a grafika
megvalósítása nagyon nehézkes lett volna a Visual Basic változóinak természete miatt.
A nyomatéki ábrák megrajzolásához minden egyes vonalhoz több változó kellett volna a
végpontjaik megadásához és mivel a cél korlátlan mennyiségű erő és nyomaték, ezért le
kellett volna foglalni több száz változót csak erre és mivel minden változónak más neve
van, ezért minden vonal megrajzolását külön ki kellett volna írni egyenként.
Ezzel ellentétben a MATLAB vektorokkal és mátrixokkal dolgozik, amikben elhelyezhetők
könnyedén a vonalak pontjaihoz szükséges értékek és mivel csak azt kell léptetni, hogy
a mátrix hányadik sorának hányadik oszlopából használjuk fel a számot, ezért egyetlen
for ciklussal kirajzolhatjuk a teljes nyomatéki ábrát. A MATLAB lett a végső választás.
5. 1. Felhasználói felület
Itt történik az adatbekérés, nyomatéki ábra és főorsó megjelenítés, illetve a lehajlási
érték kiírása.
8. ábra. Adatok megadása a felhasználói felületen
A 8. ábra láthatjuk a felhasználói felületet. A kényszer (csapágy) fülben lehet megadni az
elmozduló (görgő) csapágy és a nem elmozduló (csukló) csapágyak helyét, illetve
lehetőség van még egy 3. csapágy elhelyezésére is ami úgyszintén elmozduló. Az 1. görgő
és a csukló megadása szükséges, a 2. görgő opcionálisan adható meg, a program tud 2
csapággyal is számolni.
A Nyomaték fülben lehet megadni a koncentrált hajlító nyomatékok helyét és X illetve Y
értéküket. Alatta lehet törölni a Nyomatékok törlése gombbal az eddig megadott
nyomatéki értékeket. Ez szükséges, mivel a nyomatékok és erők értékei vektorokba
mennek és nehézkes utólag módosítani őket. Utólagos módosításhoz meg kéne
16
jeleníteni az értékeket a felhasználónak, aminek vagy csak külön ablakban lenne hely,
vagy a grafikus megjelenítésnek kéne interaktívnak lennie, amit kirajzol a program és ott
lehetne kiválasztani a módosítandó értékeket, ami nehézzé válhat, ha túlzsúfolt az ábra.
Az Erő fülben lehet megadni a nyíróerők helyét és X illetve Y értéküket. Alatta lehet
törölni az Erők törlése gombbal az eddig megadott erőket. Csak a nyomatékok és erők
igényelnek ilyen funkciót, a többi bekért adat utólag felülíródik, ha ismét megadjuk őket.
A Tengely adatok fülben meg lehet adni a tengely geometriai adatait: hossz, külső, belső
átmérő és anyagtulajdonságként a rugalmassági modulus. Ezek közül csak a belső
átmérő megadása nem kötelező. Ha tömör tengellyel számol a felhasználó, akkor a
program utólag 0-ra állítja a belső átmérő értékét.
A vizsgálandó hely gombbal adjuk meg, hogy melyik részére írja ki a tengelynek a
lehajlását. Ennek a megadása is szükséges.
9. ábra. Nyomatéki ábra és eredmények
Az adatok megadása utána a Frissítés gombot megnyomva az ablak tetején kiírja a
program X és Y irányokban az elmozdulást és megrajzolja a tengelyt az X-Z és Y-Z síkokon
és a hozzá tartozó nyomatéki ábrákat ahogy a 9. ábra láthatjuk. A nyíróerő ábrák
megrajzolása még lehetőség lett volna és nem is jelentett volna nehézséget, de az ablak
így is túlzsúfolt, ezért ez a funkció egyelőre nem lett hozzáadva a programhoz. A
nyomatéki ábrák az értékeket a rajzablak körül megjelenített mértékegységek szerint
írja ki: Nm és m-ben. A tengely rajza m-ben írja a távolságokat a vízszintes tengelyen és
a nyomatékok és erők mellett kiírja az értékeket.
17
5. 2. Adatok bekérése
Az említett fülek és gombok megnyomására kis ablakok ugranak fel, amikben meg
lehet adni az adatokat (10. ábra). Minden mező kitöltése szükséges, a 0 értékűek is. Az
ablakokban megadott adatok a programban globális változókba mennek, amik utána
elérhetőek más funkciókban is. Az erők és nyomatékoknál 3 adat megadása szükséges,
míg az összes többinél 1, ezért a globális változókba töltésük máshogy történik.
10. ábra. Adatok megadása
Az olyan változók, amik csak egy értéket igényelnek, mint az 1. görgő helye, közvetlen a
globális változóba töltődnek. Ezt az értéke utólag string (szöveg alapú) típusból double
típusba konvertáljuk és ha szükséges, más mértékegységbe átszámoljuk, mint itt a görgő
helyénél: mm-ben kéri az ablak a megadást a felhasználó kényelméért, de m-ben számol
vele utólag.
function gorgo_hozzaadas1_Callback(hObject, eventdata, handles) global G_H1 G_H1 = inputdlg('Görgõ helye [mm]','Görgõ megadása', [1 40]); G_H1=str2double(G_H1); G_H1=G_H1/1000;
Az erők és nyomatékok három adata egyetlen változóba megy, most például véve az erő
megadását a rero változóba. Az irero változó számolja, hogy hányadik alkalommal adnak
meg éppen erőt, ezt az információt felhasználva lépteti, hogy éppen a hányadik
oszlopába töltse a vektoroknak az adatot és utólagos számolásoknál is előkerül. Ha a
rero változó nem üres (helyesen adta meg a felhasználó), akkor értékét először string
(szöveg alapú) típusból double típusúba konvertálja, majd a numerikussá vált értéket
cella típusúvá alakítja és beletölti a rerofeloszt változóba. Majd a rerofeloszt értékeit
három vektorba tölti, mindegyiknek az irero-adik oszlopába. Az F_RH változóba az erő
helye kerül, az F_RXM változóba az X irányú értéke és az F_RYM változóba az Y irányú
értéke.
function rero_hozzaadas_Callback(hObject, eventdata, handles)
18
global F_RH global F_RXM global F_RYM global irero prompt = {'Radiális erõ helye [mm]','Radiális erõ x irányú komponense
[N]','Radiális erõ y irányú komponense [N]'}; dlg_title = 'Radiális irányú erõ megadása'; num_lines = [1 45;1 45;1 45]; rero = inputdlg(prompt,dlg_title,num_lines); if isempty(rero) else rerofeloszt = num2cell(str2double(rero)); if isempty(irero) irero=1; else irero=irero+1; end [F_RH(1,irero),F_RXM(1,irero),F_RYM(1,irero)] = rerofeloszt{:}; F_RH(1,irero)=F_RH(1,irero)/1000; end
A nyomatékok és erők törlésére szánt gombok törlik a hozzájuk tartozó vektorok
értékeit.
function Clear_F_Callback(hObject, eventdata, handles) global F_RH global F_RXM global F_RYM global irero clear F_RH clear F_RXM clear F_RYM clear irero
5. 3. A számítások
A frissítés gomb mögött rejlik minden szilárdságtani számítás, grafika és a program 75-
80%-a. A program mielőtt nekiállna nagyobb számolásoknak ellenőrzi, hogy minden
helyesen meg lett-e adva. Ebbe beletartozik az is, hogy nem hiányoznak-e kötelezően
megadandó értékek és a megadott értékek a valóságban is lehetségesek-e. Utóbbi
ellenőrzés azt figyeli, hogy minden csapágy a tengelyen van-e, a tengely hossza pozitív
értékű-e, a rugalmassági modulus pozitív értékű-e és ugyanazon a helyen van-e két
csapágy. Mivel egy if-elseif funkció sorozattal van minden ellenőrizve, ezért egyszerre
csak egy figyelmeztetés fog felugrani hiba esetén, nem elárasztva a képernyőt (11. ábra).
if ~isempty(G_H2) if G_H2<0 || G_H2>L f = errordlg('Egy görgõ vagy csukló nincs a tengelyen.','Hibás
megadás'); return end end if ~isempty(G_H2)
19
if G_H1 == G_H2 || CS_H==G_H2 f = errordlg('Két görgõ vagy egy görgõ és csukló helye
megegyezik.','Hibás megadás'); return end end if isempty(vh) f = errordlg('A hely, ahol a lehajlás számítása megtörténne nincs
megadva.','Hibás megadás'); elseif isempty(e) f = errordlg('Nincs rugalmassági modulus megadva.','Hibás
megadás'); elseif isempty(L) f = errordlg('Nincs a tengely hossza megadva.','Hibás megadás'); elseif isempty(dk) f = errordlg('Nincs a tengely küldõ átmérõje megadva.','Hibás
megadás'); elseif isempty(G_H1) f = errordlg('Az elsõ görgõ megadása szükséges.','Hibás megadás'); elseif isempty(CS_H) f = errordlg('A csukló megadása szükséges.','Hibás megadás'); elseif L<=0 f = errordlg('A tengely nem lehet 0 mm vagy kevesebb.','Hibás
megadás'); elseif G_H1<0 || CS_H<0 || G_H1>L || CS_H>L f = errordlg('Egy görgõ vagy csukló nincs a tengelyen.','Hibás
megadás'); elseif G_H1 == CS_H f = errordlg('Két görgõ vagy egy görgõ és csukló helye
megegyezik.','Hibás megadás'); elseif dk <= db f = errordlg('A külsõ átmérõ nagyobb kell legyen, mint a
belsõ.','Hibás megadás'); elseif e<=0 f = errordlg('A rugalmassági modulus nagyobb legyen mint
0.','Hibás megadás');
11. ábra. Hibaüzenet
Ha minden adat rendben van a program megkezdi a számításokat. Elsőként ellenőrzi,
hogy kettő vagy három csapágy van-e és megnézi azok milyen sorrendben helyezkednek
el a tengelyen. Két csapágynak betölti őket a H1 és H2 változókba ezen sorrendben. Ha
három csapágy van, akkor a baloldali csapágyat a H1-be, a jobboldali csapágyat a H2-be
és a középső csapágyat a H3-ba tölti. A H1, H2 és H3 változókkal történnek utólag a
számítások. Két csapágynál felveti a két lehetőséget ahogy elhelyezkedhetnek a
csapágyak és a megfelelőt kiválasztja, háromnál viszont egy vektorba helyezi a három
20
csapágy helyét, növekvő sorrendbe rendezi őket és ezen sorrendben beletölti a
változókba.
elseif isempty(G_H2) if CS_H>G_H1 H1= G_H1; H2= CS_H; elseif G_H1>CS_H H1= CS_H; H2=G_H1; end else
HH=[G_H1, G_H2, CS_H]; HH = sortrows(HH' , 1'); HH = HH'; disp(HH) H1=HH(1,1); H2=HH(1,3); H3=HH(1,2); end
Ezekután nyomatéki egyenletekkel kiszámolja, hogy a csapágyakon mekkora erők
vannak. Még most úgy kezeli a három csapágyas megadásokat, mintha kettő lenne csak,
majd utólagos számításokkal tudja megmondani a középső csapágyon az erőt. Előjelre
figyelve sorban összeadja az erők és erőkarok szorzatát és beletölti a sumF_RXM és
sumF_RYM változókba. Közben a sumFX és sumFY változókban összeadja az erőket és a
végén ezek segítségével kiszámolja a H2 helyen lévő csapágyra az erőt és egy
erőegyensúllyal a H1 csapágyra, beletöltve a H2_EX, H2_EY, H1_EX és H1_EY változókba
az eredményt, ahol H1_EX a baloldali csapágyon az X irányú erő mértéke és H1_EY az Y
irányú. H2_EX és H2_EY ugyanígy értendő, csak a jobboldali csapágyra.
for a = 1:irero sumFX = sumFX + F_RXM(1,a); sumFY = sumFY + F_RYM(1,a); if F_RH>H1 sumF_RXM = sumF_RXM + F_RXM(1,a)*(F_RH(1,a)-H1); sumF_RYM = sumF_RYM + F_RYM(1,a)*(F_RH(1,a)-H1)*-1;
else sumF_RXM = sumF_RXM + F_RXM(1,a)*(H1-F_RH(1,a))*-1; sumF_RYM = sumF_RYM + F_RYM(1,a)*(H1-F_RH(1,a)); end end H2_EX = -1*(sumF_RXM+sumNY_HXM)/(H2-H1);
H1_EX = -1*(H2_EX + sumFX); H2_EY = (sumF_RYM+sumNY_HYM)/(H2-H1); H1_EY = -1*(H2_EY + sumFY);
Miután meg lettek állapítva az erők a csapágyakon a program betölti őket egy A mátrixba
a felhasználó által megadott erőkkel együtt és sorrendbe rendezi őket a sortrows()
21
utasítással. Az A mátrix első sora az erők helye, a második sora az erők X komponense
és a harmadik sora az erők Y komponense. Mivel az erők megadása nem kötelező, ezért
csak akkor töltjük be őket az A mátrixba, ha a felhasználó helyezett erőt a tengelyre. Ha
nem is helyezett, attól még a nyomatékok miatt lesznek erők a csapágyakon.
if irero>0 A = [F_RH ; F_RXM ; F_RYM]; end B = [H1 ; H1_EX ; H1_EY]; C = [H2 ; H2_EX ; H2_EY]; if irero>0 A = [A , B , C]; else A = [B , C]; end A = sortrows(A' , 1'); A = A';
A mostani állapotában, ha nyomatékot számolnánk az A mátrixból, akkor hibás
eredményt kaphatunk, ha a felhasználó ugyan arra a helyre kétszer adott meg erőt vagy
az egyik erőt egy csapágyra helyezte. Ezekben az esetekben össze kell vonni az azonos
helyen lévő erőket és megszűntetni az ilyen módon felesleges oszlopokat az A
mátrixban. Az indh változó figyeli a mátrix hosszát míg az ind változót léptetjük,
ellenőrizve, hogy az éppen vizsgált erő helye megegyezik-e az előzővel. Az index hibák
elkerülése érdekében külön kell kezelni az utolsó erő ellenőrzését, mert a program nem
tudja az oszlop kivételekor az utolsó utáni oszlopot utána tenni.
[~,indh]=size(A); ind=2; disp(A) while ind<=indh if A(1,ind)==A(1,ind-1) A(2,ind-1)=A(2,ind-1)+A(2,ind); A(3,ind-1)=A(3,ind-1)+A(3,ind); if ind<indh A = [A(:,1:ind-1) A(:,ind+1:indh)]; else A = A(:,1:indh-1); end indh=indh-1; else ind=ind+1; end end
Ezen a ponton jön egy része a programnak, ami számolja a középső csapágyon az erőt.
Ha csak kettő csapágy van megadva ezt a részt teljesen kihagyja a program. Miután
ismertek az erők nekiállhatunk a nyomatéki ábra számításának. A nyomatéki ábrát olyan
módon készíti el a program, hogy végighalad a tartón minden erőt, koncentrált
nyomatékot és csapágyat figyelembe véve és minden egyes ilyen ponton készít az
22
E_HNYOM mátrixban egy oszlopot, amiben az első sor a helye a változásnak, a második
az X értéke a nyomatéki ábrának és a harmadik az Y értéke. Egyes esetekben ugyan azon
a helyen több oszlopot is létre kell hozni, mint koncentrált nyomatékoknál, mert ott egy
ugrás van a nyomatéki ábrában és ügyelni kell rá, hogy a megfelelő értékkel folytatódjon
a nyomatéki ábra a következő erőig vagy csapágyig (12. ábra).
12. ábra. Nyomatéki ábra
Az E_HNYOM mátrix a következő módon nézne ki a 12. ábra szerint:
0 0.5 0.5 1.25 2 0 12.5 112.5 131.25 0 0 6.25 -93.75 -84.375 0
Az E_HNYOM mátrix számítása két főbb részt tartalmaz. Először az erők okozta
hajlítónyomatékot veszi csak figyelembe a nyomatékok nélkül. A megadott erőket és a
csapágyak erőit sorban az A mátrixból előveszi. Az X komponensét az erőnek az adott
helyen hozzáadja a D változóhoz, az Y értékét pedig az F változóhoz. Ez azért szükséges,
mert figyelembe kell venni a korábbi erőket amikor a nyomatéki ábrát számoljuk az
erőkarukkal a nyíróerő ábra szerint. A számítás így folyik: az éppen számolt hely előtti
erők összegét összeszorozza az előző hely töréspontjától a jelenlegi hely töréspontjáig
tartó távolsággal.
23
13. ábra. Nyíróerőkből számítás
Amikor az éppen vizsgált hely előtti hely adataival akar számolni a program az első elem
esetén (ami a 13. ábra a 0 m-nél lévő csapágy) az A mátrix 0. oszlopát próbálná igénybe
venni, ami nem létezik. Ez hibát jelentene, ezért az első töréspontot külön megadjuk
előtte:
E_HNYOM(1,1) = A(1,2); E_HNYOM(2,1) = -1*(A(1,2)-A(1,1))*(A(2,1)); E_HNYOM(3,1) = -1*(A(1,2)-A(1,1))*(A(3,1)); D = A(2,1); F = A(3,1);
Ezenkívül az első erőt is betöltjük a D és F-be, ami biztosítja, hogyha megmaradt a D vagy
F változóban valamekkora érték korábban az nem fog számítási hibát okozni, amikor a
D vagy F előző értékéhez hozzáadjuk a következő erőt.
[~,c]=size(A); for a = 3:(c) D = D + A(2,a-1); F = F + A(3,a-1); E_HNYOM(1,a-1) = A(1,a); E_HNYOM(2,a-1) = E_HNYOM(2,a-2)-D*(A(1,a)-A(1,a-1)); E_HNYOM(3,a-1) = E_HNYOM(3,a-2)-F*(A(1,a)-A(1,a-1)); end
A for ciklus a harmadik elemtől indul, így a második erő okozta nyomatékot számolja és
a c. elemig halad, ami az A mátrix hossza és így az erők száma.
A nyíróerő ábrából számítás eredményét, ha kirajzolnánk akkor, a nyomatéki ábra vége,
feltéve, hogy a felhasználó adott meg koncentrált nyomatékokat, nem nullára menne
vissza a nyomatéki ábra végén ahogy kell nekünk, hanem pont akkora hibát mutatna
amekkora a koncentrált nyomatékok összege. Ezért is a következő lépés a koncentrált
nyomatékok beékelése az E_HNYOM változóba a megfelelő helyekre és az értékek
24
újraszámolása ennek megfelelően. Előtte viszont elő kell készíteni az E_HNYOM változó
elejét.
Az első kategóriába esnek azok az esetek, amikor a bal oldali csapágytól még balra
helyezkedik el erő és a felhasználó nem adott meg nyomatékokat vagy a bal csapágytól
balra helyezkedik el erő és nyomaték is és a legbalra lévő erő és a bal csapágy között
helyezkedik el a legbalra lévő nyomaték. Ekkor a nyomatéki ábra a megfelelő erő helyére
betesz egy töréspontot ami nullától kezdődik, mert innentől változik a nyomatéki ábra.
Ha ez a töréspont nem lenne megadva, akkor a tengely eleje maradna az első töréspont,
mintha ott lenne az első erő. Szükséges feltétel, hogy vagy nincs nyomaték, vagy van és
jobbra helyezkedik el az első erőtől, mert a program nyomatékok hiányában 0-ra állítja
az első nyomaték helyét, mértékét és számlálóját egy korábbi részen.
if min(F_RH)<H1 && ihnyom==0 && irero>0 || min(F_RH)<H1 &&
min(NY_HH)>min(F_RH) && ihnyom>0 && irero>0; null2=[min(F_RH);0;0]; E_HNYOM = [null null2 E_HNYOM(:,1:asd)];
A második kategóriába tartoznak azok az esetek, amikor nincs erő megadva és a legbalra
lévő nyomaték balra helyezkedik el a baloldali csapágytól, vagy a legbalra lévő erő jobbra
van az említett nyomatéktól és balra az első csapágytól. Ez az előző esettel megegyezik,
csak itt koncentrált nyomatékkal kezdjük a nyomatéki ábrát és nem erő okozta
nyomatékkal. Ekkor az első törési pont a nyomaték helye. Ezenkívül a program az el
változót 1-re állítja, ami szükséges lesz egy későbbi számításban egy feltétel
ellenőrzésére.
elseif min(NY_HH)<H1 && irero==0 && ihnyom>0 || min(NY_HH)<H1 &&
min(NY_HH)<min(F_RH) && irero>0 && ihnyom>0 null2=[min(NY_HH);0;0]; E_HNYOM = [null2 E_HNYOM(:,1:asd)]; el=1;
A harmadik kategória akkor teljesül, ha a bal csapágytól balra nincs se erő, se nyomaték.
Ekkor a töréspontnak a bal csapágytól kell kezdődnie, mert még lehet balra kilógó rúd.
else null2=[H1;0;0]; E_HNYOM = [null2 E_HNYOM(:,1:asd)]; end
Ezzel elő lett készítve az E_HNYOM mátrix eleje. A számítások sikeressége érdekében
meg kell adni az utolsó töréspontot is, ami a legjobbra lévő nyomaték vagy erő helyén
van és értéke 0, mert ennél a pontnál tér vissza a hajlító nyomatéki ábra nullára. Először
a legjobbra lévő erő helyét tölti be a lezarh változóba, majd, ha ettől jobbra talál
25
nyomatékot, akkor felülírja ennek helyével a változót és ha ez az érték még mindig balra
van a jobboldali csapágytól, akkor a csapágy helye lesz az utolsó töréspont.
[~,asd]=size(E_HNYOM); lezarh=max(F_RH); if lezarh<max(NY_HH) lezarh=max(NY_HH); end if lezarh<H2 lezarh=H2; end
lezar=[lezarh;0;0];
E_HNYOM = [E_HNYOM(:,1:asd) lezar];
Ezzel teljesen elő lett készítve az E_HNYOM mátrix a koncentrált nyomatékok
hozzáadásához. Ennek folyamata a következő módon fog kinézni: minden egyes
koncentrált nyomatékra megnézi a program, hogy melyik kategóriába esik. Ha talál
egyet, aminek megfelel a nyomaték helye, akkor az E_HNYOM mátrixot átszabja a
helyzetnek megfelelően. Hozzáad egy vagy több oszlopot a töréspontok szerint a
nyomatéki ábrában történő ugrások miatt. A folyamat egy while függvényben történik,
mert szükséges, hogy a léptetett változót változtathassuk a folyamat során. A b változó
dönti el, hogy éppen hányadik töréspontot és így hányadik oszlopát vetjük össze az
éppen vizsgált nyomatékkal. Ha nem teljesül egyik feltétel sem az éppen vizsgált
töréspontra, akkor eggyel növeli b-t a léptetéshez, viszont, ha teljesül és új
töréspontokat helyez el E_HNYOM-ban, akkor b értékét c+1-re kell állítanunk, hiszen
megtaláltuk a nyomaték helyét. Ebben az esetben nem kell tovább mennie a while
függvénynek ezzel a nyomatékkal, hanem kereshetjük a következő helyét. A c változó
azt mutatja meg, hogy milyen hosszú az E_HNYOM mátrix, ezért, ha beékelünk új
töréspontokat akkor c értékét is növelnünk kell az új töréspontok számával.
Az első kategóriába esik az az eset amikor az éppen vizsgált nyomaték helye megegyezik
az egyik töréspont helyével. Ez akkor történik meg amikor egy nyomaték azonos helyen
van egy erővel vagy egy csapággyal. Különleges eset, amikor az előkészített E_HNYOM-
ban már megadtuk a legbalra lévő nyomaték helyét. Emiatt szükséges az el változó,
hogyha megtalálja ebben az utasításban magát a nyomaték, akkor ne módosítsa
helytelenül utólag a mátrixot. Ez nem azt jelenti, hogy ekkor nem tesz semmit, mert az
előkészítéskor csak az első töréspont lett megadva, még nincs meg a következő
töréspont, ami koncentrált nyomaték okozta ugrás vége és a program ezen részének kell
létrehoznia az azután következő pontot is, aminek helye a következő erő vagy csapágy
helye és mértéke azonos az előzővel, mert ezen a szakaszon a hajlító nyomatéki ábra
értéke állandó. Ha az utoljára említett pont és a nyomaték között még egy koncentrált
nyomaték lenne, akkor a koncentrált nyomaték hozzáadási fázis második kategória fogja
azt figyelembe venni. A b<c feltétel azért szükséges, mert, ha az utolsó ponton van a
nyomaték, akkor azt elintézte az előkészítési fázisban.
26
14. ábra. Koncentrált nyomatékkal kezdés
A 14. ábra az 1-essel jelölt töréspont lett előkészítve az előkészítési fázis kettes
kategóriájával. A 2-es töréspont a nyomaték miatti ugrás eredménye és mivel a görgőn
találta a következő erőt ezért a 3-as pont lett a második töréspont amit hozzáadott az
E_HNYOM mátrixhoz ez a rész. A nyomatéki ábra többi részéhez is hozzáadja a beékelt
koncentrált nyomatékot egy for ciklussal kivéve az utolsót, mert azt megadtuk előre.
if E_HNYOM(1,b) == NY_HH(1,a) && b<c if el>0 E_HNYOM = [E_HNYOM(:,1:b) null null E_HNYOM(:,b+1:c)]; c=c+2; E_HNYOM(1,b+1)=NY_HH(1,a); E_HNYOM(2,b+1)=E_HNYOM(2,b)+ NY_HXM(1,a); E_HNYOM(3,b+1)=E_HNYOM(3,b)+ NY_HYM(1,a); if irero>0 if min(F_RH)<H1 && min(F_RH)>NY_HH(1,a) E_HNYOM(1,b+2)=min(F_RH); E_HNYOM(2,b+2)=E_HNYOM(2,b)+ NY_HXM(1,a); E_HNYOM(3,b+2)=E_HNYOM(3,b)+ NY_HYM(1,a); end end if H1<min(F_RH) || irero==0 E_HNYOM(1,b+2)=H1; E_HNYOM(2,b+2)=E_HNYOM(2,b)+ NY_HXM(1,a); E_HNYOM(3,b+2)=E_HNYOM(3,b)+ NY_HYM(1,a); end for f=(b+3):c-1 E_HNYOM(2,f)=E_HNYOM(2,f)+ NY_HXM(1,a); E_HNYOM(3,f)=E_HNYOM(3,f)+ NY_HYM(1,a); end b=c+1;
27
Hogyha viszont nem teljesül, hogy el>0 és így nem egy koncentrált nyomatékkal
kezdődik a nyomatéki ábra, hanem egy erővel, vagy a nyomaték olyan erőre esik, ami
előtt már volt erő és így nem állandó a nyomaték értéke, akkor nem szükséges az ugrás
utáni pont megadása miután azt egy másik kategória megadja. Itt elég csak az ugrás
végét hozzáadni és a jobbra lévő pontokhoz hozzáadni a koncentrált nyomatékot.
15. ábra. Koncentrált nyomaték utólag
A 15. ábra így csak az 1-es pont lesz hozzáadva az E_HNYOM mátrixhoz.
else E_HNYOM = [E_HNYOM(:,1:b) null E_HNYOM(:,b+1:c)]; c=c+1; E_HNYOM(1,b+1)=NY_HH(1,a); E_HNYOM(2,b+1)=E_HNYOM(2,b)+ NY_HXM(1,a); E_HNYOM(3,b+1)=E_HNYOM(3,b)+ NY_HYM(1,a); for f=(b+2):c-1 E_HNYOM(2,f)=E_HNYOM(2,f)+ NY_HXM(1,a); E_HNYOM(3,f)=E_HNYOM(3,f)+ NY_HYM(1,a); end b=c+1; end
A második kategória biztosítja, hogyha a jobb oldalt kilógó tengely utolsó eleme egy
koncentrált nyomaték, akkor a nyomatéki ábra értéke egy ugrás formájában végződjék
a 17. ábra szerint, ami a 16. ábra korrekciójának eredménye. Feltétel, hogy az éppen
vizsgált nyomaték helye azonos legyen a legnagyobb nyomaték helyével, különben
minden nyomaték esetén bemenne ebbe a kódrészbe, és ez a nyomaték a korábban
említett helyen legyen.
28
16. ábra. Ugrás nélkül
17. ábra. Ugrással
elseif NY_HH(1,a)==max(NY_HH) && max(NY_HH)>H2 &&
max(NY_HH)>max(F_RH) E_HNYOM = [E_HNYOM(:,1:c-1) null E_HNYOM(:,c:c)]; E_HNYOM(1,c)=NY_HH(1,a); E_HNYOM(2,c)=E_HNYOM(2,c-1); E_HNYOM(3,c)=E_HNYOM(3,c-1); c=c+1; b=c+1;
A harmadik kategória az az eset, amikor még nem az utolsó töréspontot vizsgáljuk. Itt
vizsgáljuk azokat az eseteket, amikor két töréspont közé esik a nyomaték. Ilyenkor nem
tudjuk olyan könnyen hozzáadni a koncentrált nyomatékot, mert szükséges, hogy
mekkora volt a nyomaték éppen azon a részen, ahol a nyomaték miatti ugrás
bekövetkezett. Ennek megállapításához használjuk a távolságokat és azok arányában
meg tudjuk mondani a nyomaték változását addig a pontig, ahol lesz a koncentrált
nyomaték. Ez lesz az első töréspont amit hozzáadunk, míg a második az ugrás
eredménye lesz a nyomatéki ábrában.
29
18. ábra. Koncentrált nyomaték két erő között
A 18. ábra 1-essel jelölt pont lesz, ahol tartott éppen a nyomatéki ábra amikor
megszakította a koncentrált nyomaték és a 2-es pont az ugrás eredménye. Ezekkel bővül
az E_HNYOM mátrix. Annak eldöntése, hogy ebbe a kategóriába esik-e a nyomaték úgy
történik, hogy először megnézi a program, hogy nem az utolsó töréspontot vizsgáljuk-e
éppen. Ennek feltétele, hogy b<c feltétel fennálljon, mert amikor az utolsó pontot
vizsgálnánk akkor azt próbálná megnézni a program, hogy az utolsó utáni elemtől
kisebb-e a nyomaték helye.
elseif b<c if E_HNYOM(1,b)< NY_HH(1,a) && E_HNYOM(1,b+1)>
NY_HH(1,a) E_HNYOM = [E_HNYOM(:,1:b) null null E_HNYOM(:,b+1:c)]; E_HNYOM(1,b+1)=NY_HH(1,a);
Itt átlagolja ki a program a nyomatékot: E_HNYOM(2,b+1)=E_HNYOM(2,b)+(NY_HH(1,a)-
E_HNYOM(1,b))/(E_HNYOM(1,b+3)-E_HNYOM(1,b))*(E_HNYOM(2,b+3)-
E_HNYOM(2,b)); E_HNYOM(3,b+1)=E_HNYOM(3,b)+(NY_HH(1,a)-
E_HNYOM(1,b))/(E_HNYOM(1,b+3)-E_HNYOM(1,b))*(E_HNYOM(3,b+3)-
E_HNYOM(3,b));
Itt adja hozzá az ugrást létrehozva a következő pontot: E_HNYOM(1,b+2)=NY_HH(1,a); E_HNYOM(2,b+2)=E_HNYOM(2,b+1)+ NY_HXM(1,a); E_HNYOM(3,b+2)=E_HNYOM(3,b+1)+ NY_HYM(1,a); c=c+2; for f=(b+3):c-1 E_HNYOM(2,f)=E_HNYOM(2,f)+ NY_HXM(1,a); E_HNYOM(3,f)=E_HNYOM(3,f)+ NY_HYM(1,a); end b=c+1; else b=b+1; end
30
Az E_HNYOM mátrix kiegészítése után egy for ciklussal ismét hozzáállítja a nyomatéki
ábra többi részét a most hozzáadott nyomatéknak megfelelő helyzethez.
Miután a while függvény lefutott és minden nyomaték helye meglett, még ellenőrzi a
program, hogy az első megjelenítendő pont a nyomatéki ábra rajzolásakor a rúd legbalra
lévő pontja-e. Ez akkor lényeges, ha a rúd balra kinyúlik a csapágyon túl. A tengely jobb
oldali végének pontja, ha az kilóg a csapágyon túl még nem lényeges nekünk mivel most
a középső csapágyon számoljuk az erőt és ha az meglesz, akkor újra kell számolni
mindent. Az említett pont úgyis csak az ábra rajzolásakor szükséges.
Ezzel ismerjük, hogy a nyomatéki ábra a tengely mentén hogyan változik. A 8-as fejezet
módszerével nekiállhatunk számolni az energiákat a Simpson formulával együtt. A kettes
erőrendszer nyomatéki ábrája igen egyszerű, mivel az összes igénybevétel az egy 1 N-os
erő, amit a középső csapágy helyére teszünk. Az E_HNYOM mátrixnak megfelelő
töréspontokat tartalmazó mátrixa a kettes erőrendszernek a B változó lesz.
B=[0,H1,H3,H2,0;0,0,(H3-H1)*KE_H1*(-1),0,0;0,0,(H3-H1)*KE_H1*(-
1),0,0];
Az első töréspont a rúd bal vége lesz, utána következik a bal csapágy, ezeken a
nyomatéki ábra 0 még. A harmadik töréspont a középső csapágy helye, itt már a nyíróerő
ábra szerinti mértékű hajlító nyomaték lesz és a jobb csapágyon, ami a 4. oszlopában
lesz a B mátrixnak, ismét visszatér a 0 értékhez, folytatva a rúd végével, ami az 5.
töréspont.
Mielőtt még nekiállnánk a nyomatéki ábrák pontjainak összeszorzásának ügyelnünk kell
arra, hogy ha nem volt se erő, se nyomaték a középső csapágyra elhelyezve a felhasználó
által, akkor az E_HNYOM mátrixban nem lesz töréspont ezen a helyen, míg a B mátrixban
igen.
19. ábra. B mátrix: kettes rendszer
20. ábra. E_HNYOM mátrix: egyes rendszer
31
A 19. ábra, ami a kettes erőrendszernek felel meg, törés van a 500, 1000 és 1500 mm-
nek megfelelő pontokon míg a 20. ábra az 500, 800, 1200 és 1500 mm-eknél van
változás. Nekünk viszont a 800 mm és 1000 mm közti szakaszon is 3 ponton kell néznünk
a nyomatéki ábrákat összeszorzáskor, ezért egy külön változóban egyesítjük a két
rendszer pontjainak helyét és sorba rendezzük őket.
clear C [~,n]=size(E_HNYOM); for f=1:n C(1,f)=E_HNYOM(1,f); end C=[C,H3]; C = sortrows(C' , 1'); C = C';
Az összes töréspont ismeretében elkezdhetjük összeszorozni a 8-as fejezet alapján a
nyomatéki ábrák pontjait. A C vektor összes pontján végig haladva megkeressük a két
rendszer megfelelő szakaszait az E_HNYOM és a B mátrixokban, amikbe beleesik a C
vektor éppen vizsgált pontja.
[~,n]=size(E_HNYOM); [~,j]=size(C); for f=1:(j-1) m=1; v=1; while (m<n) if E_HNYOM(1,m)<=C(1,f) && E_HNYOM(1,m+1)>C(1,f) o=m; m=n; else m=m+1; end
Az m változót léptetve keresi hányadik szakasz lesz a megfelelő és a szakasz számát az o
változóba menti el. A B mátrix vizsgálata is így működik.
A szakaszok végpontjainak ismeretében arányokkal ki tudjuk számolni éppen mekkora a
nyomaték a bal, közép és jobb pontjain az adott résznek a két erőrendszerben a
következő egysoros egyenlettel:
enx=enx+(C(1,f+1)-C(1,f))/6*((E_HNYOM(2,o)+(E_HNYOM(2,o+1)-
E_HNYOM(2,o))*(C(1,f)-E_HNYOM(1,o))/(E_HNYOM(1,o+1)-
E_HNYOM(1,o)))*(B(2,p)+(B(2,p+1)-B(2,p))*(C(1,f)-B(1,p))/(B(1,p+1)-
B(1,p)))+4*(E_HNYOM(2,o)+(E_HNYOM(2,o+1)-
E_HNYOM(2,o))*((C(1,f)+C(1,f+1))/2-E_HNYOM(1,o))/(E_HNYOM(1,o+1)-
E_HNYOM(1,o)))*(B(2,p)+(B(2,p+1)-B(2,p))*((C(1,f)+C(1,f+1))/2-
B(1,p))/(B(1,p+1)-B(1,p)))+(E_HNYOM(2,o)+(E_HNYOM(2,o+1)-
E_HNYOM(2,o))*(C(1,f+1)-E_HNYOM(1,o))/(E_HNYOM(1,o+1)-
E_HNYOM(1,o)))*(B(2,p)+(B(2,p+1)-B(2,p))*(C(1,f+1)-B(1,p))/(B(1,p+1)-
B(1,p))));
32
Ez az egyenlet a Simpson formula szerint számolja az energiát az enx változóba az X-Z
síkon. Az eny változóba az Y-Z sík szerinti nyomatéki ábra értékeinek szorzata megy
ugyanígy. Ha két csapágyas lenne a feladat akkor már majdnem meglenne a lehajlás
mértéke, de mi most ezzel a középső csapágyon számoljuk az erőt a következő
módszerrel:
𝑄 =∫ 𝑀𝑂 ⋅ 𝑚 𝑑𝑠(𝐿)
∫ 𝑚2 𝑑𝑠(𝐿)
[𝑁]
Ez az eredmény elérhető többek között a Betti tételből is levezetve. A tört számlálójában
az egyes rendszer ( 𝑀𝑂 [𝑁𝑚] ) nyomatékát szorozzuk a kettes rendszer értékével
(𝑚 [𝑚]), így a számlálónak felelnek meg az enx és eny változók. A tört nevezője, amivel
osztjuk a kiszámolt energiákat, úgyszintén a Simpson formulával lesz számolva a
következő módon:
for f=1:b-1 kenx=kenx+(B(1,f+1)-
B(1,f))/6*(B(2,f)^2+4*((B(2,f)+B(2,f+1))/2)^2+B(2,f+1)^2); keny=kenx; end
A kenx és keny változókba töltjük a töréspontok önmagukkal való szorzatát, majd az enx
és eny változókat beosztjuk velük megkapva az X és Y irányú erőket a középső
csapágyon. Ezeket az erőket egyből beletöltjük egy q vektorba, aminek első sora a
középső csapágy helye, második sora az X irányú erő, amit a csapágy kifejt a tengelyre
és a harmadik sora az Y irányú komponense az említett erőnek.
q=[H3;enx/kenx;eny/keny];
Ennek ismeretében újra kell számolnunk az erőket a másik két csapágyon ahogy azt a
csapágyak sorba rendezése után tettük korábban. Az összes erőt ismét beletöltjük az A
mátrixba, amiben tároltuk őket korábban és ismét egybevonjuk az erőket, amik azonos
helyeken vannak ezúttal a középső csapágyra is odafigyelve.
Ezen a ponton visszatér a program abba a részbe, ami akkor is szükséges, ha nincs
középső csapágy. Ha nincs, akkor az elsőként kiszámolt A mátrix értékévek kezdi
kiszámolni a nyomatéki ábra pontjait az erőkkel és majd a koncentrált nyomatékokkal,
ha volt középső csapágy akkor az újra számolt A mátrixszal dolgozik. Ez a rész nagyjából
megegyezik az eddig tárgyalt nyomaték és energia számítással egészen addig, amíg ki
nem számoljuk a nyomatéki ábrák egymással lévő szorzatát és azt beletöltjük az enx és
eny változókba ismét. Itt a rugalmassági modulus és a tengely geometriájának
ismeretében már kiszámítható az elmozdulás a 8-as fejezet alapján. Az említett
33
fejezetben a Simpson formulát 𝑈12-re írtuk fel, ami az enx és eny a programban. Így már
ismerjük 𝑈12-t és mivel 𝑈12 = 𝑊12 kifejezhetjük 𝑊12-ből a lehajlást.
𝑢 =1
2 ⋅ 𝐸 ⋅ 𝐼⋅ 𝑈12 =
1
𝐸 ⋅(𝐷4 − 𝑑4) ⋅ 𝜋
32
⋅ 𝑈12
Ahol 𝑢 a lehajlás, 𝐸 a rugalmassági modulus, 𝐷 a tengely külső átmérője, 𝑑 a belső
átmérője és 𝐼 a másodrendű nyomaték. Ezek alapján a programban az elmozdulás
számítása a következő módon fog kinézni:
vx=1/(e* ((dk^4-db^4)*pi)/32)*enx*1000000; vy=1/(e* ((dk^4-db^4)*pi)/32)*eny*1000000;
Ahol vx lesz az X-Z síkban elmozdulás és vy lesz az Y-Z síkban elmozdulás. Mivel az
eredmény méterben jönne ki, ezért felszorozzuk, hogy µm legyen a mértékegység, így
olvashatóbban fog kinézni, amikor kiírja a program a felhasználói felületen. Azokra az
esetekre, amikor a felhasználó valami okból kifolyólag egy csapágy helyén akarja
számolni az elmozdulást beállítjuk vx és vy értékét 0-ra, hogy ne NaN értéket írjon ki a
felületen ahogy szokott ilyenkor.
if vh==H1 || vh==H2 vx=0; vy=0; end if ~isempty(G_H2) if vh==H3 vx=0; vy=0; end end
34
6. Grafika
A grafika megkezdése előtt még ellenőrizzük, hogy a nyomatéki ábra pontjainak számításakor a program nem hagyott-e kerekítési hibát az E_HNYOM mátrixban, ahogy a 21. ábra is láthatjuk. Megesik, hogy azon a helyen, ahol a nyomatéki ábra visszatérne 0 Nm-re a program miatt 10-15-10-14 Nm nagyságrendű értékeket mutat. Egy for ciklussal az összes 10-10 Nm és -10-10 Nm közötti értéket 0-ra állítjuk a 22. ábra szerint.
[~,s]=size(E_HNYOM); for f=1:s if E_HNYOM(2,f)>-10^-10 && E_HNYOM(2,f)<10^-10 E_HNYOM(2,f)=0; end if E_HNYOM(3,f)>-10^-10 && E_HNYOM(3,f)<10^-10 E_HNYOM(3,f)=0; end end
21. ábra. Kerekítés nélkül
22. ábra. Kerekítéssel
Ezzel el is kezdhetjük a grafikát. Az ábrák négy subplot-ban lesznek megrajzolva fentről
lefelé ahogy a 9. ábra is láthattuk a következő sorrendben:
1. X-Z sík tengely elrendezés
2. X-Z sík nyomatéki ábra
3. Y-Z sík tengely elrendezés
4. Y-Z sík nyomatéki ábra
A tengely elrendezésekben ki kell rajzolnunk a csapágyakat, erőket, nyomatékokat, a
tengelyt és a sík koordináta rendszerének irányait (24. ábra). A p1 és p2 változók lesznek
a tengely végpontjai, míg a p3 és p4 változókat használjuk minden más megrajzolására.
A második görgő megrajzolása:
if ~isempty(G_H2) p3=[G_H2,G_H2-L/320]; p4=[-L/5+L/20,-L/5+L/40]; line(p3,p4,'Color','black'); p3=[G_H2-L/320,G_H2]; p4=[-L/5+L/40,-L/5]; line(p3,p4,'Color','black'); p3=[G_H2,G_H2+L/320]; p4=[-L/5+L/20,-L/5+L/40]; line(p3,p4,'Color','black'); p3=[G_H2+L/320,G_H2]; p4=[-L/5+L/40,-L/5]; line(p3,p4,'Color','black'); p3=[G_H2,G_H2+L/80]; p4=[0,-L/5+L/20];
35
line(p3,p4,'Color','black'); p3=[G_H2,G_H2-L/80]; p4=[0,-L/5+L/20]; line(p3,p4,'Color','black'); p3=[G_H2+L/80,G_H2-L/80]; p4=[-L/5+L/20,-L/5+L/20]; line(p3,p4,'Color','black'); end
Míg az első görgő és a csukló megadása kötelező, addig a második opcionális, ezért is
van egy if függvénybe foglalva. Mint látható, az egész a tengely hosszának arányában
íródott, ezzel törekedve arra, hogy minél inkább esztétikusan nézzenek ki az elemek.
A 23. ábra láthatjuk az erők megrajzolását, amihez az A mátrix elemeit vesszük ismét elő.
Figyelünk rá, hogy mikor pozitív és mikor negatív az erő. A programban korábban
használt A mátrixban az azonos helyeken lévő erőket összevontuk, ezért, ha több erő
van elhelyezve a csapágyon a felhasználó által, akkor azok az erők hozzáadódnak ahhoz
az erőhöz, amivel a csapágy tartja a tengelyt. Ezért a felhasználói felületen jobb fölül
külön kiírjuk a csapágyak tartóerejét.
23. ábra. Erők a csapágyon
24. ábra. Elemek a tengelyen
Az erők kirajzolása:
for f=1:p if A(3,f)>0 || A(3,f)<0 p3=[A(1,f),A(1,f)]; p4=[L/40,L/3]; line(p3,p4,'Color','black');
Ha az erő pozitív: if A(3,f)>0 p3=[A(1,f),A(1,f)-L/200]; p4=[L/3,L/3-L/10]; line(p3,p4,'Color','black');
36
p3=[A(1,f),A(1,f)+L/200]; p4=[L/3,L/3-L/10]; line(p3,p4,'Color','black');
Ha negatív: else p3=[A(1,f),A(1,f)-L/200]; p4=[L/40,L/40+L/10]; line(p3,p4,'Color','black'); p3=[A(1,f),A(1,f)+L/200]; p4=[L/40,L/40+L/10]; line(p3,p4,'Color','black'); end
Erők értékének kiírása a nyilakra: TXT=A(3,f); TXT=num2str(TXT); TXT=strcat(TXT,' N'); text(A(1,f),L/2,TXT) end end
A csapágyon lévő erők kiírása a felületen:
if ~isempty(G_H2) textLabel = sprintf('Csapágyakon erõ X irányba sorrendben: %.3f %.3f
%.3f N', H1_EX, q(2,1), H2_EX); set(handles.text8, 'String', textLabel); textLabel = sprintf('Csapágyakon erõ Y irányba sorrendben: %.3f %.3f
%.3f N', H1_EY, q(3,1), H2_EY); set(handles.text10, 'String', textLabel); else
Az átláthatóság kedvéért a tizedesvessző után csak három számig írjuk ki az értékeket az
erőknél.
A koncentrált nyomatékok rajzolásánál a globális változókat vesszük elő, amiben megírta
a felhasználó azok helyét és komponenseit. Itt is figyelni kell arra, hogy pozitív vagy
negatív a nyomaték értéke és arra, hogy az X-Z és Y-Z síkokban a koncentrált hajlító
nyomatékok iránya ellentétes.
Nyomaték rajzolása:
for f=1:ihnyom if NY_HYM(1,f)>0 || NY_HYM(1,f)<0 p3=[NY_HH(1,f)-L/80,NY_HH(1,f)]; p4=[0,L/8]; line(p3,p4,'Color','black'); p3=[NY_HH(1,f),NY_HH(1,f)+L/80]; p4=[L/8,0]; line(p3,p4,'Color','black');
37
Ha pozitív:
if NY_HYM(1,f)>0 p3=[NY_HH(1,f)+L/80,NY_HH(1,f)+L/160]; p4=[0,-L/16]; line(p3,p4,'Color','black'); p3=[NY_HH(1,f)-L/80,NY_HH(1,f)]; p4=[0,-L/8]; line(p3,p4,'Color','black'); p3=[NY_HH(1,f)+L/160,NY_HH(1,f)+L/80]; p4=[-L/16,-L/19]; line(p3,p4,'Color','black'); p3=[NY_HH(1,f)+L/160,NY_HH(1,f)+L/160]; p4=[-L/16,-L/300]; line(p3,p4,'Color','black');
Ha negatív:
else p3=[NY_HH(1,f)-L/80,NY_HH(1,f)-L/160]; p4=[0,-L/16]; line(p3,p4,'Color','black'); p3=[NY_HH(1,f)+L/80,NY_HH(1,f)]; p4=[0,-L/8]; line(p3,p4,'Color','black'); p3=[NY_HH(1,f)-L/160,NY_HH(1,f)-L/80]; p4=[-L/16,-L/19]; line(p3,p4,'Color','black'); p3=[NY_HH(1,f)-L/160,NY_HH(1,f)-L/160]; p4=[-L/16,-L/300]; line(p3,p4,'Color','black'); end
Nyomaték értékének kiírása:
TXT=NY_HYM(1,f); TXT=num2str(TXT); TXT=strcat(TXT,' Nm'); text(NY_HH(1,f),-L/4,TXT) end end
A tengely elrendezés alatti nyomatéki ábra kirajzolása a hosszasan előkészített
E_HNYOM mátrixszal már igen könnyű. Előzőleg bele lett öltve t, x és y változókba
minden sora E_HNYOM-nak és most ezekkel a vektorokkal megrajzoljuk a nyomatéki
ábrákat:
subplot(4,1,2) grid on line(t,x,'Color','black')
A grid on funkció rácsozott háttérrel látja el a subplot-ot, ami ellátja a koordináta tengely
feladatát, aminek köszönhetően láttuk éppen pozitív vagy negatív a nyomatéki ábra, és
jobban is átlátható az ábra mintha végig sraffoznánk. A koordináta tengelyek a subplot
külső részén futnak.
38
Összegzés
Ezzel elkészült egy aránylag pontos szilárdságtani számításokra alkalmas program. Az
teszi főleg főorsókhoz alkalmassá ezt a programot, hogy lehetőséget a cső
keresztmetszet szerinti számolásra és a középső megtámasztásra, ami megesik hosszabb
tengelyeknél. Igaz a főorsóknál többnyire háromnál több csapágy van elhelyezve, de ha
az egymás mellett lévő csapágyakat együtt kezeljük, akkor közel azonos eredményt
érhetünk el. A program írásakor cél volt, hogy minél inkább felhasználó barát legyen
olyan módon, hogy bármit megengedjen, ami fizikailag még lehetséges, de ha ezt a
határt túllépi a felhasználó (például a belső átmérője a rúdnak nagyobb, mint a külső),
akkor figyelmeztesse erre.
A program jelenleg is szép mennyiségű funkcióval rendelkezik, de még rengeteg fejlődési
lehetőség van, mint a háromnál is több csapágyak alkalmazása, változó
keresztmetszetek, nyíróerők okozta energiák számolása, eloszló erők és a felhasználói
felület olyanná formálása, hogy az esztétikusan meg tudja jeleníteni a zsúfoltság
elkerülése érdekében ebben a verzióban kihagyott nyíróerő ábrát is. A felsorolt
lehetőségek azt növelik, hogy milyen esetekre alkalmazható a program, de még más
fejlődési irány is létezik, mint a felhasználó által megadott adatok lementése fájlokba a
későbbi munka gyorsabb helyreállítása érdekében, nyomatéki ábrák rajzolása és
lementése képfájlokba, amit alkalmazhatunk más munkákban, vagy interaktív
felhasználói felület a megadott elemek gyors módosításához.
Attól függetlenül, hogy főleg főorsókhoz készült a program még felhasználható
bármilyen más rúd jellegű kerek keresztmetszetű elem szilárdságtani vizsgálatához. A
négyszög vagy I szelvény keresztmetszetek, nem egyenes vonalú rudak, illetve a
befalazás funkció hiánya limitálja más tereken a használatot, de miután azok nem
fordulnak elő főorsóknál, ezért hozzáadásuk eléggé eltérítené a program témáját.
39
Irodalomjegyzék
[1] Prof. Dr.-Ing. Dr.-Ing. E.h. Manfred Weck, Werkzeugmaschinen-Atlas
[2] SKF, Főkatalógus, 2008
[3] Dr. Bihari Zoltán: Géprajz előadás, 2014
[4] DMG MORI, CLX 350, https://tinyurl.com/yderezgt, 2017.04.18-án megtekintve
[5] DMTG, 6130 i CNC, https://tinyurl.com/y9ds79hg, 2017.04.18-án megtekintve
[6] Dr. Maros Zsolt: Különleges gyártástechnológiák: 2017
[7] DMG MORI, DMU 50 3rd generation, https://tinyurl.com/yabuutun,
2017.04.18-án megtekintve
[8] DMTG, XD Series Vertical CNC Milling Machine, https://tinyurl.com/y8r4gh6l,
2017.04.18-án megtekintve
[9] Studer, Studer External cylindrical grinding machine S121 Radius,
https://tinyurl.com/yc78r5pf, 2017.04.18-án megtekintve
[10] United Grinding Group AG, Mikrosa Kronos dual,
https://tinyurl.com/yawflddr, 2017.04.18-án megtekintve
[11] Dr. Ecsedi István, Dr. Király Béla, Mörk János, Dr. Páczelt István, Vidó
Endre: Szilárdságtan II. Tankönyvkiadó, Budapest, 1983
1
Melléklet
% A program által automatikusan létrehozott kód a guide (kezelő felület módosítás) és más
funkciókhoz
function varargout = foorsomerevseg(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @foorsomerevseg_OpeningFcn, ...
'gui_OutputFcn', @foorsomerevseg_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function foorsomerevseg_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = foorsomerevseg_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
% Az első görgő hozzáadása
function gorgo_hozzaadas1_Callback(hObject, eventdata, handles)
global G_H1
G_H1 = inputdlg('Görgő helye [mm]','Görgő megadása', [1 40]);
% Konvertálás szám alapú változóvá
G_H1=str2double(G_H1);
% Konvertálás m-be
G_H1=G_H1/1000;
% A második görgő hozzáadása
function gorgo_hozzaadas2_Callback(hObject, eventdata, handles)
global G_H2
G_H2 = inputdlg('Görgő helye [mm]','Görgő megadása', [1 40]);
% Konvertálás szám alapú változóvá
G_H2=str2double(G_H2);
% Konvertálás m-be
G_H2=G_H2/1000;
% A csukló hozzáadása
function csuklo_hozzaadas_Callback(hObject, eventdata, handles)
global CS_H
CS_H = inputdlg('Csukló helye [mm]','Csukló megadása', [1 40]);
% Konvertálás szám alapú változóvá
CS_H = str2double(CS_H);
% Konvertálás m-be
2
CS_H=CS_H/1000;
% Hajlító nyomatékok hozzáadása
function hnyom_hozzaadas_Callback(hObject, eventdata, handles)
global NY_HH
global NY_HXM
global NY_HYM
global ihnyom
prompt = {'Nyomaték helye [mm]','Nyomaték x irányú komponense [Nm]','Nyomaték y irányú
komponense [Nm]'};
dlg_title = 'Hajlítónyomaték megadása';
num_lines = [1 45;1 45;1 45];
hnyom = inputdlg(prompt,dlg_title,num_lines);
if isempty(hnyom)
else
% Konvertálás cella alapú változóvá
hnyomfeloszt = num2cell(str2double(hnyom));
% Nyomaték számláló léptetése
if isempty(ihnyom)
ihnyom=1;
else
ihnyom=ihnyom+1;
end
% Megadott adatok felosztása három vektorban
[NY_HH(1,ihnyom),NY_HXM(1,ihnyom),NY_HYM(1,ihnyom)] = hnyomfeloszt{:};
NY_HH(1,ihnyom)=NY_HH(1,ihnyom)/1000;
end
% Erők hozzáadása
function rero_hozzaadas_Callback(hObject, eventdata, handles)
global F_RH
global F_RXM
global F_RYM
global irero
prompt = {'Radiális erő helye [mm]','Radiális erő x irányú komponense [N]','Radiális erő y
irányú komponense [N]'};
dlg_title = 'Radiális irányú erő megadása';
num_lines = [1 45;1 45;1 45];
rero = inputdlg(prompt,dlg_title,num_lines);
if isempty(rero)
else
% Konvertálás cella alapú változóvá
rerofeloszt = num2cell(str2double(rero));
% Erő számláló léptetése
if isempty(irero)
irero=1;
else
irero=irero+1;
end
% Megadott adatok felosztása három vektorban
[F_RH(1,irero),F_RXM(1,irero),F_RYM(1,irero)] = rerofeloszt{:};
F_RH(1,irero)=F_RH(1,irero)/1000;
end
% Program által a felhasználói felülethez automatikusan létrehozott kód
function edit1_Callback(hObject, eventdata, handles)
3
function edit1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% Tengely hosszának megadása
function tghossz_Callback(hObject, eventdata, handles)
global L
L = inputdlg('Tengely hossza [mm]','Tengely hosszának megadása', [1 45]);
% Konvertálás szám alapú változóvá
L = str2double(L);
% Konvertálás m-be
L=L/1000;
% Tengely külső átmérőjének megadása
function tgdkulso_Callback(hObject, eventdata, handles)
global dk
dk = inputdlg('Tengely külső átmérője [mm]','Tengely külső átmérőjének megadása', [1 55]);
% Konvertálás szám alapú változóvá
dk = str2double(dk);
% Konvertálás m-be
dk=dk/1000;
% Tengely belső átmérőjének megadása
function tgdbelso_Callback(hObject, eventdata, handles)
global db
db = inputdlg('Tengely belső átmérője [mm]','Tengely belső átmérőjének megadása', [1 55]);
% Konvertálás szám alapú változóvá
db = str2double(db);
% Konvertálás m-be
db=db/1000;
% Rugalmassági modulus megadása
function rugmod_Callback(hObject, eventdata, handles)
global e
x = inputdlg('Rugalmassági modulus [GPa]','Rugalmassági modulus megadása', [1 50]);
% Konvertálás szám alapú változóvá
e = str2double(x);
% Konvertálás GPa-ba
e=e*100000000;
% Vizsgálandó hely megadása
function vh_Callback(hObject, eventdata, handles)
global vh
vh = inputdlg('Hol számítsa a program a lehajlást? [mm]','Rugalmassági modulus megadása', [1
50]);
% Konvertálás szám alapú változóvá
4
vh = str2double(vh);
% Konvertálás m-be
vh = vh/1000;
% Minden erők megadásához köthető globális változó törlése
function Clear_F_Callback(hObject, eventdata, handles)
global F_RH
global F_RXM
global F_RYM
global irero
clearvars -global -except G_H1 G_H2 CS_H K dk db e vh NY_HH NY_HXM NY_HYM ihnyom L
% Minden nyomaték megadáshoz köthető globális változó törlése
function Clear_nyom_Callback(hObject, eventdata, handles)
global NY_HH
global NY_HXM
global NY_HYM
global ihnyom
clearvars -global -except G_H1 G_H2 CS_H K dk db e vh F_RH F_RXM F_RYM irero L
% Kettes görgő helyének törlése
function Clear_G_H2_Callback(hObject, eventdata, handles)
clearvars -global -except G_H1 CS_H K dk db e vh F_RH F_RXM F_RYM irero L NY_HH NY_HXM
NY_HYM ihnyom
% Frissítés gomb megnyomására a teljes számítás elvégzése
function refresh_Callback(hObject, eventdata, handles, vh)
% Korábban megadott globális változók előhívása a funkcióban
global vh
global e
global F_RH
global F_RXM
global F_RYM
global irero
global L
global db
global dk
global G_H1
global G_H2
global CS_H
global NY_HH
global NY_HXM
global NY_HYM
global ihnyom
% Erők újra számoláshoz előkészítése a sum változóknak
sumFX=0;
sumFY=0;
sumF_RXM=0;
sumF_RYM=0;
sumNY_HXM=0;
sumNY_HYM=0;
% Nyomatékok összeadása az erőegyenletekhez
for a = 1:ihnyom
sumNY_HXM = sumNY_HXM + NY_HXM(1,a);
sumNY_HYM = sumNY_HYM + NY_HYM(1,a);
end
5
% Nem kötelezően megadandó változók kinullázása, ha azok nem lettek megadva
if isempty(db)
db = 0;
end
if isempty(irero)
irero = 0;
F_RH(1,1)=0;
F_RXM(1,1)=0;
F_RYM(1,1)=0;
end
if isempty(ihnyom)
ihnyom = 0;
NY_HH(1,1)=0;
NY_HXM(1,1)=0;
NY_HYM(1,1)=0;
end
% Hibaüzenet és program megszakítása, ha a kettes görgő nincs a tengelyen
if ~isempty(G_H2)
if G_H2<0 || G_H2>L
f = errordlg('Egy görgő vagy csukló nincs a tengelyen.','Hibás megadás');
return
end
end
% Hibaüzenet és program megszakítása, ha a kettes görgő egy másik görgőn vagy csuklón van
if ~isempty(G_H2)
if G_H1 == G_H2 || CS_H==G_H2
f = errordlg('Két görgő vagy egy görgő és csukló helye megegyezik.','Hibás
megadás');
return
end
end
% Hibaüzenet, ha nincs megadva a vizsgálandó hely
if isempty(vh)
f = errordlg('A hely, ahol a lehajlás számítása megtörténne nincs megadva.','Hibás
megadás');
% Hibaüzenet, ha a rugalmassági modulus nincs megadva
elseif isempty(e)
f = errordlg('Nincs rugalmassági modulus megadva.','Hibás megadás');
% Hibaüzenet, ha nincs megadva a tengely hossza
elseif isempty(L)
f = errordlg('Nincs a tengely hossza megadva.','Hibás megadás');
% Hibaüzenet, ha nincs megadva a külső átmérője a tengelynek
elseif isempty(dk)
f = errordlg('Nincs a tengely küldő átmérője megadva.','Hibás megadás');
% Hibaüzenet, ha nincs megadva az első görgő
elseif isempty(G_H1)
f = errordlg('Az első görgő megadása szükséges.','Hibás megadás');
% Hibaüzenet, ha nincs megadva a csukló helye
elseif isempty(CS_H)
f = errordlg('A csukló megadása szükséges.','Hibás megadás');
% Hibaüzenet, ha a tengely túl rövid
6
elseif L<=0
f = errordlg('A tengely nem lehet 0 mm vagy kevesebb.','Hibás megadás');
% Hibaüzenet, ha a tengely tartományán kívül esik egy csapágy
elseif G_H1<0 || CS_H<0 || G_H1>L || CS_H>L
f = errordlg('Egy görgő vagy csukló nincs a tengelyen.','Hibás megadás');
% Hibaüzenet, ha az első görgő és a csukló azonos helyen vannak
elseif G_H1 == CS_H
f = errordlg('Két görgő vagy egy görgő és csukló helye megegyezik.','Hibás megadás');
% Hibaüzenet, ha kisebb vagy azonos a tengely külső átmérője, mint a belső
elseif dk <= db
f = errordlg('A külső átmérő nagyobb kell legyen, mint a belső.','Hibás megadás');
% Hibaüzenet, ha túl kicsi a rugalmassági modulus
elseif e<=0
f = errordlg('A rugalmassági modulus nagyobb legyen mint 0.','Hibás megadás');
% Csapágyak sorrendjének megállapítása, ha nincs megadva a második görgő
elseif isempty(G_H2)
if CS_H>G_H1
H1= G_H1;
H2= CS_H;
elseif G_H1>CS_H
H1= CS_H;
H2=G_H1;
end
% Csapágyak sorrendjének megadása, ha mind a három csapágy meg van adva
else
HH=[G_H1, G_H2, CS_H];
HH = sortrows(HH' , 1');
HH = HH';
H1=HH(1,1);
H2=HH(1,3);
H3=HH(1,2);
End
% Erők számítása a csapágyakon
for a = 1:irero
% Erők összeadása az erőegyenlethez
sumFX = sumFX + F_RXM(1,a);
sumFY = sumFY + F_RYM(1,a);
% Erők és a bal csapágytól számított erőkaruk szorzatának gyűjtése változókban előjel
helyesen, hogy nyomatéki egyenletekben utólag ki lehessen számítani a csapágyak erőit
if F_RH>H1
sumF_RXM = sumF_RXM + F_RXM(1,a)*(F_RH(1,a)-H1);
sumF_RYM = sumF_RYM + F_RYM(1,a)*(F_RH(1,a)-H1)*-1;
else
sumF_RXM = sumF_RXM + F_RXM(1,a)*(H1-F_RH(1,a))*-1;
sumF_RYM = sumF_RYM + F_RYM(1,a)*(H1-F_RH(1,a));
end
end
% Csapágyakon erők számítása nyomatéki egyenletekből kifejezve azokat
H2_EX = -1*(sumF_RXM+sumNY_HXM)/(H2-H1);
H1_EX = -1*(H2_EX + sumFX);
H2_EY = (sumF_RYM+sumNY_HYM)/(H2-H1);
7
H1_EY = -1*(H2_EY + sumFY);
% A mátrixba helyezése az erőknek, ha a felhasználó megadta őket
if irero>0
A = [F_RH ; F_RXM ; F_RYM];
End
% Bal csapágyon lévő erő B vektorba és a jobbnak a C vektorba helyezése
B = [H1 ; H1_EX ; H1_EY];
C = [H2 ; H2_EX ; H2_EY];
% A mátrix után tűzése B és C vektoroknak majd beletöltése A mátrixba felülírva azt feltéve,
hogy a felhasználó megadta azokat
if irero>0
A = [A , B , C];
Else
% B és C vektorok A mátrixba töltése, ha a felhasználó nem adott meg erőket
A = [B , C];
End
% A mátrix elemeinek sorba rendezése az első sor szerint
A = sortrows(A' , 1');
A = A';
% indh és ind változók előkészítése léptetéshez
[~,indh]=size(A);
ind=2;
% Azonos helyeken lévő erők komponenseinek összeadása a nyomatéki ábrákhoz
while ind<=indh
if A(1,ind)==A(1,ind-1)
A(2,ind-1)=A(2,ind-1)+A(2,ind);
A(3,ind-1)=A(3,ind-1)+A(3,ind);
if ind<indh
A = [A(:,1:ind-1) A(:,ind+1:indh)];
else
A = A(:,1:indh-1);
end
indh=indh-1;
else
ind=ind+1;
end
end
% B és C vektorok további műveletekhez előkészítése
clear B
clear C
% null vektor előkészítése nyomatéki ábrának átszabásakor új pontok beékeléséhez
null=[0;0;0];
% Számítások megkezdése, ha a felhasználó adott meg második görgőt
if ~isempty(G_H2)
% E_HNYOM mátrix előkészítése újra számoláshoz
clear E_HNYOM
% E_HNYOM mátrix első oszlopának betöltése
8
E_HNYOM(1,1) = A(1,2);
E_HNYOM(2,1) = -1*(A(1,2)-A(1,1))*(A(2,1));
E_HNYOM(3,1) = (A(1,2)-A(1,1))*(A(3,1));
% Első erők betöltése D és F változókba
D = A(2,1);
F = A(3,1);
% A már összevont erők számának beletöltése c-be
[~,c]=size(A);
% Erők okozta nyomatékok számolása, a nyomatéki ábrán általuk okozott töréspontok jegyzése
az E_HNYOM mátrixban
for a = 3:(c)
% Előző erőkhöz hozzáadni éppen vizsgált erőt
D = D + A(2,a-1);
F = F + A(3,a-1);
%Erő helye
E_HNYOM(1,a-1) = A(1,a);
% Nyomatéki ábra X komponense
E_HNYOM(2,a-1) = E_HNYOM(2,a-2)-D*(A(1,a)-A(1,a-1));
% Nyomatéki ábra Y komponense
E_HNYOM(3,a-1) = E_HNYOM(3,a-2)--1*F*(A(1,a)-A(1,a-1));
end
% Eddig készített töréspontok megszámolása és asd változóba töltése
[~,asd]=size(E_HNYOM);
% Ellenőrzési változó visszaállítása újra számoláshoz
el=0;
% E_HNYOM mátrix előkészítése a koncentrált nyomatékok okozta nyomatéki ábra változások
hozzáadásához
% Ha baloldalt kilóg a rúd és egy erő helyezkedik el rajta leginkább balra
if min(F_RH)<H1 && ihnyom==0 && irero>0 || min(F_RH)<H1 && min(NY_HH)>min(F_RH) && ihnyom>0
&& irero>0;
% Első erő helyének megadása, mint a pont, ahol elsőként megtörik a nyomatéki ábra
null2=[min(F_RH);0;0];
E_HNYOM = [null null2 E_HNYOM(:,1:asd)];
% Ha baloldalt kilóg a rúd és egy nyomaték helyezkedik el rajta leginkább balra
elseif min(NY_HH)<H1 && irero==0 && ihnyom>0 || min(NY_HH)<H1 && min(NY_HH)<min(F_RH) &&
irero>0 && ihnyom>0
% Első nyomaték helyének megadása, mint a pont, ahol elsőként megtörik a nyomatéki ábra
null2=[min(NY_HH);0;0];
E_HNYOM = [null2 E_HNYOM(:,1:asd)];
% Ellenőrző változó 1-re állítása
el=1;
9
% Ha balra kilóg a rúd és a leginkább balra lévő elem egyszerre egy erő és egy nyomaték is,
mert egymáson vannak
elseif min(NY_HH)==min(F_RH) && ihnyom>0 && irero>0
% Első nyomaték helyének megadása, mint a pont, ahol elsőként megtörik a nyomatéki ábra
null2=[min(NY_HH);0;0];
E_HNYOM = [null null2 E_HNYOM(:,1:asd)];
% Ha egyik korábbi feltétel sem teljesül
else
% Bal csapágytól törik meg a nyomatéki ábra elsőként
null2=[H1;0;0];
E_HNYOM = [null2 E_HNYOM(:,1:asd)];
End
% Törési pontok megszámlálása és ismét asd-ba töltése
[~,asd]=size(E_HNYOM);
% Törési pont keresése, amivel visszatér a nyomatéki ábra jobb oldalt 0-ra
% Ha egy erő van leginkább jobbra
lezarh=max(F_RH);
% Ha egy nyomaték van leginkább jobbra
if lezarh<max(NY_HH)
lezarh=max(NY_HH);
end
% Ha a jobb csapágy van leginkább jobbra
if lezarh<H2
lezarh=H2;
end
% A töréspont hozzáadása az E_HNYOM változóhoz
lezar=[lezarh;0;0];
E_HNYOM = [E_HNYOM(:,1:asd) lezar];
% Töréspontok megszámlálása és c változóba töltése
[~,c]=size(E_HNYOM);
% E_HNYOM mátrix átszabása a koncentrált nyomatékok hozzáadásával, megnézve egyenként minden
nyomatékra
for a = 1:ihnyom
% Töréspont számláló b vektor visszaállítása minden nyomaték helyének keresésekor
b=1;
% While függvénnyel nyomaték helyének keresése amíg egy feltételnek meg nem felel
while (b<=c)
% Nyomatéki ábra módosítása, ha egy meglévő töréspontra esik a koncentrált nyomaték
if E_HNYOM(1,b) == NY_HH(1,a) && b<c
% Ha a nyomaték már meg lett adva az előkészítésben
if el>0
10
% Oszlopok arrébb tolása
E_HNYOM = [E_HNYOM(:,1:b) null null E_HNYOM(:,b+1:c)];
% Töréspont számláló frissítése
c=c+2;
% Töréspont hozzáadása E_HNYOM-hoz
E_HNYOM(1,b+1)=NY_HH(1,a);
E_HNYOM(2,b+1)=E_HNYOM(2,b)+ NY_HXM(1,a);
E_HNYOM(3,b+1)=E_HNYOM(3,b)+ NY_HYM(1,a);
% Töréspont hozzáadása, ha vannak erők megadva és a bal csapágytól balra is helyezkednek el
if irero>0
if min(F_RH)<H1 && min(F_RH)>NY_HH(1,a)
E_HNYOM(1,b+2)=min(F_RH);
E_HNYOM(2,b+2)=E_HNYOM(2,b)+ NY_HXM(1,a);
E_HNYOM(3,b+2)=E_HNYOM(3,b)+ NY_HYM(1,a);
end
end
% Töréspont hozzáadása, ha a következő pont a csapágy helye, vagy nincs erő
if H1<min(F_RH) || irero==0
E_HNYOM(1,b+2)=H1;
E_HNYOM(2,b+2)=E_HNYOM(2,b)+ NY_HXM(1,a);
E_HNYOM(3,b+2)=E_HNYOM(3,b)+ NY_HYM(1,a);
End
% Jobbra lévő pontok igazítása a koncentrált nyomaték szerint
for f=(b+3):c-1
E_HNYOM(2,f)=E_HNYOM(2,f)+ NY_HXM(1,a);
E_HNYOM(3,f)=E_HNYOM(3,f)+ NY_HYM(1,a);
end
% While függvény megszakítása feltételének hamissá tételével
b=c+1;
% Ellenőrző változó visszaállítása 0-ra
el=0;
else
% Oszlopok arrébb tolása, ha a talált töréspont nem egy előkészített koncentrált nyomaték
helye
E_HNYOM = [E_HNYOM(:,1:b) null E_HNYOM(:,b+1:c)];
% Töréspont számláló frissítése
c=c+1;
% Töréspont hozzáadása
E_HNYOM(1,b+1)=NY_HH(1,a);
E_HNYOM(2,b+1)=E_HNYOM(2,b)+ NY_HXM(1,a);
E_HNYOM(3,b+1)=E_HNYOM(3,b)+ NY_HYM(1,a);
% Jobbra lévő pontok igazítása a koncentrált nyomaték szerint
for f=(b+2):c-1
E_HNYOM(2,f)=E_HNYOM(2,f)+ NY_HXM(1,a);
E_HNYOM(3,f)=E_HNYOM(3,f)+ NY_HYM(1,a);
11
end
% While függvény megszakítása feltételének hamissá tételével
b=c+1;
end
% Ha az utolsó nyomatékot nézzük és az jobbra van minden erőtől és csapágytól
elseif NY_HH(1,a)==max(NY_HH) && max(NY_HH)>H2 && max(NY_HH)>max(F_RH)
% Oszlopok arrébb tolása
E_HNYOM = [E_HNYOM(:,1:c-1) null E_HNYOM(:,c:c)];
% Töréspont hozzáadása
E_HNYOM(1,c)=NY_HH(1,a);
E_HNYOM(2,c)=E_HNYOM(2,c-1);
E_HNYOM(3,c)=E_HNYOM(3,c-1);
% Töréspont számláló frissítése
c=c+1;
% While függvény megszakítása feltételének hamissá tételével
b=c+1;
% Ha még nem az utolsó töréspontnál járunk
elseif b<c
% Ha az éppen vizsgált töréspont és a következő középső közé esik a hely
if E_HNYOM(1,b)< NY_HH(1,a) && E_HNYOM(1,b+1)> NY_HH(1,a)
% Oszlopok arrébb tolása
E_HNYOM = [E_HNYOM(:,1:b) null null E_HNYOM(:,b+1:c)];
% Töréspontok hozzáadása
E_HNYOM(1,b+1)=NY_HH(1,a);
E_HNYOM(2,b+1)=E_HNYOM(2,b)+(NY_HH(1,a)-E_HNYOM(1,b))/(E_HNYOM(1,b+3)-
E_HNYOM(1,b))*(E_HNYOM(2,b+3)-E_HNYOM(2,b));
E_HNYOM(3,b+1)=E_HNYOM(3,b)+(NY_HH(1,a)-E_HNYOM(1,b))/(E_HNYOM(1,b+3)-
E_HNYOM(1,b))*(E_HNYOM(3,b+3)-E_HNYOM(3,b));
E_HNYOM(1,b+2)=NY_HH(1,a);
E_HNYOM(2,b+2)=E_HNYOM(2,b+1)+ NY_HXM(1,a);
E_HNYOM(3,b+2)=E_HNYOM(3,b+1)+ NY_HYM(1,a);
% Töréspont számláló frissítése
c=c+2;
% Jobbra lévő pontok igazítása a koncentrált nyomaték szerint
for f=(b+3):c-1
E_HNYOM(2,f)=E_HNYOM(2,f)+ NY_HXM(1,a);
E_HNYOM(3,f)=E_HNYOM(3,f)+ NY_HYM(1,a);
end
% While függvény megszakítása feltételének hamissá tételével
b=c+1;
else
% b léptetése, ha nem teljesül egyik feltétel se, hogy a következő töréspontot vizsgálja
b=b+1;
12
end
else
% b léptetése, ha nem teljesül egyik feltétel se, hogy a következő töréspontot vizsgálja
b=b+1;
end
end
end
% Ha az elkészült nyomatéki ábra nem a tengely bal végétől kezdődik, akkor ott is készítsen
egy töréspontot
if E_HNYOM(1,1)>0
E_HNYOM = [null E_HNYOM(:,1:c)];
end
% B változó előkészítése
clear B
% Kettes erőrendszer csapágyain erő számítása, ha a hármas csapágy helyén 1 N erő van
KE_H2 = -1*(H3-H1)/(H2-H1);
KE_H1 = -1*(KE_H2+1);
% Kettes erőrendszer teljes nyomatéki ábrájának B mátrixba betöltése
B=[0,H1,H3,H2,0;0,0,(H3-H1)*KE_H1*(-1),0,0;0,0,(H3-H1)*KE_H1*(-1),0,0];
% C mátrix előkészítése
clear C
% Egyes erőrendszer töréspontjainak helyeit betöltjük a C vektorba
[~,n]=size(E_HNYOM);
for f=1:n
C(1,f)=E_HNYOM(1,f);
end
% C vektor után fűzzük a középső csapágy helyét
C=[C,H3];
% Sorba rendezzük a helyeket C vektorban
C = sortrows(C' , 1');
C = C';
% Megszámoljuk a töréspontokat a két erőrendszerben, beletöltve azok számát a j és b
változókba
[~,j]=size(C);
[~,b]=size(B);
% Energia számolásához előkészítjük enx, eny és kenx változókat
enx=0;
eny=0;
kenx=0;
% A két erőrendszer töréspontok közti szakaszain végigmegy a program
for f=1:(j-1)
% Léptetett változók visszaállítása minden szakaszhoz
m=1;
13
v=1;
% Egyes erőrendszeren keresése a szakasznak
while (m<n)
if E_HNYOM(1,m)<=C(1,f) && E_HNYOM(1,m+1)>C(1,f)
o=m;
m=n;
else
m=m+1;
end
end
% Kettes erőrendszeren keresése a szakasznak
while (v<b)
if B(1,v)<=C(1,f) && B(1,v+1)>C(1,f)
p=v;
v=b;
else
v=v+1;
end
end
% Nyomatéki ábrák pontjainak összeszorzása a Simpson formula szerint
enx=enx+(C(1,f+1)-C(1,f))/6*((E_HNYOM(2,o)+(E_HNYOM(2,o+1)-E_HNYOM(2,o))*(C(1,f)-
E_HNYOM(1,o))/(E_HNYOM(1,o+1)-E_HNYOM(1,o)))*(B(2,p)+(B(2,p+1)-B(2,p))*(C(1,f)-
B(1,p))/(B(1,p+1)-B(1,p)))+4*(E_HNYOM(2,o)+(E_HNYOM(2,o+1)-
E_HNYOM(2,o))*((C(1,f)+C(1,f+1))/2-E_HNYOM(1,o))/(E_HNYOM(1,o+1)-
E_HNYOM(1,o)))*(B(2,p)+(B(2,p+1)-B(2,p))*((C(1,f)+C(1,f+1))/2-B(1,p))/(B(1,p+1)-
B(1,p)))+(E_HNYOM(2,o)+(E_HNYOM(2,o+1)-E_HNYOM(2,o))*(C(1,f+1)-
E_HNYOM(1,o))/(E_HNYOM(1,o+1)-E_HNYOM(1,o)))*(B(2,p)+(B(2,p+1)-B(2,p))*(C(1,f+1)-
B(1,p))/(B(1,p+1)-B(1,p))));
eny=eny+(C(1,f+1)-C(1,f))/6*((E_HNYOM(3,o)+(E_HNYOM(3,o+1)-E_HNYOM(3,o))*(C(1,f)-
E_HNYOM(1,o))/(E_HNYOM(1,o+1)-E_HNYOM(1,o)))*(B(3,p)+(B(3,p+1)-B(3,p))*(C(1,f)-
B(1,p))/(B(1,p+1)-B(1,p)))+4*(E_HNYOM(3,o)+(E_HNYOM(3,o+1)-
E_HNYOM(3,o))*((C(1,f)+C(1,f+1))/2-E_HNYOM(1,o))/(E_HNYOM(1,o+1)-
E_HNYOM(1,o)))*(B(3,p)+(B(3,p+1)-B(3,p))*((C(1,f)+C(1,f+1))/2-B(1,p))/(B(1,p+1)-
B(1,p)))+(E_HNYOM(3,o)+(E_HNYOM(3,o+1)-E_HNYOM(3,o))*(C(1,f+1)-
E_HNYOM(1,o))/(E_HNYOM(1,o+1)-E_HNYOM(1,o)))*(B(3,p)+(B(3,p+1)-B(3,p))*(C(1,f+1)-
B(1,p))/(B(1,p+1)-B(1,p))));
end
% Kettes erőrendszer nyomatéki ábrájának megfelelő pontjait összeszorozzuk önmagukkal az
középső csapágyon lévő erő számításához
for f=1:b-1
kenx=kenx+(B(1,f+1)-B(1,f))/6*(B(2,f)^2+4*((B(2,f)+B(2,f+1))/2)^2+B(2,f+1)^2);
keny=kenx;
end
% q változó előkészítése újra számoláshoz
clear q
% q vektorba beletöltése a középső csapágy helyének és a rajta lévő erőknek
q=[H3;enx/kenx;eny/keny];
% Erők újra számolásához előkészítése a sum változóknak
sumFX=0;
sumFY=0;
sumF_RXM=0;
sumF_RYM=0;
sumNY_HXM=0;
sumNY_HYM=0;
% Erők újra számlálása a másik két csapágyon a középső csapágyon lévő erők ismeretében
14
for a = 1:irero
% Erők összeadása az erőegyenlethez
sumFX = sumFX + F_RXM(1,a);
sumFY = sumFY + F_RYM(1,a);
% Erők és a bal csapágytól számított erőkaruk szorzatának gyűjtése változókban előjel
helyesen, hogy nyomatéki egyenletekben utólag ki lehessen számítani a csapágyak erőit
if F_RH>H1
sumF_RXM = sumF_RXM + F_RXM(1,a)*(F_RH(1,a)-H1);
sumF_RYM = sumF_RYM + F_RYM(1,a)*(F_RH(1,a)-H1)*-1;
else
sumF_RXM = sumF_RXM + F_RXM(1,a)*(H1-F_RH(1,a))*-1;
sumF_RYM = sumF_RYM + F_RYM(1,a)*(H1-F_RH(1,a));
end
end
% Nyomatékok összeadása az erőegyenletekhez
for a = 1:ihnyom
sumNY_HXM = sumNY_HXM + NY_HXM(1,a);
sumNY_HYM = sumNY_HYM + NY_HYM(1,a);
end
% Középső csapágyon lévő erő okozta nyomaték hozzáadása sum vektorokhoz
sumF_RXM=sumF_RXM+(H3-H1)*q(2,1);
sumF_RYM=sumF_RYM-(H3-H1)*q(3,1);
% Középső csapágyon lévő erő hozzáadása az erőegyenletekhez szükséges sum vektorokhoz
sumFX=sumFX+q(2,1);
sumFY=sumFY+q(3,1);
% Bal és jobb csapágyakon lévő erők számolása
H2_EX = -1*(sumF_RXM+sumNY_HXM)/(H2-H1);
H1_EX = -1*(H2_EX + sumFX);
H2_EY = (sumF_RYM+sumNY_HYM)/(H2-H1);
H1_EY = -1*(H2_EY + sumFY);
% A mátrix frissítése az új erőkkel
if irero>0
A = [F_RH ; F_RXM ; F_RYM];
end
B = [H1 ; H1_EX ; H1_EY];
C = [H2 ; H2_EX ; H2_EY];
% Középső csapágyon lévő erő hozzáadása A mátrixhoz
if irero>0
A = [A , B , C , q];
else
A = [B , C , q];
end
A = sortrows(A' , 1');
A = A';
[~,indh]=size(A);
% Léptetéshez előkészítése ind változónak
ind=2;
% Azonos helyeken lévő erők komponenseinek összeadása a nyomatéki ábrákhoz
15
while ind<=indh
if A(1,ind)==A(1,ind-1)
A(2,ind-1)=A(2,ind-1)+A(2,ind);
A(3,ind-1)=A(3,ind-1)+A(3,ind);
if ind<indh
A = [A(:,1:ind-1) A(:,ind+1:indh)];
else
A = A(:,1:indh-1);
end
indh=indh-1;
else
ind=ind+1;
end
end
% Visszatérés a program azon részére, ami szükséges akár kettő, akár három csapágy van
megadva
end
% A kettes erőrendszer nyomatéki ábráját tároló mátrix előkészítése újra számolásra
clear E_HNYOM
% Erők megszámlálása
[~,c]=size(A);
% E_HNYOM mátrix első oszlopának betöltése
E_HNYOM(1,1) = A(1,2);
E_HNYOM(2,1) = -1*(A(1,2)-A(1,1))*(A(2,1));
E_HNYOM(3,1) = (A(1,2)-A(1,1))*(A(3,1));
% Erők betöltése D és F változókba
D = A(2,1);
F = A(3,1);
% Erők okozta nyomatékok számolása, a nyomatéki ábrán általuk okozott töréspontok jegyzése
az E_HNYOM mátrixban
for a = 3:(c)
% Előző erőkhöz hozzáadni éppen vizsgált erőt
D = D + A(2,a-1);
F = F + A(3,a-1);
% Erő helye
E_HNYOM(1,a-1) = A(1,a);
% Nyomatéki ábra X komponense
E_HNYOM(2,a-1) = E_HNYOM(2,a-2)-D*(A(1,a)-A(1,a-1));
% Nyomatéki ábra Y komponense
E_HNYOM(3,a-1) = E_HNYOM(3,a-2)--1*F*(A(1,a)-A(1,a-1));
end
% Eddig készített töréspontok megszámolása és asd változóba töltése
[~,asd]=size(E_HNYOM);
% Ellenőrzési változó visszaállítása újra számoláshoz
el=0;
% E_HNYOM mátrix előkészítése a koncentrált nyomatékok okozta nyomatéki ábra változások
hozzáadásához
16
% Ha baloldalt kilóg a rúd és egy erő helyezkedik el rajta leginkább balra
if min(F_RH)<H1 && ihnyom==0 && irero>0 || min(F_RH)<H1 && min(NY_HH)>min(F_RH) && ihnyom>0
&& irero>0;
% Első erő helyének megadása, mint a pont, ahol elsőként megtörik a nyomatéki ábra
null2=[min(F_RH);0;0];
E_HNYOM = [null null2 E_HNYOM(:,1:asd)];
% Ha baloldalt kilóg a rúd és egy nyomaték helyezkedik el rajta leginkább balra
elseif min(NY_HH)<H1 && irero==0 && ihnyom>0 || min(NY_HH)<H1 && NY_HH(1,1)<min(F_RH) &&
irero>0 && ihnyom>0
% Első nyomaték helyének megadása, mint a pont, ahol elsőként megtörik a nyomatéki ábra
null2=[min(NY_HH);0;0];
E_HNYOM = [null2 E_HNYOM(:,1:asd)];
% Ellenőrző változó 1-re állítása
el=1;
% Ha balra kilóg a rúd és a leginkább balra lévő elem egyszerre egy erő és egy nyomaték is,
mert egymáson vannak
elseif min(NY_HH)==min(F_RH) && ihnyom>0 && irero>0
% Első nyomaték helyének megadása, mint a pont, ahol elsőként megtörik a nyomatéki ábra
null2=[min(NY_HH);0;0];
E_HNYOM = [null null2 E_HNYOM(:,1:asd)];
% Ha egyik korábbi feltétel sem teljesül
else
% Bal csapágytól törik meg a nyomatéki ábra elsőként
null2=[H1;0;0];
E_HNYOM = [null2 E_HNYOM(:,1:asd)];
end
% Törési pontok megszámlálása és ismét asd-ba töltése
[~,asd]=size(E_HNYOM);
% Törési pont keresése, amivel visszatér a nyomatéki ábra jobb oldalt 0-ra
% Ha egy erő van leginkább jobbra
lezarh=max(F_RH);
% Ha egy nyomaték van leginkább jobbra
if lezarh<max(NY_HH)
lezarh=max(NY_HH);
end
% Ha a jobb csapágy van leginkább jobbra
if lezarh<H2
lezarh=H2;
end
% A töréspont hozzáadása az E_HNYOM változóhoz
lezar=[lezarh;0;0];
E_HNYOM = [E_HNYOM(:,1:asd) lezar];
17
% Töréspontok megszámlálása és c változóba töltése
[~,c]=size(E_HNYOM);
% E_HNYOM mátrix átszabása a koncentrált nyomatékok hozzáadásával, megnézve egyenként minden
nyomatékra
for a = 1:ihnyom
% Töréspont számláló b vektor visszaállítása minden nyomaték helyének keresésekor
b=1;
% While függvénnyel nyomaték helyének keresése, amíg egy feltételnek meg nem felel
while (b<=c)
% Nyomatéki ábra módosítása, ha egy meglévő töréspontra esik a koncentrált nyomaték
if E_HNYOM(1,b) == NY_HH(1,a) && b<c
% Ha a nyomaték már meg lett adva az előkészítésben
if el>0
% Oszlopok arrébb tolása
E_HNYOM = [E_HNYOM(:,1:b) null null E_HNYOM(:,b+1:c)];
% Töréspont számláló frissítése
c=c+2;
% Töréspont hozzáadása E_HNYOM-hoz
E_HNYOM(1,b+1)=NY_HH(1,a);
E_HNYOM(2,b+1)=E_HNYOM(2,b)+ NY_HXM(1,a);
E_HNYOM(3,b+1)=E_HNYOM(3,b)+ NY_HYM(1,a);
% Töréspont hozzáadása, ha vannak erők megadva és a bal csapágytól balra is helyezkednek el
if irero>0
if min(F_RH)<H1 && min(F_RH)>NY_HH(1,a)
E_HNYOM(1,b+2)=min(F_RH);
E_HNYOM(2,b+2)=E_HNYOM(2,b)+ NY_HXM(1,a);
E_HNYOM(3,b+2)=E_HNYOM(3,b)+ NY_HYM(1,a);
end
end
% Töréspont hozzáadása, ha a következő pont a csapágy helye, vagy nincs erő
if H1<min(F_RH) || irero==0
E_HNYOM(1,b+2)=H1;
E_HNYOM(2,b+2)=E_HNYOM(2,b)+ NY_HXM(1,a);
E_HNYOM(3,b+2)=E_HNYOM(3,b)+ NY_HYM(1,a);
end
% Jobbra lévő pontok igazítása a koncentrált nyomaték szerint
for f=(b+3):c-1
E_HNYOM(2,f)=E_HNYOM(2,f)+ NY_HXM(1,a);
E_HNYOM(3,f)=E_HNYOM(3,f)+ NY_HYM(1,a);
end
% While függvény megszakítása feltételének hamissá tételével
b=c+1;
% Ellenőrző változó visszaállítása 0-ra
18
el=0;
else
% Oszlopok arrébb tolása, ha a talált töréspont nem egy előkészített koncentrált nyomaték
helye
E_HNYOM = [E_HNYOM(:,1:b) null E_HNYOM(:,b+1:c)];
% Töréspont számláló frissítése
c=c+1;
% Töréspont hozzáadása
E_HNYOM(1,b+1)=NY_HH(1,a);
E_HNYOM(2,b+1)=E_HNYOM(2,b)+ NY_HXM(1,a);
E_HNYOM(3,b+1)=E_HNYOM(3,b)+ NY_HYM(1,a);
% Jobbra lévő pontok igazítása a koncentrált nyomaték szerint
for f=(b+2):c-1
E_HNYOM(2,f)=E_HNYOM(2,f)+ NY_HXM(1,a);
E_HNYOM(3,f)=E_HNYOM(3,f)+ NY_HYM(1,a);
end
% While függvény megszakítása feltételének hamissá tételével
b=c+1;
end
% Ha az utolsó nyomatékot nézzük és az jobbra van minden erőtől és csapágytól
elseif NY_HH(1,a)==max(NY_HH) && max(NY_HH)>H2 && max(NY_HH)>max(F_RH)
% Oszlopok arrébb tolása
E_HNYOM = [E_HNYOM(:,1:c-1) null E_HNYOM(:,c:c)];
% Töréspont hozzáadása
E_HNYOM(1,c)=NY_HH(1,a);
E_HNYOM(2,c)=E_HNYOM(2,c-1);
E_HNYOM(3,c)=E_HNYOM(3,c-1);
% Töréspont számláló frissítése
c=c+1;
% While függvény megszakítása feltételének hamissá tételével
b=c+1;
% Ha még nem az utolsó töréspontnál járunk
elseif b<c
% Ha az éppen vizsgált töréspont és a következő közé esik a hely
if E_HNYOM(1,b)< NY_HH(1,a) && E_HNYOM(1,b+1)> NY_HH(1,a)
% Oszlopok arrébb tolása
E_HNYOM = [E_HNYOM(:,1:b) null null E_HNYOM(:,b+1:c)];
% Töréspontok hozzáadása
E_HNYOM(1,b+1)=NY_HH(1,a);
E_HNYOM(2,b+1)=E_HNYOM(2,b)+(NY_HH(1,a)-E_HNYOM(1,b))/(E_HNYOM(1,b+3)-
E_HNYOM(1,b))*(E_HNYOM(2,b+3)-E_HNYOM(2,b));
E_HNYOM(3,b+1)=E_HNYOM(3,b)+(NY_HH(1,a)-E_HNYOM(1,b))/(E_HNYOM(1,b+3)-
E_HNYOM(1,b))*(E_HNYOM(3,b+3)-E_HNYOM(3,b));
19
E_HNYOM(1,b+2)=NY_HH(1,a);
E_HNYOM(2,b+2)=E_HNYOM(2,b+1)+ NY_HXM(1,a);
E_HNYOM(3,b+2)=E_HNYOM(3,b+1)+ NY_HYM(1,a);
% Töréspont számláló frissítése
c=c+2;
% Jobbra lévő pontok igazítása a koncentrált nyomaték szerint
for f=(b+3):c-1
E_HNYOM(2,f)=E_HNYOM(2,f)+ NY_HXM(1,a);
E_HNYOM(3,f)=E_HNYOM(3,f)+ NY_HYM(1,a);
end
% While függvény megszakítása feltételének hamissá tételével
b=c+1;
else
% b léptetése, ha nem teljesül egyik feltétel se, hogy a következő töréspontot vizsgálja
b=b+1;
end
else
% b léptetése, ha nem teljesül egyik feltétel se, hogy a következő töréspontot vizsgálja
b=b+1;
end
end
end
% Ha az elkészült nyomatéki ábra nem a tengely bal végétől kezdődik, akkor ott is készítsen
egy töréspontot
if E_HNYOM(1,1)>0
E_HNYOM = [null E_HNYOM(:,1:c)];
end
% B változó előkészítése
clear B
% Kettes erőrendszer csapágyain erő számítása, ha a vizsgálandó hely balra van a bal
csapágytól
if vh<H1
KE_H2 = 1*(H1-vh)/(H2-H1);
KE_H1 = -1*(KE_H2+1);
% Kettes erőrendszer csapágyain erő számítása, ha a vizsgálandó hely balra van a bal
csapágytól
else
KE_H2 = -1*(vh-H1)/(H2-H1);
KE_H1 = -1*(KE_H2+1);
end
% kettes erőrendszer teljes nyomatéki ábrájának B mátrixba betöltése, ha a vizsgálandó hely
a bal csapágytól balra van
if vh<H1
B=[0,vh,H1,H2,0;0,0,(H1-vh)*1*(-1),0,0;0,0,(H1-vh)*1*(-1),0,0];
% Ha jobbra van a jobb csapágytól a vizsgálandó hely
elseif vh>H2
B=[0,H1,H2,vh,0;0,0,(vh-H2)*KE_H1*(-1),0,0;0,0,(vh-H2)*KE_H1*(-1),0,0];
20
% Ha a jobb és bal csapágy között van a vizsgálandó hely
else
B=[0,H1,vh,H2,0;0,0,(vh-H1)*KE_H1*(-1),0,0;0,0,(vh-H1)*KE_H1*(-1),0,0];
end
% C mátrix előkészítése
clear C
% Egyes erőrendszer töréspontjainak helyeit betöltjük a C vektorba
[~,n]=size(E_HNYOM);
for f=1:n
C(1,f)=E_HNYOM(1,f);
end
% C vektor után fűzzük a vizsgálandó helyet
C=[C,vh];
% Sorba rendezzük a helyeket C vektorban
C = sortrows(C' , 1');
C = C';
% Megszámoljuk a töréspontokat a két erőrendszerbe, beletöltve azok számát a j és b
változókba
[~,j]=size(C);
[~,b]=size(B);
enx=0;
eny=0;
% Energia számolásához előkészítjük enx és eny változókat
if E_HNYOM(1,n) ~= L
null3=[L;0;0];
E_HNYOM=[E_HNYOM null3];
end
% A két erőrendszer töréspontok közti szakaszain végigmegy a program
for f=1:(j-1)
% Léptetett változók visszaállítása minden szakaszhoz
m=1;
v=1;
% Egyes erőrendszeren keresése a szakasznak
while (m<n)
if E_HNYOM(1,m)<=C(1,f) && E_HNYOM(1,m+1)>C(1,f)
o=m;
m=n;
else
m=m+1;
end
end
% Kettes erőrendszeren keresése a szakasznak
while (v<b)
if B(1,v)<=C(1,f) && B(1,v+1)>C(1,f)
p=v;
v=b;
else
v=v+1;
end
21
end
% Nyomatéki ábrák pontjainak összeszorzása a Simpson formula szerint
enx=enx+(C(1,f+1)-C(1,f))/6*((E_HNYOM(2,o)+(E_HNYOM(2,o+1)-E_HNYOM(2,o))*(C(1,f)-
E_HNYOM(1,o))/(E_HNYOM(1,o+1)-E_HNYOM(1,o)))*(B(2,p)+(B(2,p+1)-B(2,p))*(C(1,f)-
B(1,p))/(B(1,p+1)-B(1,p)))+4*(E_HNYOM(2,o)+(E_HNYOM(2,o+1)-
E_HNYOM(2,o))*((C(1,f)+C(1,f+1))/2-E_HNYOM(1,o))/(E_HNYOM(1,o+1)-
E_HNYOM(1,o)))*(B(2,p)+(B(2,p+1)-B(2,p))*((C(1,f)+C(1,f+1))/2-B(1,p))/(B(1,p+1)-
B(1,p)))+(E_HNYOM(2,o)+(E_HNYOM(2,o+1)-E_HNYOM(2,o))*(C(1,f+1)-
E_HNYOM(1,o))/(E_HNYOM(1,o+1)-E_HNYOM(1,o)))*(B(2,p)+(B(2,p+1)-B(2,p))*(C(1,f+1)-
B(1,p))/(B(1,p+1)-B(1,p))));
eny=eny+(C(1,f+1)-C(1,f))/6*((E_HNYOM(3,o)+(E_HNYOM(3,o+1)-E_HNYOM(3,o))*(C(1,f)-
E_HNYOM(1,o))/(E_HNYOM(1,o+1)-E_HNYOM(1,o)))*(B(3,p)+(B(3,p+1)-B(3,p))*(C(1,f)-
B(1,p))/(B(1,p+1)-B(1,p)))+4*(E_HNYOM(3,o)+(E_HNYOM(3,o+1)-
E_HNYOM(3,o))*((C(1,f)+C(1,f+1))/2-E_HNYOM(1,o))/(E_HNYOM(1,o+1)-
E_HNYOM(1,o)))*(B(3,p)+(B(3,p+1)-B(3,p))*((C(1,f)+C(1,f+1))/2-B(1,p))/(B(1,p+1)-
B(1,p)))+(E_HNYOM(3,o)+(E_HNYOM(3,o+1)-E_HNYOM(3,o))*(C(1,f+1)-
E_HNYOM(1,o))/(E_HNYOM(1,o+1)-E_HNYOM(1,o)))*(B(3,p)+(B(3,p+1)-B(3,p))*(C(1,f+1)-
B(1,p))/(B(1,p+1)-B(1,p))));
end
% Rúd lehajlásának számítása a másodrendű nyomatékkal, illetve az eredmény mikrométerbe
konvertálása
vx=1/(e* ((dk^4-db^4)*pi)/32)*enx*1000000;
vy=1/(e* ((dk^4-db^4)*pi)/32)*eny*1000000;
% Lehajlás 0-ra állítása, ha a csapágyak helyén kell számítani azt
if vh==H1 || vh==H2
vx=0;
vy=0;
end
if ~isempty(G_H2)
if vh==H3
vx=0;
vy=0;
end
end
% Program kerekítési hibáinak kijavítása
[~,s]=size(E_HNYOM);
for f=1:s
if E_HNYOM(2,f)>-10^-10 && E_HNYOM(2,f)<10^-10
E_HNYOM(2,f)=0;
end
if E_HNYOM(3,f)>-10^-10 && E_HNYOM(3,f)<10^-10
E_HNYOM(3,f)=0;
end
end
% Nyomatéki ábra töréspontjainak helyeit t vektorba töltjük
t=E_HNYOM(1,:);
% Nyomatéki ábra töréspontjainak x komponensét x vektorba töltjük
x=E_HNYOM(2,:);
% Nyomatéki ábra töréspontjainak y komponensét y vektorba töltjük
y=E_HNYOM(3,:);
% Tengely megrajzolásának végpontjai
p1=[0,0];
22
p2=[L,0];
% Rajzolt ábrák törlése újra ábrázoláshoz
delete(subplot(4,1,1))
delete(subplot(4,1,2))
delete(subplot(4,1,3))
delete(subplot(4,1,4))
% Tengely elrendezésének megrajzolása az X-Z síkon
subplot(4,1,1)
% Tengely vonala
line(p2,p1,'Color','black');
% Függőleges feliratozás elrejtése bal oldalt
set(gca,'YTick',[])
% Ábra szélességének beljebb kényszerítése láthatatlan vonalakkal, hogy egy vonalban
legyenek
p3=[-L/80,-L/80];
p4=[-1,1];
line(p3,p4,'Color','white');
p3=[L+L/80,L+L/80];
p4=[-L,L];
line(p3,p4,'Color','white');
% Első görgő megrajzolása
p3=[G_H1,G_H1-L/320];
p4=[-L/5+L/20,-L/5+L/40];
line(p3,p4,'Color','black');
p3=[G_H1-L/320,G_H1];
p4=[-L/5+L/40,-L/5];
line(p3,p4,'Color','black');
p3=[G_H1,G_H1+L/320];
p4=[-L/5+L/20,-L/5+L/40];
line(p3,p4,'Color','black');
p3=[G_H1+L/320,G_H1];
p4=[-L/5+L/40,-L/5];
line(p3,p4,'Color','black');
p3=[G_H1,G_H1+L/80];
p4=[0,-L/5+L/20];
line(p3,p4,'Color','black');
p3=[G_H1,G_H1-L/80];
p4=[0,-L/5+L/20];
line(p3,p4,'Color','black');
p3=[G_H1+L/80,G_H1-L/80];
p4=[-L/5+L/20,-L/5+L/20];
line(p3,p4,'Color','black');
% Második görgő megrajzolása
if ~isempty(G_H2)
p3=[G_H2,G_H2-L/320];
p4=[-L/5+L/20,-L/5+L/40];
line(p3,p4,'Color','black');
p3=[G_H2-L/320,G_H2];
p4=[-L/5+L/40,-L/5];
line(p3,p4,'Color','black');
p3=[G_H2,G_H2+L/320];
p4=[-L/5+L/20,-L/5+L/40];
line(p3,p4,'Color','black');
p3=[G_H2+L/320,G_H2];
p4=[-L/5+L/40,-L/5];
line(p3,p4,'Color','black');
p3=[G_H2,G_H2+L/80];
23
p4=[0,-L/5+L/20];
line(p3,p4,'Color','black');
p3=[G_H2,G_H2-L/80];
p4=[0,-L/5+L/20];
line(p3,p4,'Color','black');
p3=[G_H2+L/80,G_H2-L/80];
p4=[-L/5+L/20,-L/5+L/20];
line(p3,p4,'Color','black');
end
% Csukló megrajzolása
p3=[CS_H,CS_H-L/320];
p4=[0,-L/40];
line(p3,p4,'Color','black');
p3=[CS_H-L/320,CS_H];
p4=[-L/40,-L/20];
line(p3,p4,'Color','black');
p3=[CS_H,CS_H+L/320];
p4=[0,-L/40];
line(p3,p4,'Color','black');
p3=[CS_H+L/320,CS_H];
p4=[-L/40,-L/20];
line(p3,p4,'Color','black');
p3=[CS_H,CS_H+L/80];
p4=[-L/20,-L/5];
line(p3,p4,'Color','black');
p3=[CS_H,CS_H-L/80];
p4=[-L/20,-L/5];
line(p3,p4,'Color','black');
p3=[CS_H+L/80,CS_H-L/80];
p4=[-L/5,-L/5];
line(p3,p4,'Color','black');
% Erők nyilainak megrajzolása
[~,p]=size(A);
for f=1:p
if A(2,f)>0 || A(2,f)<0
p3=[A(1,f),A(1,f)];
p4=[L/40,L/3];
line(p3,p4,'Color','black');
% Ha az erő pozitív
if A(2,f)>0
p3=[A(1,f),A(1,f)-L/200];
p4=[L/3,L/3-L/10];
line(p3,p4,'Color','black');
p3=[A(1,f),A(1,f)+L/200];
p4=[L/3,L/3-L/10];
line(p3,p4,'Color','black');
% Ha negatív
else
p3=[A(1,f),A(1,f)-L/200];
p4=[L/40,L/40+L/10];
line(p3,p4,'Color','black');
p3=[A(1,f),A(1,f)+L/200];
p4=[L/40,L/40+L/10];
line(p3,p4,'Color','black');
end
% Nyíl mellé kiírása az erő mértékének N-ban
TXT=A(2,f);
TXT=num2str(TXT);
TXT=strcat(TXT,' N');
text(A(1,f),L/2,TXT)
end
24
end
% X irányt jelölő nyíl rajzolása
p3=[-L/40,-L/40];
p4=[L/40,L/3];
line(p3,p4,'Color','black');
p3=[-L/40,-L/40-L/200];
p4=[L/3,L/3-L/10];
line(p3,p4,'Color','black');
p3=[-L/40,-L/40+L/200];
p4=[L/3,L/3-L/10];
line(p3,p4,'Color','black');
% X felirat nyílhoz
text(-L/35,L/2,'X')
% Z irányt jelölő nyíl rajzolása
p3=[L+L/80,L+L/20];
p4=[0,0];
line(p3,p4,'Color','black');
p3=[L+L/20,L+L/30];
p4=[0,L/8];
line(p3,p4,'Color','black');
p3=[L+L/20,L+L/30];
p4=[0,-L/8];
line(p3,p4,'Color','black');
% Z felirat nyílhoz
text(L+L/18,0,'Z')
% Koncentrált nyomatékok megrajzolása
for f=1:ihnyom
if NY_HXM(1,f)>0 || NY_HXM(1,f)<0
p3=[NY_HH(1,f)-L/80,NY_HH(1,f)];
p4=[0,L/8];
line(p3,p4,'Color','black');
p3=[NY_HH(1,f),NY_HH(1,f)+L/80];
p4=[L/8,0];
line(p3,p4,'Color','black');
% Ha a nyomaték pozitív
if NY_HXM(1,f)<0
p3=[NY_HH(1,f)+L/80,NY_HH(1,f)+L/160];
p4=[0,-L/16];
line(p3,p4,'Color','black');
p3=[NY_HH(1,f)-L/80,NY_HH(1,f)];
p4=[0,-L/8];
line(p3,p4,'Color','black');
p3=[NY_HH(1,f)+L/160,NY_HH(1,f)+L/80];
p4=[-L/16,-L/19];
line(p3,p4,'Color','black');
p3=[NY_HH(1,f)+L/160,NY_HH(1,f)+L/160];
p4=[-L/16,-L/300];
line(p3,p4,'Color','black');
% Ha negatív
else
p3=[NY_HH(1,f)-L/80,NY_HH(1,f)-L/160];
p4=[0,-L/16];
line(p3,p4,'Color','black');
p3=[NY_HH(1,f)+L/80,NY_HH(1,f)];
p4=[0,-L/8];
line(p3,p4,'Color','black');
p3=[NY_HH(1,f)-L/160,NY_HH(1,f)-L/80];
25
p4=[-L/16,-L/19];
line(p3,p4,'Color','black');
p3=[NY_HH(1,f)-L/160,NY_HH(1,f)-L/160];
p4=[-L/16,-L/300];
line(p3,p4,'Color','black');
end
% Nyomaték mértékének kiírása az koncentrált nyomaték ábrája alatt
TXT=NY_HXM(1,f);
TXT=num2str(TXT);
TXT=strcat(TXT,' Nm');
text(NY_HH(1,f),-L/4,TXT)
end
end
% Nyomatéki ábra rajzolása
subplot(4,1,2)
% Rácsozott háttér bekapcsolása
grid on
% Teljes nyomatéki ábra megrajzolása t és x vektorokkal
line(t,x,'Color','black')
% Tengelyek feliratozása
ylabel('Hajlító nyomaték (Nm) x')
xlabel('Távolság (m) z')
% Minden töréspontnál kiírása a nyomaték értékének
for f=1:s
TXT=E_HNYOM(2,f);
TXT=num2str(TXT);
text(E_HNYOM(1,f),E_HNYOM(2,f),TXT)
end
% Ábra szélességének beljebb kényszerítése láthatatlan vonalakkal, hogy egy vonalban
legyenek
p3=[-L/80,-L/80];
p4=[-1,1];
line(p3,p4,'Color','white');
p3=[L+L/80,L+L/80];
p4=[-1,1];
line(p3,p4,'Color','white');
% Tengely elrendezésének megrajzolása az Y-Z síkon
subplot(4,1,3)
% Tengely vonala
line(p2,p1,'Color','black');
% Függőleges feliratozás elrejtése bal oldalt
set(gca,'YTick',[])
% Ábra szélességének beljebb kényszerítése láthatatlan vonalakkal, hogy egy vonalban
legyenek
p3=[-L/80,-L/80];
p4=[-1,1];
line(p3,p4,'Color','white');
p3=[L+L/80,L+L/80];
26
p4=[-L,L];
line(p3,p4,'Color','white');
% Első görgő megrajzolása
p3=[G_H1,G_H1-L/320];
p4=[-L/5+L/20,-L/5+L/40];
line(p3,p4,'Color','black');
p3=[G_H1-L/320,G_H1];
p4=[-L/5+L/40,-L/5];
line(p3,p4,'Color','black');
p3=[G_H1,G_H1+L/320];
p4=[-L/5+L/20,-L/5+L/40];
line(p3,p4,'Color','black');
p3=[G_H1+L/320,G_H1];
p4=[-L/5+L/40,-L/5];
line(p3,p4,'Color','black');
p3=[G_H1,G_H1+L/80];
p4=[0,-L/5+L/20];
line(p3,p4,'Color','black');
p3=[G_H1,G_H1-L/80];
p4=[0,-L/5+L/20];
line(p3,p4,'Color','black');
p3=[G_H1+L/80,G_H1-L/80];
p4=[-L/5+L/20,-L/5+L/20];
line(p3,p4,'Color','black');
% Második görgő megrajzolása
if ~isempty(G_H2)
p3=[G_H2,G_H2-L/320];
p4=[-L/5+L/20,-L/5+L/40];
line(p3,p4,'Color','black');
p3=[G_H2-L/320,G_H2];
p4=[-L/5+L/40,-L/5];
line(p3,p4,'Color','black');
p3=[G_H2,G_H2+L/320];
p4=[-L/5+L/20,-L/5+L/40];
line(p3,p4,'Color','black');
p3=[G_H2+L/320,G_H2];
p4=[-L/5+L/40,-L/5];
line(p3,p4,'Color','black');
p3=[G_H2,G_H2+L/80];
p4=[0,-L/5+L/20];
line(p3,p4,'Color','black');
p3=[G_H2,G_H2-L/80];
p4=[0,-L/5+L/20];
line(p3,p4,'Color','black');
p3=[G_H2+L/80,G_H2-L/80];
p4=[-L/5+L/20,-L/5+L/20];
line(p3,p4,'Color','black');
end
% Csukló megrajzolása
p3=[CS_H,CS_H-L/320];
p4=[0,-L/40];
line(p3,p4,'Color','black');
p3=[CS_H-L/320,CS_H];
p4=[-L/40,-L/20];
line(p3,p4,'Color','black');
p3=[CS_H,CS_H+L/320];
p4=[0,-L/40];
line(p3,p4,'Color','black');
p3=[CS_H+L/320,CS_H];
p4=[-L/40,-L/20];
line(p3,p4,'Color','black');
p3=[CS_H,CS_H+L/80];
p4=[-L/20,-L/5];
line(p3,p4,'Color','black');
p3=[CS_H,CS_H-L/80];
27
p4=[-L/20,-L/5];
line(p3,p4,'Color','black');
p3=[CS_H+L/80,CS_H-L/80];
p4=[-L/5,-L/5];
line(p3,p4,'Color','black');
% Erők nyilainak megrajzolása
[~,p]=size(A);
for f=1:p
if A(3,f)>0 || A(3,f)<0
p3=[A(1,f),A(1,f)];
p4=[L/40,L/3];
line(p3,p4,'Color','black');
% Ha az erő pozitív
if A(3,f)>0
p3=[A(1,f),A(1,f)-L/200];
p4=[L/3,L/3-L/10];
line(p3,p4,'Color','black');
p3=[A(1,f),A(1,f)+L/200];
p4=[L/3,L/3-L/10];
line(p3,p4,'Color','black');
% Ha negatív
else
p3=[A(1,f),A(1,f)-L/200];
p4=[L/40,L/40+L/10];
line(p3,p4,'Color','black');
p3=[A(1,f),A(1,f)+L/200];
p4=[L/40,L/40+L/10];
line(p3,p4,'Color','black');
end
% Nyíl mellé kiírása az erő mértékének N-ban
TXT=A(3,f);
TXT=num2str(TXT);
TXT=strcat(TXT,' N');
text(A(1,f),L/2,TXT)
end
end
% Y irányt jelölő nyíl rajzolása
p3=[-L/40,-L/40];
p4=[L/40,L/3];
line(p3,p4,'Color','black');
p3=[-L/40,-L/40-L/200];
p4=[L/3,L/3-L/10];
line(p3,p4,'Color','black');
p3=[-L/40,-L/40+L/200];
p4=[L/3,L/3-L/10];
line(p3,p4,'Color','black');
% Y felirat nyílhoz
text(-L/35,L/2,'Y')
% Z irányt jelölő nyíl rajzolása
p3=[L+L/80,L+L/20];
p4=[0,0];
line(p3,p4,'Color','black');
p3=[L+L/20,L+L/30];
p4=[0,L/8];
line(p3,p4,'Color','black');
28
p3=[L+L/20,L+L/30];
p4=[0,-L/8];
line(p3,p4,'Color','black');
% Z felirat nyílhoz
text(L+L/18,0,'Z')
% Koncentrált nyomatékok megrajzolása
for f=1:ihnyom
if NY_HYM(1,f)>0 || NY_HYM(1,f)<0
p3=[NY_HH(1,f)-L/80,NY_HH(1,f)];
p4=[0,L/8];
line(p3,p4,'Color','black');
p3=[NY_HH(1,f),NY_HH(1,f)+L/80];
p4=[L/8,0];
line(p3,p4,'Color','black');
% Ha a nyomaték pozitív
if NY_HYM(1,f)>0
p3=[NY_HH(1,f)+L/80,NY_HH(1,f)+L/160];
p4=[0,-L/16];
line(p3,p4,'Color','black');
p3=[NY_HH(1,f)-L/80,NY_HH(1,f)];
p4=[0,-L/8];
line(p3,p4,'Color','black');
p3=[NY_HH(1,f)+L/160,NY_HH(1,f)+L/80];
p4=[-L/16,-L/19];
line(p3,p4,'Color','black');
p3=[NY_HH(1,f)+L/160,NY_HH(1,f)+L/160];
p4=[-L/16,-L/300];
line(p3,p4,'Color','black');
% Ha negatív
else
p3=[NY_HH(1,f)-L/80,NY_HH(1,f)-L/160];
p4=[0,-L/16];
line(p3,p4,'Color','black');
p3=[NY_HH(1,f)+L/80,NY_HH(1,f)];
p4=[0,-L/8];
line(p3,p4,'Color','black');
p3=[NY_HH(1,f)-L/160,NY_HH(1,f)-L/80];
p4=[-L/16,-L/19];
line(p3,p4,'Color','black');
p3=[NY_HH(1,f)-L/160,NY_HH(1,f)-L/160];
p4=[-L/16,-L/300];
line(p3,p4,'Color','black');
end
% Nyomaték mértékének kiírása a koncentrált nyomaték ábrája alatt
TXT=NY_HYM(1,f);
TXT=num2str(TXT);
TXT=strcat(TXT,' Nm');
text(NY_HH(1,f),-L/4,TXT)
end
end
% Nyomatéki ábra rajzolása
subplot(4,1,4)
% Rácsozott háttér bekapcsolása
grid on
% Teljes nyomatéki ábra megrajzolása t és y vektorokkal
29
line(t,y,'Color','black')
% Tengelyek feliratozása
ylabel('Hajlító nyomaték (Nm) y')
xlabel('Távolság (m) z')
% Minden töréspontnál kiírása a nyomaték értékének
for f=1:s
TXT=E_HNYOM(3,f);
TXT=num2str(TXT);
text(E_HNYOM(1,f),E_HNYOM(3,f),TXT)
end
% Ábra szélességének beljebb kényszerítése láthatatlan vonalakkal, hogy egy vonalban
legyenek
p3=[-L/80,-L/80];
p4=[-1,1];
line(p3,p4,'Color','white');
p3=[L+L/80,L+L/80];
p4=[-1,1];
line(p3,p4,'Color','white');
% Felhasználói felület tetején kiírása a lehajlás mértékének
textLabel = sprintf('Elmozdulás X irányba: %f mikrométer', vx);
set(handles.text5, 'String', textLabel);
textLabel = sprintf('Elmozdulás Y irányba: %f mikrométer', vy);
set(handles.text7, 'String', textLabel);
% Felhasználói felület tetején kiírása a csapágyak tartóerőjének, ha a felhasználó három
csapágyat adott meg
if ~isempty(G_H2)
textLabel = sprintf('Csapágyakon erő X irányba sorrendben: %.3f %.3f %.3f N', H1_EX, q(2,1),
H2_EX);
set(handles.text8, 'String', textLabel);
textLabel = sprintf('Csapágyakon erő Y irányba sorrendben: %.3f %.3f %.3f N', H1_EY, q(3,1),
H2_EY);
set(handles.text10, 'String', textLabel);
% Felhasználói felület tetején kiírása a csapágyak tartóerőjének, ha a felhasználó két
csapágyat adott meg
else
textLabel = sprintf('Csapágyakon erő X irányba sorrendben: %.3f %.3f N', H1_EX, H2_EX);
set(handles.text8, 'String', textLabel);
textLabel = sprintf('Csapágyakon erő Y irányba sorrendben: %.3f %.3f N', H1_EY, H2_EY);
set(handles.text10, 'String', textLabel);
end