Poniższy algorytm został przedstawiony w odcinku nr 204:
--> kill(all); Obliczenia sprężyny naciskowej - schemat obliczeniowy #1 Zadanie 1: Oblicz sprężynę naciskową, która pod zadanym naciskiem siłą F nie przekroczy wymaganego wymiaru ln 2 Założenia Maksymalna siła F, która działa na sprężynę, wyrażona w [N]: --> F:35$; Długość sprężyny ln, która nie może zostać przekroczona po obciążeniu zadaną siłą, w [mm]: --> l_n:24$; Sprężyna wykonywana z drutu wg standardu SH (High Tensile Strength) ISO 10270-1, gdzie: Wytrzymałość na rozciąganie Rm dla drutu: --> Rm:2230$; Naprężenia dopuszczalne dla materiału wynoszą [MPa]: --> %tau_dop:Rm/2.1; - moduł Kirchhoffa dla materiału wynosi [MPa]: 1) Dla stali wg ISO 10270-1, G = 81500 MPa 2) Dla stali nierdzewnych wg ISO 10270-3, G = 70000 MPa --> G:81500$ 3 Obliczenia 3.1 Krok 1: Dobór parametru opisującego wskaźnik sprężyny "w": W typowych zastosowaniach "w" zawiera się w przedziale <7 - 10> Przyjmuję zatem: 3.2 Krok 2: Obliczenie współczynnika poprawkowego "k": --> k:float(1+(5/4)*(1/w)+(7/8)*(1/w)^2+(1/w)^3); 3.3 Krok 3: Obliczenie wymaganej średnicy drutu sprężyny d [mm]: --> d:float(sqrt(8*F*w*k/(%pi*%tau_dop))); Na podstawie dostępności rzeczywistych wymiarów drutu, dobieram ostateczną średnicę: --> d_real:1$ Na podstawie wartości "d_real" koryguję wartość parametru "w" celem korekty wartości w kroku nr 1: --> iter:0$; --> if d_real>d then w_test:w$ while d_real-d>0.01 do ( w_test:w_test+0.1, k_test:1+(5/4)*(1/w_test)+(7/8)*(1/w_test)^2+(1/w_test)^3, d:sqrt(8*F*w_test*k_test/(%pi*%tau_dop)), iter:iter+1, if iter>200 then ( return(w_test) ) ); --> if iter>0 then print(concat("Iteracja nr ", iter, ")"), concat("w:", float(round(w_test*10^2)/10^2)), concat("d:", float(round(d*10^2)/10^2))) else print("Korekta nie jest wymagana.")$ --> d:d_real$ 3.4 Krok 4: Obliczenie wymaganej średnicy podziałowej D [mm]: --> D:float(round(w*d*10^2)/10^2); --> D:8$ --> w_real:float(round(D/d*10^2)/10^2); 3.5 Krok 5: Określenie liczby zwojów nieczynnych z_n: --> z_n:2; 3.6 Krok 6: Określenie sposobu wykonania zakończenia zwojów p: Warianty wykonania zakończenia zwojów: - zwoje przyłożone i szlifowane, wówczas p = -0,5 - zwoje przyłożone i nieszlifowane, gdy całkowita liczba zwojów jest liczbą połówkową, wówczas p = 0,5 - zwoje przyłożone i nieszlifowany, gdy całkowita liczba zwojów jest liczbą całkowitą, wówczas p = 1 --> p:-0.5; 3.7 Krok 7: Określenie zależności pomiędzy średnicą drutu d a wskaźnikiem w: Podana poniżej aproksymacja może zostać zastosowana tylko w przedziale 6 <= w <= 10: --> if d<0.8 then x:0.03*w_real+0.04 else x:0.03*w_real-0.04$; --> float(x); 3.8 Krok 8: Obliczenie liczby zwojów czynnych z_c: --> z_c:float((l_n-d*(z_n+p))/(d*(1+x))); Zakładam ostateczną wartość parametru definiującego liczbę czynnych zwojów "z_c" 3.9 Krok 9: Obliczenie całkowitej liczby zwojów "z": --> z:z_n+z_c; 3.10 Krok 10: Obliczenie strzałki ugięcia "f_n" dla zadanej siły "F": --> f_n:float(8*F*z_c*D^3/(G*d^4)); 3.11 Krok 11: Obliczenie sumy minimalnego prześwitu międzyzwojnego "a": --> a:x*z_c*d; 3.12 Krok 12: Obliczenie długości sprężyny zblokowanej "l_bl": --> l_bl:d*(z+p); 3.13 Krok 13: Obliczenie długości sprężyny w stanie swobodnym "l_0": --> l_0:l_n+f_n; 3.14 Krok 14: Obliczenie sztywności sprężyny "c": --> c:F/f_n; 3.15 Krok 15: Sprawdzenie naprężeń dla założonej siły: --> %tau:float(8*F*w_real*k/(%pi*d^2)); --> if %tau>%tau_dop then print(concat("Wartość naprężeń dopuszczalnych została przekroczona o: ", float(round(10^2*100*(%tau-%tau_dop)/%tau)/10^2), "%")) else print("Korekta nie jest wymagana.")$ Rzeczywisty współczynnik bezpieczeństwa wynosi: --> %tau_real:Rm/%tau; 3.16 Krok 16: Sprawdzenie wartości parametru "l_n" przy maksymalnej sile "F": --> l_n_final:l_0-f_n; 4 Podsumowanie 4.1 Wyprowadzenie podsumowania --> t[1]:concat("Średnica drutu d = ", d, " mm")$ --> t[2]:concat("Średnica podziałowa sprężyny D = ", D, " mm")$; --> t[3]:concat("Średnica wewnętrzna sprężyny Dw = ", float(round((D-d)*10^2)/10^2), " mm")$ --> t[4]:concat("Średnica zewnętrzna sprężyny Dz = ", float(round((D+d)*10^2)/10^2), " mm")$ --> t[5]:concat("Wskaźnik sprężyny w = ", float(round(w_real*10^2)/10^2))$ --> t[6]:concat("Liczba zwojów czynnych z_c = ", z_c)$ --> t[7]:concat("Całkowita liczba zwojów z = ", z)$ --> t[8]:concat("Długość sprężyny w stanie swobodnym L_0 = ", float(round(l_0*10^2)/10^2), " mm")$ --> t[9]:concat("Długość sprężyny w stanie ściśniętym L_n = ", float(round(l_n_final*10^2)/10^2), " mm")$; --> t[10]:concat("Ugięcie sprężyny pod działaniem siły F = ", F, " N wynosi f_n = ", float(round(f_n*10^2)/10^2), " mm")$ --> t[11]:concat("Sztywność sprężyny c = ", float(round(c*10^2)/10^2), " N/mm")$ 4.2 Rezultat --> for i:1 step 1 thru 11 do print(t[i])$;