版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章计算机辅助机械设计概述1.1机械设计过程
1.2软件技术概述1.3软件危机1.4软件工程概述1.5计算机辅助机械设计概述1.1机械设计过程
机械的种类很多,但其设计的基本要求大致相同,主要有以下几个方面:(1)实现预定功能。(2)满足安全可靠与强度、刚度和寿命等要求。(3)满足经济性要求。(4)满足操作和使用要求。
机械设计是一项复杂、细致和科学性很强的工作。机械设计过程也不是一成不变的。随着科学技术的发展,对设计的理解在不断地深化,设计方法也在不断地发展。就目前来说,机械设计的一般过程通常可分为以下几个阶段:
(1)产品规划。
(2)方案设计。
(3)技术设计(总体设计、结构设计)。
(4)试制及鉴定。图1-1机械设计的一般过程
设计机械零件的一般步骤如下:(1)根据机械零件的使用要求,选择零件的类型与结构。(2)根据机械的工作要求,分析零件的工作情况,确定作用在零件上的载荷。(3)根据零件的工作条件(包含对零件的特殊要求,例如耐高温、耐腐蚀等),考虑材料的性能、供应情况、经济因素等,合理选择零件的材料。(4)根据零件可能出现的失效形式,确定其计算准则,并通过计算,确定零件的主要尺寸。(5)根据零件的主要尺寸及工艺性、标准化等要求,进行零件的结构设计。(6)绘制零件工作图,制定技术要求。1.2软件技术概述1.软件的概念与特点“软件”一词是20世纪60年代出现的,其定义是计算机程序及其说明程序的各种文档。在该定义中,程序是一系列指令序列的集合,它能被计算机理解和执行。文档是指用自然语言或者形式化语言所编写的文字资料和图表,用来描述有关计算机软件的功能、内容、设计、测试结果、使用方法,如设计说明书、流程图、用户使用手册等。软件与硬件一起构成完整的计算机系统,它们是相互依存的,缺一不可的。软件是一种特殊的产品,它具有下列一些特点:
(1)软件是一种逻辑产品,它与物质产品有很大的区别。软件产品是看不见摸不着的,因而具有无形性。它以程序和文档的形式出现,保存在计算机存储器的磁盘和光盘等介质上,通过计算机的运行才能体现它的功能和作用。(2)软件产品的生产主要是研制,其成本主要体现在软件的开发上。软件开发完成后,通过复制就产生了大量软件产品。(3)软件产品不会用坏,不存在磨损、消耗问题。(4)软件产品的生产主要是脑力劳动,目前还未完全摆脱手工开发方式,大部分产品是“定做”的。
(5)软件费用不断增加,软件成本相当昂贵。软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,它的成本非常高。(6)开发周期长。大型软件从立项到交付使用,需几十人、几百人经过几个月甚至几年的时间。(7)开发、维护和使用人员不同。(8)多学科的综合。软件开发人员除了具有必备的软件知识外,还应该具有多方面的专业知识和经验。
2.计算机软件技术计算机软件技术是指开发计算机软件所需的所有技术的总称。按照软件分支学科的内容划分,计算机软件技术主要有以下几个领域:(1)软件工程技术。其中包括软件开发的原则与策略、软件开发方法与软件过程模型、软件标准与软件质量衡量、软件开发的组织与项目管理和软件工程工具及环境等。(2)程序设计技术。其中包括程序的结构与算法设计、程序设计的风格、程序设计语言、程序设计方法和程序设计自动化以及程序的正确性证明和程序的变换。
(3)软件工具环境技术。其中包括人机接口技术、软件自动生成、软件工具的集成、软件开发环境和软件的复用等。(4)系统软件技术。其中包括操作系统、编译方法、分布式系统的分布处理与并行计算、并行处理技术和多媒体软件技术。(5)数据库技术。其中包括数据模型、数据库与数据库管理系统、分布式数据库、面向对象的数据库、工程数据库、多媒体数据库以及数据仓库和数据挖掘等。(6)网络软件技术。其中包括网络软件技术、网络管理、局域网技术、网络互连技术和智能网络等。3.软件复用软件复用是指在构造新的软件系统的过程中,对已存在的软件产品(设计结构、源代码、文档等)重复使用的技术。软件复用有三个层次:知识的复用、方法的复用和软件成分的复用,前两个属于知识工程的范畴,这里只讨论软件成分的复用。软件成分的复用包括以下三个级别:(1)代码的复用,可以采用源代码剪贴、源代码包含和继承来实现。(2)设计结果的复用,是指复用某个软件系统的设计模型,适用于软件系统的移植。(3)分析结果的复用,是指复用某个软件系统的分析模型,适用于用户需求未改变,而系统体系结构变化的场合。1.3软件危机1.软件危机的概念计算机出现后的相当长一段时间内,人们在编制程序或开发软件系统时,往往一个人或几个人按照各自的习惯和经验来进行,这实际上是一种手工作坊式的生产方式。以这种方式研制的软件,其周期长、费用高,而且质量低下、可靠性得不到保证。到20世纪60年代中期,计算机进入集成电路时代,大批功能强大的计算机进入市场,高级语言蓬勃兴起,计算机应用迅速地渗透到各个科学技术领域。同时,程序的规模和复杂程度也急剧地增长,而程序设计仍停留在个体手工方式上。到20世纪70年代初,形成了所谓的“软件危机”。软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重的问题,其主要表现在以下几个方面:
(1)对软件成本、开发成本和开发进度的估计不准确;软件成本在计算机系统总成本中所占的比例逐年上升。(2)用户对“已完成的”软件系统不满意的现象时常发生。(3)软件产品的质量往往靠不住。(4)软件通常没有适当的文档资料,维护困难。(5)软件开发生产率的提高速度跟不上计算机应用的迅速普及和深入。
2.软件危机产生的原因
在1946年第一台计算机“诞生”以后的很长一段时间里,人们都是用计算机来编制一些小程序,解决一些“小问题”。随着计算机软硬件的发展,人们用计算机来解决的问题越来越多,程序规模也越来越大,而开发大型软件与编制小程序有一定的区别,具体体现在以下几个方面:(1)人员:小程序从确定要求、设计、编制、使用,直到维护,通常由一个人来完成;而大型软件则必须由用户、项目负责人、分析员、初级程序员、资料员、操作员等组成一支开发队伍来共同完成。(2)文档:小程序是编制者脑中的“产品”,很少有书面文档;而大型软件是集体劳动的“产物”,必须有规范化的文档,便于开发和维护。
(3)产品:小程序通常是一次性的,如果需要大的修改,可舍弃旧程序而重新编写;而大型软件的开发耗费了大量的人力与物力,轻易抛弃将造成很大的浪费,因此总是在旧软件的基础上对其进行改动,以延长它的使用期,所以其“版本”不断升级。大型软件的开发提出了许多新的问题,而开发方法却还停留在编制小程序的方法上,经验和技术已不能满足开发大型软件的需要,从而导致软件开发过程混乱。使用的开发方法和技术不当,没有适当的文档,不易交流,维护困难,开发成本高,软件质量低等等,这些问题是造成软件危机的主要原因。
3.软件危机的解决方法软件危机使人们认识到,当研制的软件规模日趋庞大时,问题变得越来越复杂。软件的研制和开发再也不能像以前那样了,必须立足于科学理论的基础,像生产产品、研制机器或建造楼房那样,以“工程化”的思想来指导软件开发,解决软件研制中面临的困难和混乱,从根本上解决软件危机。在技术上,以软件工程技术、程序设计方法和技术为基础,力求将软件工程与知识工程、人工智能技术结合起来,以构造基于知识的软件开发环境;在管理上,以管理学为依托,对开发人员、成本、项目、文档等加强管理,对软件开发全过程进行控制。
大型程序与小型程序相比,二者有本质的区别。小型程序规模小,程序不太长,一个人或几个人就能管理和控制其复杂性,因此可以在较短的时间内完成程序的编制并达到预期的效果。但大型程序的程序规模大,可由几十个、几百个模块组成,模块间的接口较为复杂,常常需要许多程序员工作很长时间才能完成。因此,大型程序具有程序设计工作量大、复杂程度高、研制周期长、可靠性低等特点。这样的程序往往是难以维护的,而且许多程序中的错误也难以纠正。人们对正确可靠的、可维护的软件系统的迫切需求与软件研制的手工作坊方式的矛盾日益尖锐化。为了解决这一矛盾,人们提出了软件工程的概念。1.4软件工程概述
软件开发不是某种个体劳动的神秘技巧,而是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。为了解决软件危机,既要有技术手段(方法和工具),又要有必要的组织管理和措施。软件工程正是从管理和技术两个方面,研究如何更好地开发和维护计算机软件的一门新兴学科。
软件工程是指导计算机软件开发和维护的工程科学。它采用工程的概念、原理、技术和方法来开发与维护软件。因此,在开发与维护软件过程中,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。软件工程强调使用软件生命周期方法学和各种结构分析及结构设计技术。所谓软件生命周期是指一个软件从定义、开发、使用和维护,直到最终被废弃所经历的一段漫长的时期。由于软件生命周期分为若干个阶段,每个阶段的任务相对独立和简单,因此软件研制可以用分工协作的方法来共同完成。在每个阶段采用科学的管理技术和良好的技术方法,结束时从管理和技术两个角度进行严格审查,合格后进入下一个阶段这样可以保证软件质量,提高软件的可维护性。
软件生命周期可分为三个时期,每个时期又可分成若干个阶段。软件生命周期模型见表1-1。表1-1软件生命周期模型
对表1-1中软件生命周期各阶段说明如下:
(1)软件计划:在设计任务确立前,首先要进行调研和可行性研究,理解工作范围和所花费的代价,然后作出软件计划。
(2)软件需求分析:对用户要求进行具体分析,确定用户要求软件系统做什么,并用软件需求规格说明书表达出来,作为用户和软件人员之间共同的约定。
(3)软件设计:根据需求说明建立软件系统的“结构”,包括数据结构和模块结构。它又分为总体设计和详细设计两个阶段。其中,总体设计决定系统的模块结构,给出模块的相互调用关系,产生软件概要说明书;详细设计则给出模块内部的细节及功能说明,产生详细的设计说明书。(4)软件编码:按软件设计的要求为每个模块编写程序。
(5)软件测试:发现和排除程序中留存的错误,经过测试并排除错误,得到可以交付运行的软件。软件测试又分为单元测试和综合测试两个阶段。
(6)软件维护:经过测试的软件仍然可能有错误,用户需求和系统的操作环境也有可能发生变化。因此,交付运行的软件仍然需要继续排查错漏、修改错误和扩充内容,这就是软件的维护。表1-2软件生命周期各阶段的任务
软件开发的手段,经历了从手工编码到使用支撑软件产品的自动化软件工具的变迁。现在,从软件的开发、运行到维护各阶段都有软件工具,这些工具形成了现代化软件工程环境的基础。软件工具是指可以用来帮助开发、测试、分析、维护其它计算机程序的程序以及文档资料的集合,它可以实现软件生产过程的自动化,提高软件的生产率、可靠性,降低软件的生产成本。软件工具在各种状况下都能被简单、方便地使用,能给软件的开发带来极大的方便。大型软件生产所使用的软件工具是一种自动化系统,包括需求分析工具、设计工具、编码工具、确认工具、维护工具等。比如,需求分析工具能够辅助系统分析员把用户所提出的含糊的用户说明,经过分析及一致性、完备性检查后,快速生成指导系统设计用的“需求规格说明书”及其相应的文档资料。设计工具能够依据输入的需求规格说明,自动设计出一系列软件设计文档,自动生成特定语言编制的程序,如各种应用程序生成器等。
尽管软件工具种类繁多、形式多样,但都只是用于软件生存周期中的某一个阶段或某一个环节,而不能对整个生命周期有效。为了能够给软件整个生命周期提供支持,于是出现了新课题:软件工程环境。软件工程环境(SoftwareEngineeringEnvironment,SEE)是指用以支持需求定义、程序生成以及软件维护等整个软件生命周期全部活动的,并把方法、规模和计算机程序集成在一起的整个体系。软件工程环境又称为软件开发环境、软件支撑环境、自动开发环境等。
软件工程环境的全部需求可以概括为:(1)集成化的系统;(2)通用的系统;(3)既可剪裁又可扩充的系统;(4)实用的、经济合算的系统。近几年来,软件工程领域中出现了一种新趋势,即将软件工程方法、工具与环境方面的新技术同形式化语义理论有机地结合起来,形成高水平的计算机辅助软件工程系统(ComputerAidedSoftwareEngineering,CASE)。这标志着软件开发技术的发展进入到了一个新阶段。1.5计算机辅助机械设计概述
1.计算机辅助机械设计软件开发需要解决的主要问题(1)软件功能的确定;(2)功能模块的划分;(3)软件开发平台(计算机语言)的选择;(4)功能模块的连接;(5)功能模块之间的数据传递;(6)设计资料的处理;(7)参数的输入、分析、判断和调整;(8)程序运行的安全保障。
2.计算机辅助机械设计软件的主要设计步骤
通常情况下,先列出手工设计步骤或整个详细的设计过程,据此确定软件设计步骤,具体过程包括以下几个方面:(1)熟悉设计的内容、要求、任务、适用范围和功能;(2)熟悉设计的计算准则、计算方法和数学模型;(3)熟悉设计的计算步骤、计算公式、参数符号及变量;(4)根据设计的计算内容、方法、步骤,绘出程序结构流程图;(5)确定功能模块的结构图;(6)逐个设计每个功能模块。
3.计算机辅助机械设计软件的设计方法1)选择开发平台选择开发平台,需要考虑具体的机械设计任务内容。一方面,机械设计任务内容比较复杂,比如,需要大量计算、查询大量的数表和线图,绘制零件工作图等;另一方面,每种计算机开发语言都有特长与不足,而且不同开发人员的基础各有差别。因此选择开发平台要综合考虑上述三方面因素。就开发语言来说,VC(VisualC)语言的功能最强大,适合开发操作系统软件及一些综合功能非常强大的软件,但学习这种语言要达到实战的程度,所需要的学习时间也最多。VB(VisualBasic)语言的功能不如VC的强大,但在计算功能方面最优秀,语法也贴近生活,简单易学,达到实战所需要的学习时间最少。VF(VisualFoxpro)的综合功能也不如VC,简单易学性虽说不如VB,但它的数据管理功能却是最强大的。VL(VisualLisp)在自动绘图方面则最优秀。这些可视化语言都比较流行,用这些语言开发的软件当然也会容易受到用户的欢迎。
为了便于选择,现把这几种语言的主要特点列于表1-3,供读者参考。表1-3几种可视化语言特点比较2)在单平台上开发软件时的设计要点在一种开发平台(比如VB)上完成全部设计内容,主要考虑以下几点:
(1)在弄清手工完成机械设计过程的基础上,确定软件的输入/输出参数及全局变量、全局过程或函数。
(2)分配窗体功能及其接收的输入/输出参数,并进一步确定所需窗体的总数及窗体变量。(3)从第一个窗体开始,根据窗体功能、窗体的输入/输出参数,进行窗体的外观设计,然后逐个确定并编写该窗体的每个事件过程以及每个一般过程或函数的代码,进行调试,排除所有错误后,再设计第二个窗体。在设计第二个窗体时,要确定第一、第二两个窗体的连接交替方法。将第一、第二两个窗体合起来调试,排除一切错误后,再设计第三个窗体,把这三个窗体合起来调试,依此类推,直至全部调试完毕。3)在多平台上开发软件时的设计要点
(1)在弄清手工完成机械设计过程的基础上,分配每个开发平台上应完成的功能,并确定所需的软件输入/输出参数。
(2)按照要点2),完成单平台上的开发任务,并通过编译,生成可在Windows环境下独立运行的可执行文件(扩展名为exe的文件)。根据功能模块结构图中确定的前后运行(调用)关系,在前后两个开发平台上分别编写程序时,都要协调考虑并确定在这两个平台上开发的可执行文件之间的数据相互传递的方法。
(3)将前后两个不同平台上编译的可执行文件合起来调试。
(4)将所有不同平台上开发的可执行文件合起来调试。4.课程教学基本要求
(1)熟练掌握机械设计所用的各种数表与线图(包括线图所围区域)的计算机处理方法。
(2)能够把手工机械设计过程正确地转化为计算机处理过程,能够正确地设计软件功能、划分功能模块、确定功能模块结构图。
(3)掌握用VB、VF、VL语言分别开发的可执行程序之间的接口技术,其中包括相互之间的正确调用和数据传递技术。
(4)初步掌握小型机械设计应用软件的开发方法。
(5)通过2~3周的课程设计,培养小型机械设计应用软件的开发能力。5.本课程内容设置原则
(1)着力于培养用计算机语言工具解决机械设计任务的能力。为此,根据手工“做”机械设计与计算机程序“做”机械设计这两种不同方法之间的相似点与结合点安排内容,循序渐进地强化了把手工“设计步骤”向“软件功能结构图”的转化方法、把手工的“已知与求解”向“软件的输入与输出”的转化方法。
(2)着力于强化机械设计工程数表与线图的处理能力。
(3)着力于强化过程模块、窗体模块、独立*.exe模块之间的数据传递技术的训练。
(4)着力于强化多平台组合式机械设计软件开发能力的训练。
6.本课程各章重点与难点
第1章计算机辅助机械设计概述,重点理解计算机辅助机械设计的概念、软件工程的概念。第2章机械设计数表处理,重点是机械设计数表的分类、各种类型数表的计算机处理方法;难点是容量较大的杂表、三维或多维函数表的处理。第3章机械设计图线处理,重点是机械设计线图的分类;各种线图的计算机处理方法。难点是对数坐标下的直线处理。第4章组合式软件设计,重点与难点是接口技术。
第5章普通V带传动计算机辅助设计,重点是软件功能模块结构的设计、数表的规则化、区域的处理(多根线包围的区域);难点是区域处理。第6章渐开线圆柱齿轮传动计算机辅助设计,重点是功能模块结构的设计、公差查询数据库的设计、不同平台开发的程序模块之间的数据传递技术;难点是数据传递技术。
7.说明(1)本书例程所用编程语言,如未加说明,均为VB6.0。(2)本书例程处理的数表与图线,如未加说明,均来自文献3。第2章机械设计数表处理2.1非函数表处理2.2函数表处理2.3数值处理习题
为了便于编写计算机查询程序,可将数表进行分类。按数表中数据之间是否具有客观的连续函数关系,分为两大类型。数据之间存在连续函数关系的数表称为函数表,如V带传动中,小带轮的包角α1与包角系数kα1的关系表;否则,则称为非函数表,如V带的型号与V带截面尺寸的关系表。函数表可以使用插值法或拟合公式获得表中未列出的数据,非函数表则不能。
查询数表的基本思路是,用某种方法把数表的数据存储到数组中,再用循环语句和判断语句将已知参数(即输入参数)和数组的元素值进行比较,找到匹配或相对应的数组元素的下标,做一些相应的必要处理,即可获得正确的查询结果。进而,根据处理程序中必须使用的数组的最高维数,还可以把数表分为一维数表、二维数表、三维数表等多种类型。此外,还可以根据数表中数据是否规则排列,分为规则数表和不规则数表。对于不规则数表,应作必要的手工“预处理”使之规则化,比如把数表拆分、把数据重新排列、增删一些数据等等,以便于程序的编写。数表类型列于表2-1中,供读者参考。表2-1数表分类
把数据存储到数组中是编写数表处理程序时需要解决的一个基本问题。根据数表中的数据量和使用的编程语言不同,可以灵活采用不同的解决方案。若用VisualBasic6.0语言编程,如果数据量不大,比如数据不超过400个,比较简捷的方法是用array()函数构建一维数组,还可通过构建一维数组,再把一维数组的数据用循环语句赋给二维数组、三维数组……的方法构建多维数组。如果数据量太大,用array()函数构建一维数组将受最大换行数的限制,则可把数据事先用手工写入文本文件并存入磁盘中,在程序运行中通过文件操作把数据转存到数组中。如果采用VisualFoxPro6.0编程,则可用copytoarray语句把表(该表中事先已存入待处理数据)中数据赋给二维数组。2.1非函数表处理2.1.1规则非函数表处理
1.一维规则非函数表
1)单行表表2-2是普通平键的长度系列表。该表仅有一行数据,属单行表。表中所列的长度系列值,用于一般机械传动。平键长度的手工查询过程是,根据轮毂长度B,从表2-2中查出相近的标准长度L。考虑到轮毂两端和平键两端一般情况下都需要倒角,通常,保证(B-L)min=5mm即可。例如,轮毂长度B=58mm,相近的标准长度有56mm、50mm,取L=50mm,见表中阴影处。又如,轮毂长度B=12mm,相近的标准长度有12mm、10mm、8mm、6mm,取L=6mm。表2-2普通平键长度系列表
计算机程序查询的过程是,先把数据存入一维数组,再通过循环语句嵌套判断语句,将输入参数(轮毂长度)与数组元素值逐个比较。如果满足某种条件,则退出循环,此时的循环次数就反映了输入参数在数组(数表)中的大致位置(行或列),然后进行相应的分析与判断,即可查出所需的标准平键长度。计算机查询程序所用参数见表2-3。程序的流程图见图2-1。程序运行时,窗体外观见图2-2、图2-3。表2-3查询平键长度的程序参数表图2-1平键长度查询程序的流程图图2-2平键长度查询前的窗体外观图2-3平键长度查询后的窗体外观窗体frmpj.frm的全部代码,见代码2-1。代码2-1窗体frmpj.frm的全部代码OptionExplicit ’选用显式声明,即变量先声明,后使用OptionBase1 ’声明数组下标从1开始
PrivateSubCommand1-Click()’功能:定义变量、接收输入、查 询、显示
DimshuruLAsSingle
DimbiaozhunLAsSingle
DimxAsInteger
DimL
shuruL=Val(txtshuruL.Text)’为shuruL赋值,实现输入IfshuruL<12ThenMsgBox("长度不得小于12mm!"):ExitSub
’用array()函数定义一个一维数组L,存储平键长度数据。根据VB规定,这个一维数组L,必须定义为变体型variant(variant是VB的默认类型,可省略)L=Array(6,8,10,12,14,16,18,20,22,25,28,32,36,40,45,50,56,63,70,80,90,-
100,110,125,140,160,180,200,220,250,280,320,360,400,450,500)
Forx=1ToUBound(L)
IfshuruL<=L(x)ThenExitFor
Nextx
y=1
WhileshuruL<L(x-y)+5
y=y+1
Wend
biaozhunL=L(x-y)txtbiaozhunL.Text=biaozhunL’为文本框的text属性赋值,显示查询结果,实现输出EndSub
PrivateSubForm
-Initialize() ’窗体初始化事件,为对象赋初值
txtshuruL.Text="" ’文本框置空
txtbiaozhunL.Text=""
EndSub
注意:VB规定,一个语句在一行写不下或编写者嫌太长时,可换行接着写。此时,必须在行尾加一个空格和一个下划线“-”。2)多行表表2-4是普通V带型号与相应初拉力增量ΔF0的关系表。表中有两行数据,属多行表。从表中可以看出,普通V带型号不同,其初拉力的增量ΔF0也不同,即ΔF0大小随着带型号变化,但两者之间并不存在客观上的连续函数关系。手工查询ΔF0的过程是,根据普通V带型号查找其所在列,该列的ΔF0即为所要查的。例如,型号为B,ΔF0=20N。计算机查询程序设计时,可用两个一维数组分别存储第一行(带型号)和第二行(ΔF0
)的值。因为两行数据个数相同,上下一一对照,所以,查到输入型号所在列数,以该列数为下标的ΔF0数组元素值,就是该型号的ΔF0值。程序所用参数见表2-5,流程图见图2-4,程序运行时,窗体外观见图2-5、图2-6。表2-4初拉力的增量ΔF0
表2-5处理初拉力增量的程序参数表图2-4ΔF0查询程序的流程图图2-5ΔF0查询前的窗体图2-6ΔF0查询后的窗体窗体frmdltf0.frm的全部代码,见代码2-2。代码2-2窗体frmdltf0.frm的全部代码OptionExplicit
OptionBase1
PrivateSubCommand1-Click()’功能:定义变量、接收输入、查询、输出显示Dimxasinteger
DimvdxhAsString
Dimdltf0AsSingle
Dimvdxhsz ’定义存储带型号的变体型变量
Dimdltfsz ’定义存储初拉力增量的变体型变量
vdxh=Trim(cbovdxh.Text)’为vdxh赋值,实现输入
vdxhsz=Array("Y","Z","A","B","C","D","E")
dltfsz=Array(6,10,15,20,29.4,58.8,108)
Forx=1ToUBound(vdxhsz)
Ifvdxh=vdxhsz(x)ThenExitFor
Nextx
dltf0=dltfsz(x)
lbldltf0.Caption=dltf0’为对象dltf0的caption属性赋值,显示查询结 果,实现输出
EndSub
PrivateSubForm
-Load()’功能:为对象赋初值
cbovdxh.Text="A"
EndSub
值得说明的是,对于表2-4,也可把全部数据存储到二维数组中,再作相应的处理。但由于为二维数组赋值的代码量相对增大,故此处不宜采用。实践证明,对于一维规则非函数表,采用一维数组处理显得比较简单,行列数越多越明显,如表2-6所示的普通V带截面尺寸表。下面就给出该表的计算机查询程序的流程图(见图2-7),程序参数(见表2-7),读者可参照编写该表的处理程序。表2-6普通V带截面尺寸表2-7处理V带截面尺寸的程序参数表图2-7V带截面尺寸查询程序的流程图2.二维规则非函数表一维规则非函数表在查询时,只需要一个输入参数,存储数据使用一维数组即可,这是比较简单的情况。与此不同,多维规则非函数数表在查询时,需要一个以上的输入参数,存储数据不仅需要一维数组,还需要两维甚至更多维数的数组。表2-8为链传动工作情况系数KA表,查询时需要两个输入参数,即工作机实际工作情况和原动机实际工作情况;需要两个内部一维数组,分别存储工作机情况数据和原动机情况数据;需要一个内部二维数组,存储工作情况系数KA。手工查询过程是,查找工作机实际工作情况所在行,查找原动机实际工作情况所在列,行、列交点处的数据即为KA
。例如,工作机实际工作情况为“中等振动”,原动机实际工作情况为“轻微振动”,1.5就是要查的KA
。与手工查询类似,计算机查询的过程如图2-8所示,其参数见表2-9,运行时的窗体外观见图2-9、图2-10。表2-8链传动工作情况系数KA
图2-8链传动工作情况系数KA查询程序的流程图表2-9处理链传动工作情况系数KA的查询程序参数表图2-9链传动工作情况系数KA查询前的窗体外观图2-10链传动工作情况系数KA查询后的窗体外观窗体frmkA.frm的全部代码,见代码2-3。代码2-3窗体frmkA.frm的全部代码OptionExplicit
OptionBase1
PrivateSubCommand1-Click()’功能:定义变量与数组、接收输入、 查询、显示结果
DimgjqkAsString
DimyjqkAsString
DimkaAsSingle
Dimgjqksz
DimyjqkszDimkaywsz
Dimkaewsz(4,4)AsSingle
DimXAsInteger
DimYAsInteger
DimjsAsInteger
gjqk=Trim(cbogjqk.Text)
yjqk=Trim(cboyjqk.Text)
gjqksz=Array("平稳转动","中等振动","严重振动")
yjqksz=Array("转动平稳","轻微振动","中等振动")
kaywsz=Array(1#,1.1,1.3,1.4,1.5,1.7,1.8,1.9,2.1)
js=0
ForX=1ToUBound(gjqksz)
ForY=1ToUBound(yjqksz)
js=js+1
kaewsz(X,Y)=kaywsz(js)
NextY
NextXForX=1ToUBound(gjqksz)
Ifgjqk=gjqksz(X)ThenExitFor
NextX
ForY=1ToUBound(yjqksz)
Ifyjqk=yjqksz(Y)ThenExitFor
NextY
ka=kaewsz(X,Y)
txtka.Text=ka
EndSub
PrivateSubForm
-Initialize()’功能:为组合框对象的Text属性赋初值
cbogjqk.Text=cbogjqk.List(0)
cboyjqk.Text=cboyjqk.List(0)
txtka.Text=""
EndSub
3.三维规则非函数表表2-10所示为普通V带传动的工作情况系数KA表。人工查询工作情况系数的过程是,查找实际工作情况所在行,查找实际启动情况所在大列,查找每天工作小时数在大列中所处的小列,行与小列的交汇处即为所查KA。如工作实际情况为“载荷变动小”,实际启动情况为“重载启动”,实际工作小时数为“10~16”,KA为1.3。由计算机程序查询,需要三个输入参数:工况、每天工作小时数和启动情况,故三个一维数组分别存储表中的工况情况、启动情况和每天工作小时数。一个三维数组存储工作情况KA数据以及一些内部变量。程序参数见表2-11,流程图见图2-11,程序运行时的窗体见图2-12和图2-13。表2-10V带传动工作情况系数KA
表2-11处理V带传动工作情况系数KA的程序参图2-11带传动工作情况系数KA查询程序的流程图图2-12带传动工作情况系数KA查询前的窗体外观图2-13带传动工作情况系数KA查询后的窗体外观窗体frmvdkA.frm的全部代码,见代码2-4。代码2-4窗体frmvdkA.frm的全部代码OptionExplicit
OptionBase1
PrivateSubCommand1-Click()’功能:定义变量与数组、接收输入、 查询、显示结果
DimzhqkAsString
DimqdqkAsString
DimmtssAsStringDimzhqksz
Dimqdqksz
Dimmtsssz
DimkaAsSingle
Dimkaywsz
Dimkaswsz(5,2,4)AsSingle
DimxAsInteger
DimyAsInteger
DimjAsInteger
DimjsAsInteger
zhqk=Trim(cbozhqk.Text)
qdqk=Trim(cboqdqk.Text)
mtss=Trim(cbomtss.Text)
kaywsz=Array(1#,1.1,1.2,1.1,1.2,1.3,
-
1.1,1.2,1.3,1.2,1.3,1.4,
-
1.2,1.3,1.4,1.4,1.5,1.6,
-
1.3,1.4,1.5,1.5,1.6,1.8)zhqksz=Array("载荷变动最小","载荷变动小","载荷变动较大","载荷变动最大")qdqksz=Array("空、轻载启动","重载启动")
mtsssz=Array("<10","10-16",">16")
js=0
Forx=1ToUBound(zhqksz)
Fory=1ToUBound(qdqksz)
Forj=1ToUBound(mtsssz)
js=js+1
kaswsz(x,y,j)=kaywsz(js)
Nextj
Nexty
Nextx
Forx=1ToUBound(zhqksz)Ifzhqk=zhqksz(x)ThenExitForNextxFory=1ToUBound(qdqksz)
Ifqdqk=qdqksz(y)ThenExitFor
Nexty
Forj=1ToUBound(mtsssz)
Ifmtss=mtsssz(j)ThenExitFor
Nextj
ka=kaswsz(x,y,j)
txtka.Text=ka
EndSub
PrivateSubForm
-Initialize()’功能:为组合框对象的text属性赋初值
cbozhqk.Text=cbozhqk.List(1)
cboqdqk.Text=cboqdqk.List(1)
cbomtss.Text=cbomtss.List(1)
EndSub2.1.2不规则非函数表处理
1.一维不规则非函数表表2-12为渐开线圆柱齿轮的模数国家标准系列表。表中有两行数据,第一行有28个数据,第二行比第一行少六个数据,因此该表是不规则的非函数表。表2-12渐开线圆柱齿轮标准模数系列表
从表2-12中选用模数时,一般应优先选用第一系列(如设计标准减速器时,模数作为输入参数,由用户从表中选择)。有时根据具体情况也可以选第二系列,例如,设计非标准减速器时,模数是输出参数,由强度条件确定,为了减少减速器尺寸与重量,模数应选择最接近的较大值。于是,可能出现这种情况:齿轮强度条件确定的最小模数为m′=3.6,由表2-12可以看出,按优先原则,应选第一系列的m=4;若按“满足强度条件的前提下用料要少”的原则考虑,应选第二系列的m=3.75。因此,为了满足不同的需求,提高程序的通用性,模数的查询程序应满足各种用户需求。
根据上述设计要求,作出如下处理方案:将该表拆分为两个规则的非函数表:模数第一系列表(见表2-13)、第一系列与第二系列按大小混合后的系列表(见表2-14)。为满足用户使用要求,程序需要询问用户是否总采用第一系列。如果总采用第一系列,就从第一系列表中查询,否则则从混合系列表中查询。从混合系列表中查询时,往值增大的方向查到与m′=3.6最接近的值(模数为3.75),还要判断该值是属于第一系列,还是第二系列。程序的参数表见表2-15,程序流程图见图2-14,运行时的窗体外观见图2-15、图2-16。读者可以考虑是否还有其他处理方案。表2-13第一系列标准模数表表2-14将第一、第二系列按大小混合后的标准模数系列表表2-15处理模数的程序参数表图2-14模数查询程序的流程图图2-15模数查询前的窗体外观图2-16模数查询后的窗体外观(a)选取最接近的模数;(b)总采用第一系列模数窗体frmm.frm的全部代码,见代码2-5。代码2-5窗体frmm.frm的全部代码OptionExplicit
OptionBase1
PrivateSubCommand1
-Click()’功能:定义变量与数组、接收输入、 查询、显示结果
DimshurumAsSingle
DimshuchumAsSingle
Dimmdiyixilie
Dimmhunhexilie
DimdiyiAsIntegerDimxmdiyixilie=Array(0.1,0.12,0.15,0.2,0.25,0.3,0.4,0.5,0.6,0.8,1,1.25,1.5,2,2.5,3,
-4,5,6,8,10,12,16,20,25,32,40,50)
mhunhexilie=Array(0.1,0.12,0.15,0.2,0.25,0.3,0.35,0.4,0.5,0.6,0.7,0.8,0.9,1, -1.25,1.5,1.75,2,2.25,2.5,2.75,3,3.25,3.5,3.75,4,4.5,5,5.5,6,6.5,7,8,9,11, -12,14,16,18,20,22,25,28,32,36,40,45,50)
shurum=Val(txtshurum.Text)
Ifshurum<=0Then
MsgBox("模数不能小于零!请重新输入")
ExitSub
EndIf
Ifchkxilie.Value=1ThenFordiyi=1ToUBound(mdiyixilie)-1
Ifshurum<=mdiyixilie(diyi)ThenExitFor
Nextdiyi
shuchum=mdiyixilie(diyi)
txtquedingm.Text=shuchum
lblxilie.Caption="第一系列"
Else
Forx=1ToUBound(mhunhexilie)-1
Ifshurum<=mhunhexilie(x)ThenExitFor
Nextx
shuchum=mhunhexilie(x)
txtquedingm.Text=shuchum
Fordiyi=1ToUBound(mdiyixilie)-1
Ifshurum<=mdiyixilie(diyi)ThenExitFor
Nextdiyi
Ifshuchum=mdiyixilie(diyi)Then
lblxilie.Caption="第一系列"
Else lblxilie.Caption="第二系列"
EndIf
EndIf
EndSub
PrivateSubForm
-Initialize()’功能:为对象赋值
txtshurum.Text=""
txtquedingm.Text=""
EndSub
2.二维不规则非函数表表2-16为普通V带轮的基准直径系列,是国家规定的标准系列。该表的每行数据个数不尽相同,故属于不规则的非函数表。
表2-16中有许多空格,空格意味着无外径值。如果某型号的带轮在某一行无外径值,则本行内的基准直径不能用于本型号。为了便于计算机查询基准直径,在无外径值的空格处,可人为地填以“0”数字,使表变成规则数表,见表2-17。
手工选择主、从动带轮基准直径的过程一般是:在根据V带选型图确定V带型号的同时,也得到了小带轮的直径范围。在此范围内,大致选择一个小带轮直径dd1,然后从表2-16中查询与dd1最接近的标准基准直径dd1
,计算大带轮直径dd2=dd1×i(i是传动比),再从表2-16中查询与dd2′最接近的基准直径dd2
。计算机查询时,则直接处理表2-17。查询程序的参数见表2-18,流程图见图2-17,运行时的窗体外观见图2-18、图2-19。表2-18V带轮基准直径查询程序参数表图2-17V带轮基准直径查询程序的流程图图2-18V带轮基准直径查询前的窗体外观图2-19V带轮基准直径查询后的窗体外观V带轮型号为C,初选基准直径为370时的查询结果;(b)V带轮型号为A,初选基准直径为1000时的查询结果
程序执行过程为:通过文本框和组合框接收用户输入的初选基准直径和带型号,分别赋给变量shurudd和shuruxinghao,将标准基准直径系列赋给一维数组biaozhundd,标准外径系列赋给一维数组biaozhunda和二维数组da。先找到型号所在的列数x,再通过for循环语句嵌套判断语句,沿增大方向搜索与初选基准直径shurudd最接近的行数y,但该行的第x列处外径不应为零。y可能有三种情况需要考虑:
(1)y恰好是该型号带轮的外径系列中最小外径值所在的行数,则取该行的标准基准直径,如型号为B,shurudd=110,搜索后,y=22(外径为132),则shuchudd=biaozhundd(y)=biaozhundd(22)=125。(2)y大于该型号带轮的外径系列中最小外径值所在的行数,但小于等于表中的最大行数ymax,即y≤ymax=55,此时应调头向上(沿减小方向)进行二次搜索,直到外径不为零的j行为止,则biaozhundd(y)、biaozhundd(j)中与shurudd最接近者即为所查。如带型号为C,shurudd=370,首先搜索得y=39(相应的标准基准直径为biaozhundd(y)=400),反向搜索得j=37(相应的标准基准直径为biaozhun(j)=355),取最接近值,即shuchudd=biaozhundd(j)=355。(3)y大于ymax,这种情况发生在shurudd大于表中最大标准值2500的时候。此时,应向上查找,采用循环次数不定的循环语句嵌套判断语句,每循环一次使y减1,直到外径不为零的y行为止,此位置的标准基准直径biaozhundd(y)即为所查。例如,型号为A,shurudd=1000,y=56>ymax=55(biaozhun(55)=2500,biaozhun(56)是不存在的),反向查找到外径不为零时,y=48,此时,biaozhundd(y)=800,故shuchudd=biaozhundd(y)=800。窗体frmdd.frm的全部代码,见代码2-6。代码2-6窗体frmdd.frm的全部代码窗体frmdd.frm的全部代码,见代码2-6。OptionExplicit
OptionBase1
PrivateSubCommand1-Click()’功能:定义变量与数组、接收输入、 查询、显示结果
DimshuruxinghaoAsString
DimshuruddAsSingle
DimshuchuddAsSingle
DimshuchuwaijingAsSingle
DimxinghaoDimbiaozhundd
DimbiaozhundaDimda(56,8)AsSingle
DimxAsInteger
DimyAsInteger
DimjAsInteger
DimsAsInteger
shuruxinghao=cboxinghao.Text
shurudd=Val(txtchuxuandd.Text)
Ifshurudd<=0Then
[HJ]MsgBox("初选基准直径不能小于零!请重新选择")
ExitSub
EndIf
xinghao=Array("Y","Z","A","B","C","D","E")biaozhundd=Array(20,22.4,25,28,31.5,35.5,40,45,50,56,63,71,75,80,85,90,
-95,100,106,112,118,125,132,140,150,160,170,180,200,212,224,236,250,265,-
280,315,355,375,400,425,450,475,500,530,560,630,710,800,900,1000,1120,-
1250,1600,2000,2500)
biaozhunda=Array(23.2,0,0,0,0,0,0,25.6,0,0,0,0,0,0,28.2,0,0,0,0,0,0,31.2,0,-
0,0,0,34.7,0,0,0,0,0,0,38.7,0,0,0,0,0,0,43.2,0,0,0,0,0,0,48.2,0,0,0,0,0,-0,53.2,54,0,0,0,0,0,59.2,60,0,0,0,0,0,66.2,67,0,0,0,0,0,0,75,0,0,0,0,0,0,-
79,80.5,0,0,0,0,83.2,84,85.5,0,0,0,0,0,0,90.5,0,0,0,0,93.2,94,95.5,0,0,0,0,-
0,0,100.5,0,0,0,0,103.2,104,105.5,0,0,0,0,0,0,111.5,0,0,0,0,115.2,116,117.5,-
0,0,0,0,0,0,123.5,0,0,0,0,128.2,129,130.5,132,0,0,0,0,0,137.5,139,0,0,0,-0,144,145.5,147,0,0,0,0,154,155.5,157,0,0,0,0,164,165.5,167,0,0,0,0,0,0,-
177,0,0,0,0,184,185.5,187,0,0,0,0,204,205.5,207,209.6,0,0,0,0,0,219,221.6,-
0,0,0,0,0,231,233.6,0,0,0,0,0,243,245.6,0,0,0,254,255.5,257,259.6,0,0,0,0,0,-0,274.6,0,0,0,284,0,287,289.6,0,0,0,319,320.5,322,324.6,0,0,0,359,0,362,-
364.6,371.2,0,0,0,0,0,0,391.2,0,0,404,405.5,407,409.6,416.2,0,0,0,0,0,0,441.2,-
0,0,0,0,0,459.6,466.2,0,0,0,0,0,0,491.2,0,0,504,505.5,507,509.6,516.2,519.2,
-
0,0,0,0,0,546.2,549.2,0,0,0,0,569.6,572.2,579.2,0,634,635.5,637,639.6,646.2,
-
649.2,0,0,0,0,0,726.2,729.2,0,0,805.5,807,809.6,816.2,819.2,0,0,0,0,0,
-
916.2,919.2,0,0,0,1007,1009.6,1016.2,1019.2,0,0,0,1127,0,0,1139.2,0,0,0,0,
-
1259.6,1266.2,1269.2,0,0,0,0,0,1616.2,1619.2,0,0,0,0,0,2016.2,2019.2,0,0,0,-
0,0,0,25)
s=0
Forx=1ToUBound(biaozhundd)
Fory=1ToUBound(xinghao)
s=s+1
da(x,y)=biaozhunda(s)
NextyNextx
Forx=1ToUBound(xinghao)
Ifshuruxinghao=xinghao(x)ThenExitFor’查列(即型号)
Nextx
Fory=1ToUBound(biaozhundd)
Ifshurudd<=biaozhundd(y)Andda(y,x)>0ThenExitFor’查行
Nexty
Ify=1Andxinghao(x)="Y"Ory=9Andxinghao(x)="Z"
-
Ory=13Andxinghao(x)="A"Ory=22Andxinghao(x)="B"
-
Ory=29Andxinghao(x)="C"Ory=37Andxinghao(x)="D"
-
Ory=43Andxinghao(x)=“E”Then’如果y是各种带型的最小外径行
shuchuwaijing=da(y,x)
shuchudd=biaozhundd(y)
txtbiaozhundd.Text=shuchudd
txtwaijing.Text=shuchuwaijing
ExitSubEndIf
Ify<=UBound(biaozhundd)Then’如果y不是各种带型的最小外径行且未超过最大 ’行数,则往上找外径大于零的行
Forj=y-1To1Step-1
Ifda(j,x)>0Then
IfAbs(biaozhundd(j)-shurudd)<=Abs(biaozhundd(y)-shurudd)Then
shuchuwaijing=da(j,x)
shuchudd=biaozhundd(j)’与shurudd最接近的标准值
Else
shuchudd=biaozhundd(y)
shuchuwaijing=da(y,x)
EndIf
txtbiaozhundd.Text=shuchudd
txtwaijing.Text=shuchuwaijing
ExitSubEndIf
Nextj
EndIf
’如果往下一直未找到与shurudd最接近且外径大于零的标准值,就返回来往’上找,找到最大外径所在行。当shurudd大于表中的最大值2500时,发生此种情况Ify>UBound(biaozhundd)Then
DoWhiley>1
y=y-1
Ifda(y,x)>0Then
shurudd=biaozhundd(y)
shuchuwaijing=da(y,x)
txtwaijing.Text=shuchuwaijing
txtbiaozhundd.Text=da(y,x)
ExitSubEndIf
Loop
EndIf
EndSub
PrivateSubForm
-Initialize()’功能:为对象的text属性赋初值
cboxinghao.Text="A"
txtchuxuandd.Text="80"
txtbiaozhundd.Text=""
txtwaijing.Text=""
EndSub
3.三维不规则非函数表
表2-19给出了V带轮的结构形式和辐板厚度(见文献4),每行数据多少不同,且数据之间无函数关系。为了查询带轮的结构形式和辐板厚度,需要输入三个参数:带型号、孔径、带轮基准直径,表中的数据需要用三维数组存储。不仅如此,此表内的数据也没有一定的规律,有结构形式,如实心轮、辐板轮、四孔板轮、六孔板轮、四椭圆辐轮、六椭圆辐轮;对辐板轮或板孔轮,还有厚度,除此之外都是空格及大面积空白区域等等,所以该表是一个比较复杂的三维不规则非函数表。为了方便处理,需要把表中的数据进行预处理,空格处填以数字“0”(也可以填以其他字符),大面积的空白区域,要划分成方格,并填以相应的数据。由于array()函数对换行数和每行数据个数都有限度,而带轮结构与辐板厚度数据较多(1320个),有可能超出函数限度,故不宜采用array()函数建立一维数组。可以手工先把数据写入一个纯文本文件中(如jiegou.txt,见表2-20,该表仅列出了部分数据),然后在程序运行过程中,从该文件中读出数据,并赋给一维数组,由一维数组再转给三维数组。存储孔径数据的二维数组的建立,也采用这种方法。由此可知,本表的处理需要的数组的最高维数为三。
查询程序的编写思路可分为三个主要步骤:
(1)将表中数据存储到数组。
(2)将用户输入的型号,赋给变量shuruxinghao,用循环语句与判断语句查找该变量在表中的位置:大行数x(在型号数组中查),即得到sanweijiegou(x,y,j)中的第一维x的值。将用户输入的孔径,赋给变量shurud0,用循环语句与判断语句查找该变量的位置:小行数y(在相应型号的孔径数组中查),即得到sanweijiegou(x,y,j)中的第二维y的值。将用户输入的带轮基准直径,赋给变量shurudd,查询该变量的位置:列数j(在基准直径数组中查),即得到sanweijiegou(x,y,j)中的第三维j的值。(3)对查到的sanweijiegou(x,y,j)的值,进行判断分类与提取信息,对非“0”值,用字符串函数left()从中提取带轮结构信息,用mid()函数从中提取辐板厚度信息。查询程序的参数见表2-21,流程图见图2-20,程序执行示例见图2-21、图2-22。表2-21带轮结构与辐板厚度查询程序参数表图2-20V带轮轮辐结构与辐板厚度查询流程图图2-21带轮结构与辐板厚度查询示例1
(B型带轮,孔径40mm,基准直径200mm)图2-22V带轮结构与辐板厚度查询示例2
(D型带轮,孔径70mm,基准
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 不躺平的人生才有盼头
- 传承文明测试题及答案
- 初级化学面试题及答案
- 车辆培训试题及答案
- 从“大脑空白”到“眼前一亮”-高中研究性学习课题申报指导课教案(选题与方法的破冰之旅)
- 护理课程教学课件开发与教学设计案例分析
- 护理安全患者自杀与自伤预防
- 国外护理课件开发软件
- 护理基础知识与护理技术
- 护理记录的及时记录与反馈
- 2026年贵州省公需课培训(专业技术人员继续教育)试题及答案
- 2026上海市农业广播电视学校公开招聘工作人员笔试参考试题及答案详解
- 2026新教材人教版九年级上册英语暑假预习:Unit1-Unit5词汇详解
- 2026年农商银行面试题及答案
- (2026年)医院急性肾功能衰竭患者急救流程课件
- 重组抗破伤风毒素单克隆抗体临床应用专家共识(2026年版)
- (正式版)DB37∕T 5321-2025 《居住建筑装配式内装修技术标准》
- 南京创新投资集团考试题
- 小学五年级语文上学期时事阅读总题库2026
- 保险中介合规培训
- 呼吸功能训练指导
评论
0/150
提交评论