




已阅读5页,还剩59页未读, 继续免费阅读
(机械设计及理论专业论文)网络化机械零件图库研究与开发.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 i 题题 目目: 网络化机械零件图库研究与开发 学学 科科: 机械设计及理论 作作 者者: 陈荣慕 签签 名名: 导导 师师: 吉晓民 职称:职称: 教 授 签签 名名: 答辩日期答辩日期: 摘摘 要要 网络技术的发展为企业增强自身的创新能力和市场竞争力提供了有利的条件, 利用网络技术实现资源共享和技术服务,对企业和服务商是一个双赢的方案。本文 正是基于上述考虑,进行网络化机械零件图库的开发,以便利用网络环境为广大制 造业企业提供技术服务。作者采用理论研究和软件开发相结合的方法开展工作,主 要研究了以下内容: 1研究了网络化机械零件图库的总体结构设计、用户权限管理的设计和数据 库维护方法; 2给出了机械零件分类的层次框架,在此基础上进行了数据库设计,对作为 web 服务器的 tomcat 进行数据库连接池配置, 用 javabean 对数据库操作进行类封 装,为服务器处理客户端的请求与数据库操作的关系奠定了基础; 3. 研究了客户端的 applet 和在服务器端的 servlet 之间的通信策略, 采用面向 对象技术构建两个类 httpconnappl、httpconnserv,用这两个类构建成通讯隧道, 实现了 applet 与 servlet 之间的信息交互,从而得出根据客户端的请求对服务器端 的数据库进行操作的方法; 4. 用 activex automation 技术实现 vb 调用 solid edge 的方法,研究了 solid edge 的变量化驱动技术,使得客户在客户端输入零件参数,能在服务器端的图形 服务器上得到所需要的零件三维图形; 5研究了 java servlet 与 vb 的联系方法及客户端的请求排队处理等问题,通 过在服务器端编制 vb 程序,实现了机械零件三维图形的远程生成。 上述几个方面的研究成果集成在一起, 形成了一个网络化的机械零件图形远程 生成系统。用户只需登录该系统,在系统提供的零件检索界面上检索所需要的零件 西安理工大学硕士学位论文 ii 并输入参数,即可得到该零件的三维实体图形。本文取得的上述成果,为用户得到 所需要的三维机械零件图形提供了十分便利的工具。本系统嵌入 asp 服务平台以 后,将会发挥更大作用。 关键词:关键词:网络化,零件图库,客户端,服务器,solid edge abstract iii subject: research databasename=asppartlib 西安理工大学硕士学位论文 22 第二步:配置 web.xml 打开 webapps/asppartlib/web-inf 下 web.xml,加入如下内容: db connection jdbc/partdb javax.sql.datasource container 第三步:配置 tomcat(添加类) 将 microsoft sql server 2000 driver for jdbclib 目录下的三个 jar 文件拷贝到 tomcat 安装目录的 commonlib 下。 3.3.2 jdbc 概述概述 jdbc 是一种用于执行 sql 语句的 java api。它由一组用 java 编 程语言编写的类和接口组成, 为 java 应用程序与各种不同数据库之间进 行对话提供了一种便捷的方法, 使得开发人员能够用纯 java api 来编写 具有平台无关性的数据库应用程序。 jdbc 的出现使 java 程序对各种数 据库的访问能力大大增强。通过使用 jdbc,开发人员可以很方便地将 sql 语句传送给几乎任何一种数据库。 数据源是在 jdbc 2.0 中引入的一个概念。在 jdbc 2.0 扩展包中定 义了 javax.sql.datasource 接口描述这个概念。datasource 对象除了将数 据库和专门的 jdbc 驱动程序信息封装到一个单独的、标准化的对象中 之外,还存储了建立数据库连接所需的所有信息,因此它可以作为 connection 工厂。 用户只需要提供一个数据源的逻辑名称 (logic name) , 就可以通过查询 jndi 服务,从数据源中获取相应的数据库连接。这个过 程就像通过指定文件名可以在文件系统中顺利地找到一个文件一样。 第 3 章 机械零件图库的开发 23 3.3.3 用用 javabean 对数据库操作进行类封装对数据库操作进行类封装 javabean 是用 java 语言编写的可重用的软件组件,编写 javabean 组件的方法同编写其他 java 类一样。在实际应用中,会有很多程序要访 问数据库,如果数据库要修改,哪怕仅仅是修改一下密码,也要修改所 有的程序。为了实现代码复用,一般是用 javabean 对数据库操作进行类 封装,这样在需要对数据库进行操作时只要调用这个类相应的方法就可 以了。用 javabean 对数据库操作进行类封装的代码如下: package dbpackage; import java.sql.*; import javax.naming.context; import javax.sql.datasource; import javax.naming.initialcontext; import java.util.*; public class dboperate private connection conn = null; private statement stmt = null; private preparedstatement pstmt = null; private context initctx=null; private context ctx=null; private datasource ds=null; public dboperate(string strresourcename) try initctx = new initialcontext(); if(initctx = null ) throw new exception(boom - no context); ctx = (context) initctx.lookup(java:comp/env); /*通过 jndi 名查找数据源*/ ds =(datasource)ctx.lookup(strresourcename); if (ds != null) conn = ds.getconnection(); 西安理工大学硕士学位论文 24 catch(exception e) public void setstmt() throws sqlexception public statement getstmt() throws sqlexception public void setpstmt(string sql) throws sqlexception public preparedstatement getpstmt() throws exception /*清空 preparestatement 对象中的参数*/ public void clearparameters() throws sqlexception public connection getconnection() public void setstring(int index,string value) throws sqlexception public void setfloat(int index,float value) throws sqlexception public int getrecordnum(string tablename) /获得表的记录个数 /*将表数据以 vector 形式存储,方便用在 jtable 的构造函数中*/ public vector getdatavector(string sql) /*将表的字段名以 vector 形式存储,方便用在 jtable 的构造函数中*/ public vector getcolnamevec(string tablename) /*获得表的关键字段名*/ public string getkeyname(string tablename) /*执行一般的查询 sql 语句*/ public resultset executequery(string sql) throws sqlexception /*执行有预处理功能的查询*/ public resultset executequery() throws sqlexception /*执行一般的更新 sql 语句*/ public int executeupdate(string sql) throws sqlexception /*执行有预处理功能的更新操作*/ public int executeupdate() throws sqlexception /*关闭数据库操作,释放数据库连接*/ public void close() 第 4 章 客户端与服务器端的通信机制 25 第第 4 章章 客户端与服务器端的通信机制客户端与服务器端的通信机制 为了实现客户通过 internet 检索服务器上的数据库和图库, 必须建立客 户端与服务器端的通信机制。sun 公司推荐的一种规范是在客户端用 applet、html 和 jsp,在服务器端用 enterprise javabeans 支持的 servlet 及其他成分。本章分别介绍 applet 和 servlet 技术及其在开发中的限制,并 探讨几种可以在 applet 和 servlet 之间传输数据的通信策略及其程序设计。 4.1 applet 简介 java applet 实际上是运行在 web 页面上的 java 程序。 它是一个继承 于 java.applet.applet 的 java 类,它通过引用被嵌入到 html 页面中去, 就像一个图像一样。applet 和 html 的组合,可以建立功能强大的动态 界面。 当在 web 页面中运行时,java 的 applet 被自动下载并由浏览器运行, 在页面为它们分配的空间中显示。从处理图形到显示动画,到处理控件、 文本域和按钮,它们可以做任何工作 。使用 applet 可以使你的 web 页面 成为主动的,而不是被动的,这是它们吸引人的主要方面。 由于 java 操作系统的平台无关性,使得 applet 可以运行在任何拥有 java 虚拟机(jvm)的浏览器上。sun 公司的 java 插件甚至可以使用最新 版本的 jvm 编制页面,而不用担心受用户浏览器上的 jvm 版本的限制。 因为 applet 是 java 平台的扩展,所以用 applet 建立 web 应用程序的 界面时,可以重用已存在的 java 组件,包括在 applet 的组件中使用复杂的 java 对象来开发本来由服务器端应用程序完成的工作。事实上,可以编写 既可以在 applet 上执行,也可以在应用程序内执行的 java 代码。 4.2 applet 的安全约束 applet 代码来自于 web 主机并在最终用户的浏览器中运行, 含有病毒 的 applet 可能会造成破坏。为了防止这样的 applet,它要求只可以与提 西安理工大学硕士学位论文 26 供这个 applet 的主机进行通信,而且不能操作最终用户的机器。它们不 能读写该用户的文件系统,不能执行上面的程序,也不能检查一些敏感 的环境参数。 (事实上,我们有一种方法可以回避这种限制,那就是开发 者可以利用数字签名的技术对 applet 进行标志,这将会询问用户是否可 以给予 applet 某种特殊的待遇,但这不是一个好的选择)此外,applet 不能建立或接受外来的 socket 连接。所谓外来的是指这个链接超出了提 供这个 applet 类文件的主机 (不是提供引用这个 applet 的 html 所在的 主机) 。 4.3 servlet 简介 java servlet 是服务器端的组件,它和 cgi 有很多相似之处。它可以 处理 web 请求,并返回数据或 html。java servlet 可以访问数据库,进 行计算,并和 enterprise javabean 这样的组件进行通信。与 cgi 程序不 同的是,servlet 是持久有效的,也就是说,它只要被示例一次就可以不 断地处理请求(这些请求很可能是同时发生的) 。因此,servlet 比 cgi 更高效。 servlet 运行在一个 servlet 引擎中,通常是在一个 web 服务器或应用程 序服务器上。和 applet 不同,servlet 不受安全约束的限制。因为 servlet 是完全在服务器上运行的,它具有所有操作系统所允许的性能。 servlet 可以用来很方便地建立在 applet 和 web 浏览器这样的客户端和 企业应用程序的核心之间的连接。对于客户端来说,向 servlet 发出的请求 与其他web请求并没有任何不同。 客户端通过一个url来接收返回的信息, 正如我们看到的那样,返回的信息并不一定只能是 html,实际上我们可 以通过 html 协议发送和接收任何类型的数据。 4.4 构造方法 一个企业级的应用程序可以有几种方法来构造 applet 和 servlet 的使 用。这里介绍三种不同的构造方法,并对它们的优缺点进行比较。 第 4 章 客户端与服务器端的通信机制 27 第一种方法如图 4-1 所示,它实际上只 使用了 applet 而没有使用 servlet。尽管 applet 受到安全模式的限制,但是 applet 还是可以使用像 jdbc、rmi 这样的协议来 访问象数据库、ldap 目录和 enterprise javabeans 组件这样的后端信息。这种方法 虽然看上去很简单,但会带来很多的问题。 首先, 这种安排要求将数据库用户名、 口令、 服务器标识等所有的访问信息直接嵌入到 applet 代码中,这样最终用户就有可能从类 图 4-1 双层结构的应用程序构造 文件中搜集到这些信息。此外,数据库或任何其他需要访问的系统都必须 在提供 applet 的同一台服务器上。这意味着服务器将不得不承担双重的负 担,它既是一个 web 服务器,也是一个数据库服务器。最后,用这种方法, 使用 web 服务器群集是不可能的或很困难的。 第二种方法是将与后端资源通信的事务封装到 servlet 中,而 applet 仅 仅用来处理前端的工作,如图 4-2 所示。在这种构造方法中,servlet 克服 了 applet 固有的安全约束, 并 用来控制 applet 访问企业信 息系统和事务逻辑。 当 servlet 接受到一个请求时, 它会在后 端数据库中查询信息、 执行计 算、 处理对代表 applet 的信息 的获取并作用于来自 applet 的信息。 这种方法的一大进步 是 applet/servlet 对可以分布 在一个后端 web 服务器的群集 图 4-2 三层结构的应用程序构造 上,所有与某一共享的数据库的通信都存在于后端。此外,使用 servlet 的 西安理工大学硕士学位论文 28 设计有助于设计的模块化、抽象应用程序的后端处理商业逻辑并提高设计 的灵活性。 第三种方法是围绕 enterprise javabeans 构建应用程序,此时 servlet 就 成了中间件,如图 4-3 所示。ejb 组件更有助于将商业逻辑从 servlet 中分 离出来, 并将其更加抽象。 在这种情况下, 一个 applet 与它的 servlet 通信, servlet 再与 ejb 组件通信。在应用程序构建中引入由 ejb 组件、servlet 和 前端的 applet/html 组成 的层次结构,可以提供最大 限度的弹性和性能。尽管这 样做必须付出复杂化和费用 的代价。 在本系统的开发中, 作者采用的就是这种方法, 但 组 件 技 术 采 用 的 是 javabean,相对 ejb 组件来 讲,javabean 较适用于系统 不大的场合,在这种场合下 图 4-3 多层结构的应用程序构造 它的运行效率较高。 4.5 通信策略的讨论 如果在前端使用 applet,在后端使用 servlet,那么需要执行 applet 和 servlet 的通信。因为 applet 受浏览器的安全模式的限制,使得在对一个 applet 存取数据和信息时并没有太多的选择,正如在前面提到的,不能读 取客户端的文件系统、不能运行客户端的程序。由于 applet 不是在服务器 上运行的,也不能访问服务器上的文件系统,只能建立运行在主机上的服 务的网络连接。 另外, 不要忘记应用程序是在一个公开的 internet 上发布的, 防火墙可能会限制通过 http 到 servlet 或其它 web-server 模块的会话。 事 实上,因为 applet 本身就是在网络上通过 http 发布的,所以必须准确把 第 4 章 客户端与服务器端的通信机制 29 握通信的策略。 在客户端的applet 和服务器端的servlet 之间的网络连接是可以使用的 唯一通信路径的情况下, 可以有几种方法实现applet 与servlet之间的通信: 采用http隧道技术; 采用socket建立双向通信; 远程方法调用rmi; 公用对象请求代理体系 corba 等。当应用程序需要双向的、持续的连 接时,通过 socket 进行通信的方法较为适用;如果服务器端要执行大量的 操作,可以考虑使用 rmi;对于使用混合语言开发的应用来说,corba 较 为适用;当然在一般场合下,采用 http 隧道技术是一个很好的选择。在 本系统的开发中, 采用的是 http 隧道技术, 相对其它几种方法来讲, http 隧道技术是最简单的,效率也很高。 在开发过程中,本文采用面向对象技术构建两个类 httpconnappl、 httpconnserv,用这两个类构建成通讯隧道,实现 applet 与 servlet 之间的 信息交互。由于在信息交互过程中,applet 与 servlet 之间传递数据的类型 和长度都不确定, 因此让 vector 对象作为 applet 与 servlet 之间传递的对象 是一个不错的选择。 类 httpconnappl 的实现代码如下: package tunnel; import .*; import java.io.*; import java.util.vector; public class httpconnappl private url servleturl=null; private urlconnection conn=null; private objectoutputstream out=null; private objectinputstream in=null; private vector message=new vector(); public httpconnappl() 西安理工大学硕士学位论文 30 /*applet 向 strurl 指定的 servlet 传送数据包(即 vector 对象)*/ public synchronized void send(string strurl,vector vec) try servleturl=new url(strurl); conn = servleturl.openconnection(); conn.setdooutput(true); conn.setdoinput(false); conn.setusecaches(false); out=new objectoutputstream( conn.getoutputstream() ); out.writeobject(vec) ; out.flush() ; out.close(); catch(exception e) /*applet 向 strurl 指定的 servlet 传送数据包(即 vector 对象), 同时接收从该 servlet 传来的数据包(即 vector 对象)*/ public synchronized vector sendandreceive(string strurl,vector vec) try servleturl=new url(strurl); conn = servleturl.openconnection(); conn.setdooutput(true); conn.setdoinput(true); conn.setusecaches(false); out=new objectoutputstream( conn.getoutputstream() ); out.writeobject(vec) ; out.flush() ; out.close(); in=new objectinputstream(new 第 4 章 客户端与服务器端的通信机制 31 bufferedinputstream(conn.getinputstream(); message = (vector)in.readobject() ; in.close(); catch(exception e) return message; 类 httpconnserv 的实现代码如下: package tunnel; import .*; import java.io.*; import javax.servlet.http.*; import java.util.vector; public class httpconnserv private objectoutputstream out=null; private objectinputstream in=null; private vector message=new vector(); public httpconnserv() /*servlet 接收从 applet 传来的数据包(即 vector 对象)*/ public synchronized vector receive(httpservletrequest request) try in =new objectinputstream(request.getinputstream() ; message=(vector)in.readobject() ; in.close(); catch( exception e) 西安理工大学硕士学位论文 32 return message; /*servlet 将数据包(即 vector 对象)传给 applet*/ public synchronized void send(httpservletresponse response,vector vec) try response.setcontenttype(applcation/octet-stream); out=new objectoutputstream(response.getoutputstream(); out.writeobject(vec); catch( exception e) 在开发过程中,通过使用上述两个类,不仅实现了 applet 与 servlet 之 间高效、简洁的信息交互,而且使软件的层次结构更加清晰,同时也加速 了系统开发过程,提高了开发效率。 第 5 章 solid edge 的 vb 驱动 33 第第 5 章章 solid edge 的的 vb 驱动驱动 在本系统中,solid edge 作为图形服务器,在服务器端运行,而同时 在服务器端与图形有关的图形代理程序是用 vb 开发的。为此,在服务 器端的程序开发中,还需要建立作为图形服务器的 solid edge 和作为图 形代理程序的 vb 程序之间的联系。本章首先介绍用 activex automation 技术实现 vb调用 solid edge 的方法, 其次介绍在 vb环境下对 solid edge 的变量化驱动及其在本系统中的应用。 5.1 activex automation 技术技术 activex automation 是 microsoft 公司提出的一个基于 com 的技术 标准,以前被称为 ole 技术,其宗旨是在 windows 系统的统一管理下, 协调不同的应用程序,准许这些应用程序之间相互沟通、相互控制。每 个应用程序可以决定哪些信息可暴露出来而被其它程序操纵。 activex automation 技术通过在两个程序间安排对话, 达到一个程序 控制另一个程序的目的,但这种对话不是双向的,对话双方也不是平等 的。客户程序(client)是开始要求对话的应用程序,服务程序(server)是响 应 client 的应用程序。activex automation 的代码在 client 上运行,而这 些代码所控制的动作由 server 执行。 一个应用程序控制另一个应用程序的一般过程是:首先,一个应用 程序决定引发 activex automation 操作,这个应用程序自动成为 client, 被它调用的应用程序成为 server。server 收到对话请求后,决定暴露哪些 对象给client。 在给定时刻, 由client决定实际使用哪些对象。 然后activex automation 命令被传给 server,由 server 对这命令做出反应。client 可以 持续地发出命令,server 忠实地执行每一条命令,最后由 server 提出终 止对话。 这里将 solid edge 理解为一个服务程序(server),而二次开发出来的 西安理工大学硕士学位论文 34 程序为客户程序(client)。用户只要在客户程序上进行操作,客户程序将 驱动 solid edge 完成相关的工作,用户无需全面掌握 solid edge。 5.2 solid edge 的对象层次结构的对象层次结构 对象之间一般通过被称为对象模型或者对象层次结构的形式互相联 系。只有很好地理解各种构成自动操作界面的层次结构,才能顺利地进 行 solid edge 的二次开发工作。 solid edge 的对象层次结构可以描述为自 上而下的树结构,其根结点对象通常是一个应用。solid edge 拥有四种工 作环境:零件(part)、钣金(sheet metal)、装配(assembly)和工程图(draft), 其中,零件和钣金共用一个对象层次结构,而装配和工程图分别拥有各 自独立的层次结构。简化的 solid edge 层次结构如图 5-1 所示。 图 5 -1 简化的 solid edge 对象层次结构 5.3 activex automation 的使用方法的使用方法 5.3.1 application 对象对象 visual basic 提 供 两 个 函 数 调 用 solid edge : createobject 和 第 5 章 solid edge 的 vb 驱动 35 getobject。createobject 方法用于新建应用对象的实例,getobject 则既 可以新建一个对象实例,又可以连接到一个已存在的实例。 5.3.2 document 对象对象 在使用 createobject 和 getobject 来驱动 solid edge 的应用时,该应 用不会自动创建文档对象,必须使用文档集合对象的 add 方法来建立一 个文档对象。add 方法是有参数的,该参数用来确定所创建的文档对象 类型或者要使用的模板:如果参数为空,程序将会提示用户选择一个模 板。下面语句在新建的应用中建立了一个零件文档对象。 set objapp=getobject(,“solid edge.application”) set objdocument=objapp.documents.add(“solid edge.partdocument”) 5.3.3 参考元素参考元素 solid edge 的参考元素包括参考平面和参考轴。在零件、钣金和装配 环境中均存在参考平面。零件建模时,必须在创建轮廓前定义参考平面 (refplane 对象),相应的集合对象refplanes 提供了多种定义参考平 面的方法,这些方法大致相当于交互环境中使用的参考平面命令。 addparallelbydistance创建重合或平行的参考平面。其中,重合 的参考平面是偏移值为零的特殊的平行参考平面。 addparallelbytangent创建与一条曲线相切的平行参考平面。 addangularbyangle创建倾斜或垂直的参考平面。其中,垂直参 考平面是倾斜参考平面的特例,其倾斜的角度为 90。 addnormaltocurve和addnormaltocurveatdistance在零件边的 法线方向创建参考平面。在采用 addnormaltocurve 方法时,如果边是封 闭曲线,则平面位于曲线的起点,addnormaltocurveatdistance 方法把 平面放在起点的指定的偏移位置。 参考轴定义了回转特征的回转轴,它通常是在草图环境下,当用户 定义回转轮廓时创建的。在编程自动操作时,可以使用参考轴集合对象 refaxes 和实例对象 refaxis 在模型中控制参考轴。例如,将一条直线设 西安理工大学硕士学位论文 36 置为旋转轴的方法为: set objrefaxis=objprofile.setaxisofrevolution(lineforaxis:=objline) 5.3.4 创建轮廓创建轮廓 二维轮廓是生成三维特征的基础,通过编程来创建轮廓,需按以下 步骤进行: (1) 创建一个空的轮廓对象。 (2) 绘制几何图形来定义轮廓的形状。 (3) 利用 relations2d 集合对象支持的任何一种 add 方法, 设置几何图 形间的关系。这里唯一需要建立的是关键点之间的关系,使各元 素的端点首尾相接。 (4) 在几何图形上设置必要的尺寸。 (5) 使用 end 方法验证轮廓的有效性。基于有效性评判原则,系统检 查生成的轮廓是否有效。 5.3.5 创建特征创建特征 在编程自动创建特征时,必须首先采用拉伸或旋转的方式创建基本 特征,然后在此基本特征基础上创建后续特征,从而完成模型的定义。 用模型集合(models)中的 add 方法可以创建模型对象(model),第一次使 用模型集合中的add方法还可以创建基本特征, 而使用特征集合(features) 中的 add 方法可以创建后续的特征。需要注意的是:尽管用来创建基本 特征的 add 方法属于模型集合对象,但基本特征本身并不属于模型对象, 而是特征集合(features)的成员。 下面的例子,首先创建拉伸基本特征,将二维轮廓拉伸为三维实体, 然后对该实体再创建倒角特征。 set objmodel=objdoc.models.addfiniteextrudedprotrusion (profile,profileside,profileplaneside,depth) set objedges=objmodel.extrudedprotrusion(1).edges(edge type :=igquery all) set objchamfer=objmodel.chamfers.addunequalsetback() 第 5 章 solid edge 的 vb 驱动 37 5.4 solid edge 的变量表访问与修改的变量表访问与修改 在 solid edge 中参数化建模可以通过两种方法来实现,第一种方法 是完全用程序来实现,模型的建立、参数变量的设计和参数间约束关联 情况都是由程序来编写实现,这种方法的编程工作量较大,适合建立比 较简单的模型。第二种方法是先画好零件模型,同时模型要赋予完整的 几何约束,然后用程序来操纵零件模型的变量表,变量表修改后零件模 型自动重新生成,得到所需尺寸的零件图。这种方法的编程工作量小, 可建立结构复杂的模型,但模板文件会占用较大的硬盘空间。综合考虑, 本系统采用第二种方法来开发。 solid edge 模型包含变量表, 变量表中有特征尺寸变量和设计者自定 义变量,变量间可建立函数关系,改变变量表数值,三维模型自动更新。 程序通过控制变量表就可实现对三维模型的控制。变量对象的层次结构 如图 5-2 所示。 图 5 -2 变量对象的层次结构 5.4.1 变量集合变量集合 所有对变量的自动操作都要通过访问变量集合(variables)和变量对 象(variable)来实现。变量集合有两大功能:创建和访问变量对象以及把 尺寸作为变量。 西安理工大学硕士学位论文 38 变量集合支持采用 add 方法创建变量对象,还支持采用标准方法遍 历集合中的成员。下面的例程用以连接变量集合,创建三个新的变量, 并且列表表示它们。 dim objapp as object dim objvariables as object dim objvariable as object set objapp=getobject(,“solid edge.application”) set objvariables=objapp.activedocument.variables call objvariables.add(“var1”, “6”,igunitdistance) call objvariables.add(“var2”, “7cm”) call objvariables.add(“var3”, “var1* var2”,igunitarea) for each objvariable in objvariables debug.print objvariable.name process process =rt.exec(strexepath); try process.waitfor(); catch(exception e) 其中 strexepath 是 exe 程序名(同时要指出它所在的路径),在这里把 strexepath 定义为 string 对象,runtime.getruntime()返回当前应用程序的 runtime 对象, 该对象的 exec()方法指示 java 虚拟机创建一个子进程执行指 定的 exe 程序,并返回与该子进程对应的 process 对象实例。通过 process 可以控制该子进程的执行或获取该子进程的信息。 用 process.waitfor() 这一 条语句,是要等待子进程(即二次开发出来的 vb 程序)完成后,才让程序再 往下执行。 西安理工大学硕士学位论文 42 6.2 用户请求的排队处理用户请求的排队处理 由于让 java servlet 创建一个子进程执行指定的 vb 可执行程序需要几 秒钟的时间,而该过程一次只能由一个用户来执行,但在这几秒钟时间系 统可能会收到较多用户的请求,因此需要对用户请求进行排队处理。排队 处理是按优先级的数值确定的,而优先级的数值是根据用户权限的高低和 等待时间的长短来计算的。若某用户请求的优先级最高,则他得到执行上 述过程的权利,其他用户则需要等待。还需要考虑的一种可能性是,即使 某用户请求的优先级最高,如果已有用户正在执行,他也需等待到该用户 执行结束才能得到执行的权利。要注意的是,对用户请求优先级每一次排 队,都有可能让最高优先级拥有者发生改变,这次是甲,下次可能是乙。 为了能够实现上面的过程,需要编制一个 applet 程序,它用来计算用 户的优先级数值和向 servlet 程序发出请求并完成其它处理工作。该 servlet 程序(简称为 queueservlet)要接收绑定在一起的各用户信息,建立起用户队 列,对用户优先级进行排队处理,同时要适时地对用户队列进行一系列相 关操作。另外还要编制一个 servlet 程序(简称为 driveservlet),把用户所请 求的零件相关参数信息写入文本文件中,之后创建一个子进程执行指定的 vb 可执行程序并完成其它处理工作。 applet 相关程序流程图如图 6-1 所示, 而 queueservlet 程序流程图如图 6-2 所示。 在 driveservlet 程序中要判断创建一个子进程执行指定的 vb 可执行程 序这一过程是否正在进行。由于 web 服务器一启动就加载 servlet 程序,对 于 driveservlet 程序,web 服务器为它创建了类 driveservlet 的一个实例, 而且在 web 服务器本次运行期间,只有这一个实例。虽然只有一个实例, 但 web 服务器对每一个请求创建一个新的线程,并调用类 driveservlet 相 应方法来处理。因此,要判断上述过程是否正在进行,需要在程序中设置 一个判断变量,它同时是类 driveservlet 的私有数据成员,初始值是没有用 户在运行上述过程,即程序刚被加载时创建实例的初值。 第 6 章 web 服务器与图形代理的通信 43 图 6-1 applet 相关程序流程图 西安理工大学硕士学位论文 44 图 6-2 queueservlet 程序流程图 当有用户请求时,程序要为该用户判断是否已有其他用户正在执行上 述过程。如果没有用户在执行的话,那么就改变判断变量的值,设置为正 第 6 章 web 服务器与图形代理的通信 45 在进行,然后写文件,创建一个子进程执行指定的 vb 可执行程序,当这 一过程结束的话,就又改变判断变量的值,设置为结束,然后退出该程序。 6.3 轴类零件的远程交互设计轴类零件的远程交互设计 轴类零件作为常用件,其形状不确定,大小没有标准,是机械行业绘 图工作量相当大的一类零件。本文开发了通用的轴类零件三维图形生成程 序,作为图形代理程序的一部分,它要部署在服务器的相对目录上。 采用本系统,用户在 asp 环境下远程生成轴类零件的过程是:用户 登录系统后,直接在系统提供的参数输入界面输入参数,向服务器提交请 求, web 服务器收到请求后, 提取出用户所要请求的零件以及参数信息, 并封装成数据包转发给图形代理;当图形代理收到 web 的零件请求时, 先从数据包中解析出所请求的零件以及参数信息,然后驱动 solidedge 动态生成用户所需要轴的零件图,存放在 web 服务器的某个路径下,以 供用户下载。 轴可以看成是由普通轴段、螺纹轴段、花键轴段和锥形轴段随意组合 拼装,上述任何轴段必须包括轴的基本信息(直径、长度等),可以有左右端 倒角或圆角、键槽、环槽、横孔等附加信息。 要让用户能够直观地进行交互设计,系统可以指导用户按照自己的意 图设计修改轴的二维图。轴的二维图在线设计采用 java2d 图形包开发,它 为用户提供一个设计的平台。由于轴基本上是由螺纹轴段、普通轴段、锥 形轴段、普通轴段和花键轴段等组成,因此用户在设计时,只要根据平时 画轴的思路,一步一步地选择相应轴段类型,进入轴段参数设计对话框, 填入设计参数,确认后即可在绘图框内生成相应轴段。若用户发现绘图框 内某个轴段设计不合理,可单击或双击该轴段,该轴段颜色变为红色,表 示该轴段被选中,此时用户再单击修改按钮,轴段参数设计对话框保留有 该轴段的原来信息,用户可在原来的基础上进行修改,若要删除某轴段, 用户可先选中该轴段,再点击删除按钮,则它的下一轴段相应地代替它的 西安理工大学硕士学位论文 46 位置,与它的上一轴段连接在一起。用户设计完毕后,点击完成按钮,系 统就把用户所设计轴的参数信息封装成数据包转发给存储在 web 服务器上 的vb可执行程序, 由它来驱动图形服务器solid edge生成用户所需要的轴。 轴的参数信息有序完整地记录了各个轴段的信息。在用 vb 编制图形 代理程序时,先采用拉伸或旋转的方式创建各个轴段的基本特征,然后在 此基本特征基础上,创建后续特征从而完成轴的定义。其中轴段的基本特 征描述了轴段的长度和直径,而后续特征是指键槽特征、环槽特征、倒角 特征、圆角特征、横孔特征、螺纹特征、花键特征、锥形特征等。在编写 程序时,将这些后续特征做成一个个函数模块。譬如要想让程序能够创建 轴的所有键槽特征,只要知道键槽在哪一个轴段上、键槽相对该轴段的位 置(通常键槽的位置尺寸是这样给出的), 就可以方便地计算出键槽
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国家事业单位招聘2025中国农业科学院植物保护研究所农药环境风险评估及控制创新任务科研助理笔试历年参考题库附带答案详解
- 台州市2025年浙江天台县委政法委下属事业单位选聘工作人员笔试历年参考题库附带答案详解
- 仓山区2025福建福州市仓山区委宣传部编外人员招聘1人笔试历年参考题库附带答案详解
- 2025陕西建工新能源有限公司校园招聘(27人)笔试参考题库附带答案详解
- 2025辽宁沈阳地铁集团有限公司所属公司招聘11人笔试参考题库附带答案详解
- 2025福建省船舶工业集团有限公司招聘5人笔试参考题库附带答案详解
- 2025年芜湖城市园林集团股份有限公司招聘30人笔试参考题库附带答案详解
- 2025年湖南长沙振望投资发展有限公司招聘8人笔试参考题库附带答案详解
- 2025年榆林市公共交通总公司招聘(57人)笔试参考题库附带答案详解
- 2025年山东电工电气集团有限公司社会招聘(44人)笔试参考题库附带答案详解
- 世界避孕日培训
- 政务摄影培训课件模板
- 职业健康卫生培训课件
- 快递行业包裹分拣操作流程模拟题
- 辅助生殖妊娠营养干预
- 模块六 点的投影(课件)-中职高考《机械制图》一轮复习(高教版第5版)
- 健康素养促进项目课件
- 2024湘美版小学书法三年级上册教学设计(附目录)
- 固定摊位合租协议书
- 2025年国企人力资源管理岗招聘考试真题卷(含岗位说明书)
- 中国药典2025年版1~4部目录
评论
0/150
提交评论