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

Obliczanie sprężyny naciskowej - sposób 2

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

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

Postaw mi kawę na buycoffee.to

 -->	kill(all)$
Obliczenia sprężyny naciskowej - schemat obliczeniowy #2
  1 Wstęp
Zadanie: Oblicz parametry sprężyny naciskowej, znając wymiary rzeczywistej sprężyny
  2 Dane:
 -->	L:[
	    /*1, Średnica drutu [mm]:*/             2, 
	    /*2, Średnica zewnętrzna [mm]:*/        17.6, 
	    /*3, Długość swobodna [mm]:*/           46, 
	    /*4, Liczba zwojów [-]:*/               8.5, 
	    /*5, Liczba zwojów nieczynnych [-]:*/   2, 
	    /*6, Metoda zakończenia zwojów [-]:*/   -0.5, 
	    /*7, Moduł Kirchhoffa [GPa]:*/          81
	];
  3 Funkcje
 -->	LiczWskaznikSprezyny(d, D):=
	(
	    (D-d)/d
	)$
 -->	LiczWspolczynnikPoprawkowy(w):=
	(
	    1+(5/4)*(1/w)+(7/8)*(1/w)^2+(1/w)^3
	)$
 -->	LiczZaleznoscWskaznikaISrednicyDrutu(w, d):=
	/*Poniższa funkcja prawdziwa tylko dla w: <6; 10>*/
	(
	    if d<0.8 then
	        x:0.03*w+0.04
	    else
	        x:0.03*w-0.04
	)$
 -->	LiczZwojeCzynne(z, z_n):=
	(
	    z-z_n
	)$
 -->	LiczSumePrzeswitowMiedzyzwojowych(d, z_c, x):=
	(
	    x*z_c*d
	)$
 -->	LiczDlugoscScisnietejSprezyny(d, z_n, z_c, x, p):=
	(
	    d*z_n+(d*x+d)*z_c+d*p
	)$
 -->	LiczDlugoscZablokowanejSprezyny(d, z, p):=
	(
	    d*(z+p)
	)$
 -->	LiczStrzalkeUgiecia(L_0, l_n):=
	(
	    L_0-l_n
	)$
 -->	LiczSileRoboczaSprezyny(d, D, f_n, z_c, G):=
	(
	    G*10^3*d^4*f_n/(8*D^3*z_c)
	)$
 -->	LiczSztywnosc(F, f_n):=
	(
	    F/f_n
	)$
 -->	MyRound(val, gain):=
	(
	    float(round(val*10^gain)/10^gain)
	)$
 -->	DrukujWyniki(results):=
	(
	    for i:1 thru length(results) step 1 do
	        print(results[i])
	)$
  4 Obliczenia
 -->	(
	    tolerancjaSily:10, /*całkowita*/
	    D:L[2]-L[1],
	    w:LiczWskaznikSprezyny(L[1], D),
	    k:LiczWspolczynnikPoprawkowy(w),
	    x:LiczZaleznoscWskaznikaISrednicyDrutu(w, L[1]),
	    z_c:LiczZwojeCzynne(L[4], L[5]),
	    a:LiczSumePrzeswitowMiedzyzwojowych(L[1], z_c, x),
	    l_n:LiczDlugoscScisnietejSprezyny(L[1], L[5], z_c, x, L[6]),
	    l_bl:LiczDlugoscZablokowanejSprezyny(L[1], L[4], L[6]),
	    f_n:LiczStrzalkeUgiecia(L[3], l_n),
	    F:LiczSileRoboczaSprezyny(L[1], D, f_n, z_c, L[7]),
	    F_min:F-(F*0.5*tolerancjaSily/100),
	    F_max:F+(F*0.5*tolerancjaSily/100),
	    F:[F_min, F, F_max],
	    c:LiczSztywnosc(F, f_n)
	)$;
 -->	PrintList:[
	    concat("Średnica drutu d = ", L[1], " mm"),
	    concat("Średnica podziałowa sprężyny D = ", D, " mm"),
	    concat("Średnica wewnętrzna sprężyny Dw = ", MyRound(D-L[1], 2), " mm"),
	    concat("Średnica zewnętrzna sprężyny Dz = ", MyRound(D+L[1], 2), " mm"),
	    concat("Wskaźnik sprężyny w = ", MyRound(w, 2)),
	    concat("Liczba zwojów czynnych z_c = ", z_c),
	    concat("Całkowita liczba zwojów z = ", L[4]),
	    concat("Długość sprężyny w stanie swobodnym L_0 = ", MyRound(L[3], 2), " mm"),
	    concat("Długość sprężyny w stanie ściśniętym l_n = ", MyRound(l_n, 2), " mm"),
	    concat("Ugięcie sprężyny pod działaniem siły F = ", MyRound(F[2], 2), " N wynosi f_n = ", MyRound(f_n, 2), " mm"),
	    concat("Zakres siły roboczej uwzględniając tolerancję siły, F = ", MyRound(F_min, 2), " N - ", MyRound(F_max, 2), " N, c = ", MyRound(c[2], 2), " [N/mm]"),
	    concat("Sztywność sprężyny c = ", MyRound(c[1], 2), " N/mm - ", MyRound(c[3], 2), " N/mm")
	]$
  5 Wyniki
 -->	DrukujWyniki(PrintList)$