(完整版)vb圆弧插补程序

合集下载

vb圆弧插补程序(可编辑修改word版)

vb圆弧插补程序(可编辑修改word版)

Private Sub Command1_Click()Const pi = 3.14159265Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (50, 500)-(50, 5500)Picture1.Line (50, 5500)-(6500, 5500)Picture1.Line (80, 600)-(50, 500)Picture1.Line (20, 600)-(50, 500)Picture1.Line (6400, 5450)-(6500, 5500) Picture1.Line (6400, 5550)-(6500, 5500) Picture1.ForeColor = vbRedPicture1.DrawWidth = 3If Int(Text1) = 0 ThenPicture1.Circle (50, 5500), Sqr(Int(Text1) *Int(Text1) + Int(Text2) * Int(Text2)) * 400, , Atn(Int(Text4) / Int(Text3)), pi / 2ElsePicture1.Circle (50, 5500), Sqr(Int(Text1) *Int(Text1) + Int(Text2) * Int(Text2)) * 400, , Atn(Int(Text4) / Int(Text3)), Atn(Int(Text2) /Int(Text1))End IfEnd SubPrivate Sub Command2_Click()Dim k, m, j, l, n, F(20) As Integerm = 0l = Text1.Textk = Text2.TextF(m) = 0Picture1.ForeColor = vbGreenPicture1.DrawWidth = 3j = Abs(Int(Text1) - Int(Text3)) + Abs(Int(Text2) - Int(Text4))Form1.CurrentX = 200Form1.CurrentY = 200 Print "初始:进给方向" & "F(m)=0" & " X0=" & Int(Text1) & " Y0=" & Int(Text2) & " ∑= " & jFor n = 1 To jIf F(m) >= 0 And j > 0 Thenm = m + 1k = k - 1F(m) = F(m - 1) - 2 * Abs(k + 1) + 1Picture1.Line (50 + 400 * l, 5500 - k * 400)-(50 + 400 * l, 5500 - (k + 1) * 400)Form1.CurrentX = 200Form1.CurrentY = 200 + m * 300Print "第" & m & "步" & " -△y F(" & m & ")= " & F(m) & " " & "x=" & l & " " & "y="; k & " ∑=" & j - nElsel = l + 1m = m + 1Picture1.Line (50 + 400 * l, 5500 - k * 400)-(50 + 400 * (l - 1), 5500 - k * 400)F(m) = F(m - 1) + 2 * Abs(l - 1) + 1Form1.CurrentX = 200Form1.CurrentY = 200 + m * 300Print "第" & m & "步" & " +△x F(" & m & ")= " & F(m) & " " & "x="; l & " " & "y="; k & " ∑=" & j - nEnd IfNext nEnd SubPrivate Sub Command3_Click()Text1.Text = ""Text3.Text = ""End SubPrivate Sub Command4_Click()EndEnd SubPrivate Sub Command1_Click()Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (7500, 8500)-(7500, 500)Picture1.Line (7500, 500)-(500, 500)Picture1.Line (7500, 8500)-(7400, 8400)Picture1.Line (7500, 8500)-(7600, 8400)Picture1.Line (500, 500)-(600, 600)Picture1.Line (500, 500)-(600, 400)Picture1.ForeColor = vbRedPicture1.DrawWidth = 5Picture1.Line (7500, 500)-(7500 + 400 *Int(Text3), 500 - 400 * Int(Text4))End SubPrivate Sub Command2_Click()Form1.ClsDim k, m, j, l, n, F(20) As Integerm = 0l = 0k = 0F(m) = 0Picture1.ForeColor = vbGreenPicture1.DrawWidth = 3j = Abs(Int(Text3)) + Abs(Int(Text4))Form1.CurrentX = 200Form1.CurrentY = 200Print "初始:进给方向" & "F(m)=0" & " Xe=" & Int(Text3) & " Ye=" & Int(Text4) & " ∑= " & jFor n = 1 To jIf F(m) >= 0 And j > 0 Thenm = m + 1l = l - 1F(m) = F(m - 1) - Abs(Int(Text4))Picture1.Line (7500 + 400 * (l + 1), 500 - k * 400)-(7500 + 400 * (l), 500 - k * 400)Form1.CurrentX = 200Form1.CurrentY = 200 + m * 300Print "第" & m & "步" & " △x F(" & m & ")= " & F(m) & " " & "x=" & l & " " & "y="; k & " ∑=" & j - nElsek = k - 1m = m + 1Picture1.Line (7500 + 400 * l, 500 - (k + 1) * 400)-(7500 + 400 * l, 500 - k * 400)F(m) = F(m - 1) + Abs(Int(Text3))Form1.CurrentX = 200Form1.CurrentY = 200 + m * 300Print "第" & m & "步" & " △y F(" & m & ")= " & F(m) & " " & "x="; l & " " & "y="; k & " ∑=" & j - nEnd IfNext nEnd SubPrivate Sub Command3_Click()Text1.Text = ""Text2.Text = ""Picture1.ClsForm1.ClsEnd SubPrivate Sub Command4_Click()EndEnd SubPrivate Sub Form_Load()End SubPrivate Sub Command1_Click()Const pi = 3.14159265Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (50, 500)-(50, 5500)Picture1.Line (50, 5500)-(6500, 5500)Picture1.Line (80, 600)-(50, 500)Picture1.Line (20, 600)-(50, 500)Picture1.Line (6400, 5450)-(6500, 5500) Picture1.Line (6400, 5550)-(6500, 5500) Picture1.ForeColor = vbRedPicture1.DrawWidth = 3Picture1.Line (50, 5500)-(50 + 400 * Int(Text3), 5500 - 400 * Int(Text4))End SubPrivate Sub Command2_Click()Dim k, m, j, l, n, F, G As Integerl = 0 k = 0 F = 0 G = 0Picture1.ForeColor = vbGreenPicture1.DrawWidth = 3n = Int(Text5)j = 2 ^ nm = 2 ^ nForm1.CurrentX = 200Form1.CurrentY = 200Print "累加次数" & "F= F + int (text3)" & "+△X " & " G=G +int(text4)" & " +△Y "; ∑ = " & j"Print " n " & " 0 " & " 0 " & " 0 " & " 0 " & jFor n = 1 To mF = F + Int(Text3)G = G + Int(Text4) If F >= m And G >= m Thenl = l + 1 k = k + 1Picture1.Line (50 + 400 * (l - 1), 5500 - (k - 1) * 400)-(50 + 400 * (l), 5500 - k * 400)F = F - mG = G - mPrint " "; n & " " & F & " " & 1 & " " & G & "j - 1" & 1 & " " & ElseIf F >= m And G < m Thenl = l + 1F = F - mPrint " "; n & " " & F & " " & 1 & " " & G & "j - 1" & 0 & " " &Picture1.Line (50 + 400 * (l - 1), 5500 - k * 400)-(50 + 400 * (l), 5500 - k * 400)ElseIf F < m And G >= m Thenk = k + 1 G = G - mPicture1.Line (50 + 400 * l, 5500 - (k - 1) * 400)-(50 + 400 * (l), 5500 - k * 400)Print " "; n & " " & F & " " & 0 & " " & G & " " & 1 & " " & j - 1ElseIf F < m And G < m ThenPrint " "; n & " " & F & " " & 0 & " " & G & " " & 0 & " " & j - 1End Ifj = j - 1Next nEnd SubPrivate Sub Command3_Click()Text1.Text = ""Text2.Text = ""Picture1.ClsForm1.ClsEnd SubPrivate Sub Command4_Click()End End Sub。

圆弧插补指令编程

圆弧插补指令编程
0.2 • G00X30.0Z2.0 • X0 • G01Z0 • G03X18.15Z-19.85R12.0; • G02X22.0Z-34.0R11.0 • G01Z-44.0 • U3.0 • G00Z2.0 • X100.0Z100.0 • M05 • M02
•%
小结
所有不同型号的数控车床、铣床都必须用到G00、G01、G02、 G03指令,这四个指令在所有数控系统中都通用。在数控车、铣床 自动编程中,任何平面、曲面加工的路径最后都是由直线、圆弧插 补组成。所以说,这四个指令是数控编程的最基本组成单元。
① 用绝对值编程时,圆弧终点坐标为圆弧终点在工件坐标系中的坐标值,用X、Z 表 示。当用增量值编程时,圆弧终点坐标为圆弧终点相对于圆弧起点的增量值,用U、W表示。
② 圆心坐标(I, K)为圆弧起点到圆弧中心点所作矢量分别在X、Z坐标轴方向上分矢 量(矢量方向指向圆心)。本系统I、K为增量值,并带有“±”号,当矢量的方向与坐标轴 的方向不一致时取“”号。
安全操作和注意事项
(1)选刀时,刀尖角一定要控制在40°以下,如果刀尖角过大,凹圆 弧将过切。
(2)装刀时,刀尖同工件中心高对齐,对刀前,先将工件端面车平。 (3)为保证精加工尺寸准确性,可分半精加工、精加工。 (4)由于暂不计刀尖圆弧半径,因此实际圆弧存有过切或欠切现象。
工件的参考程序
• O0304 (O0304); • G40G97G99M03S500T0101F
用G02、G03指令加工圆弧面时,要注意顺、逆方向及圆弧半径 和圆心坐标编程的不同之处。
通过实训项目的学习,了解数控车床对刀与工件坐标系之间的 关系;通过半精加工、精加工掌握如何控制工件尺寸。
数控机床操作入门
模块三 单一指令加工应用

圆弧插补指令g02g03

圆弧插补指令g02g03

通过简单的图形 如图所示的 cd 段的连接方式。象这样的圆弧外形我们用什么指令来
设疑,引入新课。 加工呢?这就要用到今天我们所要学习的圆弧插补 G02/G03。
(多媒 体展 示图 形,
教师设疑)
三、讲授新课
讲授新课
一、格式。
(10 分钟)
在数控机床上运行该代码指令表现为刀具以走圆弧迹的方式从 现处的位置移动至所指定的位置。移动的速度由进给速度 F 指令指
1
圆弧插补指令
使 用 图形 设 疑 引导学生学习
复习提问: 1、G00 指令的使用方法 2、G01 指令的使用方法
引入新课:圆弧连接应 怎样加工呢?
知识拓展
提出新课任务
新课讲解:介绍圆弧指令格 式及其含义
学生 :练习使用圆弧指令编程 教师 :补充总结并评价
多媒体事例示范,规 范使用指令
教学方式方法与 时间分配
走 CD 段圆弧轨迹
N70 G1 Y-28 F150
走 DE 段直线轨迹
N80 X55
走 EF 段直线轨迹
N90 G3 X48 Y35 I-7 J0 F100
走 FG 段圆弧轨迹
N100 G1 Y43 F150
走 GH 段直线轨迹
N120 X-73
走 HL 段直线轨迹
N130 G0 Z50
Z 轴提刀至高于表面 50 毫米
检查记录
巩固练习
教学内容
2
组织教学
(2 分钟)
1、 师生互相问候。 2、 检查学生出勤,填写考查薄,注意学生精神面貌,并整顿学 生的课堂秩序。 3、 检查学生用具 :笔、尺、本是否齐全。
4、 讲授本节课的内容及布置各项任务。
复习旧课
一、复习旧课

