1、第 3 章 V B 程序设计3.1 插补软件设计系统的公共文件依据系统模块结构图,抽取系统中多个模块的相同子功能,建立系统公共文件,可以做到减少总代码量,避免重复开发,报纸系统实现风格统一,以及增强可修改性。a、主体框架b、添加模块c、定义用户名、用户类型、职员编号以及登陆成功的标志位系统公共变量定义。d、Main(系统启动)函数e、ConnectString 函数f、txtlsNull 函数判断输入到 TextBox 的内容是否为空。g、SEquellen 函数判断输入到 TextBox 的内容长度是否为给定值。(2)功能设计a 题目模块数控插补软件的题目是“逐点比较法插补仿真软件”b 个人
2、信息模块输入自己的信息:专业:机械设计与制造学号:* 姓名* 指导老师:*c 直线插补当单击直线插补时,顺圆插补、逆圆插补、顺时针画圆弧、逆时针画圆弧不可见。d 顺圆插补当单击顺圆插补时,直线插补、逆圆插补不可见。e 逆圆插补当单击逆圆插补时,直线插补、顺圆插补不可见。f 起点坐标终点坐标模块可输入-10 到 10 之间这几个数值g 画直线在输入数值后,点击画直线,实现执行画直线的命令。h 顺时针画圆弧,逆时针画圆弧当输入数值后,点击此按钮,实现执行画圆弧命令。i 连续插补、单步插补在左下框内实现图形,右框内实现插补步骤。J 退出单击后退出软件。3.2 插补程序的实现画直线采用的是 Micro
3、soft Visual Basic 6.0 中文版中的 Line 命令实现的,例如:Picture1.Line (x1, y1)-(x2, y2), RGB(255, 0, 0) ,就是在图片框中从起始坐标 (x1, y1)到终点坐标(x2, y2)画一条红色的直线。再根据上面的插补原理和软件流程图就可以编出插补程序。 画圆弧采用 Microsoft Visual Basic 6.0 中文版中的 Circle 命令实现的,例如: Picture1.Circle (x1, y1),r, vbRed,就是在图片框坐标中以坐标X1, Y1 为圆心画一个半径为 r 的红色圆。 Picture1.Cir
4、cle (0, 0), r1, , n, m,就是图片框中以坐标原点为圆心,以 r1 为半径,以弧度 n 为起始点,以弧度 m 为终点画圆弧。再根据上面的插补原理和软件流程图就可以编出插补程序。插补界面如图 2-14,直线和圆弧的走刀轨迹输出在一个图片框中,插补演示的过程,刀具走的方向,偏差结果,输出工步数等,都在一个指定的文本框中输出,插补类型用三个单选按钮实现。只要选择相应的按钮,在文本框中输入相应的坐标就可以看到所输入坐标直线和圆弧的走刀轨迹了。3.3 Visual Basic 语言简介Visual Basic,简称 VB,是 Microsoft 公司推出的一种 Windows 应用程序
5、开发工具。是当今世界上使用最广泛的编程语言之一,它也被公认为是编程效率最高的一种编程方法。无论是开发功能强大、性能可靠的商务软件,还是编写能处理实际问题的实用小程序,VB 都是最快速、最简便的方法。 Visual Basic 中的“Visual”指的是采用可视化的开发图形用户界面(GUI)的方法,一般不需要编写大量代码去描述界面元素的外观和位置,而只要把需要的控件拖放到屏幕上的相应位置即可;“Basic”指的是 BASIC 语言,因为 VB 是在原有的 BASIC 语言的基础上发展起来的,至今包含了数百条语句、函数及关键词,其中很多和 Windows GUI 有直接关系。专业人员可以用 Vis
6、ual Basic 实现其它任何 Windows 编程语言的功能,而初学者只要掌握几个关键词就可以建立实用的应用程序。3.4 Visual Basic 的特点1面向对象VB 采用了面向对象 设计思想 它 基本思路是把复杂 设计问题分解为 个个能够完成独立功能 相对简单 对象集合 所谓“对象”就是 个可操作 实体 如窗体、窗体中 命令按钮、标签、文本框等 面向对象 编程就好像搭积木 样 员可根据 和界面设计要求 直接在屏幕上“画“出窗口、菜单、按钮等区别类型 对象 并为每个对象设置属性。2事件驱动在 Windows 环境下 是以事件驱动方式运行 每个对象都能响应多个区别 事件 每个事件都能驱动
7、段代码事件过程 该代码决定了对象 功能 通常称这种机制为事件驱动 事件可由用户 操作触发 也可以由系统或应用 触发 例如 单击 个命令按钮 就触发了按钮 Click(单击)事件该事件中 代码就会被执行 若用户未进行任何操作(未触发事件) 则 就处于等待状态 整个应用 就是由彼此独立 事件过程构成。3软件 Software 集成式开发VB 为编程提供了 个集成开发环境 在这个环境中 编程者可设计界面、编写代码、调试 直至把应用 编译成可在 Windows 中运行 可执行文件并为它生成安装 VB 集成开发环境为编程者提供了很大 方便。 4结构化 设计语言 VB 具有丰富 数据类型 是 种符合结构化
8、 设计思想 语言 而且简单易学 此外作为 种 设计语言 VB 还有许多独到的处。 5强大 数据库访问功能VB 利用数据 Control 控件可以访问多种数据库 VB6O 提供 ADOControl控件 不但可以用最少 代码实现数据库操作和控制 也可以取代 DataControl控件和 RDOControl 控件。6支持对象 链接和嵌入技术VB 核心是对对象 链接和嵌入(OLE)技术 支持 它是访问所有对象 种思路方法 利用 OLE 技术 能够开发集声音、图像、动画、字处理、Web 等对象于 体 。7网络功能 VB6O 提供了 DltTML(DynamictTML)设计工具 利用这种技术可以动态
9、创建和编辑 Web 页面 使用户在 VB 中开发多功能 网络应用软件 Software.8多个应用 向导VB 提供了多种向导 如应用 向导、安装向导、数据对象向导和数据窗体向导 通过它们可以快速地创建区别类型、区别功能 应用 。9支持动态交换、动态链接技术 通过动态数据交换(DDE) 编程技术 VB 开发 应用 能和其他 Windows应用 的间建立数据通信 通过动态链接库技术 在 VB 中可方便地用 C 语言或汇编语言编写 也可 Windows 应用 接口(API)。lO联机帮助功能 在 VB 中 利用帮助菜单和 F1 功能键 用户可随时方便地得到所需要 帮助信息 VB 帮助窗口中显示了有关
10、 举例代码 通过复制、粘贴操作可获取大量举例代码 为用户 学习和使用提供方便。第 4 章 VB 插补程序代码VERSION 5.00Begin VB.Form 数控插补仿真软件 Appearance = 0 FlatBackColor = &H80000005&Caption = “数控插补仿真演示软件“ClientHeight = 10830ClientLeft = 165ClientTop = 555ClientWidth = 15240FillColor = &H00C0C0C0&FillStyle = 0 SolidBeginProperty Font Name = “宋体“Size
11、= 36Charset = 134Weight = 400Underline = 0 FalseItalic = -1 TrueStrikethrough = 0 FalseEndPropertyForeColor = &H00C0C0C0&LinkTopic = “Form1“Picture = “程序演示2.frx“:0000ScaleHeight = 191.029ScaleMode = 6 MillimeterScaleWidth = 268.817StartUpPosition = 3 窗口缺省Begin VB.Frame Frame1 BackColor = &H00FFFF00&
12、Caption = “插补类型“BeginProperty Font Name = “黑体“Size = 12Charset = 134Weight = 400Underline = 0 FalseItalic = 0 FalseStrikethrough = 0 FalseEndPropertyForeColor = &H00FF0000&Height = 1695Left = 3360MousePointer = 1 ArrowTabIndex = 16Top = 2280Width = 1935Begin VB.OptionButton Option3 BackColor = &H008
13、080FF&Caption = “直线插补“BeginProperty Font Name = “宋体“Size = 10.5Charset = 134Weight = 400Underline = 0 FalseItalic = 0 FalseStrikethrough = 0 FalseEndPropertyForeColor = &H00000000&Height = 255Left = 240MaskColor = &H00FFFFFF&TabIndex = 19Top = 360Width = 1215EndBegin VB.OptionButton Option2 BackColo
14、r = &H008080FF&Caption = “逆圆插补“BeginProperty Font Name = “宋体“Size = 10.5Charset = 134Weight = 400Underline = 0 FalseItalic = 0 FalseStrikethrough = 0 FalseEndPropertyForeColor = &H00000000&Height = 255Left = 240TabIndex = 18Top = 1320Width = 1215EndBegin VB.OptionButton Option1 BackColor = &H008080F
15、F&Caption = “顺圆插补“BeginProperty Font Name = “宋体“Size = 10.5Charset = 134Weight = 400Underline = 0 FalseItalic = 0 FalseStrikethrough = 0 FalseEndPropertyForeColor = &H00000000&Height = 255Left = 240TabIndex = 17Top = 840Width = 1215EndEndBegin VB.CommandButton Command4 Caption = “退出“BeginProperty Fo
16、nt Name = “黑体“Size = 12Charset = 134Weight = 400Underline = 0 FalseItalic = 0 FalseStrikethrough = 0 FalseEndPropertyHeight = 720Left = 13800TabIndex = 15Top = 2640Width = 1335EndBegin VB.CommandButton Command5 BackColor = &H80000005&Caption = “画直线“BeginProperty Font Name = “黑体“Size = 12Charset = 13
17、4Weight = 400Underline = 0 FalseItalic = 0 FalseStrikethrough = 0 FalseEndPropertyHeight = 720Left = 5670MaskColor = &H00808080&TabIndex = 11Top = 2640Width = 1320EndBegin VB.Frame Frame2 BackColor = &H00FFFF00&Caption = “输入坐标“BeginProperty Font Name = “黑体“Size = 12Charset = 134Weight = 400Underline
18、 = 0 FalseItalic = 0 FalseStrikethrough = 0 FalseEndPropertyForeColor = &H00FF0000&Height = 1695Left = 0TabIndex = 7Top = 2280Width = 3120Begin VB.TextBox Text1 BeginProperty Font Name = “宋体“Size = 15.75Charset = 134Weight = 700Underline = 0 FalseItalic = 0 FalseStrikethrough = 0 FalseEndPropertyFor
19、eColor = &H000000FF&Height = 435Index = 3Left = 2100TabIndex = 14Top = 1050Width = 750EndBegin VB.TextBox Text1 BeginProperty Font Name = “宋体“Size = 15.75Charset = 134Weight = 700Underline = 0 FalseItalic = 0 FalseStrikethrough = 0 FalseEndPropertyForeColor = &H000000FF&Height = 435Index = 2Left = 1
20、155End IfElseIf r1 = r2 And x1 = 0 And y1 = 0 And x2 = 0 Thena = y2 / r1b = y1 / r1m = pi - arcsin(a)n = arcsin(b)Picture1.Circle (0, 0), r1, , n, mElseIf r1 = r2 And x1 = 0 And y1 = 0 And x2 = 0 And y1 = 0 And x2 0 And y2 = 0 And Y1 = 0 And X2 = 0 And Y2 = 0 And (Y1) = (Y2) Then a = Y2 / r2b = Y1 /
21、 r1 m = arcsin(a) n = arcsin(b) If m n ThenPicture1.Circle (0, 0), r1, , n, m ElsePicture1.Circle (0, 0), r1 Picture1.Circle (0, 0), r1, , m, n End IfElseIf r1 = r2 And x1 = 0 And x2 = 0 Thena = y2 / r1b = y1 / r1m = pi - arcsin(a)n = pi - arcsin(b)If m n ThenPicture1.Circle (0, 0), r1, , m, nElsePi
22、cture1.Circle (0, 0), r1, , n, mEnd IfElseIf r1 = r2 And x1 = 0 And x2 = 0 And x2 0 And y2 = 0 And x2 = 0 And y2 = 0 Thena = y2 / r1b = y1 / r1m = pi - arcsin(b)n = arcsin(a)Picture1.Circle (0, 0), r1, , m, nElseIf r1 = r2 And X1 = 0 And X2 = 0 Then a = X2 / r2 b = Y1 / r1 m = pi - arcsin(a)n = pi -
23、 arcsin(b) If m n Then Picture1.Circle (0, 0), r1, , m, n Else Picture1.Circle (0, 0), r1End IfElseIf r1 = r2 And x1 n ThenPicture1.Circle (0, 0), r1, , n, mElsePicture1.Circle (0, 0), r1, , n, mEnd IfElseIf r1 = r2 And x1 0 And y2 = 0 And y2 = 0 Thena = y2 / r1b = Abs(x1) / r1m = 3 * pi / 2 - arcsi
24、n(b)n = arcsin(a)Picture1.Circle (0, 0), r1, , m, nElseIf r1 = r2 And x1 = 0 Thena = y2 / r1b = Abs(x1) / r1m = 3 * pi / 2 - arcsin(b)n = pi - arcsin(a)Picture1.Circle (0, 0), r1, , m, n ElseIf r1 = r2 And X1 n Then Picture1.Circle (0, 0), r1, , n, m Else Picture1.Circle (0, 0), r1 End IfElseIf r1 =
25、 r2 And x1 = 0 And y1 = 0 And y2 n ThenPicture1.Circle (0, 0), r1, , n, mElsePicture1.Circle (0, 0), r1, , n, mEnd IfElseIf r1 = r2 And x1 0 And y1 = 0 And y2 = 0 Thena = y2 / r1b = Abs(y1) / r1m = 2 * pi - arcsin(b)n = arcsin(a)Picture1.Circle (0, 0), r1, , m, nElseIf r1 = r2 And x1 0 And y1 = 0 Th
26、ena = y2 / r1b = Abs(y1) / r1m = 2 * pi - arcsin(b)n = pi - arcsin(a)Picture1.Circle (0, 0), r1, , m, nElseIf r1 = r2 And x1 0 And y1 n Then Picture1.Circle (0, 0), r1, , n, m Else Picture1.Circle (0, 0), r1 End IfEnd IfEnd SubFunction judge(X As Integer, Y As Integer) 象限判断If Option1.Value = True Th
27、enIf X = 0 And Y 0 Thenjudge = 1ElseIf X = 0 Thenjudge = 2ElseIf X 0 And Y = 0 Thenjudge = 1ElseIf X 0 Thenjudge = 2ElseIf X 0 And Y = 0 Thenjudge = 1ElseIf X 0 Thenjudge = 2ElseIf X = 0 Thenf = f - Abs(y2 - y1)If x2 x1 ThenX = X + 1Picture1.Line -(X, Y), vbRedText2.Text = Text2.Text & Chr(13) & Chr
28、(10) & Space(1) & n & Space(11) & “f = 0“ & Space(13) & “ +x“ & Space(11) & “f=“ & Format$(f, “#0.0“) & Space(12) & X & “,“ & YElseX = X - 1Picture1.Line -(X, Y), vbRedText2.Text = Text2.Text & Chr(13) & Chr(10) & Space(1) & n & Space(11) & “f = 0“ & Space(13) & “ -x“ & Space(11) & “f=“ & Format$(f,
29、 “#0.0“) & Space(12) & X & “,“ & YEnd IfElsef = f + Abs(x2 - x1)If y2 y1 ThenY = Y + 1Picture1.Line -(X, Y), vbRedText2.Text = Text2.Text & Chr(13) & Chr(10) & Space(1) & n & Space(10) & “ f 2 ThenGoTo againEnd IfLoopEnd IfCase 3If Option1.Value = True ThenDo Until (X - x2) = 0 And (Y - y2) = 0n = n
30、 + 1If f = 0 Thenf = f + 2 * Y + 1Y = Y + 1Picture1.Line -(X, Y), vbRedText2.Text = Text2.Text & Chr(13) & Chr(10) & Space(1) & n & Space(11) & “f = 0“ & Space(13) & “+y“ & Space(11) & “f=“ & Format$(f, “#0.0“) & Space(12) & X & “,“ & YElsef = f - 2 * X + 1X = X - 1Picture1.Line -(X, Y), vbRedText2.
31、Text = Text2.Text & Chr(13) & Chr(10) & Space(1) & n & Space(10) & “ f 3 ThenGoTo againEnd IfLoopElseIf Option2.Value = True ThenDo Until (X - x2) = 0 And (Y - y2) = 0n = n + 1If f = 0 Thenf = f + 2 * X + 1X = X + 1Picture1.Line -(X, Y), vbRedText2.Text = Text2.Text & Chr(13) & Chr(10) & Space(1) &
32、n & Space(11) & “f = 0“ & Space(13) & “ +x“ & Space(11) & “f=“ & Format$(f, “#0.0“) & Space(12) & X & “,“ & YElsef = f - 2 * Y + 1Y = Y - 1Picture1.Line -(X, Y), vbRedText2.Text = Text2.Text & Chr(13) & Chr(10) & Space(1) & n & Space(10) & “f 3 ThenGoTo againEnd IfLoopEnd IfCase 4If Option1.Value =
33、True ThenDo Until (X - x2) = 0 And (Y - y2) = 0f = Sqr(x 2) + (y 2) - r1n = n + 1If f = 0 Thenf = f - 2 * X + 1X = X - 1Picture1.Line -(X, Y), vbRedText2.Text = Text2.Text & Chr(13) & Chr(10) & Space(1) & n & Space(11) & “f = 0“ & Space(13) & “-x“ & Space(11) & “f=“ & Format$(f, “#0.0“) & Space(12)
34、& X & “,“ & YElsef = f - 2 * Y + 1Y = Y - 1Picture1.Line -(X, Y), vbRedText2.Text = Text2.Text & Chr(13) & Chr(10) & Space(1) & n & Space(10) & “ f 4 ThenGoTo againEnd IfLoopElseIf Option2.Value = True ThenDo Until (X - x2) = 0 And (Y - y2) = 0f = Sqr(x 2) + (y 2) - r1n = n + 1If f = 0 Thenf = f + 2
35、 * Y + 1Y = Y + 1Picture1.Line -(X, Y), vbRedText2.Text = Text2.Text & Chr(13) & Chr(10) & Space(1) & n & Space(11) & “f = 0“ & Space(13) & “ +x“ & Space(11) & “f=“ & Format$(f, “#0.0“) & Space(12) & X & “,“ & YElsef = f + 2 * X + 1X = X + 1Picture1.Line -(X, Y), vbRedText2.Text = Text2.Text & Chr(1
36、3) & Chr(10) & Space(1) & n & Space(10) & “f 4 ThenGoTo againEnd IfLoopEnd IfEnd SelectEnd IfEnd SubSub axis(obj As Object)画x轴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
37、.2)画y轴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 = 9画刻度For cx = -9 To 9 Step 1obj.Line (cx, 0)-(cx, 0.2)If cx 0 Thenobj.CurrentX = -0.8obj.Curre
38、ntY = cy + 0.2obj.Print cyEnd IfNextobj.CurrentX = -0.5obj.CurrentY = -0.2obj.Font.Size = 12obj.Print “O“ 坐标原点Text2.Text = Space(0) & “ 输出工步数“ & Space(3) & “偏差判别结果“ & Space(3) & “坐标进给方向“ & Space(3) & “偏差计算“ & Space(3) & “动点坐标植(x ,y)“ & Chr(13) & Chr(10)End SubStatic Sub delayloop(delaytime) 延时程序Cons
39、t secondsinday = 24& * 60& * 60&loopfinish = Timer + delaytimeIf loopfinish secondsinday Thenloopfinish = Timer - delaytimeDo While Timer loopfinishLoopEnd IfDo While Timer = 0 Thenf = f - Abs(y2 - y1)If x2 x1 ThenX = X + 1Picture1.Line -(X, Y), vbRedText2.Text = Text2.Text & Chr(13) & Chr(10) & Spa
40、ce(1) & n & Space(11) & “f = 0“ & Space(13) & “ +x“ & Space(11) & “f=“ & Format$(f, “#0.0“) & Space(12) & X & “,“ & YElseX = X - 1Picture1.Line -(X, Y), vbRedText2.Text = Text2.Text & Chr(13) & Chr(10) & Space(1) & n & Space(11) & “f = 0“ & Space(13) & “ -x“ & Space(11) & “f=“ & Format$(f, “#0.0“) &
41、 Space(12) & X & “,“ & YEnd IfElsef = f + Abs(x2 - x1)If y2 y1 ThenY = Y + 1Picture1.Line -(X, Y), vbRedText2.Text = Text2.Text & Chr(13) & Chr(10) & Space(1) & n & Space(10) & “ f = 0 Thenf = f - 2 * Y + 1Y = Y - 1Picture1.Line -(X, Y), vbRedText2.Text = Text2.Text & Chr(13) & Chr(10) & Space(1) &
42、n & Space(11) & “ f = 0“ & Space(13) & “-y“ & Space(11) & “f=“ & Format$(f, “#0.0“) & Space(12) & X & “,“ & YElsef = f + 2 * X + 1X = X + 1Picture1.Line -(X, Y), vbRedText2.Text = Text2.Text & Chr(13) & Chr(10) & Space(1) & n & Space(10) & “f 1 ThenGoTo againEnd IfLoopElseIf Option2.Value = True The
43、nIf X = x2 And Y = y2 ThenMsgBox “圆弧单步插补结束“clicktime = 0Exit SubEnd IfDo Until (X - x2) = 0 And (Y - y2) = 0n = n + 1If f = 0 ThenExit SubEnd IfPicture1.ClsText2.Text = “axis Picture1Picture1.Line (x1, y1)-(x2, y2), RGB(255, 0, 0)Picture1.Circle (x1, y1), 0.08, vbRedPicture1.Circle (x2, y2), 0.08, v
44、bRedEnd IfEnd SubPrivate Sub Command6_Click() 顺时针画圆弧Const pi = 3.14159265358979Dim r1, r2 As SingleDim n, m As SingleDim a, b As SingleIf Text1(0) “ And _Text1(2) “ Thenx1 = Val(Text1(0): y1 = Val(Text1(1)x2 = Val(Text1(2): y2 = Val(Text1(3)ElseMsgBox “请输入完整坐标!“Exit SubEnd IfPicture1.ClsText2.Text =
45、 “axis Picture1x1 = Int(Val(Text1(0)y1 = Int(Val(Text1(1)x2 = Int(Val(Text1(2)y2 = Int(Val(Text1(3)Picture1.Circle (x1, y1), 0.08, vbRedPicture1.Circle (x2, y2), 0.08, vbRedr1 = Sqr(x1) 2 + (y1) 2)r2 = Sqr(x2) 2 + (y2) 2)If r1 = r2 And x1 = 0 And y1 = 0 And x2 = 0 And y2 = 0 Thena = y2 / r1b = y1 /
46、r1m = arcsin(a)n = arcsin(b)If m n ThenPicture1.Circle (0, 0), r1, , m, nElsePicture1.Circle (0, 0), r1, , m, nEnd IfElseIf r1 = r2 And x1 = 0 And y1 = 0 And x2 = 0 Thena = y2 / r1b = y1 / r1m = pi - arcsin(a)n = arcsin(b)Picture1.Circle (0, 0), r1, , m, nElseIf r1 = r2 And x1 = 0 And y1 = 0 And x2 = 0 And y1 = 0 And x2 0 And y2 = 0 And Y1 = 0 And X2 = 0 And Y2 = 0 And (Y1) = (Y2) Then a = Y2 / r2b = Y1 / r1 m = arcsin(a) n = arcsin(b) If m n ThenPicture1.Circle (0, 0), r1, , m, n ElsePicture1.Circle (0, 0), r1 Picture1.Circle (0, 0), r1, , n, m End IfElseIf r1 =