4.1系统开发目标

  建立一个集设计、选型、建模、出图为一体的某机械设备CAD系统。最终实现通过修改某机械设备的主要参数自动生成一套新的某机械设备三维实体模型和工程图的目的。 

4.2 系统开发环境与工具

硬件环境 :图形工作站,内存4G,要求配有图形加速卡,显示1024*768,USB接口、光驱和其他外部设备

软件环境:操作系统为Windows XP/Win2000/NT 等。主流三维实体造型软件SolidWorks2011或更高版本,面向对象的Visual Basic6.0作为二次开发工具,Access 提供后台数据支持。

4.3 系统架构及系统工作流程

4.3.1 系统架构

                过渡界面

                主界面

总体设计参数                    总体布置

        结构件        运行机构        起升机构        标准件  通用件

      桥架 小车架  设计选型模块 模型模块 设计选型模块 模型模块 

4.3.2 系统工作流程

    设计模块

总体布置  装配体设计  零件设计  更新零部件模型  更新装配体模型  更新工程图

     标准件 通用件

4.4  系统设计

  某机械CAD系统对机械设备的设计是自上而下的,首先确定大的总体布置尺寸,再确定部件尺寸,最后确定零件尺寸。模型更新于此相反先要更新零件模型,最后才能更新部件模型。在上级窗口中确定了大的装配尺寸,将被引用到下级窗口,并且不允许在下级窗口修改,从而保证整机设计的系统性。

  历次设计记录表为全程支持的,只要系统运行,它就处于打开状态,用来存储主梁、通用件、标准件的记录号、及其他子窗口的界面数据。有了它的支持您的设计不必一次完成,每次从新打开系统都可以继续您上次未完成的设计,不必担心从新开始。

      标准件、通用件库的支持使得设计选型更加方便,在其他程序界面可以直接调用标准件和通用件界面,选取标准件或通用件。标准件和通用件界面同时可以完成数据库完善的功能,可以不断增加新的记录。

4.4.1 程序启动界面设计及编程

      当主程序载入时,屏幕显示启动界面,下拉式探出,待整个主程序都载入内存,即消失。通过时钟控制窗口高度来实现下拉式弹出效果,根据判断主窗口显示状态决定是否卸载启动窗口。

 Option Explicit ‘强制变量声明

 Private Sub Form_Load()

 Timer1.Interval=10

 Timer1.Enabled=True

  guodu.Height=100

 End Sub

 Private Sub Timer1_Timer()

 If(guodu.Height<4395) Then

       guodu.Height=guodu.Height+65 ' 控制窗口的高度递增

 Else

        MDIForm1.Show

        If MDIForm1.WindowState=2 Then   '如果主程序加载完成,则卸载启动窗口

                 Timer1.Enabled=False

                  Unload Me

        End If

 End if 

 End Sub

 4.4.2 主界面设计及编程