圆弧插补指令应用-圆弧面零件编程.

圆弧插补指令应用-圆弧面零件编程.

圆弧插补指令应用圆弧面零件编程圆弧面零件编程加工是学习数控车床编程技术的重要一环,也是学习其它回转体类零件加工的基础。

通过本项目的学习,要掌握如下知识,顺时针圆弧插补、逆时针圆弧插补方向的判断和G02、G03圆弧插补指令及终点坐标+半径格式的应用;仿形车削复合循环指令G73及其应用;刀尖半径补偿指令G40、G41、G42及应用;凸圆弧零件加工工艺制定及循环参数选择;完成成形面类零件编程加工及其尺寸控制。

一、零件图二、数控车床编程指令插补的概念根据给定的进给速度和给定轮廓线形的要求,在轮廓的已知点之间,确定一些中间点的方法,称为插补方法或插补原理。

编程指令(一)圆弧插补指令G02、G03G02——顺时针圆弧插补G03——逆时针圆弧插补1.指令功能:使刀具按给定进给速度沿圆弧方向进行切削加工。

2.圆弧的顺、逆方向的判断沿垂直于圆弧所在平面的坐标轴的正方向向负方向看去,刀具相对于工件的转动方向是顺时针方向为G02,逆时针方向为G03。

3.圆弧加工终点坐标+圆弧半径(或圆心坐标)指令格式G02(G03)X_Z_R_ F_G02(G03)X_ Z_ I_ K_ F_(二)径向(端面) 粗车复合循环指令G72该指令适用于圆柱棒料粗车阶梯轴(或法兰盘)的外圆或内孔,需切除较多余量时的情况。

与轴向粗车复合循环的区别仅在于切削方向平行于X轴。

[ FANUC 0i ] 系统径向(端面)粗车复合循环指令格式:G72 W(△d) R(e);G72 P(ns) Q(nf) U(△u) W(△w) F(△f) S(△s) T(t);N(ns)……;……;.N(nf) ……;(三)仿形粗车(闭环车削)复合循环指令G73该指令用于零件毛坯已基本成型的铸件或锻件的加工,铸件或锻件的形状与零件轮廓相接近。

该功能在切削工件时刀具轨迹为一闭合回路,刀具逐渐进给�使封闭的切削回路逐渐向零件最终形状靠近,完成工件的加工。

[ FANUC 0i ] 系统仿形粗车(闭环车削)复合循环指令格式:G73 U(△i) W(△k) R(d);G73 P(ns) Q(nf) U(△u) W(△w) F(△f) S(△s) T(t);N(ns)……;……;N(nf) ……;(四)刀具补偿指令1.刀具补偿的目的数控车床是按车刀刀尖对刀的,因车刀的刀尖不可能绝对尖,总有一个小圆弧,所以对刀刀尖的位置是一个假想的刀尖A。

基于vb的直线插补与圆弧插补实验

基于vb的直线插补与圆弧插补实验

主界面面板逐点比较圆弧插补程序如下:Private Sub Command1_Click()Xe = Val(Text1.Text)Ye = Val(Text2.Text)Picture1.Scale (-20, 20)-(20, -20)Picture1.ClsPicture1.Line (-20, 0)-(20, 0), vbBluePicture1.Line (19, 1)-(20, 0), vbbiuePicture1.Line -(19, -1), vbBluePicture1.Print "X"Picture1.Line (0, -20)-(0, 20), vbBluePicture1.Line (1, 19)-(0, 20), vbBluePicture1.Line -(-1, 19), vbBluePicture1.Print "Y"Picture1.Line (0, 0)-(Xe, Ye), vbBluePicture1.Print "("; Xe; ","; Ye; ")"If Text1.Text = none Or Text2.Text = none Then MsgBox "请输入加工终点坐标值。

"Text3.Text = 0Text4.Text = 0Text5.Text = 0End SubPrivate Sub Command2_Click()Dim sum As IntegerXe = Val(Text1.Text)Ye = Val(Text2.Text)Xm = Val(Text3.Text)Ym = Val(Text4.Text)m = Val(Text5.Text)sum = Xe * Ym - Xm * Ye'第一象限开始If Xe > 0 And Ye > 0 And sum >= 0 Then Picture1.Line (Xm, Ym)-(Xm + 1, Ym), vbRed: Text3.Text = Xm + 1If Xe > 0 And Ye > 0 And sum < 0 Then Picture1.Line (Xm, Ym)-(Xm, Ym + 1), vbRed: Text4.Text = Ym + 1If Abs(Xm) + Abs(Ym) >= Abs(Xe) + Abs(Ye) - 1 Then MsgBox "加工完毕!"'第二象限开始If Xe < 0 And Ye > 0 And sum >= 0 Then Picture1.Line (Xm, Ym)-(Xm, Ym + 1), vbRed: Text4.Text = Ym + 1If Xe < 0 And Ye > 0 And sum < 0 Then Picture1.Line (Xm, Ym)-(Xm - 1, Ym), vbRed: Text3.Text = Xm - 1If Abs(Xm) + Abs(Ym) >= Abs(Xe) + Abs(Ye) + 1 Then MsgBox "加工完毕!"'第三象限开始If Xe < 0 And Ye < 0 And sum >= 0 Then Picture1.Line (Xm, Ym)-(Xm - 1, Ym), vbRed:Text3.Text = Xm - 1If Xe < 0 And Ye < 0 And sum < 0 Then Picture1.Line (Xm, Ym)-(Xm, Ym - 1), vbRed: Text4.Text = Ym - 1If Abs(Xm) + Abs(Ym) >= Abs(Xe) + Abs(Ye) Then MsgBox "加工完毕!"'第四象限开始If Xe > 0 And Ye < 0 And sum >= 0 Then Picture1.Line (Xm, Ym)-(Xm, Ym - 1), vbRed: Text4.Text = Ym - 1If Xe > 0 And Ye < 0 And sum < 0 Then Picture1.Line (Xm, Ym)-(Xm + 1, Ym), vbRed: Text3.Text = Xm + 1If Abs(Xm) + Abs(Ym) >= Abs(Xe) + Abs(Ye) Then MsgBox "加工完毕!"Text5.Text = Abs(Val(Text3.Text)) + Abs(Val(Text4.Text))End SubPrivate Sub Command3_Click()Form2.HideForm1.ShowEnd Sub数字积分器法圆弧插补程序如下:Private Sub Command1_Click()Xe = Val(Text1.Text)Ye = Val(Text2.Text)Picture1.Scale (-20, 20)-(20, -20)Picture1.ClsPicture1.Line (-20, 0)-(20, 0), vbBluePicture1.Line (19, 1)-(20, 0), vbbiuePicture1.Line -(19, -1), vbBluePicture1.Print "X"Picture1.Line (0, -20)-(0, 20), vbBluePicture1.Line (1, 19)-(0, 20), vbBluePicture1.Line -(-1, 19), vbBluePicture1.Print "Y"Picture1.Line (0, 0)-(Xe, Ye), vbBluePicture1.Print "("; Xe; ","; Ye; ")"Text3.Text = 0Text4.Text = 0Text5.Text = 0Text6.Text = 0Text7.Text = 0End SubPrivate Sub Command2_Click()Xe = Val(Text1.Text)Ye = Val(Text2.Text)ax = V al(Text3.Text)ay = Val(Text4.Text)n = Val(Text7.Text)Xm = Val(Text5.Text)Ym = Val(Text6.Text)If Text1.Text = none Or Text2.Text = none Then MsgBox "请输入加工终点坐标值。

(完整版)圆弧插补

(完整版)圆弧插补
Fi<0
Fi<0
O Fi≥0
X Fi<0 Fi≥0
2、圆弧插补的象限处理
前面的圆弧插补(顺圆、逆圆)只限于第一象限,其他 情况如图所示: Y
O
X
代入偏差函数,得Pi+1点的偏差为: Fi+1 = Fi-2Xi + 1
当Fi<0时,向+Y方向进给一步。动点由Pi(Xi,Yi) 移动到 Pi+1(Xi,Yi +1)则新动点的坐标为 Yi+1=Yi +1
代入偏差函数,得Pi+1点的偏差为:
Fi+1 = Fi + 2Yi + 1
所以,第一象限逆时针圆弧插补加工时偏差加工的递推 公式为:
6 F5= -7 +Y F6=F5+2Y5+1 =0, X6=3,Y6=4 ∑=4
7 F6=0 -X F7=F6-2X6+1 = -5, X7=2,Y7=4 ∑=3 8 F7= -5 +Y F8=F7+2Y7+1 =4, X8=2,Y8=5 ∑=2
9 F8=4 -X F9=F8-2X8+1 = 1, X9=1,Y9=5 ∑=1
若P点在圆弧上,则有 (Xi2 +Yi2 ) — (Xo2 +Yo2) = 0,我们定义偏差函数Fi为 Fi = (Xi2 +Yi2 ) — (Xo2 +Yo2 )
Y
B(Xe,Ye)
Pi(Xi,Yi)
A(Xo,Yo) O
X
可见,若Fi=0,表示动点位于圆弧上;若Fi>0,表示动 点位于圆弧外;Fi<0,表示动点位于圆弧内。
(2)进给控制
把Fi=0和若Fi>0合在一起考虑,当Fi≥0时,向-X方向进 给一步;当Fi<0时,向+Y方向进给一步。

圆弧插补直线插补程序

