本课题是刀具半径补偿的直线-直线软件实现,是南京工程学院数控专业的数控原理与系统的课程设计,整个工程都是自己随便弄弄的,作为课设作业还算比较严谨吧。题目不难,具体的直线-直线的刀具补偿原理,见机械工业出版社出版的汪木兰主编的《数控原理与系统》的P56~P59,这里不再赘述,具体的代码贴在下边,另外附件中有zip包附带整个工程文件(界面、工程、代码)。具体实现都很简单,因为学期末了,找工作的找工作,考研复试的复试,大多都没兴趣好好弄了,在这里贴上来方便大家交差把。

具体思路稍微一提,对给定的直线的3个点,首先在界面中选择刀补阶段,到底是刀补建立,还是刀补进行,还是刀补撤销,进一步通过直线投影判断两直线夹角,分为伸长型,缩短型,插入型三种情况,分别予以讨论,计算出补偿后的刀具轨迹,然后加以在PICTUREbox中显示。

VB工程代码:

Public X0 As Double, Y0 As Double, X1 As Double, Y1 As Double, X2 As Double, Y2 As Double, R As Double
Public Xs1 As Double, Ys1 As Double, Xs2 As Double, Ys2 As Double
Public Ori As Integer
Public Xl1 As Double, Yl1 As Double, Xl2 As Double, Yl2 As Double, dX1 As Double, dY1 As Double, dX2 As Double, dY2 As Double, d1 As Double, d2 As DoublePrivate Sub Command1_Click()Dim X1_FWD As Integer, Y1_FWD As Integer, X2_FWD As Integer, Y2_FWD As Integer
Dim alfa As Double, beta As DoubleCall PaintAxis'绘制补偿前图像
Picture1.ForeColor = vbBlue
Picture1.DrawWidth = 1
Picture1.Line (X0, Y0)-(X1, Y1)
Picture1.Line (X1, Y1)-(X2, Y2)'算法设计'计算坐标增量
dX1 = X1 - X0
dY1 = Y1 - Y0
dX2 = X2 - X1
dY2 = Y2 - Y1alfa = Atn(dY1 / dX1)beta = Atn(dY2 / dX2)If dX1 >= 0 Then
X1_FWD = 1
Else
X1_FWD = -1
End IfIf dX2 >= 0 Then
X2_FWD = 1
Else
X2_FWD = -1
End IfIf dY1 >= 0 Then
Y1_FWD = 1
Else
Y1_FWD = -1
End IfIf dY2 >= 0 Then
Y2_FWD = 1
Else
Y2_FWD = -1
End If'计算d1,d2
d1 = Sqr(dX1 ^ 2 + dY1 ^ 2)
d2 = Sqr(dX2 ^ 2 + dY2 ^ 2)
'计算方向矢量投影
Xl1 = dX1 / d1
Yl1 = dY1 / d1
Xl2 = dX2 / d2
Yl2 = dY2 / d2'判断缩短型,伸长型,插入型If Ori * (Yl2 * Xl1 - Xl2 * Yl1) >= 0 Then '缩短型'刀补建立If Combo1.ListIndex = 0 And Ori * (Yl2 * Xl1 - Xl2 * Yl1) <> 0 ThenXs1 = X1 - R * Ori * Yl2Ys1 = Y1 + R * Ori * Xl2X_0p.Text = X0Y_0p.Text = Y0X_s1.Text = Xs1Y_s1.Text = Ys1X_2p.Text = Xs1 + dX2Y_2p.Text = Ys1 + dY2Picture1.ForeColor = vbMagentaPicture1.Line (X0, Y0)-(Xs1, Ys1)Picture1.Line (Xs1, Ys1)-(Xs1 + dX2, Ys1 + dY2)'刀补进行ElseIf Combo1.ListIndex = 1 ThenIf Yl2 * Xl1 - Xl2 * Yl1 = 0 Then 'l1与l2共线Xs1 = X1 - R * Ori * Yl1Ys1 = Y1 + R * Ori * Xl1X_0p.Text = Xs1 - dX1Y_0p.Text = Ys1 - dY1X_s1.Text = Xs1Y_s1.Text = Ys1X_2p.Text = Xs1 + dX2Y_2p.Text = Ys1 + dY2Picture1.ForeColor = vbMagentaPicture1.Line (Xs1 - dX1, Ys1 - dY1)-(Xs1, Ys1)Picture1.Line (Xs1, Ys1)-(Xs1 + dX2, Ys1 + dY2)Else ' l1与l2不共线Xs1 = X1 + (Xl2 - Xl1) * Ori * R / (Xl1 * Yl2 - Xl2 * Yl1)Ys1 = Y1 + (Yl2 - Yl1) * Ori * R / (Xl1 * Yl2 - Xl2 * Yl1)X_0p.Text = Xs1 - dX1Y_0p.Text = Ys1 - dY1X_s1.Text = Xs1Y_s1.Text = Ys1X_2p.Text = Xs1 + dX2Y_2p.Text = Ys1 + dY2Picture1.ForeColor = vbMagentaPicture1.Line (Xs1 - dX1, Ys1 - dY1)-(Xs1, Ys1)Picture1.Line (Xs1, Ys1)-(Xs1 + dX2, Ys1 + dY2)End If'刀补撤销ElseIf Combo1.ListIndex = 2 And Ori * (Yl2 * Xl1 - Xl2 * Yl1) <> 0 ThenXs1 = X1 - R * Ori * Yl1Ys1 = Y1 + R * Ori * Xl1X_0p.Text = Xs1 - dX1Y_0p.Text = Ys1 - dY1X_s1.Text = Xs1Y_s1.Text = Ys1X_2p.Text = X2Y_2p.Text = Y2Picture1.ForeColor = vbMagentaPicture1.Line (Xs1 - dX1, Ys1 - dY1)-(Xs1, Ys1)Picture1.Line (Xs1, Ys1)-(X2, Y2)End IfElseIf Ori * (Yl2 * Xl1 - Xl2 * Yl1) < 0 And (Yl2 * Yl1 + Xl2 * Xl1) >= 0 Then '伸长型'刀补建立If Combo1.ListIndex = 0 Then'第一对转接点Xs1 = X1 - R * Ori * Yl1Ys1 = Y1 + R * Ori * Yl1'第二对转接点Xs2 = X1 + (Xl2 - Xl1) * R * Ori / (Xl1 * Yl2 - Xl2 * Yl1)Ys2 = Y1 + (Yl2 - Yl1) * R * Ori / (Xl1 * Yl2 - Xl2 * Yl1)'输出坐标'X0',Y0'X_0p.Text = X0Y_0p.Text = Y0'Xs1,Ys1X_s1.Text = Xs1Y_s1.Text = Ys1'Xs2,Ys2X_s2.Text = Xs2Y_s2.Text = Ys2'X2' Y2'X_2p.Text = Xs2 + dX2Y_2p.Text = Ys2 + dY2'绘图Picture1.ForeColor = vbMagentaPicture1.Line (X0, Y0)-(Xs1, Ys1)Picture1.Line (Xs1, Ys1)-(Xs2, Ys2)Picture1.Line (Xs2, Ys2)-(Xs2 + dX2, Ys2 + dY2)'刀补进行ElseIf Combo1.ListIndex = 1 ThenXs1 = X1 + (Xl2 - Xl1) * R * Ori / (Xl1 * Yl2 - Xl2 * Yl1)Ys1 = Y1 + (Yl2 - Yl1) * R * Ori / (Xl1 * Yl2 - Xl2 * Yl1)'输出坐标'X0',Y0'X_0p.Text = X0Y_0p.Text = Y0'Xs1,Ys1X_s1.Text = Xs1Y_s1.Text = Ys1'X2' Y2'X_2p.Text = Xs2 + dX2Y_2p.Text = Ys2 + dY2'绘图Picture1.ForeColor = vbMagentaPicture1.Line (Xs1 - dX1, Ys1 - dY1)-(Xs1, Ys1)Picture1.Line (Xs1, Ys1)-(Xs1 + dX2, Ys1 + dY2)'刀补撤销ElseIf Combo1.ListIndex = 2 ThenXs1 = X1 + (Xl2 - Xl1) * R * Ori / (Xl1 * Yl2 - Xl2 * Yl1)Ys1 = Y1 + (Yl2 - Yl1) * R * Ori / (Xl1 * Yl2 - Xl2 * Yl1)Xs2 = X1 - R * Ori * Yl2Ys2 = Y1 + R * Ori * Xl2'输出坐标'X0',Y0'X_0p.Text = Xs1 - dX1Y_0p.Text = Ys1 - dY1'Xs1,Ys1X_s1.Text = Xs1Y_s1.Text = Ys1'Xs2,Ys2X_s2.Text = Xs2Y_s2.Text = Ys2'X2' Y2'X_2p.Text = X2Y_2p.Text = Y2'绘图Picture1.ForeColor = vbMagentaPicture1.Line (Xs1 - dX1, Ys1 - dY1)-(Xs1, Ys1)Picture1.Line (Xs1, Ys1)-(Xs2, Ys2)Picture1.Line (Xs2, Ys2)-(X2, Y2)End IfElseIf Ori * (Yl2 * Xl1 - Xl2 * Yl1) < 0 And (Yl2 * Yl1 + Xl2 * Xl1) < 0 Then '插入型'刀补建立If Combo1.ListIndex = 0 Then'第一对转接点Xs1 = X1 - R * Ori * Yl1Ys1 = Y1 + R * Ori * Xl1'第二对转接点Xs2 = X1 - Ori * R * Yl1 + R * Xl1Ys2 = Y1 + Ori * R * Xl1 + R * Yl1'第三对转接点Xs3 = X1 - R * Ori * Yl2 - R * Xl2Ys3 = Y1 + R * Ori * Xl2 - R * Yl2'输出坐标'X0',Y0'X_0p.Text = X0Y_0p.Text = Y0'Xs1,Ys1X_s1.Text = Xs1Y_s1.Text = Ys1'Xs2,Ys2X_s2.Text = Xs2Y_s2.Text = Ys2'Xs3,Ys3X_s3.Text = Xs3Y_s3.Text = Ys3'X2' Y2'X_2p.Text = Xs3 + dX2 + Abs(R * Cos(beta)) * X2_FWDY_2p.Text = Ys3 + dY2 + Abs(R * Sin(beta)) * X2_FWD'绘图Picture1.ForeColor = vbMagentaPicture1.Line (X0, Y0)-(Xs1, Ys1)Picture1.Line (Xs1, Ys1)-(Xs2, Ys2)Picture1.Line (Xs2, Ys2)-(Xs3, Ys3)Picture1.Line (Xs3, Ys3)-(Xs3 + dX2 + Abs(R * Cos(beta)) * X2_FWD, Ys3 + dY2 + Abs(R * Sin(beta)) * Y2_FWD)'刀补进行ElseIf Combo1.ListIndex = 1 Then'第一对转接点Xs1 = X1 - R * Ori * Yl1 + R * Xl1Ys1 = Y1 + R * Ori * Xl1 + R * Yl1'第二对转接点Xs2 = X1 - R * Ori * Yl2 - R * Xl2Ys2 = Y1 + R * Ori * Xl2 - R * Yl2'输出坐标'X0',Y0'X_0p.Text = Xs1 - dX1 - Abs(R * Cos(alfa)) * X1_FWDY_0p.Text = Ys1 - dY1 - Abs(R * Sin(alfa)) * Y1_FWD'Xs1,Ys1X_s1.Text = Xs1Y_s1.Text = Ys1'Xs2,Ys2X_s2.Text = Xs2Y_s2.Text = Ys2'X2' Y2'X_2p.Text = Xs2 + dX2 + Abs(R * Cos(beta)) * X2_FWDY_2p.Text = Ys2 + dY2 + Abs(R * Sin(beta)) * Y2_FWD'绘图Picture1.ForeColor = vbMagentaPicture1.Line (Xs1 - dX1 - Abs(R * Cos(alfa)) * X1_FWD, Ys1 - dY1 - Abs(R * Sin(alfa)) * Y1_FWD)-(Xs1, Ys1)Picture1.Line (Xs1, Ys1)-(Xs2, Ys2)Picture1.Line (Xs2, Ys2)-(Xs2 + dX2 + Abs(R * Cos(beta)) * X2_FWD, Ys2 + dY2 + Abs(R * Sin(beta)) * Y2_FWD)'刀补撤销ElseIf Combo1.ListIndex = 2 Then'第一对转接点Xs1 = X1 - R * Ori * Yl1 + R * Xl1Ys1 = Y1 + R * Ori * Xl1 + R * Yl1'第二对转接点Xs2 = X1 - R * Ori * Yl2 - R * Xl2Ys2 = Y1 + R * Ori * Xl2 - R * Yl2'第三对转接点Xs3 = X1 - R * Ori * Yl2Ys3 = Y1 + R * Ori * Xl2'输出坐标'X0',Y0'X_0p.Text = Xs1 - dX1 - Abs(R * Cos(alfa)) * X1_FWDY_0p.Text = Ys1 - dY1 - Abs(R * Sin(alfa)) * Y1_FWD'Xs1,Ys1X_s1.Text = Xs1Y_s1.Text = Ys1'Xs2,Ys2X_s2.Text = Xs2Y_s2.Text = Ys2'Xs3,Ys3X_s3.Text = Xs3Y_s3.Text = Ys3'X2' Y2'X_2p.Text = X2Y_2p.Text = Y2'绘图Picture1.ForeColor = vbMagentaPicture1.Line (Xs1 - dX1 - Abs(R * Cos(alfa)) * X1_FWD, Ys1 - dY1 - Abs(R * Sin(alfa)) * Y1_FWD)-(Xs1, Ys1)Picture1.Line (Xs1, Ys1)-(Xs2, Ys2)Picture1.Line (Xs2, Ys2)-(Xs3, Ys3)Picture1.Line (Xs3, Ys3)-(X2, Y2)End If
End IfEnd SubPrivate Sub Command2_Click()Call PaintAxisEnd SubPrivate Sub Form_Load()
'补偿后坐标不可编辑,只读
X_0p.Locked = True
Y_0p.Locked = True
X_s1.Locked = True
Y_s1.Locked = True
X_s2.Locked = True
Y_s2.Locked = True
X_2p.Locked = True
Y_2p.Locked = True'初始化ComboBox 两个
Combo1.AddItem "刀补建立", 0
Combo1.AddItem "刀补进行", 1
Combo1.AddItem "刀补撤销", 2End SubPrivate Sub Text1_Change()End SubPrivate Sub Option1_Click()
Ori = 1
End SubPrivate Sub Option2_Click()
Ori = -1
End SubPrivate Sub Picture1_Paint()Call PaintAxisEnd SubPrivate Sub Text9_Change()
R = Val(R_K.Text)
End SubPrivate Sub R_K_Change()
R = Val(R_K.Text)
End SubPrivate Sub X_0_Change()
'赋值坐标
X0 = Val(X_0.Text)
End SubPrivate Sub X_1_Change()
'赋值坐标
X1 = Val(X_1.Text)
End SubPrivate Sub X_2_Change()
'赋值坐标
X2 = Val(X_2.Text)
End SubPrivate Sub Y_0_Change()
'赋值坐标
Y0 = Val(Y_0.Text)
End SubPrivate Sub Y_1_Change()
'赋值坐标
Y1 = Val(Y_1.Text)
End SubPrivate Sub Y_2_Change()
'赋值坐标
Y2 = Val(Y_2.Text)
End SubPrivate Sub PaintAxis()
Cls
Dim i As Integer
Picture1.BackColor = vbWhite
Picture1.ForeColor = vbBlack
Picture1.Scale (-1000, 1000)-(1000, -1000)Picture1.DrawWidth = 2
Picture1.Line (-1000, 0)-(1000, 0) '画x轴
Picture1.Line (1000, 0)-(970, 15) '画箭头
Picture1.Line (1000, 0)-(970, -15) '画箭头Picture1.Line (0, -1000)-(0, 1000) '画y轴
Picture1.Line (0, 1000)-(10, 964) '画箭头
Picture1.Line (0, 1000)-(-10, 964) '画箭头'画坐标刻度
For i = -10 To 9 Step 1If i <> 0 Then
Picture1.Line (i * 100, 0)-(i * 100, 10) 'x轴刻度
Picture1.CurrentX = i * 100 - 52: Picture1.CurrentY = -10: Picture1.Print i * 100 'x轴数字Picture1.Line (0, i * 100)-(10, i * 100) 'y轴刻度
Picture1.CurrentX = -88: Picture1.CurrentY = i * 100 + 16: Picture1.Print i * 100 'y轴数字
End If
Next iPicture1.ForeColor = vbRed
Picture1.CurrentX = 10: Picture1.CurrentY = -10: Picture1.Print 0
Picture1.CurrentX = 980: Picture1.CurrentY = -14: Picture1.Print "X"
Picture1.CurrentX = 15: Picture1.CurrentY = 990: Picture1.Print "Y"
Picture1.ForeColor = vbBlack'显示框清零
X_0p.Text = ""
Y_0p.Text = ""
X_s1.Text = ""
Y_s1.Text = ""
X_s2.Text = ""
Y_s2.Text = ""
X_s3.Text = ""
Y_s3.Text = ""
X_2p.Text = ""
Y_2p.Text = ""End Sub

