基于VB的线切割加工代码自动生成程序的开发
一种线切割加工程序自动生成及仿真软件
一种线切割加工程序自动生成及仿真软件丁晚景;孙川;刘繄【摘要】介绍了一种线切割加工程序自动生成与加工仿真的方法.基于对3B格式加工程序和AutoCAD实体数据的分析,利用Visual LISP语言进行加工程序自动生成系统开发.该方法直接访问CAD的数据,避免了对待加工图形的重新描述和节点计算.软件系统实用方便,应用性强.【期刊名称】《制造技术与机床》【年(卷),期】2010(000)006【总页数】3页(P43-45)【关键词】线切割;3B程序;仿真;LISP语言【作者】丁晚景;孙川;刘繄【作者单位】黄石理工学院,湖北,黄石,435003;黄石理工学院,湖北,黄石,435003;黄石理工学院,湖北,黄石,435003【正文语种】中文作为一种特种数控加工设备,线切割机床在加工中的工作过程是由相应的数控加工代码控制的。
我国广泛采用的是3B格式代码程序。
在加工前的准备过程中,一个相当重要的环节就是编制加工程序。
一些线切割机床在控制系统上配置了上位计算机,以实现机器编程,并针对这种需要开发了各种各样的生成线切割程序的计算机软件[1]。
但是,这些线切割自动编制程序实际上是以重新录入图形为代价来逃避手工编程过程中的几何计算。
因而,开发出可避免工作的重复性、极大地方便用户、有效地提高工作效率的线切割程序自动生成并能进行加工仿真的软件系统势在必行。
本文介绍的在AutoCAD中自动生成线切割程序并进行加工仿真的方法。
该方法直接访问CAD的数据,避免了对加工图形的重新描述和节点计算,达到了避免工作的重复性、极大地方便用户、有效地提高工作效率的目的。
1 软件开发环境在AutoCAD的运行环境中,嵌入了LISP语言,两者有机结合形成了以Visual LISP和VB、VC为基础的二次开发系统。
通过各种功能程序模块的挂接,直接访问AutoCAD的数据文件,能很方便地实现针对图形的各种后处理,如生成指定图形轮廓的数控加工代码。
VB工业应用程序开发
随着新的软件开发工具的不断涌现,应用软件设计人员面临的可使用的工具越来越多,令人眼花眼花缭乱,其中,V isual Basic是最为人们所容易接受的软件开发工具之一。
但是大多数使用VB进行软件应用程序开发的人员都认为,VB不能进行工业控制程序的开发。
其实不然,我们曾多次使用VB成功地实现了工业控制程序的开发,所开发出的产品业已投入实际使用。
下面就其开发过程中的经验介绍给大家。
平台的选择使用VB开发工业控制程序,首先面临的一个问题是平台的选择。
目前,一般应用软件的开发大多数都是在Windows 9x平台上进行的。
但是,我们认为在选择平台时,应考虑到客观实际情况来决定。
如果我们的用户是一般的操作工人,并且在微机主板上安装了我们自己开发的控制硬件板(如I/O板等),那么其平台应选择Windows 3.x。
因为一般的操作工人接触计算机较少,那么对于操作,而且在实际使用过程中,一般都可能会出现紧急事件或突然停电而非正常关机,此后再启动时,Windows 9x将首先执行Scandisk.exe程序,或由此破坏了Windows 9x的注册表,这将造成操作工人不知所措;如果在微机主板上安装了我们自己开发的控制硬件板,那么Windows 9x还将要求安装其驱动程序,综合这些因素,我们建议使用Windows 3.x。
否则,我们可以选择Windows 9x。
我们在开发“盆腔治疗仪”时,考虑到用户为医护人员,并且通过平行口进行I/O控制,因此我们选择了Windows 95;而在开发用于自动粘贴防伪标志的“复卷贴标机”时,其用户系工厂工人,并且在工控机的主板插槽上我们安装了自行开发的I/O控制板,为此我们选择了Windows 32。
根据实际使用情况看,我们的考虑、选择是正确的。
编写并生成对端口操作的动态链接库动态连接库是Windows应用程序共享资源、节省内存空间、提高使用效率的一个重要技术手段。
动态连接库是包含数据和函数的模块,可以被Windows的其他可执行文件调用。
基于VB的线切割加工代码自动生成程序的开发
第1章前言1.1 电火花线切割加工程序编制电火花线切割加工程序编制一般可分为手动编程和自动编程。
理想的加工程序不仅应能加工出符合图纸要求的合格零件,同时还应使数控机床的功能得到合理的应用与充分的发挥,以使数控机床安全可靠且高效地工作。
手工编程是指由人工编制零件数控加工程序的各个步骤,即从零件图纸分析,工艺分析,确定加工路线和工艺参数,计算数控机床所需输入的数据,编写零件的数控加工程序单直至程序的检验,均由人工来完成。
对于点位加工或几何形状不太复杂的零件加工,数控编程计算较简单,程序段不多,使用手工编程即可实现。
但对轮廓形状不是由简单的直线、圆弧组成的复杂零件,特别是具有非圆曲线、列表曲线等轮廓的零件等几何元素复杂,程序量很大的零件,计算数值相当烦琐,工作量大,容易出错,且很难校对,使用手工编程比较困难。
因此,为了缩短生产周期,提高数控机床的利用率,有效地解决各种复杂零件的加工问题,仅仅使用手工编程已不能满足要求,此时可以采用自动编程的方法。
自动编程是用计算机来帮助人们解决复杂零件的数控加工编程问题,即数控编程的大部分工作由计算机来完成,这种技术称之为计算机辅助数控加工编程。
计算机自动编程代替程序编制人员完成了烦琐的数值计算工作,并省去了编写程序单的工作量,因而可将编程效率提高几十倍,同时它解决了手工编程无法解决的许多复杂零件加工的编程问题。
1.2 电火花线切割的现状及发展趋势随着科学技术的日新月异和工业生产的迅猛发展,电火花线切割技术作为电加工技术中的一种,特别是在模具加工行业,得到了广泛的应用。
模具行业的迅速发展,对电火花线切割机提出了更高的要求,从而也进一步促进了电火花线切割技术的发展,促使电火花线切割高新技术产品不断涌现产量不断增长。
目前我国生产和使用的绝大多数的电火花线切割机较日本等发达国家生产和使用的电火花线切割机,除了采用的工艺不同外,无论在精度、功能、自动化程度、可靠性、加工稳定性和加工工艺指标方面,还是在外观等方面明显低一个档次。
数控线切割机床自动编程的步骤和方法
数控线切割机床自动编程的步骤和方法随着数控技术的不断发展,数控线切割机床已经成为了现代工业生产中不可或缺的设备,其具有高效、精度高、自动化程度高等优点。
而对于数控线切割机床来说,自动编程是其最重要的功能之一。
下文将从步骤和方法两个方面详细介绍数控线切割机床自动编程的过程。
一、数控线切割机床自动编程的步骤1. 零件图形输入数控线切割机床自动编程的第一步是将要加工的零件图形输入到计算机中。
这一步可以通过手工绘制图形,然后扫描或输入到计算机中;也可以通过CAD软件直接绘制图形。
无论采用哪种方式,都需要确保图形的准确性和完整性。
2. 编写切割程序在完成零件图形的输入之后,需要编写切割程序。
切割程序是数控线切割机床自动编程的核心,它包含了加工路径、切割速度、切割深度等信息。
编写切割程序可以采用G代码或CAM软件,其中G 代码是一种通用的数控编程语言,而CAM软件则是一种图形化编程软件,可以根据零件图形自动生成切割程序。
3. 进行数控仿真在编写好切割程序之后,需要进行数控仿真。
数控仿真是将切割程序加载到数控系统中,然后在计算机上进行仿真运行,以验证切割程序是否正确。
在仿真过程中,可以模拟切割路径、切割速度、切割深度等信息,以确保切割程序的正确性和可靠性。
4. 生成切割程序在完成数控仿真之后,需要生成切割程序。
切割程序可以通过数控系统直接输出,也可以通过U盘或其他存储设备输出到数控线切割机床上。
在输出切割程序之前,需要进行一些参数设置,如加工速度、加工深度等。
5. 进行数控加工最后一步是进行数控加工。
在数控加工过程中,数控系统会根据切割程序自动控制线切割机床进行加工。
在加工过程中,需要对加工状态进行监控,以确保加工质量和安全性。
二、数控线切割机床自动编程的方法1. 手工编程法手工编程法是最原始的数控编程方法,它需要编程人员熟练掌握G 代码语言,并手工编写切割程序。
手工编程法的优点是灵活性高,可以根据具体情况进行调整和优化;缺点是效率低、易出错。
VB凸轮轮廓线数控加工程序设计-源代码
八附源程序模块Option ExplicitPublic ptx(3600) As Double '曲线存储点数组Public pty(3600) As Double '由于存储最终输出的点Public low As Double '数组下标Public countnum As Integer '存储当前为第几段曲线输入的值Public Const PI = 3.14159Public area As Double '存储角度范围的值Public sch As Double '总升程Public tch As Double '输入曲线的推程Public Huan As Double '坐标变换数据Public Gao As DoublePublic a1 As String, a2 As String, a3 As StringPublic b1 As DoublePublic savetime As DoublePublic i As DoubleFrmView 主窗口Option ExplicitDim j%Public bch As String, zbx As String, M As Integer, sd As StringPrivate Sub CmbSlect_Click() '选择曲线类型Select Case CmbSlect.ListIndexCase 0 '等加速运动dengjiasu.NumStr.Text = "" '清空Text文本框dengjiasu.NumEnd.Text = ""dengjiasu.NumH.Text = ""dengjiasu.NumStr.Text = area '设定default范围dengjiasu.NumStr.Enabled = Falsedengjiasu.NumEnd.Enabled = TrueIf CountAll.Caption = CountNow.Caption Then '最后一段曲线dengjiasu.NumEnd.Text = "360" '输入时,自动输入dengjiasu.NumEnd.Enabled = False '默认值dengjiasu.NumH.Text = -b1End Ifdengjiasu.Show 1Case 1 '等速运动dengsu.NumStr.Text = ""dengsu.NumEnd.Text = ""dengsu.NumH.Text = ""dengsu.NumStr.Text = areadengsu.NumStr.Enabled = Falsedengsu.NumEnd.Enabled = TrueIf CountAll.Caption = CountNow.Caption Then dengsu.NumEnd.Text = "360"dengsu.NumEnd.Enabled = Falsedengsu.NumH.Text = -b1End Ifdengsu.Show 1Case 2 '正弦加速度运动sinx.NumStr.Text = ""sinx.NumEnd.Text = ""sinx.NumH.Text = ""sinx.NumStr.Text = areasinx.NumStr.Enabled = Falsesinx.NumEnd.Enabled = TrueIf CountAll.Caption = CountNow.Caption Thensinx.NumEnd.Text = "360"sinx.NumEnd.Enabled = Falsesinx.NumH.Text = -b1End Ifsinx.Show 1Case 3 '余弦加速度运动Cosx.NumStr.Text = ""Cosx.NumEnd.Text = ""Cosx.NumH.Text = ""Cosx.NumStr.Text = areaCosx.NumStr.Enabled = FalseCosx.NumEnd.Enabled = TrueIf CountAll.Caption = CountNow.Caption ThenCosx.NumEnd.Text = "360"Cosx.NumEnd.Enabled = FalseCosx.NumH.Text = -b1End IfCosx.Show 1Case 4 '等减速运动dengjiansu.NumStr.Text = ""dengjiansu.NumEnd.Text = ""dengjiansu.NumH.Text = ""dengjiansu.NumStr.Text = areadengjiansu.NumStr.Enabled = Falsedengjiansu.NumEnd.Enabled = TrueIf CountAll.Caption = CountNow.Caption Then dengjiansu.NumEnd.Text = "360"dengjiansu.NumEnd.Enabled = Falsedengjiansu.NumH.Text = -b1End Ifdengjiansu.Show 1End SelectEnd SubPrivate Sub Command1_Click()On Error Resume NextStatic i%Dim FileSelect$i% = i% + 1j% = i%CommonDialog2.Action = 2CommonDialog2.InitDir = "c:\"FileSelect$ = CommonDialog2.FileNamePicView1.Picture = PicView1.ImageSavePicture PicView1.Picture, FileSelect$End SubPrivate Sub Command2_Click()On Error Resume Next '推杆运动曲线图导出Static i%Dim FileSelect$i% = i% + 1j% = i%CommonDialog3.Action = 2CommonDialog3.InitDir = "c:\"FileSelect$ = CommonDialog3.FileNamePicView2.Picture = PicView2.ImageSavePicture PicView2.Picture, FileSelect$End SubPrivate Sub Command3_Click()NCFile_ClickEnd SubPrivate Sub Form_Load()area = 0countnum = 1FrmView.ShowfrmAbout.ShowfrmAbout.Timer1.Interval = 250End SubPrivate Sub Frmch_Click()Frmliuch.ShowEnd SubPrivate Sub NCFile_Click()FrmNC.Show 1End SubPrivate Sub New_Click()FrmView.InRadius.Text = "" '清空Frmin1窗口中文本框的数值FrmView.InRise1.Text = ""FrmView.InNum.Text = ""low = 0 '数据初始化area = 0b1 = 0FrmView.PicView1.Cls '预览窗口清屏FrmView.PicView2.ClsFrmView.PicView2.ScaleLeft = -20 '初始化坐标系FrmView.PicView2.ScaleTop = 18FrmView.Picture1.ClsFrmView.ShowFrmView.InRadius.Enabled = TrueFrmView.InRise1.Enabled = TrueFrmView.InNum.Enabled = TrueFrmView.qued.Enabled = Truebel5.Visible = FalseFrmView.CountAll.Caption = 0FrmView.CountNow.Caption = 0bel18.Caption = "基本参数输入"FrmView.CmbSlect.Enabled = FalsePicView1.Visible = FalsePicView2.Visible = FalsePicture1.Visible = FalseOption6.Value = TrueEnd SubPrivate Sub new1_Click()New_ClickEnd SubPrivate Sub Option1_Click()zbx = "G90"End SubPrivate Sub Option2_Click()zbx = "G91"End SubPrivate Sub Option3_Click()bch = ""End SubPrivate Sub Option4_Click()bch = "G41"End SubPrivate Sub Option5_Click()bch = "G42"End SubPrivate Sub pmian_Click()Command1_ClickEnd SubPrivate Sub qued_click()Dim c1 As Integer, c2 As Integer, c As Integer'验证基圆半径,升程,曲线段数的输入是否为数字If Val(InRadius) <= 0 ThenMsgBox ("不能为空或负值,请重新输入"), 16 InRadius = ""InRadius.SetFocusElseIf Val(InRise1) <= 0 ThenMsgBox ("不能为空或负值,请重新输入"), 16 InRise1 = ""InRise1.SetFocusElseIf Val(InNum) <= 1 ThenMsgBox ("这不是凸轮,请输入大于等于2的数"), 64 InNum = ""InNum.SetFocusElseIf IsNumeric(InRadius.Text) And _IsNumeric(InRise1) And IsNumeric(InNum.Text) Then FrmView.InRadius.Enabled = FalseFrmView.InRise1.Enabled = FalseFrmView.InNum.Enabled = FalseFrmView.qued.Enabled = Falsebel18.Caption = "基本参数输入完毕!" FrmView.CmbSlect.Enabled = TrueFrmView.CmbSlect.Enabled = TruePicView1.Visible = TruePicView2.Visible = TruePicture1.Visible = True'确定FrmView.PicView1,FrmView.PicView2的坐标系,其范围随输入的'基圆半径、升程的变化而变化c1 = V al(InRadius)c2 = V al(InRise1)c = 1.2 * (c1 + c2)FrmView.PicView1.Scale (-c, c)-(c, -c)PicView1.Line (0, -1.2 * (c1 + c2))-(0, 1.2 * (c1 + c2)), RGB(0, 128, 0)PicView1.Line (-1.2 * (c1 + c2), 0)-(1.2 * (c1 + c2), 0), RGB(0, 128, 0)For i = 1 To 10PicView1.Line (0 + i * ((c1 + c2) / 10), 0)-(0 + i * ((c1 + c2) / 10), c / 50), RGB(0, 128, 0) PicView1.Line (0 - i * ((c1 + c2) / 10), 0)-(0 - i * ((c1 + c2) / 10), c / 50), RGB(0, 128, 0) PicView1.Line (0, 0 + i * ((c1 + c2) / 10))-(c / 30, 0 + i * ((c1 + c2) / 10)), RGB(0, 128, 0) PicView1.Line (0, 0 - i * ((c1 + c2) / 10))-(c / 30, 0 - i * ((c1 + c2) / 10)), RGB(0, 128, 0) Next iPicView2.ScaleHeight = -1.1 * c2PicView2.ScaleTop = c2PicView2.Line (0, 0)-(540, 0), RGB(0, 128, 0)For i = 1 To 4PicView2.Line (0, 0 + i * (c2 / 4))-(5, 0 + i * (c2 / 4)), RGB(0, 128, 0)Next iPicView2.Line (0, 0)-(0, c2), RGB(0, 128, 0)For i = 1 To 8PicView2.Line (0 + i * (540 / 8), 0)-(0 + i * (540 / 8), c2 / 24), RGB(0, 128, 0)Next iFrmView.PicView2.ScaleHeight = -1.1 * c2FrmView.PicView2.ScaleTop = c2'主窗口显示要输入的曲线的段数FrmView.CountAll.Caption = InNum.TextFrmView.CountNow.Caption = 1countnum = 1tch = 0: sch = Val(InRise1)Huan = 0: Gao = 0bel5.Visible = FalseFrmView.Picture1.Print " "; "基圆半径"; ":"; InRadius.TextFrmView.Picture1.Print " "; "升程"; ":"; InRise1.TextFrmView.Picture1.Print " "; "曲线段数"; ":"; InNum.Text'在Frmview.Picview1中输出基圆及升程的图形FrmView.PicView1.DrawStyle = 2FrmView.PicView1.Circle (0, 0), Val(InRadius), RGB(0, 0, 1000)FrmView.PicView1.Circle (0, 0), Val(InRadius) + Val(InRise1), RGB(0, 0, 1000) FrmView.PicView1.DrawStyle = 0ElseMsgBox ("输入为空,或非法字符,请重新输入"), 16End IfEnd SubPrivate Sub quxiao_Click()tuichu.ShowEnd SubPrivate Sub qxian_Click()Command2_ClickEnd SubPrivate Sub Timer1_Timer()Static a As IntegerIf a ThenOption7.Visible = TrueElseOption7.Visible = FalseEnd Ifa = Not aEnd SubCosx窗体Option ExplicitPrivate Sub Command1_Click()Dim str As Double, end1 As Double, h As DoubleDim i As Double, radius As DoubleDim X As Double, Y As DoubleIf IsNumeric(NumStr) And IsNumeric(NumEnd) And IsNumeric(NumH) Then If Val(NumEnd) > Val(NumStr) Thenstr = Val(NumStr): end1 = Val(NumEnd): h = Val(NumH)radius = Val(FrmView.InRadius)low = 10 * Val(NumStr)For i = 0 To (end1 - str) Step 0.1X = i * 540 / 360Y = h * (1 - Cos(PI * i / (end1 - str))) / 2FrmView.PicView2.PSet (X, Y), RGB(1000, 0, 0)ptx(low) = (radius + (Gao + Y)) * Sin((Huan + i) * PI / 180)pty(low) = (radius + (Gao + Y)) * Cos((Huan + i) * PI / 180)FrmView.PicView1.PSet (ptx(low), pty(low)), RGB(1000, 0, 0)low = low + 1Cosx.HideFrmView.CmbSlect.Enabled = FalseIf FrmView.Option7.Value = True ThenFrmView.Timer1.Enabled = TrueFrmView.Option7.BackColor = &H80FF80FrmView.Option7.ForeColor = &HFF&ElseFrmView.Timer1.Enabled = FalseEnd IfIf FrmView.Option6.V alue = True ThenFrmView.Option7.Visible = TrueFrmView.Timer1.Enabled = Falsesavetime = Timer '记下开始的时间While Timer < savetime + 0.0001 '快DoEventsWendElsesavetime = Timer '记下开始的时间While Timer < savetime + 0.01 '循环等待DoEventsWendEnd IfNext iFrmView.CmbSlect.Enabled = TrueFrmView.Timer1.Enabled = FalseFrmView.Option7.BackColor = &H808000FrmView.Option7.ForeColor = &H80000012'显示当前为第几条曲线If FrmView.CountAll.Caption = FrmView.CountNow.Caption Then bel5.Visible = TrueFrmView.CmbSlect.Enabled = FalseElsecountnum = countnum + 1FrmView.CountNow.Caption = countnumEnd IfCosx.Hide'设定范围area = Val(NumEnd)tch = tch + h'坐标变换数据FrmView.PicView2.ScaleTop = sch - tchFrmView.PicView2.ScaleLeft = -20 - 540 / 360 * Val(NumEnd)Huan = Val(NumEnd)Gao = Gao + ha1 = NumStr: a2 = NumEnd: a3 = NumHFrmView.Picture1.Print a1; "~"; a2; " "; "h="; a3; " "; _ "余弦加速度运动"b1 = b1 + Val(NumH)If Gao > Val(FrmView.InRise1) ThenMsgBox ("超出总升程,请重新输入!"), 16low = 0 '数据初始化area = 0b1 = 0FrmView.PicView1.Cls '预览窗口清屏FrmView.PicView2.ClsFrmView.PicView2.ScaleLeft = -20 '初始化坐标系FrmView.PicView2.ScaleTop = 18FrmView.Picture1.ClsFrmView.ShowFrmView.InRadius.Enabled = TrueFrmView.InRise1.Enabled = TrueFrmView.InNum.Enabled = TrueFrmView.qued.Enabled = Truebel5.Visible = FalseFrmView.CountAll.Caption = 0FrmView.CountNow.Caption = 0bel18.Caption = "基本参数输入" FrmView.CmbSlect.Enabled = FalseFrmView.PicView1.Visible = FalseFrmView.PicView2.Visible = FalseFrmView.Option6.V alue = TrueEnd IfElseMsgBox ("范围出错!"), 16Cosx.NumEnd.Text = ""Cosx.NumEnd.SetFocusEnd IfElseMsgBox ("输入为空或有非法字符,请重新输入!") End IfEnd SubPrivate Sub Command2_Click()Cosx.HideEnd SubSin窗体Option ExplicitPrivate Sub Command1_Click()Dim str As Double, end1 As Double, h As DoubleDim i As Double, radius As Double, savetime As DoubleDim X As Double, Y As DoubleIf IsNumeric(NumStr) And IsNumeric(NumEnd) And IsNumeric(NumH) Then If Val(NumEnd) > Val(NumStr) Thenstr = Val(NumStr): end1 = Val(NumEnd): h = Val(NumH)radius = Val(FrmView.InRadius)low = 10 * Val(NumStr)For i = 0 To (end1 - str) Step 0.1X = i * 540 / 360Y = h * ((i / (end1 - str)) - Sin(2 * PI * i / (end1 - str)) / (2 * PI))FrmView.PicView2.PSet (X, Y), RGB(1000, 0, 0)ptx(low) = (radius + (Gao + Y)) * Sin((Huan + i) * PI / 180)pty(low) = (radius + (Gao + Y)) * Cos((Huan + i) * PI / 180)FrmView.PicView1.PSet (ptx(low), pty(low)), RGB(1000, 0, 0)low = low + 1sinx.HideFrmView.CmbSlect.Enabled = FalseIf FrmView.Option7.Value = True ThenFrmView.Timer1.Enabled = TrueFrmView.Option7.BackColor = &H80FF80FrmView.Option7.ForeColor = &HFF&ElseFrmView.Timer1.Enabled = FalseEnd IfIf FrmView.Option6.Value = True ThenFrmView.Option7.Visible = TrueFrmView.Timer1.Enabled = Falsesavetime = Timer '记下开始的时间While Timer < savetime + 0.0001 '快DoEventsWendElsesavetime = Timer '记下开始的时间While Timer < savetime + 0.01 '循环等待DoEventsWendEnd IfNext iFrmView.CmbSlect.Enabled = TrueFrmView.Timer1.Enabled = FalseFrmView.Option7.BackColor = &H808000FrmView.Option7.ForeColor = &H80000012'显示当前为第几条曲线If FrmView.CountAll.Caption = FrmView.CountNow.Caption Then bel5.Visible = TrueFrmView.CmbSlect.Enabled = FalseElsecountnum = countnum + 1FrmView.CountNow.Caption = countnumEnd Ifsinx.Hide'设定范围area = Val(NumEnd)tch = tch + h'坐标变换数据FrmView.PicView2.ScaleTop = sch - tchFrmView.PicView2.ScaleLeft = -20 - 540 / 360 * Val(NumEnd)Huan = Val(NumEnd)Gao = Gao + ha1 = NumStr: a2 = NumEnd: a3 = NumHFrmView.Picture1.Print a1; "~"; a2; " "; "h="; a3; " "; _ "正弦加速度运动"b1 = b1 + Val(NumH)If Gao > Val(FrmView.InRise1) ThenMsgBox ("超出总升程,请重新输入!"), 16low = 0 '数据初始化area = 0b1 = 0FrmView.PicView1.Cls '预览窗口清屏FrmView.PicView2.ClsFrmView.PicView2.ScaleLeft = -20 '初始化坐标系FrmView.PicView2.ScaleTop = 18FrmView.Picture1.ClsFrmView.ShowFrmView.InRadius.Enabled = TrueFrmView.InRise1.Enabled = TrueFrmView.InNum.Enabled = TrueFrmView.qued.Enabled = Truebel5.Visible = FalseFrmView.CountAll.Caption = 0FrmView.CountNow.Caption = 0bel18.Caption = "基本参数输入"FrmView.CmbSlect.Enabled = FalseFrmView.PicView1.Visible = FalseFrmView.PicView2.Visible = FalseFrmView.Option6.V alue = TrueEnd IfElseMsgBox ("范围出错!"), 16sinx.NumEnd.Text = ""sinx.NumEnd.SetFocusEnd IfElseMsgBox ("输入为空或有非法字符,请重新输入!")End IfEnd SubPrivate Sub Command2_Click()sinx.HideEnd SubDengjiansu窗体Option ExplicitPrivate Sub Command1_Click()Dim str As Double, end1 As Double, h As DoubleDim i As Double, radius As DoubleDim X As Double, Y As DoubleIf IsNumeric(NumStr) And IsNumeric(NumEnd) And IsNumeric(NumH) Then If Val(NumEnd) > Val(NumStr) Thenstr = Val(NumStr): end1 = Val(NumEnd): h = Val(NumH)radius = Val(FrmView.InRadius)low = 10 * Val(NumStr)For i = 0 To (end1 - str) Step 0.1X = i * 540 / 360Y = h - h * ((end1 - str) - i) ^ 2 / (end1 - str) ^ 2FrmView.PicView2.PSet (X, Y), RGB(1000, 0, 0)ptx(low) = (radius + (Gao + Y)) * Sin((Huan + i) * PI / 180)pty(low) = (radius + (Gao + Y)) * Cos((Huan + i) * PI / 180)FrmView.PicView1.PSet (ptx(low), pty(low)), RGB(1000, 0, 0)low = low + 1dengjiansu.HideFrmView.CmbSlect.Enabled = FalseIf FrmView.Option7.Value = True ThenFrmView.Timer1.Enabled = TrueFrmView.Option7.BackColor = &H80FF80FrmView.Option7.ForeColor = &HFF&ElseFrmView.Timer1.Enabled = FalseEnd IfIf FrmView.Option6.Value = True ThenFrmView.Option7.Visible = TrueFrmView.Timer1.Enabled = Falsesavetime = Timer '记下开始的时间While Timer < savetime + 0.0001 '快DoEventsWendElsesavetime = Timer '记下开始的时间While Timer < savetime + 0.01 '循环等待DoEventsWendEnd IfNext iFrmView.CmbSlect.Enabled = TrueFrmView.Timer1.Enabled = FalseFrmView.Option7.BackColor = &H8000000FFrmView.Option7.ForeColor = &H80000012'显示当前为第几条曲线If FrmView.CountAll.Caption = FrmView.CountNow.Caption Then bel5.Visible = TrueFrmView.CmbSlect.Enabled = FalseElsecountnum = countnum + 1FrmView.CountNow.Caption = countnumEnd Ifdengjiansu.Hide'设定范围area = Val(NumEnd)tch = tch + h'坐标变换数据FrmView.PicView2.ScaleTop = sch - tchFrmView.PicView2.ScaleLeft = -20 - 540 / 360 * Val(NumEnd) Huan = Val(NumEnd)Gao = Gao + ha1 = NumStr: a2 = NumEnd: a3 = NumHFrmView.Picture1.Print a1; "~"; a2; " "; "h="; a3; " "; _ "等减速运动"b1 = b1 + Val(NumH)If Gao > Val(FrmView.InRise1) ThenMsgBox ("超出总升程,请重新输入!"), 16low = 0 '数据初始化area = 0b1 = 0FrmView.PicView1.Cls '预览窗口清屏FrmView.PicView2.ClsFrmView.PicView2.ScaleLeft = -20 '初始化坐标系FrmView.PicView2.ScaleTop = 18FrmView.Picture1.ClsFrmView.ShowFrmView.InRadius.Enabled = TrueFrmView.InRise1.Enabled = TrueFrmView.InNum.Enabled = TrueFrmView.qued.Enabled = Truebel5.Visible = FalseFrmView.CountAll.Caption = 0FrmView.CountNow.Caption = 0bel18.Caption = "基本参数输入"FrmView.CmbSlect.Enabled = FalseFrmView.PicView1.Visible = FalseFrmView.PicView2.Visible = FalseFrmView.Option6.V alue = TrueEnd IfElseMsgBox ("范围出错!"), 16dengjiansu.NumEnd.Text = ""dengjiansu.NumEnd.SetFocusEnd IfElseMsgBox ("输入为空或有非法字符,请重新输入!")End IfEnd SubPrivate Sub Command2_Click()dengjiansu.HideEnd SubDengjiasu 窗体Option ExplicitPrivate Sub Command1_Click()Dim str As Double, end1 As Double, h As DoubleDim i As Double, radius As DoubleDim X As Double, Y As DoubleIf IsNumeric(NumStr) And IsNumeric(NumEnd) And IsNumeric(NumH) Then If Val(NumEnd) > Val(NumStr) Thenstr = Val(NumStr): end1 = Val(NumEnd): h = Val(NumH)radius = Val(FrmView.InRadius)low = 10 * Val(NumStr)For i = 0 To (end1 - str) Step 0.1X = i * 540 / 360Y = h * (i ^ 2) / ((end1 - str) ^ 2)FrmView.PicView2.PSet (X, Y), RGB(1000, 0, 0)ptx(low) = (radius + (Gao + Y)) * Sin((Huan + i) * PI / 180)pty(low) = (radius + (Gao + Y)) * Cos((Huan + i) * PI / 180)FrmView.PicView1.PSet (ptx(low), pty(low)), RGB(1000, 0, 0)low = low + 1dengjiasu.HideFrmView.CmbSlect.Enabled = FalseIf FrmView.Option7.Value = True ThenFrmView.Timer1.Enabled = TrueFrmView.Option7.BackColor = &H80FF80FrmView.Option7.ForeColor = &HFF&ElseFrmView.Timer1.Enabled = FalseEnd IfIf FrmView.Option6.V alue = True ThenFrmView.Option7.Visible = TrueFrmView.Timer1.Enabled = Falsesavetime = Timer '记下开始的时间While Timer < savetime + 0.0001 '快DoEventsWendElsesavetime = Timer '记下开始的时间While Timer < savetime + 0.01 '循环等待DoEventsWendEnd IfNext iFrmView.CmbSlect.Enabled = TrueFrmView.Timer1.Enabled = FalseFrmView.Option7.BackColor = &H808000FrmView.Option7.ForeColor = &H80000012'显示当前为第几条曲线If FrmView.CountAll.Caption = FrmView.CountNow.Caption Then bel5.Visible = TrueFrmView.CmbSlect.Enabled = FalseElsecountnum = countnum + 1FrmView.CountNow.Caption = countnumEnd Ifdengjiasu.Hide'设定范围area = Val(NumEnd)tch = tch + h'坐标变换数据FrmView.PicView2.ScaleTop = sch - tchFrmView.PicView2.ScaleLeft = -20 - 540 / 360 * Val(NumEnd)Huan = Val(NumEnd)Gao = Gao + ha1 = NumStr: a2 = NumEnd: a3 = NumHFrmView.Picture1.Print a1; "~"; a2; " "; "h="; a3; " "; _ "等加速度运动"b1 = b1 + Val(NumH)If Gao > Val(FrmView.InRise1) ThenMsgBox ("超出总升程,请重新输入!"), 16low = 0 '数据初始化area = 0b1 = 0FrmView.PicView1.Cls '预览窗口清屏FrmView.PicView2.ClsFrmView.PicView2.ScaleLeft = -20 '初始化坐标系FrmView.PicView2.ScaleTop = 18FrmView.Picture1.ClsFrmView.ShowFrmView.InRadius.Enabled = TrueFrmView.InRise1.Enabled = TrueFrmView.InNum.Enabled = TrueFrmView.qued.Enabled = Truebel5.Visible = FalseFrmView.CountAll.Caption = 0FrmView.CountNow.Caption = 0bel18.Caption = "基本参数输入"FrmView.CmbSlect.Enabled = FalseFrmView.PicView1.Visible = FalseFrmView.PicView2.Visible = FalseFrmView.Option6.V alue = TrueEnd IfElseMsgBox ("范围出错!"), 16dengjiasu.NumEnd.Text = ""dengjiasu.NumEnd.SetFocusEnd IfElseMsgBox ("输入为空或有非法字符,请重新输入!")End IfEnd SubPrivate Sub Command2_Click()dengjiasu.HideEnd SubDengsu 窗体Option ExplicitPrivate Sub Command1_Click()Dim str As Double, end1 As Double, h As DoubleDim i As Double, radius As DoubleDim X As Double, Y As Double'检查输入是否全为数字If IsNumeric(NumStr) And IsNumeric(NumEnd) And IsNumeric(NumH) Then '检查终止角度(end1)是否大于初始角度(str)If Val(NumEnd) > Val(NumStr) Thenstr = Val(NumStr): end1 = Val(NumEnd): h = Val(NumH)radius = Val(FrmView.InRadius)low = 10 * Val(NumStr) '为ptx()、pty()的下标赋值For i = 0 To (end1 - str) Step 0.1X = i * 540 / 360Y = h * i / (end1 - str)FrmView.PicView2.PSet (X, Y), RGB(1000, 0, 0)'坐标变换,把Picview2中的图形转换到Picview1中ptx(low) = (radius + (Gao + Y)) * Sin((Huan + i) * PI / 180)pty(low) = (radius + (Gao + Y)) * Cos((Huan + i) * PI / 180)FrmView.PicView1.PSet (ptx(low), pty(low)), RGB(1000, 0, 0)low = low + 1dengsu.HideFrmView.CmbSlect.Enabled = FalseIf FrmView.Option7.Value = True ThenFrmView.Timer1.Enabled = TrueFrmView.Option7.BackColor = &H80FF80FrmView.Option7.ForeColor = &HFF&ElseFrmView.Timer1.Enabled = FalseEnd IfIf FrmView.Option6.V alue = True ThenFrmView.Option7.Visible = TrueFrmView.Timer1.Enabled = Falsesavetime = Timer '记下开始的时间While Timer < savetime + 0.0001 '快DoEventsWendElsesavetime = Timer '记下开始的时间While Timer < savetime + 0.01 '循环等待DoEventsWendEnd IfNext iFrmView.CmbSlect.Enabled = TrueFrmView.Timer1.Enabled = FalseFrmView.Option7.BackColor = &H8000000FFrmView.Option7.ForeColor = &H80000012'显示当前为第几条曲线的输入If FrmView.CountAll.Caption = FrmView.CountNow.Caption Then bel5.Visible = TrueFrmView.CmbSlect.Enabled = FalseElsecountnum = countnum + 1FrmView.CountNow.Caption = countnumEnd Ifdengsu.Hide'设定范围area = Val(NumEnd)tch = tch + h'坐标变换数据FrmView.PicView2.ScaleTop = sch - tchFrmView.PicView2.ScaleLeft = -20 - 540 / 360 * Val(NumEnd) Huan = Val(NumEnd)Gao = Gao + ha1 = NumStr: a2 = NumEnd: a3 = NumH'把所选函数及输入的参数显示在主窗口的参数显示栏FrmView.Picture1.Print a1; "~"; a2; " "; "h="; a3; " "; _ "等速运动"b1 = b1 + Val(NumH)If Gao > Val(FrmView.InRise1) ThenMsgBox ("超出总升程,请重新输入!"), 16low = 0 '数据初始化area = 0b1 = 0FrmView.PicView1.Cls '预览窗口清屏FrmView.PicView2.ClsFrmView.PicView2.ScaleLeft = -20 '初始化坐标系FrmView.PicView2.ScaleTop = 18FrmView.Picture1.ClsFrmView.ShowFrmView.InRadius.Enabled = TrueFrmView.InRise1.Enabled = TrueFrmView.InNum.Enabled = TrueFrmView.qued.Enabled = Truebel5.Visible = FalseFrmView.CountAll.Caption = 0FrmView.CountNow.Caption = 0bel18.Caption = "基本参数输入"FrmView.CmbSlect.Enabled = FalseFrmView.PicView1.Visible = FalseFrmView.PicView2.Visible = FalseFrmView.Option6.V alue = TrueEnd IfElseMsgBox ("范围出错!"), 16dengsu.NumEnd.Text = ""dengsu.NumEnd.SetFocusEnd IfElseMsgBox ("输入为空或有非法字符,请重新输入!")End IfEnd SubPrivate Sub Command2_Click()dengsu.HideEnd SubFrmabout 窗体Option ExplicitPrivate Sub cmdOK_Click()FrmView.ShowFrmView.Enabled = TruefrmAbout.HideEnd SubPrivate Sub Timer1_Timer()If lblTitle.Visible = True ThenlblTitle.Visible = FalseElselblTitle.Visible = TrueEnd IfEnd SubPrivate Sub Timer3_Timer()Static b As BooleanIf b ThenLabel2.Left = Label2.Left + 150Else: Label2.Left = Label2.Left - 150End IfIf Label2.Left <= 0 Then b = TrueIf Label2.Left >= frmAbout.Width - Label2.Width - 500 Thenb = FalseEnd IfEnd SubFrmNC窗体Private Sub Command2_Click()If IsNumeric(Text1) And IsNumeric(Text2) And IsNumeric(Text3) And _ IsNumeric(Text4) And IsNumeric(Text5) And IsNumeric(Text6) And _ IsNumeric(Text7) And IsNumeric(Text8) ThenDim i As Integer, j As Double, fName2 As StringCommonDialog1.InitDir = "c:\"CommonDialog1.FileName = "凸轮代码1.nc"CommonDialog1.Filter = "nc文件(*.nc)|*.nc|文本(*.txt)|*.txt|所有文件(*.*)|*.*" CommonDialog1.DefaultExt = "nc"CommonDialog1.Action = 2Open CommonDialog1.FileName For Output As #1j = 100'绝对坐标编程If Option1.Value = True Then'NC代码的开始部分Print #1, "%"Print #1, "N"; LTrim(RTrim(j)); "G17G40G49G80"j = j + 1Print #1, "N"; LTrim(RTrim(j)); "M06T01"j = j + 1Print #1, "N"; LTrim(RTrim(j)); "G00G90G54"; bch; _"D01X"; RTrim(LTrim(Format$(ptx(0), "###.###"))); _"Y"; RTrim(LTrim(Format$(pty(0), "###.###"))); "Z"; _LTrim(RTrim(Val(Text6))); _"S"; LTrim(RTrim(Val(Text4))); "M3"j = j + 1Print #1, "N"; LTrim(RTrim(j)); "Z2"; "F"; LTrim(RTrim(Val(Text2)))sd = Val(Text8)For M = 1 To Val(Text8)j = j + 1Print #1, "N"; LTrim(RTrim(j)); "G01Z-"; _LTrim(RTrim(Val(Text7))); _"F"; LTrim(RTrim(Text1))j = j + 1'主要走刀部分For i = 1 To 3599Print #1, "N"; LTrim(RTrim(j)); "G01"; _; "X"; LTrim(RTrim(Format$(ptx(i), "###.###"))); _"Y"; LTrim(RTrim(Format$(pty(i), "###.###")))j = j + 1Next isd = sd + Val(Text7)Next MPrint #1, "N"; LTrim(RTrim(j)); "G00"; "G40"; _"Z"; LTrim(RTrim(Val(Text6)))j = j + 1Print #1, "N"; LTrim(RTrim(j)); "M05"j = j + 1Print #1, "N"; LTrim(RTrim(j)); "M02"Print #1, "%"Close #1Else'相对坐标编程If Option2.Value = True ThenPrint #1, "%"Print #1, "N"; LTrim(RTrim(j)); "G17G40G49G80"j = j + 1Print #1, "N"; LTrim(RTrim(j)); "M06T01"j = j + 1Print #1, "N"; LTrim(RTrim(j)); "G00G91G54"; bch; "D01X"; RTrim(LTrim(ptx(0))); _"Y"; RTrim(LTrim(pty(0))); "Z"; LTrim(RTrim(Val(Text6))); _"S"; LTrim(RTrim(Val(Text4))); "M3"j = j + 1Print #1, "N"; LTrim(RTrim(j)); "Z2"; "F"; LTrim(RTrim(Val(Text2)))sd = Val(Text8)For M = 1 To Val(Text8)j = j + 1Print #1, "N"; LTrim(RTrim(j)); "G01Z-"; LTrim(RTrim(Val(Text7))); _"F"; LTrim(RTrim(Val(Text1)))j = j + 1For i = 1 To 3599Print #1, "N"; LTrim(RTrim(j)); "G01"; "X"; LTrim(RTrim(Format((ptx(i) - ptx(i - 1)), "###.###"))); _"Y"; LTrim(RTrim(Format$((pty(i) - pty(i - 1)), "###.###")))j = j + 1Next isd = sd + Val(Text7)Next MPrint #1, "N"; LTrim(RTrim(j)); "G00"; "G40"; "Z"; LTrim(RTrim(Val(Text6)))j = j + 1Print #1, "N"; LTrim(RTrim(j)); "M05"j = j + 1Print #1, "N"; LTrim(RTrim(j)); "M02"Print #1, "%"Close #1End IfEnd IfElseMsgBox ("有非法字符或其它错误,请检查") End IfEnd SubPrivate Sub Command3_Click()FrmNC.HideEnd SubTuichu 窗体Option ExplicitPrivate Sub CancelButton_Click() FrmView.ShowEnd SubPrivate Sub OKButton_Click()EndEnd Sub。
vb的编程步骤
vb的编程步骤VB的编程步骤VB(Visual Basic)是一种广泛应用于Windows平台的编程语言,具有易学易用的特点。
在进行VB编程时,按照一定的步骤进行开发可以提高效率和代码质量。
下面将介绍VB的编程步骤,帮助初学者了解如何使用VB进行程序开发。
一、需求分析在进行VB编程之前,首先需要明确开发的需求。
需求分析是软件开发过程中的第一步,它确定了程序的功能和目标。
在这个阶段,开发人员需要与客户或用户进行沟通,了解他们的需求和期望,然后将这些需求转化为具体的功能和特性。
需求分析的目标是明确软件的功能、界面设计和用户交互方式。
开发人员可以使用各种工具和技术,如用户故事、用例图和流程图等,来帮助理解和分析需求。
通过合理的需求分析,可以避免开发过程中的返工和不必要的错误。
二、设计界面在明确了需求之后,下一步是设计程序的界面。
VB提供了丰富的界面设计工具,使得开发人员可以轻松创建各种窗体、控件和布局。
界面设计要考虑到用户的使用习惯和体验,尽量简洁明了、易于操作。
在设计界面时,需要确定程序所需的窗体和控件,并合理布局。
可以使用拖放的方式将控件添加到窗体上,并设置它们的属性和事件。
通过合理的控件选择和布局,可以增强程序的可读性和易用性。
三、编写代码界面设计完成后,下一步是编写代码。
VB是一种基于事件驱动的编程语言,开发人员通过编写事件处理程序来响应用户的操作。
在编写代码之前,需要对程序的逻辑进行设计,确定各个功能的实现方式。
在编写代码时,需要使用VB提供的语法和函数来实现程序的功能。
可以使用条件语句、循环语句、函数和子程序等结构来组织代码。
同时,还可以使用各种API和库来扩展程序的功能。
编写代码时要注意代码的可读性和可维护性。
可以使用注释来解释代码的作用和实现方式,避免出现冗长和复杂的代码块。
此外,还要注意代码的缩进和命名规范,使得代码结构清晰,易于理解。
四、调试和测试在编写完代码之后,需要进行调试和测试。
线切割加工自动编程
05.02.2021
数控技术
10
21.2 文字的线切割编程与加工
三、文字轨迹的生成及仿真 1.生成高速走丝机床的加工轨迹
05.02.2021
数控技术
11
21.2 文字的线切割编程与加工
05.02.2021
数控技术
12
21.2 文字的线切割编程与加工
2.生成低速走丝机床的加工轨迹
05.02.2021
05.02.2021
数控技术
6
21.2 文字的线切割编程与加工
二、文字轮廓工艺参数的确定
1.加工坯料的确定 (1)工件材料:不锈钢 (2)毛坯尺寸:2401202
2.切割加工路径的确定
05.02.2021
数控技术
7
21.2 文字的线切割编程与加工
3.确定加工电参量
机床类别
切割次数 脉冲宽度/us 脉冲间隔/us 加工电流/A 脉冲电压/V
数控技术
13
21.2 文字的线切割编程与加工
图21-12 静态仿真图
05.02.2021
数控技术
14
21.2 文字的线切割编程与加工
四、文字加工代码的生成
生成文字切割轨迹的3B代码格式如下:
CAXAWEDM -Version 2.0 , Name : nanfang02.3b Conner R= 0.00000 , Offset F= 1.00000 ,Length= 1309.331 mm **************************************** Start Point = 18.00000 36.00000 ; X , Y N 1: B 411 B 1383 B 1383 GY L4 ; 18.113 , 34.230 N 2: B 602 B 180 B 602 GX L3 ; 17.511 , 34.050 N 3: B 1312 B 114 B 1312 GX L3 ; 16.199 , 33.936 .................
详细用VB编程开发一个程序的完整步骤!
详细用VB编程开发一个程序的完整步骤!
大家好,今晚我们共同来学习用VB编程开发一个程序的完整过程。
一个VB程序也称为一个工程,由窗体、标准模块、自定义控件及应用所需的环境组成。
01
开发步骤如下
1.创建程序的用户界面
2.设置界面上各个对象(控件)的属性值
3.编写对象响应事件的代码
4.保存工程及各窗体、模块文件
5. 测试应用程序,排除程序问题
6.生成可以直接运行的exe程序
下面我们通过一个具体的程序来共同学习这个过程。
例如:创建一个单击确认按钮,窗体上显示“VB 编程是有趣的!”的应用程序。
1.创建程序的用户界面:进入VB 界面,在工具箱窗口中找到程序所需的各个控件,然后进行第二步;
2.设置界面上各个对象的属性
控件
属性 设置值 Command1 Caption 单击确认
3.编写对象响应事件的程序代码
双击各对象,在相应的代码窗口里输入需要的代码。
事件名称 过程代码
命令按钮的单击事
件 Private Sub Command1_Click() Print “VB 编程是有趣的!' 4.保存工程
(1)从文件菜单中选择保存窗体,将窗体保存成文件名 .frm
(2)从文件菜单中选择保存工程,将工程保存成文件名 .vbp
5.测试应用程序,排除错误
根据要实现的的效果调试程序,直到满足功能要求为止。
6.创建可执行程序
从文件菜单中选择生成vb 工程文件名 .exe
,既可生成一个可执
行文件。
初学要注意:
VB中的字符必须是在英文状态下输入,中文状态的符号会导致运行错误。
线切割微机自动编程
第6章 线切割微机自动编程
图6-3 YH编程系统界面
第6章 线切割微机自动编程
系统的全部绘图功能和一部分最常用的编程功能 如图中左边所示, 用20个图标表示, 各图标功能如图 6-4所示。 图上部的菜单按钮分别为文件、 编辑、 编程和杂 项。 整个菜单结构如图6-5所示。
第6章 线切割微机自动编程
sin β = ± 1 − cos2 β
D 2 + ( r1 ± f )2 − ( r2 ± f )2 cos β = 2 Dr1
第6章 线切割微机自动编程
X1=|r1| cosβ
Y1=|r1| sinβ
两交点坐标的计算公式为 XA=X1 cosα-Y1 sinα+X01 XB=X1 cosα+Y1 sinα+X01 YA=X1 sinα+Y1 cosα+Y01 YB=X1 sinα+Y1 cosα+Y01
第6章 线切割微机自动编程
图6-7 圆弧输入参数窗
第6章 线切割微机自动编程
2) 键盘输入圆 在圆图标状态下, 将光标移至键盘命令框, 出现 输入框时可按以下格式输入: [X0, Y0], 半径 (回车) 3) 弧段变圆 在圆图标状态下, 将光标移到圆弧上(光标呈手指 形), 按调整键(鼠标器右边键), 该弧段即变成整圆。
第6章 线切割微机自动编程
切角切线——与一圆弧相切, 且与X(或Y)轴成一定 角度的直线; 平行轴线——已知截距且与坐标轴平行的直线。 不管哪种方式直线的方程, 在自动编程时, 最终 都可以由计算机构建为: cosαX+sinαY=P的标准法线 方程的形式, 其中α为直线的法角, P为法线长度。
第6章 线切割微机自动编程
基于VB语言的异型泡沫塑料数控切割系统的开发
Ke r s: VB a g g y wo d ln ua e;EPSp od c ; s e il h pe utn r u t p ca—s a d c tig; CN C u t c ti ng; mot o to ; G o e i c nr l on c d
数 控 切割 机控 制 系统 。具 有根 据 G 代码 自动 生成 加 工轨 迹 ,两个 不 同的轨 迹 合成 更 复 杂 的上 下 异型 的 图形 ,加 工过 程 实时跟 踪显 示 ,错 误报 警显 示等 特 点。 关键 词 :V B语 言 ;泡沫 塑料 :异型切 割 ;数控切 割 ;运动 控制 ;G代 码 中图分 类号 :T 6 9 G 5 文献标 识 码 :A d i 03 6 /. s. 0 — 6 32 1 . .6 o: .9 9j sn1 2 6 7 . 20 0 8 1 i 0 0 5
( n z o a gu nPat s ahn r . t.Ha gh uZ ei g 14 0,Chn ) Ha gh uFn y a l i c ieyCo, d, n z o h j n 3 10 sc M L a i a
Ab t a t Th e o d n e sr c : eus fa va c d CN C e h lg o c tEPS p o uc,am tt efaur fsc nd r oc sig f tc noo y t u r d t i a h et e o e o aypr esn orEPSpr d t t raea o uc, o c et c ompe e stofs e il ha e lt e p ca—s p d EPS CN C utng sse . sd o c d o a omaia y g neae t utn rc c ti y tm Bae n G o e t ut tcl e r t he c tig tak,t f rntc ti l wo die e u t ng ta k t y t eie am o ec m p c td u rc o sn h s r o z i f ae p—d wn s e i —sa e rwi ,c tn r c s lbe dslye t i utn o sta k a ror o p ca h p d d a ng ut g p o eswil ipa d w h sm l e u rc nd er l i i a
线切割穿丝孔自动编程研究与实现
【102】 第 31 卷 第 4 期 2009-04
收稿日期:2008-12-19 作者简介:于杰(1969 -),女, 副教授,研究方向为现代制造技术研究。
第 31 卷 第 4 期 2009-04 【101】
编程中面临的一个主要工艺问题,确保了线切割自 动编程的工艺实用性。 2.1 穿丝孔自动编程功能模块
自行开发的穿丝孔自动编程程序主要包括 3 个 模块:模块 1 为前置处理,其任务是读入图纸信息, 结合工艺处理及数学处理,计算出穿丝孔位置坐 标;模块 2 为后置处理,任务是根据穿丝孔位置坐 标自动生成数控加工程序;模块 3 为信息管理,任 务是对零件图纸、图号、指令程序文件进行存储与 管理,根据零件图号检索指令程序,对新零件调用 模块 1 和模块 2,完成穿丝孔自动编程。程序功能组 成如图 1 所示。
includestdiohincludestringhincludestdlibhincludeconiohincludemathhincludectypehfilefp1fp2intmainfloattempxtempychardxffile12cncfile12anquan10fanhui10charstrtemp20strx120stry120strx220stry220charfspeed10sspeed10holedeep10biaozhiacdbpolylinecharzhijing10daohao10以下是输入有关数据printfn请输入dxf文件名和扩展名getsdxffileiffp1fopendxffilernullprintf不能打开dxf文件nexit0printfn请输入cnc文件名和扩展名getscncfileiffp2fopencncfilewnullprintf不能打开cnc文件nexit0printfn请输入钻孔钻头刀具号gets201205162012051620120516201205162012051620120516104第31卷200904daohaoprintfn请输入钻孔转速值getssspeedprintfn请输入要钻孔的直径值getszhijingprintfn安全高度值要带符号和小数点getsanquanprintfn请输入返回平面高度要带符号和小数点getsfanhuiprintfn请输入钻孔的深度值要带符号和小数点getsholedeepprintfn请输入钻孔进给速度值要带小数点getsfspeed以下是将坐标系设定换刀主轴转动刀具补偿等工艺信息写入cnc文件fputsg54x0y0fp2fputc10fp2fputsm06tfp2fputsdaohaofp2fputc10fp2fputsm3sfp2fprintffp210fatofsspeedfputc10fp2fputcg43hfp2fputsdaohaofp2fputszfp2fputsanquanfp2fputsg0fp2fputc10fp2以下是将固定循环指令写入cnc文件根据循环形式不同写入内容相应变化fputsg81fp2fputsg99r0fp2fputsfanhuifp2fputszfp2fputsholedeepfp2fputsffp2fputsfspeedfp2fputc10fp2
线切割手工编程3B
手工编程3B
图8-2 G的确定
手工编程3B
3) J的确定 J为计数长度,以μ m为单位。 J的取值方法为:由计数方向G确定投影方向,若G=Gx,
则将直线向X轴投影得到长度的绝对值即为J的值;若G=Gy, 则将直线向Y轴投影得到长度的绝对值即为J的值。
以圆弧的圆心为原点,建立正常的直角坐标系, x,y表示圆弧起点坐标的绝对值,单位为μ m。如在 图8-4(a)中,x=30000,y=40000;在图8-4(b)中, x=40000,y=30000。
手工编程3B
图8-4 圆弧轨迹
手工编程3B
2) G的确定 G用来确定加工时的计数方向,分Gx和Gy。圆弧编程的计数方
加工指令Z按照第一步进入的象限可分为R1、R2、R3、R4; 按切割的走向可分为顺圆S和逆圆N,于是共有8种指令:SR1、 SR2、SR3、SR4、NR1、NR2、NR3、NR4,具体可参考图8-5。
手工编程3B
图8-5 Z的确定
手工编程3B
例1 请写出图8-6所示轨迹的3B程
手工编程3B
解 对图8-6(a),起点为A,终点为B, J=J1+J2+J3+J4=10000+50000+50000+20000=130000 故其3B程序为: B30000 B40000 B130000 GY NR1 对图8-6(b),起点为B,终点为A, J=J1+J2+J3+J4=40000+50000+50000+30000=170000 故其3B程序为: 40000 B30000 B170000 GX SR4
线切割加工自动编程
3.G代码格式加工代码的生成
(1)打开低速走丝机床的轨迹文件 ) WZY02_XX.EXB。 。 (2)单击主菜单“线切割”→“G )单击主菜单“线切割” “ 代码/HPGL”→“生成 代码”,系统弹出 生成G代码 代码 生成 代码” 生成机床G代码 对话框, 代码” “生成机床 代码”对话框,同时在状态 栏显示目前所调用的机床设置。 栏显示目前所调用的机床设置。
直线, (3)拾取 直线,并选择逆时针方 )拾取L1直线 向的箭头作为切割方向。 向的箭头作为切割方向。 (4)选择轮廓内侧箭头作为补偿的 ) 方向,输入穿丝点5, 回车 回车。 方向,输入穿丝点 ,0回车。 (5)右击使穿丝点与退回点重合, )右击使穿丝点与退回点重合, 完成轨迹生成。 完成轨迹生成。 (6)单击主菜单“文件”→“另存 )单击主菜单“文件” “ 文件” 输入文件名WZY02_XX.EXB。 文件”,输入文件名 。 (7)单击“保存”。 )单击“保存”
3.3B格式加工代码的生成 3B格式加工代码的生成
(1)打开高速走丝机床的轨迹文件 ) WZY01_HH.EXB。 。 (2)单击主菜单“线切割”→“生 )单击主菜单“线切割” “ 代码” 系统弹出“生成3B加工代码 加工代码” 成3B代码”,系统弹出“生成 加工代码” 代码 对话框。 对话框。 (3)输入文件名 )输入文件名WZY01_HH.3B,单 , 保存”按钮。 击“保存”按钮。
键或单击“ (4)按Enter键或单击“确定”, ) 键或单击 确定” 开始传输3B代码文件 代码文件。 开始传输 代码文件。 (5)传输完毕,系统显示“传输 )传输完毕,系统显示“ 结束” 结束”。 (6)将机床控制器复位,并在控 )将机床控制器复位, 制器上检查程序的条数与 WZY01_HH.3B程序中的条数是否一 程序中的条数是否一 确认后结束传输操作。 致,确认后结束传输操作。
基于VB的数控刨床加工程序的自动生成
基于VB的数控刨床加工程序的自动生成张海燕;吴晓【期刊名称】《南通大学学报(自然科学版)》【年(卷),期】2011(010)003【摘要】When numberical control planer processed the surface of cylindrical work pieces, the outline of component profile is usually approximated using a series of short lines in an intermittent interpolation work way. Software which produces programs automatically for NC planer is designed in order to avoid the long artificial editing process for the numerical control procedure. Known surface line expressions are inputted via the human-computer surface, recognized by well-designed character-string-processing function and transformed into expressions for program. The software calculates and arranges the curve coordinates, determines approximation types and calls corresponding macro pro- grams to form NC processing programs automatically. The software can also simulate NC processing and has been used in practice. The NC programs produced meet the requirements of processing and are applicable.%数控刨床加工柱型曲面类特型工件时,必须将工件型线采用小直线段来近似逼近,并采用断续插补工作方式.为了避免此类冗长数控程序繁复的人工编制过程,设计了数控刨床程序自动生成软件.该软件能够在人机界面上仅输入已知的曲面型线表达式,然后使用一些字符串处理函数,自动识别表达式并转换为程序计算表达式,计算曲线的坐标点串并加以整理,进而基于此坐标点串,判断刀补情形,决定调用何种合适的宏程序,自动生成加工用数控程序,还可以进行数控加工模拟.该软件已在实际生产中使用,所生成的数控程序符合加工需求,切实可用.【总页数】5页(P21-25)【作者】张海燕;吴晓【作者单位】南通大学电气工程学院,江苏南通226019;南通大学电气工程学院,江苏南通226019【正文语种】中文【中图分类】TH16;TH444【相关文献】1.基于Pro/E的齿轮数控加工程序自动生成的研究 [J], 邵兵;熊海洋;邬再新;胡赤兵2.基于Pro/Engineer平台齿轮数控加工程序自动生成的实现 [J], 胡赤兵;熊海洋;李南;邬再新3.基于VB的数控机床加工程序网络化传输 [J], 黄凤岐;魏家鹏4.基于Pro/ENGINEER平台的液压机数控加工程序的自动生成 [J], 董宏; 徐燕申; 黄艳群5.利用VB6.0自动生成捏合块数控加工程序 [J], 吕宝垒;刘辉;孙鹏飞因版权原因,仅展示原文概要,查看原文内容请购买。
图片批量切割VB源代码
一.VScroll1 VScrollBar二.PicBmp AotoRedraw属性:TrueAutoSize ::TrueList1 Style属性:1Pic Visible属性:Flase三.‘标准模块Module1的代码Option Explicit'类型定义Type BrowseInfohwndOwner As LongpIDLRoot As LongpszDisplayName As LonglpszTitle As LongulFlags As LonglpfnCallback As LonglParam As LongiImage As LongEnd Type'选择文件夹Public Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As _String) As LongPublic Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BrowseInfo) _As LongPublic tBrowseInfo As BrowseInfoPublic Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, _ByVal pszPath As String) As LongPublic szTitle As StringPublic Const BIF_RETURNONL YFSDIRS = 1Public Const BIF_DONTGOBELOWDOMAIN = 2Public Const MAX_PATH = 1024Public lpIDList As LongPublic Function SelectFolder(szTitle As String) As StringDim SBuffer1 As String'szTitle = "选择文件夹"' Get folder from userWith tBrowseInfo.hwndOwner = FrmCut.hWnd.lpszTitle = lstrcat(szTitle, "").ulFlags = BIF_RETURNONL YFSDIRS + BIF_DONTGOBELOWDOMAIN End WithlpIDList = SHBrowseForFolder(tBrowseInfo)If (lpIDList) Then'CmdSearch.Enabled = TrueSBuffer1 = Space(MAX_PATH)SHGetPathFromIDList lpIDList, SBuffer1SBuffer1 = Left(SBuffer1, InStr(SBuffer1, vbNullChar) - 1)If Right(SBuffer1, 1) <> "\" ThenSBuffer1 = SBuffer1 & "\"End IfEnd IfSelectFolder = SBuffer1End Function‘标准模块MThansJpg的代码'格式转换Public Type GUIDData1 As LongData2 As IntegerData3 As IntegerData4(0 To 7) As ByteEnd TypePublic Type GdiplusStartupInputGdiplusVersion As LongDebugEventCallback As LongSuppressBackgroundThread As LongSuppressExternalCodecs As LongEnd TypePublic Type EncoderParameterGUID As GUIDNumberOfValues As Longtype As LongValue As LongEnd TypePublic Type EncoderParametersCount As LongParameter As EncoderParameterEnd TypePublic Declare Function GdiplusStartup Lib "GDIPlus" (token As Long, inputbuf As GdiplusStartupInput, ByVal outputbuf As Long) As LongPublic Declare Function GdiplusShutdown Lib "GDIPlus" (ByVal token As Long) As LongPublic Declare Function GdipCreateBitmapFromHBITMAP Lib "GDIPlus" (ByVal hbm As Long, ByVal hpal As Long, Bitmap As Long) As LongPublic Declare Function GdipDisposeImage Lib "GDIPlus" (ByVal Image As Long) As LongPublic Declare Function GdipSaveImageToFile Lib "GDIPlus" (ByVal Image As Long, ByVal filename As Long, clsidEncoder As GUID, encoderParams As Any) As LongPublic Declare Function CLSIDFromString Lib "ole32" (ByVal str As Long, id As GUID) As Long Public Declare Function GdipCreateBitmapFromFile Lib "GDIPlus" (ByVal filename As Long, Bitmap As Long) As LongPublic Function PictureBoxSaveJPG(ByVal pict As StdPicture, ByVal filename As String, Optional ByVal quality As Byte = 80) As BooleanDim tSI As GdiplusStartupInputDim lRes As LongDim lGDIP As LongDim lBitmap As Long'初始化GDI+tSI.GdiplusVersion = 1lRes = GdiplusStartup(lGDIP, tSI, 0)If lRes = 0 Then'从句柄创建GDI+ 图像lRes = GdipCreateBitmapFromHBITMAP(pict.Handle, 0, lBitmap)If lRes = 0 ThenDim tJpgEncoder As GUIDDim tParams As EncoderParameters'初始化解码器的GUID标识CLSIDFromString StrPtr("{557CF401-1A04-11D3-9A73-0000F81EF32E}"), tJpgEncoder'设置解码器参数tParams.Count = 1With tParams.Parameter ' Quality'得到Quality参数的GUID标识CLSIDFromString StrPtr("{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"), .GUID.NumberOfValues = 1.type = 4.Value = VarPtr(quality)End With'保存图像lRes = GdipSaveImageToFile(lBitmap, StrPtr(filename), tJpgEncoder, tParams)'销毁GDI+图像GdipDisposeImage lBitmapEnd If'销毁GDI+GdiplusShutdown lGDIPIf lRes ThenPictureBoxSaveJPG = FalseElsePictureBoxSaveJPG = TrueEnd IfEnd Function‘窗体FrmCut 代码Option ExplicitPrivate PicOk As Boolean '装入图片标志'画抓取矩形框Private Old_X As SinglePrivate Old_Y As SinglePrivate isMouseDown As Boolean '判断第一还是第二次按下鼠标Private Box_X0 As SinglePrivate Box_Y0 As SinglePrivate Box_X1 As SinglePrivate Box_Y1 As SinglePrivate PenColor As LongPrivate CrossColor As LongPrivate Xx As Single '矩形的第二个顶点坐标Private Yy As SinglePrivate ReDraw As Boolean '重新选择标志Private lineok As Boolean'文件夹浏览Private SBuffer As String '文件夹路径'全选检查框Private Sub Check1_Click()Dim i As LongIf Check1 = 1 ThenFor i = List1.ListCount - 1 To 0 Step -1List1.Selected(i) = TrueNext iFor i = 0 To List1.ListCount - 1List1.Selected(i) = FalseNext iEnd IfEnd Sub'浏览按钮Private Sub CmdOpen_Click()Dim i As LongOn Local Error Resume Next'CmdSearch.Enabled = False' Get folder from userSBuffer = SelectFolder("选择源文件夹")TxtDir.Text = SBufferList1.ClearFile1.Path = SBufferFor i = 0 To File1.ListCount - 1List1.AddItem File1.List(i)Next iCmdSelect.Enabled = TrueCheck1.Value = 0HScroll1_ChangeVScroll1_ChangeEnd Sub'退出按钮Private Sub CmdExit_Click()EndEnd Sub'切割按钮Private Sub CmdCut_Click()Dim PicTop As SingleDim PicLeft As SingleDim PicRight As SingleDim PicLow As SingleDim PicH As Single, PicW As SingleDim i As LongDim FName As StringDim FloderName As String'PicBmp.Line (Box_X0, Box_Y0)-(Xx, Yy), PenColor, BPicTop = Box_Y0PicLeft = Box_X0PicLow = PicBmp.Height - YyPicRight = PicBmp.Width - XxFloderName = SelectFolder("选择存放目标文件夹")If Right(FloderName, 1) <> "\" Then FloderName = FloderName & "\" CmdCut.Enabled = FalseCmdSelect.Enabled = FalseFor i = 0 To File1.ListCount - 1If List1.Selected(i) ThenFName = SBuffer & List1.List(i)Me.PicBmp.Picture = LoadPicture(FName)PicW = PicBmp.Width - PicRight - PicLeftPicH = PicBmp.Height - PicLow - PicTopIf PicW > 0 And PicH > 0 ThenPic.Height = PicHPic.Width = PicWPic.PaintPicture PicBmp.Image, 0, 0, PicW, PicH, Box_X0, Box_Y0, PicW, PicHPic.Picture = Pic.ImagePicBmp.Picture = Pic.Picture'SavePicture PicBmp.Image, FloderName & List1.List(i)' c.CreateFromPicture PicBmp.PictureIf Not PictureBoxSaveJPG(PicBmp, FloderName & List1.List(i)) ThenMsgBox FName & "保存失败", vbExclamationEnd IfElseMsgBox FName & "无法切割"End IfEnd If '" &Next i'PicTop = Box_Y0'PicLeft = Box_Y0'PicRight = PicBmp.Width - Xx'PicLow = PicBmp.Height - Yy'PicW = Xx - Box_X0'PicH = Yy - Box_Y0'Pic.Height = PicH'Pic.Width = PicW'Pic.PaintPicture PicBmp.Image, 0, 0, PicW, PicH, Box_X0, Box_Y0, PicW, PicH'Pic.Picture = Pic.Image'PicBmp.Picture = Pic.PictureEnd SubPrivate Sub CmdSelect_Click() '选择按钮PicBmp.Line (Box_X0, Box_Y0)-(Xx, Yy), PenColor, BReDraw = Truelineok = TrueCmdSelect.Enabled = FalseCmdCut.Enabled = FalseEnd SubPrivate Sub Form_Load()CrossColor = QBColor(8)PenColor = QBColor(15)PicBmp.DrawMode = vbXorPen'PicBmp.MousePointer = vbCustomisMouseDown = FalseBox_X0 = Box_X1 = Box_Y0 = Box_Y1 = 0PicOk = FalseCmdCut.Enabled = FalseCmdSelect.Enabled = FalseFile1.Pattern = "*.jpg;*.bmp"End Sub'水平滚动条Private Sub HScroll1_Change()PicBmp.Left = -HScroll1.Value * (PicBmp.Width - PicScroll.Width) \ 100 End Sub'文件列表框Private Sub List1_Click()Dim FName As StringFName = SBuffer & List1.List(List1.ListIndex) ' MsgBox FNameTxtDir.Text = FNameMe.PicBmp.Picture = LoadPicture(FName)PicOk = TrueReDraw = Truelineok = TrueCmdCut.Enabled = FalseCmdSelect.Enabled = TrueEnd Sub'确定选择矩形Private Sub PicBmp_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) If PicOk And ReDraw And Button = 1 ThenIf isMouseDown And Button = 1 Then'定义第二个点,先前已经用鼠标定义了一个点Box_X1 = xBox_Y1 = yisMouseDown = False' PicBmp.DrawMode = vbCopyPenPicBmp.Line (Box_X0, Box_Y0)-(Box_X1, Box_Y1), PenColor, BPicBmp.Line (Box_X0, Box_Y0)-(x, y), PenColor, BOld_X = xOld_Y = yXx = Box_X1Yy = Box_Y1isMouseDown = FalseReDraw = FalseCmdSelect.Enabled = TrueCmdCut.Enabled = TrueElse'定义矩形的第一个顶点,则擦除光标PicBmp.Line (0, y)-(PicBmp.ScaleWidth, y), CrossColor '画一个光标PicBmp.Line (x, 0)-(x, PicBmp.ScaleHeight), CrossColorBox_X0 = xBox_Y0 = yisMouseDown = TrueEnd IfEnd IfEnd SubPrivate Sub PicBmp_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) If PicOk And ReDraw ThenIf isMouseDown = True Then'拖动鼠标来定义矩形的另外一个顶点,此时擦除前一个矩形,绘制新的矩形PicBmp.Line (Box_X0, Box_Y0)-(Old_X, Old_Y), PenColor, BPicBmp.Line (Box_X0, Box_Y0)-(x, y), PenColor, BElseIf lineok Then'画新的光标线PicBmp.Line (0, y)-(PicBmp.ScaleWidth, y), CrossColorPicBmp.Line (x, 0)-(x, PicBmp.ScaleHeight), CrossColorlineok = FalseElse'消除旧光标线PicBmp.Line (0, Old_Y)-(PicBmp.ScaleWidth, Old_Y), CrossColorPicBmp.Line (Old_X, 0)-(Old_X, PicBmp.ScaleHeight), CrossColor'画新的光标线PicBmp.Line (0, y)-(PicBmp.ScaleWidth, y), CrossColorPicBmp.Line (x, 0)-(x, PicBmp.ScaleHeight), CrossColorlineok = FalseEnd IfEnd IfOld_X = xOld_Y = yEnd IfEnd Sub'垂直滚动条Private Sub VScroll1_Change()PicBmp.Top = -VScroll1.Value * (PicBmp.Height - PicScroll.Height) \ 100End Sub。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第1章前言1.1 电火花线切割加工程序编制电火花线切割加工程序编制一般可分为手动编程和自动编程。
理想的加工程序不仅应能加工出符合图纸要求的合格零件,同时还应使数控机床的功能得到合理的应用与充分的发挥,以使数控机床安全可靠且高效地工作。
手工编程是指由人工编制零件数控加工程序的各个步骤,即从零件图纸分析,工艺分析,确定加工路线和工艺参数,计算数控机床所需输入的数据,编写零件的数控加工程序单直至程序的检验,均由人工来完成。
对于点位加工或几何形状不太复杂的零件加工,数控编程计算较简单,程序段不多,使用手工编程即可实现。
但对轮廓形状不是由简单的直线、圆弧组成的复杂零件,特别是具有非圆曲线、列表曲线等轮廓的零件等几何元素复杂,程序量很大的零件,计算数值相当烦琐,工作量大,容易出错,且很难校对,使用手工编程比较困难。
因此,为了缩短生产周期,提高数控机床的利用率,有效地解决各种复杂零件的加工问题,仅仅使用手工编程已不能满足要求,此时可以采用自动编程的方法。
自动编程是用计算机来帮助人们解决复杂零件的数控加工编程问题,即数控编程的大部分工作由计算机来完成,这种技术称之为计算机辅助数控加工编程。
计算机自动编程代替程序编制人员完成了烦琐的数值计算工作,并省去了编写程序单的工作量,因而可将编程效率提高几十倍,同时它解决了手工编程无法解决的许多复杂零件加工的编程问题。
1.2 电火花线切割的现状及发展趋势随着科学技术的日新月异和工业生产的迅猛发展,电火花线切割技术作为电加工技术中的一种,特别是在模具加工行业,得到了广泛的应用。
模具行业的迅速发展,对电火花线切割机提出了更高的要求,从而也进一步促进了电火花线切割技术的发展,促使电火花线切割高新技术产品不断涌现产量不断增长。
目前我国生产和使用的绝大多数的电火花线切割机较日本等发达国家生产和使用的电火花线切割机,除了采用的工艺不同外,无论在精度、功能、自动化程度、可靠性、加工稳定性和加工工艺指标方面,还是在外观等方面明显低一个档次。
差距是客观存在的,只有清醒地看到这一点,及时地吸收国外的新技术,消化运用于我们的产品上,同时根据我国及国际市场的实际情况灵活运用新工艺,才能使这一差距逐步缩小。
认清国外电火花线切割机近几年来新技术的应用情况,对国产线切割机水平上一个档次是大有裨益的。
国外电火花线切割机床的发展三大趋势,即高速度化、高精度化、高自动化,经济型机床也是一个发展趋向。
国外电火花线切割机各生产公司为提高本公司产品的高品质不遣余力,对国内同行产生了巨大的促进作用,近几年来,我国电火花线切割机也取得了迅速发展。
就国外电火花线切割机制造厂家而言,目前已进人了一个比较稳定的成长期,线切割的加工速度在目前这种加工方式和条件下再要大幅度提高是较困难的,但可以预见现时的加工精度、速度、光洁度以及操作性能、机床的功能等都不会就此止步。
为了赶上国外电火花线切割机的发展水平,改变我国落后的局面,应该以优先发展数控系统,大力加强系统的工艺基础研究工作,努力开拓新工艺领域,以及重视技术队伍建设,坚信国内外差距必将缩小,经过一代人甚至几代人的努力,我们定能赶超上去,在全球范围内共创电火花加工工业辉煌的明天。
1.3 本组课题及个人任务介绍1.3.1 课题背景普遍的手工编程方式为:零件图——确定加工工艺——制定工艺线路——手工编制3B代码。
当然现在大部分的电火花线切割机床也可以识别ISO等代码。
这种编程方式不仅效率低,受工作人员技术水平的限制,劳动强度大,而且容易出错,特别是在遇到复杂轮廓零件的加工时,手工编程更是力不从心,捉襟见肘。
有一些甚至是无法完成。
这些状况的存在,严重制约了我国制造行业的发展,削弱了我国制造业的国际竞争力。
近年来随着计算机技术的不断发展,在研究二次开发方面投入的人力、物力的不断增多,我国也有不少关于高速走丝线切割的自动编程软件投入到实际生产当中。
但与国外同类型的软件有一定的差距,如何提高生产效率,减轻工人的劳动强度,缩小同国外的差距,增强民族制造业的国际竞争力,是我们迫切需要解决的问题。
因此对于数控机床自动编程系统的研究是非常必要的。
AutoCAD是目前国内外使用较为广泛的CAD软件,其丰富的绘图命令,强大的图形编辑功能和友好的用户界面受到广大工程制图人员的欢迎。
但是AutoCAD只是一个通用的绘图平台,不具备CAM功能。
大多数使用者需要在AutoCAD内绘制好图形,再转换到其他的CAM软件内。
过程繁琐,容易丢失数据信息。
鉴于手工编程出现的这些问题有必要开发一个功能强大的系统来解决这样的问题,本课题即以AutoCAD的基本图形处理平台,利用VBA工具开发一套通用的线切割机自动编程系统,编制代码时操作简单迅速,计算精确,直观可靠,效果显著,对数控编程人员的要求下降,减轻了劳动强度,提高了效率。
1.3.2 本组课题以AutoCAD为基本图形处理平台,利用AutoCAD提供的VBA编程工具,开发一套通用的线切割机自动编程系统,实现单轮廓封闭、非封闭工件加工代码(3B)生成;根据3B数控加工代码反求图形;实现加工过程的动态仿真;常用平面非圆曲线的双圆弧拟合。
1.3.3 个人任务实现单轮廓封闭、非封闭3B加工代码的生成。
基本要求:1、根据图形运行程序能得到正确的3B代码。
2、运行界面友好,操作简单,计算准确。
3、程序简便、易读。
需要解决的问题:1、如何获取电极丝起点。
2、如何根据选取的第一个加工图元的基点来确定加工方向。
3、如何根据选取的第一个加工图元来获取整个加工轮廓。
4、如何根据偏移量把整个加工轮廓进行偏移。
5、考虑各种情况下的直线、圆弧,从而生成正确的3B代码。
第2章相关知识介绍2.1 数控电火花线切割加工原理2.1.1 电火花线切割加工放电基本原理线切割的基本工作原理是:利用连续移动的细金属丝(称为电极丝)作电极,对工件进行脉冲火花放电蚀除金属、切割成型。
它的主要用法是:利用脉冲电源加在工件与电极丝之间(一般工件接正极,电极丝接负极),通过控制系统根据预先输入的工作程序输出相应的信息,使工作台作相应的移动,工件与电极丝靠近,当两者接近到适当距离时(一般为0.01~0.04毫米)便产生火花放电,蚀除金属,金属被蚀除后工件与电极丝之间的距离加大,控制系统根据这一距离的大小和预先输入的程序,不断地发出进给信号,使加工过程持续进行,在整个操作过程中工件与电极丝之间用喷嘴喷入冷却液。
它的走丝方式有两种:(1)高速走丝,速度为100mm2/min以上,有的甚至可以达到260mm2/min,采用钼丝作电极丝,可循环反复使用;(2)低速走丝,速度小于100mm2/min,电极丝采用铜丝,只使用一次。
通常第一种用得比较多。
图2.1 电火花线切割加工原理在进行电火花加工必须具备三个条件:必须采用脉冲电源;必须采用自动进给调节装置,以保持工具电极与工件电极间微小的放电间隙;火花放电必须在具有一定绝缘强度的液体介质中进行,电火花加工时,脉冲电源的一极接工具电极,另一极接工件电极,两极均浸入具有一定绝缘度的液体介质(常用煤油或矿物油或去离子水)中。
工具电极由自动进给调节装置控制,以保证工具与工件在正常加工时维持一很小的放电间隙(0.01~0.05mm)。
当脉冲电压加到两极之间,便将当时条件下极间最近点的液体介质击穿,形成放电通道。
由于通道的截面积很小,放电时间极短,致使能量高度集中(10~107W/mm),放电区域产生的瞬时高温足以使材料熔化甚至蒸发,以致形成一个小凹坑。
第一次脉冲放电结束之后,经过很短的间隔时间,第二个脉冲又在另一极间最近点击穿放电。
如此周而复始高频率地循环下去,工具电极不断地向工件进给,它的形状最终就复制在工件上,形成所需要的加工表面。
与此同时,总能量的一小部分也释放到工具电极上,从而造成工具损耗。
2.1.2 间隙补偿量的确定方法在数控线切割机床上,电极丝的中心轨迹和图纸上工件轮廓差别的补偿称为间隙补偿。
钼丝半径加上单面放电间隙,即间隙补偿值l= R丝(钼丝半径) + δ电(单面放电间隙),间隙补偿值通常指的是单边补偿值,它可以大于等于零,也可以小于零。
一般中走丝和高走丝线切割机床采用的是直径为d=0.18mm的钼丝。
那么钼丝半径R丝= 0.09mm。
钼丝半径值一般是可以确定的,加工时,随着加工时间越长,钼丝会随之变细,这时只要用千分尺测量一下,记下钼丝直径的大小即可。
在工件尺寸精度要求较高时,精确地测量钼丝直径大小是非常重要的。
间隙补偿值的确定主要取决于单面放电间隙的大小,放电间隙与工件材料、结构、走丝速度、钼丝张紧情况、导轮的运行状态等因素有关。
通常取δ电=0.01mm,这只是一个经验值。
图2.2 电极丝直径与放电间隙的关系凸模加工(左)凹模加工(右)图2.3 电极丝中心运动轨迹与给定加工轮廓的关系一般数控装置都具有刀具补偿功能,不需要计算刀具中心运动轨迹,只需要按零件轮廓编程即可。
但用3B或4B格式进行手工编程时,需要考虑电极丝直径及放电间隙,补偿量l=±(d/2 + δ电)加工凸模时取“+”值,加工凹模时取“-”。
2.2 AutoCAD及其二次开发简介2.2.1 关于AutoCADCAD(Computer Aided Design)的含义是指计算机辅助设计,是计算机技术的一个重要的应用领域。
AutoCAD则是美国Autodesk企业开发的一个交互式绘图软件,是用于二维及三维设计、绘图的系统工具,用户可以使用它来创建、浏览、管理、打印、输出、共享及准确复用富含信息的设计图形。
AutoCAD是目前世界上应用最广的CAD软件,市场占有率位居世界第一。
AutoCAD软件具有如下特点:1、具有完善的图形绘制功能。
2、具有强大的图形编辑功能。
3、可以采用多种方式进行二次开发或用户定制。
4、可以进行多种图形格式转换,具有较强的数据交换能力。
5、支持多种硬件设备。
6、支持多种操作平台。
7、具有通用性、易用性,适用于各类用户。
此外,从AutoCAD2000开始,该系统又添增了许多强大的功能,如AutoCAD设计中心(ADC)、多文档设计环境(MDE)、Internet驱动、新的对象捕捉功能、增强的标注功能以及局部打开和局部加载的功能,从而使AutoCAD系统更加完善。
虽然AutoCAD本身的功能集已经足以协助用户完成各种设计工作,单用户还可以通过Autodesk以及数千家软件开发的五千多种应用软件把AutoCAD改造成为满足各专业领域的专用设计工具。
这些领域中包括建筑、机械、测绘、电子以及航空航天等。
Autodesk企业成立于1982年1月,在近二十年的发展历程中,该企业不断丰富和完善AutoCAD系统,并连续推出各个版本,使AutoCAD由一个功能非常有限的绘图软件发展到了现在功能强大、性能稳定、市场占有率位居世界第一的CAD系统,在城市规划、建筑、测绘、机械、电子、造船、汽车等许多行业得到广泛的应用。