圆弧插补直线插补程序
Zf = 1;
else
Zf = 2;
end
Fm = Fm - 2 * XM + 1;
XM=XM-StepLength;
% XM = XM - 1;
else
if RNS == 2 || RNS ==5
Zf = 3;
else
Zf = 4;
end
Fm = Fm + 2 * YM + 1;
YM=YM+StepLength;
% YM = YM + 1;
end
end
% switch Zf
% case 1
% XM=XM+StepLength;
% case 2
% XM=XM-StepLength;
% case 3
% YM=YM+StepLength;
% case 4
% YM=YM-StepLength;
% end
x = [X0 XM];
else
Zf = 2;
end
Fm = Fm -Ye;
else
if Xoy == 1 || Xoy == 2
Zf = 3;
else
Zf = 4;
end
Fm = Fm + Xe;
end
switch Zf
case 1
XM=XM+Nxy;
case 2
XM=XM-Nxy;
case 3
YM=YM+Nxy;
case 4
(RNSS~=1)*(((Y0==0)*((X0>0)*3+(X0<0)*4))+((X0==0)*((Y0>0)*2+(Y0<0)*1)));

圆弧插补

圆弧插补
1、指令功能
圆弧插补G02、 G03指令刀具相对工件以 F指令的 进给速度从当前点(始点)向终点进行圆弧插补。
G02--------顺时针圆弧插补指令 G03--------逆时针圆弧插补指令 2、G02、G03的顺、逆方向 在判断顺、逆方向时,是从一个坐标轴的正 向往负向看,在另外两轴组成的平面中的转向。
G02
XZ平面: G18
XZR F
G03
G02
YZ平面: G19
YZR F
G03
圆弧插补
2、说明
(1)绝对编程时,X、Y、Z为圆弧终点坐标值; 增量编程时,X、Y、Z为终点相对始点的距离。
(2)R是圆弧半径,当圆弧所对的圆心角大于0 度小于180度时,R取正值;当圆心角大于等于180度 小于360度时,R取负值。
Y A
20
解: 1、圆弧终点: 点B(30,20) 2、顺、逆方向: 顺时针,G02 B 3、半径: R=15,圆心角为90度 4、指令:
O
15
G17 G02 X30 Y20 R15 F60 30 X 若说明是在铣床中加工,则指令:
G02 X30 Y20 R15 F60
圆弧插补
2、加工A-B-C圆弧的指令
圆弧插补
(1)数控车床的顺、逆方向
O G02
G03 Z
X
Y
O Z
G03 X
G02
数控车床只在XZ平面加工,从上往下看, 顺、逆方向正好与时钟方向相反。
圆弧插补
(2)数控铣床的顺、逆方向
Z
Y
G02
G03 O
X
圆弧插补
二、格式说明
1、程序段格式(R半径式):
XY平面: G17 G02 X

DDA直线插补和圆弧插补VB程序

DDA直线插补和圆弧插补VB程序
y = y + p * Di
ElseIf f * Di = 0 Then
If Di = 1 Then
f = f + 2 * y * Di + p
y = y + p
Else
f = f - 2 * x * Di + p
End If
f = f + Abs(xe - x0)
End If
obj.Line -(x, y), vbRed '画折线
n = n - 1
DoEvents
For i = 1 To 2000000 * p
'延时
Next i
Exit Sub
End If
pic.Cls '清屏
axis pic '画坐标轴
p = Val(Combo1.Text) '读取脉冲当量
cmdShow.Enabled = False
If Option1.Value Then '演示直线插补
Text1(2) <> "" And Text1(3) <> "" Then
x1 = Val(Text1(0)): y1 = Val(Text1(1))
x2 = Val(Text1(2)): y2 = Val(Text1(3))
Else
MsgBox "输入坐标不完整!"
Private Sub Text1_Change(Index As Integer)
If Abs(Val(Text1(Index).Text)) > 9 Then

VB软件 模拟逐点比较法逆圆弧插补的程序设计 程序

VB软件 模拟逐点比较法逆圆弧插补的程序设计 程序