图形界面如下图所示:

以下再贴一张运行结果图:

各种情况的运行结果都打包在一个word文档作为附件上传了,有需要可以自己下载。工程也在下边的压缩包

程序运行结果:

http://download.csdn.net/detail/u013926582/9405668

VB全部工程文件:

http://download.csdn.net/detail/u013926582/9405678

可执行文件EXE:

http://download.csdn.net/detail/u013926582/9405694

祝大家学习愉快

【VB+数控原理与系统】数控原理与系统课程设计刀具半径补偿直线-直线VB模拟软件实现相关推荐

  1. Springboot林业企业销售系统模块58udx计算机毕业设计-课程设计-期末作业-毕设程序代做

    Springboot林业企业销售系统模块58udx计算机毕业设计-课程设计-期末作业-毕设程序代做 [免费赠送源码]Springboot林业企业销售系统模块58udx计算机毕业设计-课程设计-期末作业 ...

  2. 数字积分法直线插补c语言程序,数控课程设计(数字积分法第二象限直线插补程序).docx...

    数字积分法第二象限直线插补程序设计 数字积分法是利用数字积分的方法,计算刀具沿各坐标轴的位移,使得刀具 沿着所加工的轮廓曲线运动 利用数字 积分原 理构成的插 补装置 称为数字积分 器,又称数 字微分 ...

  3. 汽车站订票系统mysql实验_数据库课程设计报告-车站售票管理系统

    数据库课程设计报告-车站售票管理系统 吉林工程技术师范学院 课程设计报告 设计名称: 车站售票信息管理系统 姓 名: 孟祥丽 学 号: 23号 专 业: 计算机科学与技术 班 级: C1042 院 系 ...

  4. html课堂考勤系统源码,考勤管理系统课程设计源码

    考勤管理系统课程设计源码 源码描述: 主体分两个大块 员工信息 个人信息查询,员工信息修改,修改密码,添加用户,删除用户 企业管理 考勤登记,基本工资设置,员工考勤,自动生成变动工资表,自动生成福利费 ...

  5. c语言课程设计报告停车系统,停车场管理系统C语言课程设计

    <停车场管理系统C语言课程设计>由会员分享,可在线阅读,更多相关<停车场管理系统C语言课程设计(27页珍藏版)>请在人人文库网上搜索. 1.计算机科学与技术系课程设计报告20 ...

  6. 用C语言编程网上购物系统,华中科技大学C语言课程设计报告 -- 网上购物管理系统.pdf...

    华中科技大学自动化学院 C 语言课程设计报告 网上购物管理系统 专 业:自 动 化 班 级:自动化1306 班 组 员: 指导教师:周纯杰 何顶新 彭刚 周凯波 完成时间:2014 年11 月7 日星 ...

  7. C语言查课系统的报告,C语言课程设计报告车辆违章查询系统doc

    C语言课程设计报告车辆违章查询系统doc C 语言课程设计姓 名:刘 风学 号:8100612时 间:2011/6/11指导教师:王 薇题目:车辆违章查询系统 要求: 能够根据车辆的牌号,进行违章记录 ...

  8. c语言商品订购系统总结报告,c语言课程设计报告-商业销售管理系统

    c语言课程设计报告-商业销售管理系统 (14页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 C语言课程设计商业销售管理系统学号姓名班级软 ...

  9. c语言课程设计 湖南工程学院 小学生cai 系统 2013,研究报告C语言课程设计小学生心算CAI系统报告书.doc...

    研究报告C语言课程设计小学生心算CAI系统报告书 应用技术学院 课 程 设 计 报 告 课程名称 C语言课程设计 课题名称 小学生心算CAI系统 专 业 电气工程及其自动化 班 级 电气0985 学 ...

  10. javaweb基于SSM开发民宿预定系统(前台+后台)+ 课程设计 +源码

    基于SSM开发民宿预定系统(前台+后台)+视频讲解:(毕业设计/课程设计) 开发工具: MyEclipse(eclipse/idea)+Jdk+Tomcat+MySQL数据库 演示视频: javawe ...

最新文章

  1. R语言构建仿真数据库(sqlite)并使用dplyr语法和SQL语法查询数据库、将dplyr语法查询语句翻译为SQL查询语句
  2. eclipse如何修改dynamic web module version
  3. 梦断代码阅读笔记之一
  4. 牛客网Java刷题知识点之字节缓冲区练习之从A处复制文本文件到B处(BufferedReader、BufferedWriter)、复制文本文件的原理图解...
  5. NOIp 2014 #2 联合权值 Label:图论 !!!未AC
  6. 12864液晶驱动源码,独创中英文混合输出
  7. python如何让图片镜像翻转_98后常春藤学霸林之秋,一作拿下CVPR最佳论文提名,首次挑战图片翻转不变性假设...
  8. js修改地址栏url_不同寻常的地址栏过渡
  9. 《Python Cookbook 3rd》笔记(2.15):字符串中插入变量
  10. html5 调用微信分享,HTML5教程之微信调用分享接口
  11. C++之判断当前是debug还是realease
  12. 根据Excel记录生成Mysql和Hive建表语句
  13. 大学生html电影网页设计作业成品 我喜欢的电影榜单题材网页制作代码 简单静态网页模板下载
  14. html 一键发送给微信朋友圈,微信朋友圈如何转发别人说说(朋友圈一键集赞神器)...
  15. 如何生成条形码并打印出来
  16. android qq 目录,手机qq存储路径在哪可以找到
  17. html的版权符号是哪个,HTML版权符号是怎么输入的、代表什么-京标知识产权
  18. 计算机一级考试B十类理论题,10计算机一级统考理论题.doc
  19. 四道Java基础题 你能对几道?
  20. mfc,WM_CTLCOLOR,WM_PAINT

热门文章

  1. android谷歌地图删除marker,无法将marker从google地图上删除
  2. TI KeyStone C66x开发板的Xilinx FPGA下载器接口、LED指示灯
  3. 为什么要制定项目计划?
  4. 用html写简单的座位表,html座位表,随机点名
  5. 设计模式之建造者模式与原型模式
  6. linux系统怎么使用优盘,教你如何使用u盘安装Linux系统
  7. 徐姗姗 20190912-2 命令行
  8. ShaRF: Shape-conditioned Radiance Fields from a Single View
  9. oracle按相同年份_英语表达方式有几个类型,时间和日期表达都是不相同的
  10. 无人驾驶全局路径规划之路径平滑(贝塞尔曲线)