Inżynier Programista Strona uzupełniająca kanału Inżynier Programista

Obliczenia połączeń wielowypustowych

Poniższy algorytm został przedstawiony w odcinku nr 232:

Jeżeli chciałbyś wesprzeć rozwój mojego kanału:

Postaw mi kawę na buycoffee.to

 -->	kill(all)$
  1 Dane wejściowe
Określ wielkość momentu skręcającego [N m]
 -->	M_s : 50$
Określ wartość naprężeń dopuszczalnych ze względu na skręcanie wału [MPa]
 -->	tau_dop : 40$
Określ wartość naprężeń dopuszczalnych ze względu na naciski powierzchniowe dla piasty [MPa]
 -->	sigma_dop: 45$
Określ współczynnik typu obciążenia [-]
 -->	f: 1$
Określ współczynnik sprawności połączenia [-]
 -->	ni: 0.75$
  2 Tablica danych rozmiarów
Rozmiary połączenia wg ISO 14 w postaci [d, D, B, N]
 -->	Rozmiary : [
	            [11, 14, 3, 6],
	            [13, 16, 3.5, 6],
	            [16, 20, 4, 6],
	            [18, 22, 5, 6],
	            [21, 25, 5, 6],
	            [23, 26, 6, 6],
	            [23, 28, 6, 6],
	            [26, 30, 6, 6],
	            [26, 32, 6, 6],
	            [28, 32, 7, 6],
	            [28, 34, 7, 6],
	            [32, 36, 6, 8],
	            [32, 38, 6, 8],
	            [36, 40, 7, 8],
	            [36, 42, 7, 8],
	            [42, 46, 8, 8],
	            [42, 48, 8, 8],
	            [46, 50, 9, 8],
	            [46, 54, 9, 8],
	            [52, 58, 10, 8],
	            [52, 60, 10, 8],
	            [56, 62, 10, 8],
	            [56, 65, 10, 8],
	            [62, 68, 12, 8],
	            [62, 72, 12, 8],
	            [72, 78, 12, 10],
	            [72, 82, 12, 10],
	            [82, 88, 12, 10],
	            [82, 92, 12, 10],
	            [92, 98, 14, 10],
	            [92, 102, 14, 10],
	            [102, 108, 16, 10],
	            [102, 112, 16, 10],
	            [112, 120, 18, 10],
	            [112, 125, 18, 10],
	            [0, 0, 0, 0]
	]$
  3 Funkcje
 -->	wskaznik_przekroju(d, D) :=
	(
	    0.024 * (d + D)^3
	)$
 -->	naprezenia_styczne(M, W, f) :=
	(
	    M*10^3 / (W * f)
	)$
 -->	wysokosc_zeba(d, D) :=
	(
	    0.5 * (D - d)
	)$
 -->	srednica_podzialowa(d, D) :=
	(
	    0.5 * (d + D)
	)$
 -->	naciski_powierzchniowe(M, h, n, d, s) :=
	(
	    if d > 0 then
	        2 * M * 10^3 / (d * h * n * s * ni)
	    else
	        0
	)$
 -->	MyRound(val, gain) :=
		(
		    float(round(val * 10 ^ gain) / 10 ^ gain)
		)$
 -->	pokaz_wyniki_wal(i, tau) :=
	(
	    prints : [
	        concat("Dla zadanego momentu: ", M_s, " N m, dobrano wał o wymiarach:"),
	        concat("d = ", Rozmiary[i][1], " mm"),
	        concat("D = ", Rozmiary[i][2], " mm"),
	        concat("B = ", Rozmiary[i][3], " mm"),
	        concat("Liczba zębów = ", Rozmiary[i][4]),
	        concat("Wartość naprężeń stycznych = ", MyRound(tau, 1), " MPa <= ", tau_dop, " MPa"),
	        concat("Oznaczenie: ", Rozmiary[i][4], "x", Rozmiary[i][1], "x", Rozmiary[i][2])
	    ],
	    for j : 1 thru length(prints) step 1 do
	        print(prints[j])
	)$
 -->	pokaz_wyniki_piasta(dlugosc_piasty) :=
	(
	    prints : [
	        concat("Obliczono wymaganą długość piasty przy naprężeniach dopuszczalnych: ", sigma_dop, " MPa:"),
	        concat("L = ", MyRound(dlugosc_piasty, 1), " mm")
	    ],
	    for j : 1 thru length(prints) step 1 do
	        print(prints[j])
	)$
  4 Obliczenia wału
 -->	for i:1 thru length(Rozmiary) - 1 step 1 do
	(
	    tau_obl : naprezenia_styczne(M_s, wskaznik_przekroju(Rozmiary[i][1], Rozmiary[i][2]), f),
	    if tau_obl < tau_dop then
	    (
	        ret : [i, tau_obl],
	        return (ret)
	    ),
	    if i = length(Rozmiary) - 1 then
	    (
	        ret : [i + 1, tau_obl],
	        return (ret)
	    )
	)$
  5 Obliczenia piasty
 -->	dl_piasty : naciski_powierzchniowe(
	    M_s,
	    wysokosc_zeba(Rozmiary[ret[1]][1], Rozmiary[ret[1]][2]),
	    Rozmiary[ret[1]][4],
	    srednica_podzialowa(Rozmiary[ret[1]][1], Rozmiary[ret[1]][2]),
	    sigma_dop
	)$
  6 Wyniki
 -->	pokaz_wyniki_wal(ret[1], ret[2])$
 -->	pokaz_wyniki_piasta(dl_piasty)$
  7 Obliczenia uproszczone
 -->	szukany_wskaznik(M, f, tau) :=
	(
	    1000 * M * f / tau
	)$
 -->	szukana_srednica(W) :=
	(
	    (16 * W / %pi)^(1/3)
	)$
 -->	W: szukany_wskaznik(M_s, f, tau_dop)$
 -->	D : szukana_srednica(W)$
 -->	d_test : 0$
 -->	licznik : 1$
 -->	while D > d_test do
	(
	    licznik : licznik + 1,
	    d_test : Rozmiary[licznik][1],
	    if licznik + 1 > length(Rozmiary) then
	    (
	        return()
	    )
	)$
 -->	tau : naprezenia_styczne(M_s, wskaznik_przekroju(Rozmiary[licznik][1], Rozmiary[licznik][2]), f)$
 -->	dl_piasty : naciski_powierzchniowe(
	    M_s,
	    wysokosc_zeba(Rozmiary[licznik][1], Rozmiary[licznik][2]),
	    Rozmiary[licznik][4],
	    srednica_podzialowa(Rozmiary[licznik][1], Rozmiary[licznik][2]),
	    sigma_dop
	)$
 -->	pokaz_wyniki_wal(licznik, tau)$
 -->	pokaz_wyniki_piasta(dl_piasty)$