五、算法程序Private Sub Command1_Click()Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (0, 4000)-(9000, 4000)Picture1.Line (4500, 0)-(4500, 8000)End SubPrivate Sub Command2_Click()Picture1.ForeColor = vbBluePicture1.DrawWidth = 2If Val(Text1.Text) * Val(Text1.Text) + Val(Text2.Text) * Val(Text2.Text) <> Val(Text3.Text) * Val(Text3.Text) + Val(Text4.Text) * Val(Text4.Text) Thenans = MsgBox("出错了,该象限所绘圆弧不以原点为圆心", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""ElseIf Option1.Value = True ThenIf Val(Text1) >= 0 And Val(Text2) >= 0 And Val(Text3) >= 0 And Val(Text4) >= 0 And Val(Text1) >= Val(Text3) Then If Int(Text2) = 0 ThenIf Int(Text3) = 0 ThenPicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , 0, 3.14159 / 2Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))ElsePicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , Atn(Val(Text2) / Val(Text1)), 3.14159 / 2Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))End IfElseIf Int(Text4) = 0 ThenPicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , 0, Atn(Val(Text2) / Val(Text1))ElsePicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , Atn(Val(Text2) / Val(Text1)), Atn(Val(Text4) / Val(Text3))Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))End IfElseans = MsgBox("坐标象限错误或预定圆弧将为顺时针", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""End IfElseIf Option4.Value = True ThenIf Val(Text1) >= 0 And Val(Text2) <= 0 And Val(Text3) >= 0 And Val(Text4) <= 0 And Val(Text1) <= Val(Text3) Then If Int(Text2) = 0 ThenIf Val(Text3) = 0 ThenPicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , 3 * 3.14159 / 2, 0Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))ElsePicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , Atn(Val(Text4) / Val(Text3)) + 3.14159 * 2, 0Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))End IfElseIf Val(Text3) <> 0 ThenPicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , Atn(Val(Text2) / Val(Text1)) + 3.14159 * 2, Atn(Val(Text4) / Val(Text3)) + 3.14159 * 2Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))ElsePicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , 3 * 3.14159 / 2, Atn(Val(Text2) / Val(Text1)) + 3.14159 * 2Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))End IfElseans = MsgBox("坐标象限错误或预定圆弧将为顺时针", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""End IfElseIf Option2.Value = True ThenIf Val(Text1) <= 0 And Val(Text2) >= 0 And Val(Text3) <= 0 And Val(Text4) >= 0 And Val(Text1) >= Val(Text3) Then If Int(Text2) = 0 ThenIf Val(Text3) = 0 ThenPicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , 3.14159 / 2, 3.14159Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))ElsePicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , Atn(Val(Text4) / Val(Text3)) + 3.14159, 3.14159Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))End IfElseIf Val(Text3) = 0 ThenPicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , 3.14159 / 2, Atn(Val(Text4) / Val(Text3)) + 3.14159Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))ElsePicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , Atn(Val(Text2) / Val(Text1)) + 3.14159, Atn(Val(Text4) / Val(Text3)) + 3.14159Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))End IfElseans = MsgBox("坐标象限错误或预定圆弧将为顺时针", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""End IfElseIf Option3.Value = True ThenIf Val(Text1) <= 0 And Val(Text2) <= 0 And Val(Text3) <= 0 And Val(Text4) <= 0 And Val(Text1) <= Val(Text3) ThenIf Int(Text1) = 0 ThenIf Int(Text4) = 0 ThenPicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , 3.14159, 3 * 3.14159 / 2Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))ElsePicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , Atn(Int(Text4) / Int(Text3)) + 3.14159, 3 * 3.14159 / 2Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))End IfElseIf Int(Text4) = 0 ThenPicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , 3.14159, Atn(Int(Text2) / Int(Text1)) + 3.14159Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))ElsePicture1.Circle (4500, 4000), Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2)) * Int(Text6), , Atn(Int(Text2) / Int(Text1)) + 3.14159, Atn(Int(Text4) / Int(Text3)) + 3.14159Text5.Text = Sqr(Val(Text1) * Val(Text1) + Val(Text2) * Val(Text2))End IfElseans = MsgBox("坐标象限错误或预定圆弧将为顺时针", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""End IfEnd IfEnd IfEnd SubPrivate Sub Command3_Click()If Val(Text1.Text) * Val(Text1.Text) + Val(Text2.Text) * Val(Text2.Text) <> Val(Text3.Text) * Val(Text3.Text) + Val(Text4.Text) * Val(Text4.Text) Thenans = MsgBox("出错了", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""ElseDim k, m, j, l, n, F(20) As IntegerDim a, b, c, d, e As Integerm = 0l = 0k = 0F(m) = 0a = Int(Text1)b = Int(Text2)c = Int(Text3)d = Int(Text4)e = Int(Text6)Picture1.ForeColor = vbGreenPicture1.DrawWidth = 3j = Abs(c - a) + Abs(d - b)Form1.CurrentX = 15000Form1.CurrentY = 200If Option1.Value = True ThenIf Val(Text1) >= 0 And Val(Text2) >= 0 And Val(Text3) >= 0 And Val(Text4) >= 0 And Option1.Value = True ThenPrint "初始:进给方向 " & "F(m)=0" & " X0=" & Int(Text1) & " Y0=" & Int(Text2) & " ∑ = " & jFor n = 1 To jIf F(m) >= 0 Thenm = m + 1k = k + 1F(m) = F(m - 1) - 2 * a + 1Picture1.Line (4500 + Int(Text1) * e - e * (k - 1), 4000 - Int(Text2) * e - l * e)-(4500 + Int(Text1) * e - e * k, 4000 - Int(Text2) * e - l * e)a = a - 1Form1.CurrentX = 15000Form1.CurrentY = 200 + n * 300Print "第" & m & "步" & " -△x F(" & m & ")= " & F(m) & " " & "x=" & a & " " & "y="; b & " ∑=" & j - nElsel = l + 1m = m + 1Picture1.Line (4500 + Int(Text1) * e - e * k, 4000 - Int(Text2) * e - (l - 1) * e)-(4500 + Int(Text1) * e - e * k, 4000 - Int(Text2) * e - l * e)F(m) = F(m - 1) + 2 * b + 1b = b + 1Form1.CurrentX = 15000Form1.CurrentY = 200 + n * 300Print "第" & m & "步" & " +△y F(" & m & ")= " & F(m) & " " & "x=" & a & " " & "y="; b & " ∑=" & j - nEnd IfNext nElseans = MsgBox("出错", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""Form1.ClsEnd IfElseIf Option4.Value = True ThenIf Val(Text1) >= 0 And Val(Text2) <= 0 And Val(Text3) >= 0 And Val(Text4) <= 0 And Option4.Value = True ThenPrint "初始:进给方向 " & "F(m)=0" & " X0=" & Int(Text1) & " Y0=" & Int(Text2) & " ∑ = " & jFor n = 1 To jIf F(m) >= 0 Thenm = m + 1l = l + 1F(m) = F(m - 1) - 2 * Abs(b) + 1Picture1.Line (4500 + Int(Text1) * e + e * k, 4000 - Int(Text2) * e - (l - 1) * e)-(4500 + Int(Text1) * e + e * k, 4000 - Int(Text2) * e - l * e)b = b + 1Form1.CurrentX = 15000Form1.CurrentY = 200 + n * 300Print "第" & m & "步" & " +△y F(" & m & ")= " & F(m) & " " & "x=" & a & " " & "y="; b & " ∑=" & j - nElsek = k + 1m = m + 1Picture1.Line (4500 + Int(Text1) * e + e * (k - 1), 4000 - Int(Text2) * e - l * e)-(4500 + Int(Text1) * e + e * k, 4000 - Int(Text2) * e - l * e)F(m) = F(m - 1) + 2 * Abs(a) + 1a = a + 1Form1.CurrentX = 15000Form1.CurrentY = 200 + n * 300Print "第" & m & "步" & " +△x F(" & m & ")= " & F(m) & " " & "x=" & a & " " & "y="; b & " ∑=" & j - nEnd IfNext nElseans = MsgBox("出错", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""Form1.ClsEnd IfElseIf Option2.Value = True ThenIf Val(Text1) <= 0 And Val(Text2) >= 0 And Val(Text3) <= 0 And Val(Text4) >= 0 And Option2.Value = True ThenPrint "初始:进给方向 " & "F(m)=0" & " X0=" & Int(Text1) & " Y0=" & Int(Text2) & " ∑ = " & jFor n = 1 To jIf F(m) >= 0 Thenm = m + 1l = l + 1F(m) = F(m - 1) - 2 * Abs(b) + 1Picture1.Line (4500 + Int(Text1) * e - e * k, 4000 - Int(Text2) * e + (l - 1) * e)-(4500 + Int(Text1) * e - e * k, 4000 - Int(Text2) * e + l * e)b = b - 1Form1.CurrentX = 15000Form1.CurrentY = 200 + n * 300Print "第" & m & "步" & " -△y F(" & m & ")= " & F(m) & " " & "x=" & a & " " & "y="; b & " ∑=" & j - nElsek = k + 1m = m + 1Picture1.Line (4500 + Int(Text1) * e - e * (k - 1), 4000 - Int(Text2) * e + l * e)-(4500 + Int(Text1) * e - e * k, 4000 - Int(Text2) * e + l * e)F(m) = F(m - 1) + 2 * Abs(a) + 1a = a - 1Form1.CurrentX = 15000Form1.CurrentY = 200 + n * 300Print "第" & m & "步" & " -△x F(" & m & ")= " & F(m) & " " & "x=" & a & " " & "y="; b & " ∑=" & j - nEnd IfNext nElseans = MsgBox("出错", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""Form1.ClsEnd IfElseIf Option3.Value = True ThenIf Val(Text1) <= 0 And Val(Text2) <= 0 And Val(Text3) <= 0 And Val(Text4) <= 0 And Option3.Value = True ThenPrint "初始:进给方向 " & "F(m)=0" & " X0=" & Int(Text1) & " Y0=" & Int(Text2) & " ∑ = " & jFor n = 1 To jIf F(m) >= 0 Thenm = m + 1k = k + 1F(m) = F(m - 1) - 2 * Abs(a) + 1Picture1.Line (4500 + Int(Text1) * e + e * (k - 1), 4000 - Int(Text2) * e + l * e)-(4500 + Int(Text1) * e + e * k, 4000 - Int(Text2) * e + l * e)a = a + 1Form1.CurrentX = 15000Form1.CurrentY = 200 + n * 300Print "第" & m & "步" & " +△x F(" & m & ")= " & F(m) & " " & "x=" & a & " " & "y="; b & " ∑=" & j - n Elsel = l + 1m = m + 1F(m) = F(m - 1) + 2 * Abs(b) + 1Picture1.Line (4500 + Int(Text1) * e + e * k, 4000 - Int(Text2) * e + (l - 1) * e)-(4500 + Int(Text1) * e + e * k, 4000 - Int(Text2) * e + l * e)b = b - 1Form1.CurrentX = 15000Form1.CurrentY = 200 + n * 300Print "第" & m & "步" & " -△y F(" & m & ")= " & F(m) & " " & "x=" & a & " " & "y="; b & " ∑=" & j - nEnd IfNext nElseans = MsgBox("出错", 48, "提示信息")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""Form1.ClsEnd IfEnd IfEnd IfEnd SubPrivate Sub Command4_Click()Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""Picture1.ClsForm1.ClsPicture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (0, 4000)-(9000, 4000)Picture1.Line (4500, 0)-(4500, 8000)End SubPrivate Sub Command5_Click()Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text6.Text = ""Picture1.ClsForm1.ClsEnd SubPrivate Sub Command6_Click()EndEnd SubPrivate Sub Command7_Click()End Sub。

圆弧插补

圆弧插补

<1>例1:请分别用半径法R方式和圆心坐标I、 J、K方式编写下列圆轨迹的加工程序。
例1程序如下:
I、J、K方式(A点起刀)
% O0001; T01; M06; G90G54G17G00X-100.0Y0S600M03; G02X-100.0Y0I100.0F100; M05; M30; %
例1程序如下:
R方式(A点起刀)
% O0001; T01; M06; G90G54G17G00X-100.0Y0S600M03; G02X0Y100.0R100.0F100; X100.0Y0R100.0; X0Y-100.0R100.0; X-100.0Y0R100.0; M05; M30; %

<2>例2:请分别用半径法R方式和圆心坐标I、 J、K方式在G90方式和G91方式下编写下列 圆轨迹的加工程序。
% O0001; T01; M06; G91G54G18G00X10.0Z40.0S600M03; G03X20.0Z-20.0I0K-20.0F100; G02X-10.0Z-10.0I0K-10.0; M05; M30; %
例2程序如下:
(G90)R方式(A点起刀)
% O0001; T01; M06; G90G54G18G00X10.0Z40.0S600M03; G03X30.0Z20.0R20.0F100; G02X20.0Z10.0R10.0; M05; M30; %
<3>
坐标字I_、J_、K_表示圆弧 圆心的坐标值, I、J、K分别与 X、Y、Z相对应,它是圆心相对 于圆弧起点在X、Y、Z轴方向上 的增量值,即圆心相对于圆弧起 点为原点的坐标值。如下列图所 示:
①、用指令G17时圆心坐标X轴方 向用I表示,Y轴方向用J表示。

圆弧插补计算过程步骤

圆弧插补计算过程步骤

圆弧插补是指在数控机床上,通过控制工具沿着圆弧路径进行加工的过程。

下面是圆弧插补的计算过程步骤:
1. 确定圆弧的起点和终点坐标:根据加工要求和图纸,确定圆弧的起点和终点的坐标。

2. 计算圆弧的半径:根据起点和终点的坐标,计算出圆弧的半径。

3. 计算圆心坐标:根据起点、终点和半径的关系,计算出圆心的坐标。

4. 计算圆弧的角度:根据起点、终点和圆心的坐标,计算出圆弧的角度。

5. 确定圆弧的方向:根据起点、终点和圆心的位置关系,确定圆弧的方向(顺时针或逆时针)。

6. 计算插补点的坐标:根据圆心、半径、角度和方向,计算出插补点的坐标。

7. 控制工具移动:根据插补点的坐标,通过数控系统控制工
具在圆弧路径上移动。

8. 重复计算和移动:根据设定的插补步长,重复计算和移动,直到达到终点。

以上是圆弧插补的计算过程步骤,通过这些步骤可以实现精确的圆弧加工。

圆弧插补指令格式

圆弧插补指令格式

圆弧插补指令格式
圆弧插补指令的格式如下:
1.G02为顺时针插补,G03为逆时针插补,在XY平面中,格式如下:G02/G03 X_ Y_ I_ K_ F_或G02/G03 X_ Y_ R_ F_,其中X、Y为圆弧终点坐标,I、J为圆弧起点到圆心在X、Y轴上的增量值,R为圆弧半径,F为进给量。

2.在圆弧切削时注意,q≤180°,R为正值;q>180°,R为负值;I、K的指定也可用R指定,当两者同时被指定时,R指令优先,I、K无效;R不能做整圆切削,整圆切削只能用I、J、K编程,因为经过同一点,半径相同的圆有无数个。

当有I、K为零时,就可以省略;无论G90还是G91方式,I、J、K都按相对坐标编程;圆弧插补时,不能用刀补指令G41/G42。

3.G54~G59是在加工前设定好的坐标系,而G92是在程序中设定的坐标系,用了G54~G59就没有必要再使用G92,否则G54~G59会被替换,应当避免。

数控原理VB圆弧接圆弧课程设计

数控原理VB圆弧接圆弧课程设计

四、调试分析1.缩短型2.伸长型3.插入型附录:程序如下:Option ExplicitDim X0 As Single '圆弧三点坐标Dim Y0 As SingleDim X1 As SingleDim Y1 As SingleDim X2 As SingleDim Y2 As SingleDim I1 As Single ' 两个圆心相对圆弧起点坐标Dim J1 As SingleDim I2 As SingleDim J2 As SingleDim R1 As Single '两个圆弧半径Dim R2 As SingleDim r As Single '刀具半径Dim OX1 As Single '两圆心实际坐标Dim OY1 As SingleDim OX2 As SingleDim OY2 As SingleDim Xx1 As SingleDim Yy1 As SingleDim Start1 As Single '第一段圆弧起始弧度Dim End1 As Single '第一段圆弧结束弧度Dim Start2 As Single '第二段圆弧起始弧度Dim End2 As Single '第二段圆弧结束弧度Const Pi = 3.1415926Private Sub Command1_Click()Picture1.Cls '清除picturebox控件中的内容Picture1.DrawWidth = 1X0 = Val(Split(Text1.Text, ",")(0)) '将文本框中的文本从逗号分离并转化成数值Y0 = Val(Split(Text1.Text, ",")(1))X1 = Val(Split(Text2.Text, ",")(0))Y1 = Val(Split(Text2.Text, ",")(1))X2 = Val(Split(Text3.Text, ",")(0))Y2 = Val(Split(Text3.Text, ",")(1))I1 = Val(Itext1.Text) '取圆心相对圆弧起点坐标J1 = Val(Jtext1.Text)I2 = Val(Itext2.Text)J2 = Val(Jtext2.Text)R1 = Sqr(I1 * I1 + J1 * J1) '计算第一段圆弧半径If Not Option1.Value Then R1 = -R1 '通过确定顺圆逆圆判断半径符号R2 = Sqr(I2 * I2 + J2 * J2) '计算第二段圆弧半径If Not Option3.Value Then R2 = -R2 '通过确定顺圆逆圆判断半径符号r = Val(rText.Text) '取刀具半径If Not Option5.Value Then r = -r '通过确定左刀补右刀补判断刀具半径符号'=======================画动态坐标系====================== Dim t1 As Single '取出X最大值Dim t2 As Single '取出X最小值Dim t3 As Single '取出Y最大值Dim t4 As Single '取出Y最小值t1 = X0t2 = X0t3 = Y0t4 = Y0If t1 < X1 Then t1 = X1 '求坐标中最大值与最小值If t1 < X2 Then t1 = X2If t2 > X1 Then t2 = X1If t2 > X2 Then t2 = X2If t3 < Y1 Then t3 = Y1If t3 < Y2 Then t3 = Y2If t4 > Y1 Then t4 = Y1If t4 > Y2 Then t4 = Y2If t1 < t3 Then t1 = t3If t2 > t4 Then t2 = t4Dim m As SingleIf Abs(R1) < Abs(R2) Thenm = Abs(R2)Elsem = Abs(R1)End Ift1 = t1 + Abs(r) + m '坐标轴对圆弧和刀补轨迹留有余量t2 = t2 - Abs(r) - mPicture1.Scale (t2, t1)-(t1, t2) '设定picturebox左上角右下角坐标值Picture1.Line (t2, 0)-(t1, 0), vbRed '画X轴Picture1.Line (0, t2)-(0, t1), vbRed '画Y轴Dim I As IntegerDim Ts1 As IntegerDim Ts2 As IntegerTs1 = Fix(t2)Ts2 = Fix(t1)For I = Ts1 To Ts2 Step 1Picture1.Line (I, -0.2)-(I, 0.2), vbRed '画X轴竖线Picture1.CurrentY = -0.2Picture1.Print I '打印刻度值Picture1.Line (-0.2, I)-(0.2, I), vbRed '画Y轴横线Picture1.CurrentX = -0.5Picture1.Print I '打印刻度值Next IPicture1.CurrentX = Ts2 - 1Picture1.CurrentY = -1Picture1.Print "X" '标上XPicture1.CurrentX = -1Picture1.CurrentY = Ts2 - 1Picture1.Print "Y" '标上YPicture1.Line (t1 - 0.3, -0.3)-(t1, 0), vbRed '画箭头Picture1.Line (t1 - 0.3, 0.3)-(t1, 0), vbRedPicture1.Line (-0.3, t1 - 0.3)-(0, t1), vbRedPicture1.Line (0.3, t1 - 0.3)-(0, t1), vbRed'================================================ End SubPrivate Sub Command2_Click()Picture1.DrawWidth = 2 '线宽OX1 = I1 + X0 '圆心实际坐标OY1 = J1 + Y0OX2 = I2 + X1OY2 = J2 + Y1Dim tt As SingleXx1 = -I1 '圆弧起点相对圆心坐标Yy1 = -J1Start1 = hudu(Xx1, Yy1) '第一段圆弧起点对应弧度Xx1 = X1 - OX1 '圆弧终点相对圆心坐标Yy1 = Y1 - OY1End1 = hudu(Xx1, Yy1) '第一段圆弧终点对应弧度If Option1.Value Then '画图时如果是顺圆,起点与终点弧度调换tt = Start1Start1 = End1End1 = ttEnd IfIf End1 < Start1 Then '圆弧经过X轴正方向Picture1.Circle (OX1, OY1), Abs(R1), , Start1, 2 * Pi, 624 / 697 Picture1.Circle (OX1, OY1), Abs(R1), , 0, End1, 624 / 697Else '圆弧不经过X轴正方向Picture1.Circle (OX1, OY1), Abs(R1), , Start1, End1, 624 / 697End IfXx1 = -I2 '圆弧起点相对圆心坐标Yy1 = -J2 '圆弧终点相对圆心坐标Start2 = hudu(Xx1, Yy1) '第二段圆弧起点对应弧度Xx1 = X2 - OX2Yy1 = Y2 - OY2End2 = hudu(Xx1, Yy1) '第二段圆弧终点对应弧度If Option3.Value Then '画图时如果是顺圆,起点与终点弧度调换tt = Start2Start2 = End2End2 = ttEnd IfIf End2 < Start2 Then '圆弧经过X轴正方向Picture1.Circle (OX2, OY2), Abs(R2), , Start2, 2 * Pi, 624 / 697Picture1.Circle (OX2, OY2), Abs(R2), , 0, End2, 624 / 697Else '圆弧不经过X轴正方向Picture1.Circle (OX2, OY2), Abs(R2), , Start2, End2, 624 / 697End If'Picture1.Circle (3, 4), 5End Sub'=======================弧度计算函数===================== Function hudu(ByVal m As Single, ByVal n As Single) As SingleDim k As SingleIf m <> 0 Then '斜率存在时k = n / mIf m >= 0 And n >= 0 Then hudu = Atn(k)If m >= 0 And n < 0 Then hudu = Atn(k) + 2 * PiIf m < 0 And n >= 0 Then hudu = Atn(k) + PiIf m < 0 And n < 0 Then hudu = Atn(k) + PiElse '斜率不存在时If n >= 0 Thenhudu = Pi / 2Elsehudu = Pi / 2 + PiEnd IfEnd IfEnd Function'=============刀补运算=======================Private Sub Command3_Click()Picture1.DrawWidth = 1Dim X01 As Single '圆心相对圆弧交接点坐标Dim Y01 As SingleDim X02 As SingleDim Y02 As SingleDim Xl1 As Single '圆弧在交接点处的方向矢量Dim Yl1 As SingleDim Xl2 As SingleDim Yl2 As SingleX01 = X0 + I1 - X1Y01 = Y0 + J1 - Y1X02 = I2Y02 = J2Xl1 = -Y01 / R1Yl1 = X01 / R1Xl2 = -Y02 / R2Yl2 = X02 / R2Dim Cases As SingleDim Xs1 As Single '转接点坐标Dim Ys1 As SingleDim Xs2 As SingleDim Ys2 As SingleDim Xs3 As SingleDim Ys3 As SingleDim Xs4 As SingleDim Ys4 As SingleDim Xl As Single '书上公式中的变量Dim Yl As SingleDim D1 As SingleDim D2 As SingleDim Fs As SingleDim k As Single '中间变量Dim s As SingleDim Ss As SingleDim Mmx As SingleDim Mmy As SingleDim Mma As SingleDim Flag1 As BooleanDim Flag2 As BooleanDim tt As Single '中间变量Cases = Sgn(r) * (Yl2 * Xl1 - Xl2 * Yl1)If Cases > 0 Then'======================================缩短型====================================== 'MATLAB中得到的两圆交点公式k = (R1 ^ 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 ^ 2 - OX1 ^ 2 - OY1 ^ 2 - OX2 ^ 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 ^ 2 + 4 * r ^ 2 + 2 * OX2 * OX1)s = (-OY2 ^ 2 - OY1 ^ 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 * R2 + R1 ^ 2 + R2 ^ 2 - OX1 ^ 2 - OX2 ^ 2)Ss = -2 * OY2 * OY1 * OX2 ^ 2 + OX2 ^ 2 * OY2 ^ 2 + OY1 * (-(OX1 - OX2) ^ 2 * (-OY2 ^ 2 - OY1 ^ 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 * R2 + R1 ^ 2 + R2 ^ 2 - OX1 ^ 2 - OX2 ^ 2) * (R1 ^ 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 ^ 2 - OX1 ^ 2 - OY1 ^ 2 - OX2 ^ 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 ^ 2 + 4 * r ^ 2 + 2 * OX2 * OX1)) ^ (1 / 2) + 2 * OY2 * OX1 ^ 2 * OY1 + 2 * OX2 * OX1 * R2 ^ 2 - 2 * OX2 * OX1 * R1 ^ 2 - 2 * OX2 ^ 2 * R2 * r + 2 * R1 * r * OX2 ^ 2 - 2 * OX1 ^ 2 * R2 * r + 2 * OX1 ^ 2 * R1 * r - 4 * OX2 * OX1 * R1 * r + 4 * OX2 * OX1 * R2 * r + R1 ^ 2 * OX1 ^ 2 + R1 ^ 2 * OX2 ^ 2 - OX1 ^ 2 * OY1 ^ 2 - OX1 ^ 2 * R2 ^ 2 - OX1 ^ 2 * OY2 ^ 2 + OY1 ^ 2 * OX2 ^ 2 - R2 ^ 2 * OX2 ^ 2 - OX1 ^ 4 + OX2 ^ 4 + 2 * OX2 * OX1 ^ 3 - 2 * OX2 ^ 3 * OX1 - OY2 * (-(OX1 - OX2) ^ 2 * s * k) ^ (1 / 2)Mmx = -1 / 2 * Ss / (-2 * OX2 * OX1 - 2 * OY1 * OY2 + OX1 ^ 2 + OY1 ^ 2 + OX2 ^ 2 + OY2 ^ 2) / (OX1 - OX2)Mmy = -1 / 2 * (-R1 ^ 2 * OY2 - OY1 ^ 3 - OX1 ^ 2 * OY2 + 2 * OY2 * R2 * r + 2 * OX2 * OX1 * OY1 + 2 * OX2 * OX1 * OY2 - 2 * OY2 * R1 * r - 2 * OY1 * R2 * r + 2 * OY1 * R1 * r + R1 ^ 2 * OY1 - OY1 * OX2 ^ 2 - OX1 ^ 2 * OY1 + OY1 ^ 2 * OY2 - OY1 * R2 ^ 2 - OY2 * OX2 ^ 2 + OY1 * OY2 ^ 2 + OY2 * R2 ^ 2 - OY2 ^ 3 - (-(OX1 - OX2) ^ 2 * (-OY2 ^ 2 - OY1 ^ 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 * R2 + R1 ^ 2 + R2 ^ 2 - OX1 ^ 2 - OX2 ^ 2) * (R1 ^ 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 ^ 2 - OX1 ^ 2 - OY1 ^ 2 - OX2 ^ 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 ^ 2 + 4 * r ^ 2 + 2 * OX2 * OX1)) ^ (1 / 2)) / (-2 * OX2 * OX1 - 2 * OY1 * OY2 + OX1 ^ 2 + OY1 ^ 2 + OX2 ^ 2 + OY2 ^ 2)Xx1 = Mmx - OX1Yy1 = Mmy - OY1Mma = hudu(Xx1, Yy1)If End1 < Start1 Then '判断该点是否满足第一段圆弧If Mma < Start1 And Mma > End1 ThenFlag1 = FalseElseFlag1 = TrueEnd IfElseIf Mma > Start1 And Mma < End1 ThenFlag1 = TrueElseFlag1 = FalseEnd IfEnd IfXx1 = Mmx - OX2Yy1 = Mmy - OY2Mma = hudu(Xx1, Yy1)If End2 < Start2 Then '判断该点是否满足第二段圆弧If Mma < Start2 And Mma > End2 ThenFlag2 = FalseElseFlag2 = TrueEnd IfElseIf Mma > Start2 And Mma < End2 ThenFlag2 = TrueElseFlag2 = FalseEnd IfEnd IfIf Flag1 And Flag2 Then '判断得到的点是否满足条件Xs1 = MmxYs1 = MmyEnd Ifk = R1 ^ 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 ^ 2 - OX1 ^ 2 - OY1 ^ 2 - OX2 ^ 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 ^ 2 + 4 * r ^ 2 + 2 * OX2 * OX1s = -(OX1 - OX2) ^ 2 * (-OY2 ^ 2 - OY1 ^ 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 * R2 + R1 ^ 2 + R2 ^ 2 - OX1 ^ 2 - OX2 ^ 2)Ss = (-2 * OY2 * OY1 * OX2 ^ 2 + OX2 ^ 2 * OY2 ^ 2 - OY1 * (-(OX1 - OX2) ^ 2 * (-OY2 ^ 2 - OY1 ^ 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 * R2 + R1 ^ 2 + R2 ^ 2 - OX1 ^ 2 - OX2 ^ 2) * (R1 ^ 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 ^ 2 - OX1 ^ 2 - OY1 ^ 2 - OX2 ^ 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 ^ 2 + 4 * r ^ 2 + 2 * OX2 * OX1)) ^ (1 / 2) + 2 * OY2 * OX1 ^ 2 * OY1 + 2 * OX2 * OX1 * R2 ^ 2 - 2 * OX2 * OX1 * R1 ^ 2 - 2 * OX2 ^ 2 * R2 * r + 2 * R1 * r * OX2 ^ 2 - 2 * OX1 ^ 2 * R2 * r + 2 * OX1 ^ 2 * R1 * r - 4 * OX2 * OX1 * R1 * r + 4 * OX2 * OX1 * R2 * r + R1 ^ 2 * OX1 ^ 2 + R1 ^ 2 * OX2 ^ 2 - OX1 ^ 2 * OY1 ^ 2 - OX1 ^ 2 * R2 ^ 2 - OX1 ^ 2 * OY2 ^ 2 + OY1 ^ 2 * OX2 ^ 2 - R2 ^ 2 * OX2 ^ 2 - OX1 ^ 4 + OX2 ^ 4 + 2 * OX2 * OX1 ^ 3 - 2 * OX2 ^ 3 * OX1 + OY2 * (s * k) ^ (1 / 2))Mmx = -1 / 2 * Ss / (-2 * OX2 * OX1 - 2 * OY1 * OY2 + OX1 ^ 2 + OY1 ^ 2 + OX2 ^ 2 + OY2 ^ 2) / (OX1 - OX2)Mmy = -1 / 2 * (-R1 ^ 2 * OY2 - OY1 ^ 3 - OX1 ^ 2 * OY2 + 2 * OY2 * R2 * r + 2 * OX2 * OX1 * OY1 + 2 * OX2 * OX1 * OY2 - 2 * OY2 * R1 * r - 2 * OY1 * R2 * r + 2 * OY1 * R1 * r + R1 ^ 2 * OY1 - OY1 * OX2 ^ 2 - OX1 ^ 2 * OY1 + OY1 ^ 2 * OY2 - OY1 * R2 ^ 2 - OY2 * OX2 ^ 2 + OY1 * OY2 ^ 2 + OY2 * R2 ^ 2 - OY2 ^ 3 + (-(OX1 - OX2) ^ 2 * (-OY2 ^ 2 - OY1 ^ 2 + 2 * OY1 * OY2 + 2 * OX2 * OX1 - 2 * R1 * R2 + R1 ^ 2 + R2 ^ 2 - OX1 ^ 2 - OX2 ^ 2) * (R1 ^ 2 + 4 * R1 * r + 2 * R1 * R2 - OY2 ^ 2 - OX1 ^ 2 - OY1 ^ 2 - OX2 ^ 2 + 4 * R2 * r + 2 * OY1 * OY2 + R2 ^ 2 + 4 * r ^ 2 + 2 * OX2 * OX1)) ^ (1 / 2)) / (-2 * OX2 * OX1 - 2 * OY1 * OY2 + OX1 ^ 2 + OY1 ^ 2 + OX2 ^ 2 + OY2 ^ 2)Xx1 = Mmx - OX1Yy1 = Mmy - OY1Mma = hudu(Xx1, Yy1)If End1 < Start1 Then '判断该点是否满足第一段圆弧If Mma < Start1 And Mma > End1 ThenFlag1 = FalseElseFlag1 = TrueEnd IfElseIf Mma > Start1 And Mma < End1 ThenFlag1 = TrueElseFlag1 = FalseEnd IfEnd IfXx1 = Mmx - OX2Yy1 = Mmy - OY2Mma = hudu(Xx1, Yy1)If End2 < Start2 Then '判断该点是否满足第二段圆弧If Mma < Start2 And Mma > End2 ThenFlag2 = FalseElseFlag2 = TrueEnd IfElseIf Mma > Start2 And Mma < End2 ThenFlag2 = TrueElseFlag2 = FalseEnd IfEnd IfIf Flag1 And Flag2 Then '判断得到的点是否满足条件Xs1 = MmxYs1 = MmyEnd IfPicture1.DrawWidth = 3 '线宽Picture1.PSet (Xs1, Ys1) '画点Picture1.Print "(" & Xs1 & "," & Ys1 & ")" '打印坐标Picture1.DrawWidth = 1 '线宽' '---------------------------------画刀补轨迹--------------------------------- Xx1 = -I1Yy1 = -J1Start1 = hudu(Xx1, Yy1)Xx1 = Xs1 - OX1Yy1 = Ys1 - OY1End1 = hudu(Xx1, Yy1)If Option1.Value Thentt = Start1Start1 = End1End1 = ttEnd IfIf End1 < Start1 Then '画第一段圆弧Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, Start1, 2 * Pi, 624 / 697Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, 0, End1, 624 / 697 ElsePicture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, Start1, End1, 624 / 697 End IfXx1 = Xs1 - X1 - I2Yy1 = Ys1 - Y1 - J2Start2 = hudu(Xx1, Yy1)Xx1 = X2 - OX2Yy1 = Y2 - OY2End2 = hudu(Xx1, Yy1)If Option3.Value Thentt = Start2Start2 = End2End2 = ttEnd IfIf End2 < Start2 Then '画第二段圆弧Picture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, Start2, 2 * Pi, 624 / 697Picture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, 0, End2, 624 / 697ElsePicture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, Start2, End2, 624 / 697End IfElseIf Yl2 * Yl1 + Xl2 * Xl1 >= 0 Then'======================================伸长型====================================== Xs1 = X1 - r * Yl1Ys1 = Y1 + r * Xl1Xs2 = X1 + (Xl2 - Xl1) * r / (Xl1 * Yl2 - Xl2 * Yl1)Ys2 = Y1 + (Yl2 - Yl1) * r / (Xl1 * Yl2 - Xl2 * Yl1)Xs3 = X1 - r * Yl2Ys3 = Y1 + r * Xl2If End1 < Start1 Then '画第一段圆弧Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, Start1, 2 * Pi, 624 / 697Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, 0, End1, 624 / 697ElsePicture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, Start1, End1, 624 / 697End IfIf End2 < Start2 Then '画第二段圆弧Picture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, Start2, 2 * Pi, 624 / 697Picture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, 0, End2, 624 / 697ElsePicture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, Start2, End2, 624 / 697End IfPicture1.Line (Xs1, Ys1)-(Xs2, Ys2), vbGreen '画两段直线Picture1.Line (Xs2, Ys2)-(Xs3, Ys3), vbGreenPicture1.DrawWidth = 3 '线宽Picture1.PSet (Xs1, Ys1) '画点Picture1.Print "(" & Xs1 & "," & Ys1 & ")" '打印坐标值Picture1.PSet (Xs2, Ys2)Picture1.Print "(" & Xs2 & "," & Ys2 & ")"Picture1.PSet (Xs3, Ys3)Picture1.Print "(" & Xs3 & "," & Ys3 & ")"Else'======================================插入型====================================== Xs1 = X1 - r * Yl1Ys1 = Y1 + r * Xl1Xs2 = Xs1 + Abs(r) * Xl1Ys2 = Ys1 + Abs(r) * Yl1Xs3 = X1 - r * Yl2 - Abs(r) * Xl2Ys3 = Y1 + r * Xl2 - Abs(r) * Yl2Xs4 = X1 - r * Yl2Ys4 = Y1 + r * Xl2If End1 < Start1 Then '画第一段圆弧Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, Start1, 2 * Pi, 624 / 697Picture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, 0, End1, 624 / 697ElsePicture1.Circle (OX1, OY1), Abs(R1 + r), vbGreen, Start1, End1, 624 / 697End IfIf End2 < Start2 Then '画第二段圆弧Picture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, Start2, 2 * Pi, 624 / 697Picture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, 0, End2, 624 / 697ElsePicture1.Circle (OX2, OY2), Abs(R2 + r), vbGreen, Start2, End2, 624 / 697End IfPicture1.Line (Xs1, Ys1)-(Xs2, Ys2), vbGreen '画三段直线Picture1.Line (Xs2, Ys2)-(Xs3, Ys3), vbGreenPicture1.Line (Xs3, Ys3)-(Xs4, Ys4), vbGreenPicture1.DrawWidth = 3Picture1.PSet (Xs1, Ys1)Picture1.Print "(" & Xs1 & "," & Ys1 & ")"Picture1.PSet (Xs2, Ys2)Picture1.Print "(" & Xs2 & "," & Ys2 & ")"Picture1.PSet (Xs3, Ys3)Picture1.Print "(" & Xs3 & "," & Ys3 & ")"Picture1.PSet (Xs4, Ys4)Picture1.Print "(" & Xs4 & "," & Ys4 & ")"End IfEnd IfEnd SubPrivate Sub Form_Load()Command1.Enabled = TrueCommand2.Enabled = TrueCommand3.Enabled = TrueEnd Sub。

VB软件模拟逐点比较法逆圆弧插补的程序设计说明书

VB软件模拟逐点比较法逆圆弧插补的程序设计说明书

xxxx 学院课程设计说明书设计题目:逐点比较法逆圆弧插补的程序设计系 (部):机电工程系专业:自动化(数控技术)班级: 08数控本(1)班姓名:学号:指导老师(签名):起止时间:20 11年 12月 5 日至20 11年 12月 9 日共 1 周20 11 年 12 月 11 日目录一.课程设计的目的 (1)二.课程设计的任务 (1)三.逐点比较法基本原理 (1)四.算法描述 (6)五.具体算法程序 (10)六.各象限选例展示 (17)七.心得体会 (19)八.参考文献 (19)正文:数控原理与系统课程设计说明书一、课程设计的目的1)了解连续轨迹控制数控系统的组成原理。

2) 掌握逐点比较法插补的基本原理。

3)握逐点比较法插补的软件实现方法。

二.课程设计的任务逐点比较法插补是最简单的脉冲增量式插补算法之一,其过程清晰,速度平稳,但一般只用于一个平面内两个坐标轴的插补运算。

其基本原理是在刀具按要求轨迹运动加工零件轮廓的过程中,不断比较刀具与被加工零件轮廓之间的相对位置,并根据比较结果决定下一步的进给方向,使刀具向减小偏差的方向进给,且只有一个方向的进给。

也就是说,逐点比较法每一步均要比较加工点瞬时坐标与规定零件轮廓之间的距离,依此决定下一步的走向。

如果加工点走到轮廓外面去了,则下一步要朝着轮廓内部走;如果加工点处在轮廓的内部,则下一步要向轮廓外面走,以缩小偏差,这样周而复始,直至全部结束,从而获得一个非常接近于数控加工程序规定轮廓的轨迹。

逐点比较法插补过程中的每进给一步都要经过偏差判别、坐标进给、偏差计算和终点判别四个节拍的处理,其工作流程图如图所示。

三.逐点比较法基本原理逐点比较法I象限逆圆插补在加工圆弧过程中,人们很容易联想到使用动点到圆心的距离与该圆弧的名义半径进行比较来反映加工偏差。

假设被加工零件的轮廓为第Ⅰ象限逆走向圆弧SE ,,圆心在O (0,0),半径为R ,起点为S (XS ,YS ),终点为E (Xe ,Ye ),圆弧上任意加工动点为N (Xi ,Yi )。

基于VB的比较积分法圆弧插补仿真设计

基于VB的比较积分法圆弧插补仿真设计
矢 量 , 图 1 示 , B 点 是 圆 弧 起 点 O 的 如 所 设 ,

随着 微 电子 技 术 、 算 机 技 术 的 发 展 , 计 数 控 机 床 的 性 能 不 断 完 善 ,其 应 用 范 围 也 不 断 增大。 数控技术作为数控机床 的关键技术 , 而 越来 越 得 到 更 多 高 校 的 重 视 , 国 内 许 多 高校 在机 械 类和 自动 化 类 等 专 业 都 开 设 了数 控 技 术 课 程 。 作 为 数控 技 术 教 学 中 的 一 个 重 要 组 成 ,数控 插 补 算 法 的 教 学 显 得 既 重 要 也 难 掌 握 ,因 此在 教学 中 必须 重 视 数 控 插 补 的 实 验 教 学 , 由于 插 补 模 拟 设 备 价 格 昂贵 , 以 从 但 难 数 量 上 满 足 教 学 的 要 求 ,如 何 较 好 地 讲 解 数 控插 补原 理 并 直观 地 显 示 数 控 机 床 刀 具 的 走
件 ,较 好 地 解 决 了 数控 插 补 过 程 的 讲 解 及 走
刀 轨 迹 的 显示 等 问题 。 目前 数控 插补 算 法 有 多 种 ,且 大 多 数 数 控 系统 都 具 有 直 线 和 圆 弧 的 插 补 功 能 。 由 于
对上 式 两 端 微 分 , 得
( -x )x (+ o y x od + y y ) =0 d
较 积 分 法 插 补 原 理 及 其 仿 真 系 统 设 计 方 法 。 此 设 计 经 过 验 证 , 果 良好 , 用 方 便 , 到 了教 学 培 训 效 果 。 效 应 达
关键 词 :数 控 ;插 补 ;仿 真 ;圆 弧 中 图 分 类 号 :T 3 19 P 9 . 文 献 标 识 码 :A 文 章 编 号 : 6 2 0 4 2 08) 6 0 7 — 2 1 7 — 5 7( 0 0 — 07 0

逐点比较法圆弧插补代码VB

逐点比较法圆弧插补代码VB

VB界面:直线插补和圆弧插补的程序代码:Dim x1%, y1%, x2%, y2%, p!Dim Di As IntegerConst PI = 3.14159Private Sub cmdShow_Click()x1 = V al(Text1(0)): y1 = V al(Text1(1)) x2 = V al(Text1(2)): y2 = V al(Text1(3)) pic.Clsaxis picp = V al(Combo1.Text)cmdShow.Enabled = FalseIf Option1.V alue Thenpic.Circle (x1, y1), 0.1, vbBlackpic.Circle (x2, y2), 0.1, vbBlackzhixian pic, x1, y1, x2, y2ElseIf Option2.V alue Thenpic.Circle (x1, y1), 0.1, vbBlackpic.Circle (x2, y2), 0.1, vbBlackIf x1 ^ 2 + y1 ^ 2 = x2 ^ 2 + y2 ^ 2 Thenyuanhu pic, x1, y1, x2, y2ElseMsgBox "ERROR!请重新输入!", vbCritical End IfEnd IfcmdShow.Enabled = TrueEnd SubPrivate Sub zhixian(obj As Object, xi%, yi%, xj%, yj%) Dim x!, y!f = 0x = xi: y = yiobj.Line (xi, yi)-(xj, yj), vbBlackobj.CurrentX = xobj.CurrentY = yn = (Abs(xj - xi) + Abs(yj - yi)) / pWhile n <> 0If f >= 0 ThenIf xj <> xi Thenx = x + (xj - xi) / Abs(xj - xi) * pElsey = y + (yj - yi) / Abs(yj - yi) * pEnd Iff = f - Abs(yj - yi)ElseIf yj <> yi Theny = y + (yj - yi) / Abs(yj - yi) * pEnd Iff = f + Abs(xj - xi)End Ifobj.Line -(x, y), vbRedn = n - 1DoEventsFor i = 1 To 2000000 * pNext iWendEnd SubPrivate Sub Form_Load()If App.PrevInstance Then EndCombo1.Text = Combo1.List(6)pic.Height = 460pic.Width = 460pic.Scale (-12, 12)-(12, -12)axis picEnd SubPrivate Sub axis(obj As Object)obj.Line (-obj.ScaleWidth / 2 + 0.5, 0)-(obj.ScaleWidth / 2 - 0.5, 0) obj.Line -(obj.ScaleWidth / 2 - 1, 0.2)obj.Line (obj.ScaleWidth / 2 - 0.5, 0)-(obj.ScaleWidth / 2 - 1, -0.2) obj.Line (0, obj.ScaleHeight / 2 + 0.5)-(0, -obj.ScaleHeight / 2 - 0.5) obj.Line -(-0.2, -obj.ScaleHeight / 2 - 1)obj.Line (0, -obj.ScaleHeight / 2 - 0.5)-(0.2, -obj.ScaleHeight / 2 - 1) obj.Font.Size = 9For cx = -10 To 10 Step 1obj.Line (cx, 0)-(cx, 0.2)If cx <> 0 Thenobj.CurrentX = cx - 0.3obj.CurrentY = -0.2obj.Print cxEnd IfNextFor cy = -10 To 10 Step 1obj.Line (0, cy)-(0.2, cy)If cy <> 0 Thenobj.CurrentX = -0.8obj.CurrentY = cy + 0.2obj.Print cyEnd IfNextobj.CurrentX = -0.5obj.CurrentY = -0.2obj.Font.Size = 9obj.Print "O"End SubPrivate Sub yuanhu(obj As Object, xi%, yi%, xj%, yj%)n = Abs(xj - xi) + Abs(yj - yi): n = n / pf = 0r = Sqr(xi ^ 2 + yi ^ 2)If xi <> 0 ThenstartP = Atn(yi / xi)ElsestartP = PI / 2End IfIf xj <> 0 ThenendP = Atn(yj / xj)ElseendP = PI / 2End IfIf xi <= xj ThenDi = -1obj.Circle (0, 0), r, vbBlack, endP, startPElseDi = 1obj.Circle (0, 0), r, vbBlack, startP, endPEnd Ifobj.CurrentX = xiobj.CurrentY = yix = xi: y = yiWhile n <> 0If f * Di > 0 Thenf = f - 2 * x * Di + px = x - p * DiElseIf f * Di < 0 Thenf = f + 2 * y * Di + py = y + p * DiElseIf f * Di = 0 ThenIf Di = 1 Thenf = f + 2 * y * Di + py = y + pElsef = f - 2 * x * Di + px = x - p * DiEnd IfEnd Ifn = n - 1obj.Line -(x, y), vbRedDoEventsFor i = 1 To 2000000 * pNext iWendEnd SubPrivate Sub Text1_Change(Index As Integer)If Abs(V al(Text1(Index).Text)) > 10 ThenMsgBox "输入数值过大,屏幕内不能完全显示!"Text1(Index).Text = ""End IfIf Left(Text1(Index), 1) = "0" And Len(Text1(Index)) = 2 ThenText1(Index) = Right(Text1(Index), 1)End IfIf Right(Text1(Index), 1) = "-" And Len(Text1(Index)) = 2 Then Text1(Index) = Left(Text1(Index), 1)End IfEnd SubPrivate Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer) If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 45 _ And KeyAscii <> 8 ThenKeyAscii = 0End IfEnd Sub演示效果:。

#VB软件_模拟逐点比较法逆圆弧插补的程序设计

#VB软件_模拟逐点比较法逆圆弧插补的程序设计

宿迁学院课程设计说明书设计题目:基于VB数字积分法一、二象限逆圆插补计算与仿真系(部):机电工程系专业:自动化(数控技术)班级:09数控本(2)姓名:李伟学号:200907052指导老师(签名):刘萍起止时间:20 12年12月3 日至20 12年12月7 日共 1 周20 12 年12 月6 日正文:数控原理与系统课程设计说明书一、课程设计的目的1)了解连续轨迹控制数控系统的组成原理。