4.4.2.1 主界面设计

      主界面是机械CAD系统的最主要的人机接口,其友好程度将直接影响到该系统的使用性能。

      程序主窗口为MDI窗口,分四个区:菜单区、工具条区、视图区、状态栏区。由以下控件组成:菜单栏、工具栏、状态栏、Picture控件、按钮、eDrawing控件、Imagelist控件。

     1) 菜单栏主要内容主要实现各模块调用功能:

       总体设计   :系统设计,设计参数,总体布置,小车布置,预览模型,退出

  桥架结构:主梁,端梁,中间梁,轨道 

       运行机构:大车运行机构,小车运行机构-〉设计选型;模型与图纸

  起升机构:主起升机构,副起升机构->设计选型,机构布置,卷筒组,定滑轮装置,吊钩组

  小车架:总体布置,主起升主梁,小车架端梁

  标准件:轴承,联轴器,螺栓,螺母,平垫圈,弹簧垫圈

  通用件:轴承座,车轮、减速器、制动器、起升电机、运行电机

       帮助:帮助主题,关于

  2)工具栏共有7个快捷按钮,提供连接到主梁、端梁、中间梁、大车运行机构、小车运行机构、主起升机构、副起升机构模块的快捷方式。

  3)视图区主要完成模型预览的功能。由两个Picture 控件分成两部分,右边的部分分为模型显示区,左边部分为模型视图控制区,共有6个按钮完成主视、俯视、左视、等轴测、适应屏幕、关闭等视图转化控制。同时,可以通过鼠标动态旋转模型,通过鼠标中间滚轮放大缩小视图,通过鼠标右键菜单有更多试图选项,试区界面是共用界面,还可以被其他模块界面调用,以便观察模型生成后的效果,如运行机构,起升机构等都会调用此界面。

  视图区的功能在很大程度上依靠eDrawing控件。对eDrawing控件做简要说明。eDrawing应用程序是随同SolidWorks一同发行的应用软件,给您提供生成、观阅、及共享您的3D模型和2D工程图的威力。

  eDrawings应用程序编程接口(API)是一个针对eDrawings的OLE编程接口,作为MicrosoftActiveX控件来实现。可以使用eDrawingsAPI来自定义eDrawings Viewer. 创建交互式网页和转换文件。该API中包含可通过VisualBasic(VB)调用的函数。这些功能提供了到eDrawings环境的直接访问途径。在VB环境下将eDrawings Controls 引入,即可将eDrawings作为一个控件使用,并通过API函数来访问或直接控制eDrawins.

        视图区并非一直出现在程序主界面上,而是在有模型显示需要时才出现,同时又考虑到它将被不同的模块所调用所以由两个公共函数来控制视图区的出现和隐藏,分别是 printmodel(str) ,Closemodel(str) ,以公共函数的形式写在Moudle1模块里。

  4)状态栏用于显示操作提示和状态信息。

 4.4.2.2 主界面编程

  基本思路:

  程序分MDIForm1窗体程序代码和Model1模块程序代码。MDIForm1主窗体代码完成的主要功能是:建立系统数据库的连接;建立与SolidWorks主程序的连接;打开历次设计记录表;调整窗口中各部件的位置、初始化界面;指定菜单栏、工具栏的单击事件,指定状态栏的显示内容。Model1模块代码里主要存放整个系统软件共用的公共变量,公共函数等。

       1)主窗体MDIForm1的窗体代码:   

  Private Sub MDIForm_Load() '界面初始化

       Picture1.Visible=False

       Picture2.Visible=False

       Me.StatusBar1.Panels(1).Text="机械设计"

  Me.StatusBar1.Panels(2).Text="日期:"+Format(Date,“yyyy年mm月dd日”)

       Set swApp=CreateObject("Sldworks.Application")  '建立与SolidWorks主程序的连接

  Set conn=New ADODB.Connection   '建立系统数据库连接

  conn.ConnectingString="Provider=microsoft.jet.oledb.4.0;data source=" & App.Path &"\某机械设计.mdb"

       conn.Open

       Set rs=New ADODB.Recordset   '定义记录集对象

  rs.CursorLocation=adUseClient

       rs.Open "历次设计记录",conn,adOpenStatic,adLockOptimistic

       rs.MoveLast

  End Sub

       当窗口大小发生变化时应该自动调整主窗口内各控件的位置,以使各个控件都在窗口内,由MDIForm_Resize()函数完成这个功能。

  Private Sub MDIForm_Resize()

       Picture1.Width=Me.Width * 1/5

       Picture2.Width=Me.Width - Picture1.Width

       EModelViewControl1.Width=Picture2.Width

       EModelviewControl1.Height=Picture2.Height
        ....

       End Sub

       菜单栏是主要的程序入口,由他完成各个模块的调用,菜单栏组织的是否合理将直接影响系统的使用,当菜单项被单击时触发单击事件完成各模块的调用功能。

  Private Sub menu1_Click()   '系统设计

        xtsj.Show

  End Sub

       六个视图控制按钮,完成视图的转换,以便从各个角度观察模型。在按钮的单击事件里为eDrawing控件的ViewOrientation 项指定不同的值便可实现视图的转换,以左视图为例:

  Private Sub Command5_Click()   '左视图

       MDIForm1.EModelViewControl1.ViewOrientation=eMVOrientationLeft

  End Sub

       工具栏是指向各模块的快捷方式,可以在很大程度上增加系统的易用性,由Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button)实现其功能。当工具拦的按钮被单击时,首先判断按钮的关键字,根据关键字决定要执行的语句,实现对其他模块的调用功能。

  Private Sub Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button)

        Select Case Button.key

        Case "zl"

                 zl1.Show   '主梁模块

        end Select

       End Sub

       退出系统时,要关闭数据库,关闭SolidWorks应用程序,释放变量。由窗口卸载事件MDIForm_Unload(Cancel As Integer)完成这些功能。

       Private Sub MDIForm_Unload(Cancel As Integer)

       rs.Close ' 关闭历次设计记录表

       Set rs=Nothing

       conn.Close   '关闭系统数据库

       Set conn=Nothing

       swApp.exitapp   '退出SolidWorks应用程序

       Set swApp=Nothing

       End Sub

       2)Moudle1 模块主要代码。在Moudle1模块里主要完成整个系统公共变量、公共函数的定义。

         (1)定义公共变量

         Option Explicit

         Public conn As ADODB.Connection    '数据库连接对象

         Public rs AS ADODB.Recordset   '历次设计表记录对象

         Public rss As ADODB.Recordset    '主梁模型关键数据表记录对象

         Public swApp As Object                  'SolidWorks主程序连接对象

         ...

         (2) printmodel(str)  公共函数

         Str为字符型变量,用于传递要显示模型的存储目录。 

         功能:显示视区界面,表现模型重建后的效果。

  Public Sub printmodel(str As String)

       MDIForm1.menu1.Enabled=False

       MDIForm1.menu2.Enabled=False

       ....

       MDIForm1.EModelViewControl1.OpenDoc str,True,True,False,""

       End  Sub

       (3) closemodel(str)  公共函数

  str 为字符型变量,用于传递要关闭显示模型的目录。

  功能:关闭视区界面

        Public Sub closemodel(str As String)

        MDIForm1.menu1.Enabled=True

        ...

        MDIForm1.EModelViewControl1.CloseActiveDoc str

        MDIForm1.Picture1.Visible=False

        MDIForm1.Picture2.Visible=False

        End Sub

        (4)read(r1.r2.form) 公共函数

         r1为数据表的记录集

         r2整形变量,从第r2个字段读出内容;

        form为窗口指针变量,用于传递所要操作的窗口。

        功能:从数据表的第r1条记录的第r2个字段读出内容,按对应关系给form窗口的所有text控件赋值

        Public Sub read(r1 As ADODB.Recordset,r2 As Integer, Form As Form) 'r1记录 r2字段 form 窗口

        Dim i as single

        Dim j as single

        ...

        str1=r1.Fields(r2)

        j=1

        For i=1 to Len(str1)

              If (Mid(str1,i,1)<>"#")Then

                    temp=temp+Mid(str1,i,1)

              else

                    str(j)=temp

                    j=j+1

                    temp=""

              End if

        Next

         ....

   End Sub

      (5)Save(r1,r2,form)

          r1 为数据表的记录集

   r2整形变量,从第r2个字段读出内容

   from为窗口指针变量,用于传递所要操作的窗口。

   功能:按时应关系将form窗口所有text控件的值连接成特定的字符串,存储到数据表的第r1条记录的第r2个字段

           说明:第r1条记录的第r2个字段的属性为备注类型,以便能存储较长额字符串。

          Public Sub save (r1 As ADODB.Recordset,r2 As Integer, Form as Form)  ' r1 记录,r2字段 ,form 窗口

          Dim i as single

          Dim j as single

          ...

          For Each txt in Form.Controls

               If TypeOf txt Is TextBox Then

                      i=Mid(txt.Name,5,2)

                      if i>max Then 

                              max=i

                      End if 

                     ....

               End if 

          Next

          t1=StrComp(str1,r1.Fields(r2),vbTextCompare)

          If t1<>0 Then

               t1=MsgBox("界面尺寸已经被更改,确实要保存数据吗?",1,“数据更新”)

               ...

          Endif 

           End Sub

          (6)find(r1,r2,r3)

            r1为数据表的记录集

           r2整形变量,从第r2个字段读出内容

           r3整形变量,从字段中读出第r3个数值

           功能:从数据表的第r1条记录的第r2个字段读出第r3个数字内容

  Public Function find(r1 As ADODB.Recordset,r2 AS Integer, r3 As Integer) As string 

       Dim i as Single

       Dim j as Single

        ...

        temp=""

        str1=r1.Fields(r2)

        j=0

        if r3=1 then

                i=1

                 while(Mid(str1,i,1)<>"#")

                         temp=temp+Mid(str1,i,1)

                         i=i+1

                 WEnd

         Else

               for i=1 to Len(str1)

               If (Mid(str1,i,1)="#")Then

                    j=j+1

                    If (i>=r3-1)Then

                         Exit For

                    Endif 

               End if 

                next

                i=i+1

                While(Mid(str1,i,1)<>"#")

                       temp=temp+Mid(str1,i,1)

                       i=i+1

                 Wend

        endif

         find=temp

       End function

        (7) find1(str1,r3)

         str1 字符串变量

   r3整形变量

   功能:从字符串str1中找出第r3个数字,作为函数返回。

        Public Function find1(str1 as String, r3 as Integer) As string

         Dim i as Single

         .....

         Dim temp as string 

         temp=""

          j=0

         If r3=1 then

                i=1

                while(Mid(str1,i,1)<>"#")

                       temp=temp+Mid(str1,i,1)

                       i=i+1

                wend

          Else

           .....

        end if 

         find1=temp

        End function

posted on 2011-12-13 23:30  joyopod  阅读(606)  评论(0编辑  收藏  举报