REM Зубчатые колеса прямозубые цилиндрические (+Угол исходного профиля)
DIM XL1[1]
DIM YL1[1]
DIM XL2[1]
DIM YL2[1]
DIM XL3[1]
DIM YL3[1]
DIM XL4[1]
DIM YL4[1]
DIM XL5[1]
DIM YL5[1]
DIM XL6[1]
DIM YL6[1]
DIM XL7[1]
DIM YL7[1]
DIM XL8[1]
DIM YL8[1]
DIM XL9[1]
DIM YL9[1]
DIM XL10[1]
DIM YL10[1]
DIM XL11[1]
DIM YL11[1]
DIM XL12[1]
DIM YL12[1]
DIM XR3[1]
DIM YR3[1]
DIM XR4[1]
DIM YR4[1]
DIM XR5[1]
DIM YR5[1]
DIM XR6[1]
DIM YR6[1]
DIM XR7[1]
DIM YR7[1]
DIM XR8[1]
DIM YR8[1]
DIM XR9[1]
DIM YR9[1]
DIM XR10[1]
DIM YR10[1]
m = 14.
z = 34.
x = 0.
Lw=20 ' Угол исходного профиля
call DLG_BOX("", 315, 15, 285, 390, id#)
call dlg_picbmp(10, 15, "macgml2.dll", "ZUBKOLA", pic_id#)
call DLG_BUTTON("Вывести контур", 335, 370, 160, 20, 1, bt_id#)
call DLG_BUTTON("Cancel", 515, 370, 60, 20, 0, bt_id#)
call dlg_set_real("Модуль колеса m ", 525, 30, 70, 20, m, 0, m#)
call dlg_set_real("Число зубъев колеса z ", 525, 60, 70, 20, z, 0, z#)
call dlg_set_real("Коэффициент смещения ", 525, 90, 70, 20, x, 0, x#)
call dlg_set_real("Угол исходного профиля ", 525, 120, 70, 20, Lw, 0, Lw#)
call DLG_BUTTON("Выполнить расчет", 415, 150, 150, 20, 2, bt_id#)
call dlg_set_real("Делительный диаметр D ", 525, 180, 70, 20, D, 0, D#)
call dlg_set_real("Основной диаметр ", 525,210, 70, 20, D1, 0, D1#)
call dlg_set_real("Диаметр вершин зубъев Da", 525,240, 70, 20, Da, 0, Da#)
call dlg_set_real("Диаметр впадин Df ", 525, 270, 70, 20, Df, 0, Df#)
do
call DLG_SHOW("Зубчатые колеса прямозубые цилиндрические", -1, -1, 620, 440, ret#)
if(ret# = 2) then
call dlg_get_real( m#,_m)
call dlg_get_real( z#,_z)
call dlg_get_real( x#,_x)
call dlg_get_real( Lw#,_Lw)
' Расчеты исходных точек
' Вводим основные коэффициенты зацепления
r=0.4*_m 'Радиус переходной кривой на впадине зубьев
IF m>1 THEN
r=0.2*_m
ENDIF
rv=0.2*_m 'Радиус на вершине зубьев
c=0.25 ' Коэф-ент радиального зазора
Ha=1 'Коэффициент высоты зуба
_Lw=GRADRAD(_Lw) ' Угол исходного профиля в радианах
InvLw=TAN(_Lw)-_Lw 'Инвалюта угла
' расчетные параметры колеса
_D=_m*_z 'Делительный диаметр
_D1=_D*COS(_Lw) ' Основной диаметр
Ro=_D1/2 ' Радиус основной окружности
_Da=_D+2*(Ha+_x)*_m 'Диаметр вершин зубъев
Ra=Da/2 'Радиус вершин
_Df=_D-2*(Ha+c-_x)*_m 'Диаметр впадин
Rf=_Df/2 'Радиус впадин
call dlg_set_real_val(D#, _D)
call dlg_set_real_val(D1#, _D1)
call dlg_set_real_val(Da#, _Da)
call dlg_set_real_val(Df#, _Df)
endif
loop while ( ret# <> 1 AND ret# <> 0 )
if ret# = 1 then
call dlg_get_real( m#,_m)
call dlg_get_real( z#,_z)
call dlg_get_real( x#,_x)
call dlg_get_real( Lw#,_Lw)
' Расчеты исходных точек
' Вводим основные коэффициенты зацепления
r=0.4*_m 'Радиус переходной кривой на впадине зубьев
IF m>1 THEN
r=0.2*_m
ENDIF
rv=0.2*_m 'Радиус на вершине зубьев
c=0.25 ' Коэф-ент радиального зазора
Ha=1 'Коэффициент высоты зуба
_Lw=GRADRAD(_Lw) ' Угол исходного профиля в радианах
InvLw=TAN(_Lw)-_Lw 'Инвалюта угла
' расчетные параметры колеса
D=_m*_z 'Делительный диаметр
D1=D*COS(_Lw) ' Основной диаметр
Ro=D1/2 ' Радиус основной окружности
Da=D+2*(Ha+_x)*_m 'Диаметр вершин зубъев
Ra=Da/2 'Радиус вершин
Df=D-2*(Ha+c-_x)*_m 'Диаметр впадин
Rf=Df/2 'Радиус впадин
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
CALL CREATE_CONTOUR(C1@,ERR#)
' Определение вида переходной кривой
IF Rf+r<Ro THEN ' Условие присутствия в переходной кривой прямого участка
' Координаты 3-й точки - ( 3-я точка дуги впадины зуба или 1-я точка радиуса r)
A3=-ASIN(r/(Rf+r))
X3=Rf*SIN(A3)
Y3=Rf*COS(A3)
' Координаты 2-й точки - (2-я точка дуги впадины зуба)
A2=InvLw-2*PI/(4*_z)
X2=Rf*SIN(A2)
Y2=Rf*COS(A2)
' Координаты 1-й точки -( 1-я точка дуги впадины зуба)
A1=2*A2-A3
X1=Rf*SIN(A1)
Y1=Rf*COS(A1)
' Координаты 4-й точки - (2-я точка радиуса r)
A04=PI/4
X4=-r+r*COS(A04)
Y4=(Rf+r)*COS(A3)-r*SIN(A04)
' Координаты 5-й точки - ( 3-я точка радиуса r или 1-я точка переходной прямой)
A5=0
X5=0
Y5=(Rf+r)*COS(A3)
' Координаты 6-й точки - (2-я точка переходной прямой или 1-я точка эвольвенты)
A6=0
X6=Ro*SIN(A6)
Y6=Ro*COS(A6)
Ae1=0
ELSEIF Rf+r>=Ro THEN
L5=SQRT((Rf+r)^2-Ro^2)-r '- ( 3-я точка радиуса r или 1-я точка эвольвенты)
R5=SQRT(Ro^2+L5^2)
A05= ACOS(Ro/R5)
A5=TAN(A05)-A05
X5=R5*SIN(A5)
Y5=R5*COS(A5)
X6=X5
Y6=Y5
Ae1=A05+A5
A03=ACOS(Ro/(Rf+r)) 'Внимание
A3=A5+A05-A03
X3=Rf*SIN(A3)
Y3=Rf*COS(A3)
X4=(Rf+r)*SIN(A3)+r*COS(PI/4)
Y4=(Rf+r)*COS(A3)-r*SIN(PI/4)
A2=InvLw-2*PI/(4*_z)
X2=Rf*SIN(A2)
Y2=Rf*COS(A2)
A1=2*A2-A3
X1=Rf*SIN(A1)
Y1=Rf*COS(A1)
ENDIF
' Координаты 7-й точки - ( средняя точка эвольвенты)
A7=InvLw
X7=D/2*SIN(InvLw)
Y7=D/2*COS(InvLw)
' Координаты 8-й точки - ( конечная точка эвольвенты)
R08=Ra-rv
A08=ACOS(Ro/R08)
L08=SQRT(R08*R08-Ro*Ro)
A80=ATAN((L08+rv)/Ro)
R8=SQRT((L08+rv)*(L08+rv)+Ro*Ro)
A8=TAN(A80)-A80
X8=R8*SIN(A8)
Y8=R8*COS(A8)
Ae2=A80+A8
' Координаты 10-й точки - ( 3-я точка дуги сопряжения и первая точка дуги вершины)
A10=A8+A80-A08
'A10=TAN(A08)-A08
X10=Ra*SIN(A10)
Y10=Ra*COS(A10)
' Координаты 9-й точки - ( 2-я точка дуги сопряжения )
X9=R08*SIN(A10)
Y9=R08*COS(A10)+rv
' Координаты 11-й точки - ( 2-я точка дуги вершины )
A11=InvLw+2*PI/(4*_z)
X11=Ra*SIN(A11)
Y11=Ra*COS(A11)
' Координаты 12-й точки - ( 3-я точка дуги вершины )
A12=A11+A11-A10
X12=Ra*SIN(A12)
Y12=Ra*COS(A12)
'Перерасчитаем элементы для каждого зуба колеса с учетом смещения и
'симметричного расположения относительно оси Y
'для чего повернем точку №1 на угол Ap1=A11-Adow+Az, где угол Adow - угол смещения
'точки №2и№11 на угол Ap2=A11+Az
'точки с №3-по№10 на угол Ap3=A11+Adow+Az
Adow=_x*_m*TAN(_Lw)*360/PI/_m/_z
Adow=GRADRAD(Adow)
N#=_z-1
Ae1=RADGRAD(Ae1)
Ae2=RADGRAD(Ae2)
FOR I#=0 TO N# STEP1
'Az=2*PI/z*I#
Ap1=-A11+Adow+2*PI/_z*I#
Ap2=-A11+2*PI/_z*I#
Ap3=-A11-Adow+2*PI/_z*I#
ALp1=A11+Adow-2*PI/_z*I#
ARp3=-A11-Adow-2*PI/_z*I#
ALp1=RADGRAD(ALp1)+90
ARp1=RADGRAD(ARp3)+90
Ap11=2*PI/_z*I#
Ap12=2*PI/_z*I#
Ap13=2*PI/_z*I#
' Координаты левой стороны зуба
XL1[I#]=X1*COS(Ap1)+Y1*SIN(Ap1)
YL1[I#]=-X1*SIN(Ap1)+Y1*COS(Ap1)
XL2[I#]=X2*COS(Ap2)+Y2*SIN(Ap2)
YL2[I#]=-X2*SIN(Ap2)+Y2*COS(Ap2)
XL3[I#]=X3*COS(Ap3)+Y3*SIN(Ap3)
YL3[I#]=-X3*SIN(Ap3)+Y3*COS(Ap3)
XL4[I#]=X4*COS(Ap3)+Y4*SIN(Ap3)
YL4[I#]=-X4*SIN(Ap3)+Y4*COS(Ap3)
XL5[I#]=X5*COS(Ap3)+Y5*SIN(Ap3)
YL5[I#]=-X5*SIN(Ap3)+Y5*COS(Ap3)
XL6[I#]=X6*COS(Ap3)+Y6*SIN(Ap3)
YL6[I#]=-X6*SIN(Ap3)+Y6*COS(Ap3)
XL7[I#]=X7*COS(Ap3)+Y7*SIN(Ap3)
YL7[I#]=-X7*SIN(Ap3)+Y7*COS(Ap3)
XL8[I#]=X8*COS(Ap3)+Y8*SIN(Ap3)
YL8[I#]=-X8*SIN(Ap3)+Y8*COS(Ap3)
XL9[I#]=X9*COS(Ap3)+Y9*SIN(Ap3)
YL9[I#]=-X9*SIN(Ap3)+Y9*COS(Ap3)
XL10[I#]=X10*COS(Ap3)+Y10*SIN(Ap3)
YL10[I#]=-X10*SIN(Ap3)+Y10*COS(Ap3)
XL11[I#]=X11*COS(Ap2)+Y11*SIN(Ap2)
YL11[I#]=-X11*SIN(Ap2)+Y11*COS(Ap2)
XL12[I#]=X12*COS(Ap1)+Y12*SIN(Ap1)
YL12[I#]=-X12*SIN(Ap1)+Y12*COS(Ap1)
' Координаты правой стороны зуба
XR3[I#]=-XL3[0]*COS(Ap13)+YL3[0]*SIN(Ap13)
YR3[I#]=XL3[0]*SIN(Ap13)+YL3[0]*COS(Ap13)
XR4[I#]=-XL4[0]*COS(Ap13)+YL4[0]*SIN(Ap13)
YR4[I#]=XL4[0]*SIN(Ap13)+YL4[0]*COS(Ap13)
XR5[I#]=-XL5[0]*COS(Ap13)+YL5[0]*SIN(Ap13)
YR5[I#]=XL5[0]*SIN(Ap13)+YL5[0]*COS(Ap13)
XR6[I#]=-XL6[0]*COS(Ap13)+YL6[0]*SIN(Ap13)
YR6[I#]=XL6[0]*SIN(Ap13)+YL6[0]*COS(Ap13)
XR7[I#]=-XL7[0]*COS(Ap13)+YL7[0]*SIN(Ap13)
YR7[I#]=XL7[0]*SIN(Ap13)+YL7[0]*COS(Ap13)
XR8[I#]=-XL8[0]*COS(Ap13)+YL8[0]*SIN(Ap13)
YR8[I#]=XL8[0]*SIN(Ap13)+YL8[0]*COS(Ap13)
XR9[I#]=-XL9[0]*COS(Ap13)+YL9[0]*SIN(Ap13)
YR9[I#]=XL9[0]*SIN(Ap13)+YL9[0]*COS(Ap13)
XR10[I#]=-XL10[0]*COS(Ap13)+YL10[0]*SIN(Ap13)
YR10[I#]=XL10[0]*SIN(Ap13)+YL10[0]*COS(Ap13)
CALL CREATE_ARC_3P(XL1[I#],YL1[I#],XL2[I#],YL2[I#],XL3[I#],YL3[I#],E1@,ERR#)
CALL ADD_ELEM_CONT (C1@,E1@,ERR#)
CALL CREATE_ARC_3P(XL3[I#],YL3[I#],XL4[I#],YL4[I#],XL5[I#],YL5[I#],E2@,ERR#)
CALL ADD_ELEM_CONT (C1@,E2@,ERR#)
IF Rf+r<Ro THEN
CALL CREATE_LINE(XL5[I#],YL5[I#],XL6[I#],YL6[I#],E3@,ERR#)
CALL ADD_ELEM_CONT (C1@,E3@,ERR#)
ENDIF
CALL CREATE_EVOLVENT(0.,0.,Ro,-Ae1,-Ae2,E4@,ERR#)
CALL ROTATE(E4@,0.,0.,ALp1)
'CALL CREATE_ARC_3P(XL6[I#],YL6[I#],XL7[I#],YL7[I#],XL8[I#],YL8[I#],E4@,ERR#)
CALL ADD_ELEM_CONT (C1@,E4@,ERR#)
CALL CREATE_ARC_3P(XL8[I#],YL8[I#],XL9[I#],YL9[I#],XL10[I#],YL10[I#],E5@,ERR#)
CALL ADD_ELEM_CONT (C1@,E5@,ERR#)
CALL CREATE_ARC_3P(XL10[I#],YL10[I#],XL11[I#],YL11[I#],XL12[I#],YL12[I#],E6@,ERR#)
CALL ADD_ELEM_CONT (C1@,E6@,ERR#)
CALL CREATE_ARC_3P(XR10[I#],YR10[I#],XR9[I#],YR9[I#],XR8[I#],YR8[I#],E7@,ERR#)
CALL ADD_ELEM_CONT (C1@,E7@,ERR#)
CALL CREATE_EVOLVENT(0.,0.,Ro,Ae1,Ae2,E8@,ERR#)
CALL ROTATE(E8@,0.,0.,ARp1)
CALL ADD_ELEM_CONT (C1@,E8@,ERR#)
IF Rf+r<Ro THEN
CALL CREATE_LINE(XR6[I#],YR6[I#],XR5[I#],YR5[I#],E9@,ERR#)
CALL ADD_ELEM_CONT (C1@,E9@,ERR#)
ENDIF
CALL CREATE_ARC_3P(XR5[I#],YR5[I#],XR4[I#],YR4[I#],XR3[I#],YR3[I#],E10@,ERR#)
CALL ADD_ELEM_CONT (C1@,E10@,ERR#)
NEXT
CALL DISPLAY(C1@)
ENDIF
call dlg_end()
End