2) 掌握逐点比较法插补的基本原理。

3)握逐点比较法插补的软件实现方法。

二.课程设计的任务逐点比较法插补是最简单的脉冲增量式插补算法之一,其过程清晰,速度平稳,但一般只用于一个平面内两个坐标轴的插补运算。

其基本原理是在刀具按要求轨迹运动加工零件轮廓的过程中,不断比较刀具与被加工零件轮廓之间的相对位置,并根据比较结果决定下一步的进给方向,使刀具向减小偏差的方向进给,且只有一个方向的进给。

也就是说,逐点比较法每一步均要比较加工点瞬时坐标与规定零件轮廓之间的距离,依此决定下一步的走向。

如果加工点走到轮廓外面去了,则下一步要朝着轮廓内部走;如果加工点处在轮廓的内部,则下一步要向轮廓外面走,以缩小偏差,这样周而复始,直至全部结束,从而获得一个非常接近于数控加工程序规定轮廓的轨迹。

逐点比较法插补过程中的每进给一步都要经过偏差判别、坐标进给、偏差计算和终点判别四个节拍的处理,其工作流程图如图所示。

三.逐点比较法基本原理逐点比较法I 象限逆圆插补在加工圆弧过程中,人们很容易联想到使用动点到圆心的距离与该圆弧的名义半径进行比较来反映加工偏差。

假设被加工零件的轮廓为第Ⅰ象限逆走向圆弧SE ,,圆心在O (0,0),半径为R ,起点为S (XS ,YS ),终点为E (Xe ,Ye ),圆弧上任意加工动点为N (Xi ,Yi )。

当比较该加工动点到圆心的距离ON 与圆弧半径R 的大小时,可获得刀具与圆弧轮廓之间的相对位置关系。

当动点N (Xi ,Yi )正好落在圆弧上时,则有下式成立22222R Y X Y X e e i i =+=+当动点N (Xi ,Yi )落在圆弧外侧时,则有下式成立22222R Y X Y X e e i i =+>+当动点N (Xi ,Yi )落在圆弧内侧时,则有下式成立22222R Y X Y X e e i i =+<+由此可见,取逐点比较法圆弧插补的偏差函数表达式为222R Y X F i i -+=当动点落在圆外时,为了减小加工误差,应向圆内进给,即向(-X)轴方向走一步;当动点落在圆内时,应向圆外进给,即向(+Y)轴方向走一步。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Private Sub Command1_Click()Const pi = 3.14159265Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (50, 500)-(50, 5500)Picture1.Line (50, 5500)-(6500, 5500)Picture1.Line (80, 600)-(50, 500)Picture1.Line (20, 600)-(50, 500)Picture1.Line (6400, 5450)-(6500, 5500) Picture1.Line (6400, 5550)-(6500, 5500) Picture1.ForeColor = vbRedPicture1.DrawWidth = 3If Int(Text1) = 0 ThenPicture1.Circle (50, 5500), Sqr(Int(Text1) *Int(Text1) + Int(Text2) * Int(Text2)) * 400, , Atn(Int(Text4) / Int(Text3)), pi / 2ElsePicture1.Circle (50, 5500), Sqr(Int(Text1) *Int(Text1) + Int(Text2) * Int(Text2)) * 400, , Atn(Int(Text4) / Int(Text3)), Atn(Int(Text2) /Int(Text1))End IfEnd SubPrivate Sub Command2_Click()Dim k, m, j, l, n, F(20) As Integerm = 0l = Text1.Textk = Text2.TextF(m) = 0Picture1.ForeColor = vbGreenPicture1.DrawWidth = 3j = Abs(Int(Text1) - Int(Text3)) + Abs(Int(Text2) - Int(Text4))Form1.CurrentX = 200Form1.CurrentY = 200 Print "初始:进给方向 " & "F(m)=0" & " X0=" & Int(Text1) & " Y0=" & Int(Text2) & " ∑ = " & jFor n = 1 To jIf F(m) >= 0 And j > 0 Thenm = m + 1k = k - 1F(m) = F(m - 1) - 2 * Abs(k + 1) + 1Picture1.Line (50 + 400 * l, 5500 - k * 400)-(50 + 400 * l, 5500 - (k + 1) * 400)Form1.CurrentX = 200Form1.CurrentY = 200 + m * 300Print "第" & m & "步" & " -△y F(" & m & ")= " & F(m) & " " & "x=" & l & " " & "y="; k & " ∑=" & j - nElsel = l + 1m = m + 1Picture1.Line (50 + 400 * l, 5500 - k * 400)-(50 + 400 * (l - 1), 5500 - k * 400)F(m) = F(m - 1) + 2 * Abs(l - 1) + 1Form1.CurrentX = 200Form1.CurrentY = 200 + m * 300Print "第" & m & "步" & " +△x F(" & m & ")= " & F(m) & " " & "x="; l & " " & "y="; k & " ∑=" & j - nEnd IfNext nEnd SubPrivate Sub Command3_Click()Text1.Text = ""Text3.Text = ""End SubPrivate Sub Command4_Click()EndEnd SubPrivate Sub Command1_Click()Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (7500, 8500)-(7500, 500)Picture1.Line (7500, 500)-(500, 500)Picture1.Line (7500, 8500)-(7400, 8400)Picture1.Line (7500, 8500)-(7600, 8400)Picture1.Line (500, 500)-(600, 600)Picture1.Line (500, 500)-(600, 400)Picture1.ForeColor = vbRedPicture1.DrawWidth = 5Picture1.Line (7500, 500)-(7500 + 400 *Int(Text3), 500 - 400 * Int(Text4))End SubPrivate Sub Command2_Click()Form1.ClsDim k, m, j, l, n, F(20) As Integerm = 0l = 0k = 0F(m) = 0Picture1.ForeColor = vbGreenPicture1.DrawWidth = 3j = Abs(Int(Text3)) + Abs(Int(Text4))Form1.CurrentX = 200Form1.CurrentY = 200Print "初始:进给方向 " & "F(m)=0" & " Xe=" & Int(Text3) & " Ye=" & Int(Text4) & " ∑ = " & jFor n = 1 To jIf F(m) >= 0 And j > 0 Thenm = m + 1l = l - 1F(m) = F(m - 1) - Abs(Int(Text4)) Picture1.Line (7500 + 400 * (l + 1), 500 - k * 400)-(7500 + 400 * (l), 500 - k * 400)Form1.CurrentX = 200Form1.CurrentY = 200 + m * 300Print "第" & m & "步" & " △x F(" & m & ")= "& F(m) & " " & "x=" & l & " " & "y="; k & " ∑=" & j - nElsek = k - 1m = m + 1Picture1.Line (7500 + 400 * l, 500 - (k + 1) * 400)-(7500 + 400 * l, 500 - k * 400)F(m) = F(m - 1) + Abs(Int(Text3))Form1.CurrentX = 200Form1.CurrentY = 200 + m * 300Print "第" & m & "步" & " △y F(" & m & ")= " & F(m) & " " & "x="; l & " " & "y="; k & " ∑=" & j - nEnd IfNext nEnd SubPrivate Sub Command3_Click()Text1.Text = ""Text2.Text = ""Picture1.ClsForm1.ClsEnd SubPrivate Sub Command4_Click()EndEnd SubPrivate Sub Form_Load()End SubPrivate Sub Command1_Click()Const pi = 3.14159265Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (50, 500)-(50, 5500)Picture1.Line (50, 5500)-(6500, 5500)Picture1.Line (80, 600)-(50, 500)Picture1.Line (20, 600)-(50, 500)Picture1.Line (6400, 5450)-(6500, 5500)Picture1.Line (6400, 5550)-(6500, 5500)Picture1.ForeColor = vbRedPicture1.DrawWidth = 3Picture1.Line (50, 5500)-(50 + 400 * Int(Text3), 5500 - 400 * Int(Text4))End SubPrivate Sub Command2_Click()Dim k, m, j, l, n, F, G As Integerl = 0 k = 0 F = 0 G = 0Picture1.ForeColor = vbGreenPicture1.DrawWidth = 3n = Int(Text5)j = 2 ^ nm = 2 ^ nForm1.CurrentX = 200Form1.CurrentY = 200Print "累加次数 " & "F= F + int (text3)" & " +△X " & " G=G +int(text4)" & " +△Y "; ∑ = " & j"Print " n " & " 0 " & " 0 " & " 0 " & " 0 " & jFor n = 1 To mF = F + Int(Text3)G = G + Int(Text4) If F >= m And G >= m Thenl = l + 1 k = k + 1Picture1.Line (50 + 400 * (l - 1), 5500 - (k - 1) * 400)-(50 + 400 * (l), 5500 - k * 400)F = F - mG = G - mPrint " "; n & " " & F & " " & 1 & " " & G & " " & 1 & " " & j - 1ElseIf F >= m And G < m Thenl = l + 1F = F - mPrint " "; n & " " & F & " " & 1 & " " & G & " " & 0 & " " & j - 1Picture1.Line (50 + 400 * (l - 1), 5500 - k * 400)-(50 + 400 * (l), 5500 - k * 400)ElseIf F < m And G >= m Thenk = k + 1 G = G - mPicture1.Line (50 + 400 * l, 5500 - (k - 1) * 400)-(50 + 400 * (l), 5500 - k * 400)Print " "; n & " " & F & " " & 0 & " " & G & " " & 1 & " " & j - 1ElseIf F < m And G < m ThenPrint " "; n & " " & F & " " & 0 & " " & G & " " & 0 & " " & j - 1End Ifj = j - 1Next nEnd SubPrivate Sub Command3_Click()Text1.Text = ""Text2.Text = ""Picture1.ClsForm1.ClsEnd SubPrivate Sub Command4_Click()End End Sub。

相关文档
最新文档