




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ADAMS二次开发基础研究摘要:本文对ADAMS二次开发中的用户子程序与用户界面定制进行了简单探讨。关键词:ADAMS,二次开发,Subroutine,用户界面定制1概述ADAMS具有很强的二次开发功能,包括ADAMS/View界面的用户化设计,利用cmd语言实现自动建模和仿真控制,通过编制用户子程序满足用户的某些特定需求,甚至可以拓展ADAMS的功能,还有就是使用ADAMS/SDK来把运动仿真功能完全集成到自己的软件包中,脱离ADAMS软件环境来进行自己的运动仿真。由于ADAMS/SDK能在脱离ADAMS其它前处理环境使用,因此使用它的都是一些脱离ADAMS环境自己开发运动仿真工具的高级用户
2、使用,普通用户在不脱离ADAMS环境的条件下,使用Subroutines、自定义用户界面等二次开发功能就能满足用户所需的需求。因此本文只对不脱离ADAMS环境的二次开发技术做一定的探讨,对ADAMS/SDK只作简单的介绍。2 ADAMS/SDK介绍ADAMS/SDK是ADAMS软件开发工具包。利用ADAMS/SDK,用户可以把运动仿真功能完全集成到自己的软件包中,也可以为已有的产品增加更强的运动仿真能力。集成后的工具包与ADAMS具有同样的仿真分析功能。ADAMS/SDK使用流行的C或C语言作为编程接口环境。可以快速、简单、有效地在用户的软件包中增加运动仿真功能。用户通过集成ADAMS在各行业
3、中已验证的经验,可以大大地节省在运动仿真开发方面的投资。ADAMS/SDK可以广泛地应用于CAD软件中的运动学和动力学工具,CAD软件中装配位置的确定,制造业中的动态仿真,数字化装配运动回放及工业特殊用途的运动仿真。3 ADAMS用户子程序3.1用户子程序简介一般情况下,ADAMS的大部分功能可以通过函数表达式完成,函数表达式很容易操作,因为不必编译或连接程序,而且ADAMS/Solver还会实时地提供函数表达式。但函数表达式提供的只是有限的编程结构,因此有些复杂的情况,特别是涉及到一些逻辑表达,用函数表达式则很难表达出来。因此在需要采用一些ADAMS没有提供的特殊函数时,可以采用用户子程序。
4、用户子程序更具有通用性,可以利用编程语言来定义模型元素或者特定的输出。用户可以将函数表达式写成子程序的形式并将其与ADAMS/View连接,它具有函数表达式所没有的通用性和灵活性。子程序利用通用程序设计语言(FORTRAN或C)的功能来定义ADAMS/View不能提供的函数,并使之按照需要而量身设计。通过连接用户子程序,不会失去ADAMS/View的任何功效,也不会降低仿真速度。当出现下列情况时,通常会使用到用户子程序:(1)数学函数很难表达。(2)需要定义多用户使用的函数。(3)GSE和UCON声明时,需要用户子程序。(4)需要控制复杂仿真运行时,以及需要作决策逻辑时。使用用户子程序时要小心
5、,因为不正确的用户子程序会很难调试。3.2用户子程序的种类根据用户子程序的功能,可以将它们分为三类:(1)Driver Subroutine驱动子程序(2)Evaluation Subroutines计算子程序(3)Restart subroutines重启子程序1. 驱动子程序(Driver Subroutine)驱动子程序(Driver Subroutine)CONSUB用来驱动ADAMS/Solver。这样ADAMS/Solver在仿真时可更进一步地完成对模型的分析和修改的自动化工作。CONSUB发出request(请求),regulate(调整),和vary simulations(改
6、变仿真)的命令,并通过作出的交互式命令来修改数据,或者进行不同的分析。大多数运行ADAMS/Solver的情况都是交互式,或者是以批处理的形式,一次只涉及到单个的分析。使用CONSUB,可以完成对数据的动态分析,改变前提条件,并重复动态分析。2. 计算子程序(Evaluation Subroutines)计算子程序(Evaluation Subroutines)为用户自定义。ADAMS/Solver可写子程序来对某些非标准的或复杂的计算式计算其数值。3. 重启子程序(Restart Subroutines)重启子程序(Restart subroutines)由一对子程序组成,SAVESUB和R
7、ELSUB。它们可以保存和重新加载子程序运行过程中的某些状态变量,这些状态变量是那些相关的用户子程序在重新启动或进行某些变量初始化时所必须的数据。如果在用户子程序之间相互调用时,需要使用它们在子程序内部保存数据。如果没有使用RELSUB和SAVSUB,在保存仿真文件时,内部数据就会丢失。虽然SAVE命令可将模型和仿真数据保存到文件中去,而且可以通过使用RELOAD命令重新调入保存文件,并可以从该保存点重新启动仿真。但SAVE和RELOAD不可能对用户子程序的内部数据进行特殊操作,在RELOAD命令之后,ADAMS/Solver会从仿真流程中断点继续调用用户子程序,但用户子程序中某些感兴趣的内部
8、变量却没有得到保存。3.3子程序的使用相对于ADAMS/View来讲,用户定义子程序有两个任务:输入和输出。输入就是在相应的命令或状态,或在表明当前系统状态的计算结果中,提供给ADAMS/View的相关信息。输出就是从ADAMS/View中获得的相关信息。1. 声明浮点变量为了保证数值在子程序之间或者ADAMS/Solver和子程序之间能够正确地传递,需要声明浮点变量,就像在ADAMS/Solver中作的声明一样。在UNIX和Windows机器上,ADAMS/Solver使用双精度浮点变量。因为未声明的浮点变量通常都是单精度的(如REAL),所以应当明确声明所有的浮点变量都是双精度的。2. 参
9、数的使用ADAMS/View会从FUNCTION=USER()的表达式中提供给用户子程序参数值。例如,如果你使用FUNTION=(4.0,5.0,6.0),ADAMS/View通过一个包含4.0,5.0,6.0的PAR数组参数,以及通过一个值为3的NPAR参数传递这些数值。通过使用这些功能使得用户子程序更加灵活。例如,如果计算需要marker101和marker102的距离,可以将这些标志符直接写进用户子程序。3. 避免不连续在运行表达式中,当使用子程序来定义运动,传感器,力,或者模型中的状态平衡方程时,应当保证这些函数是连续的。不连续的函数很难处理,因为大多数数学理论都是假定系统方程是连续的
10、。如果违反了该规则,ADAMS/Solver就会得出出人意料的结果。当使用IF声明,将分段函数连接起来时,常常会产生不连续函数。为了保证函数是连续的,在使用该类型的函数时,一定要小心。4. 创建用户子程序为了创建自己的用户子程序,ADAMS提供了子程序模板并将它们放在安装目录install_dir/adams/solver/usersubs中。子程序不能以C语言为模板。如果需要一个C语言的子程序,必须通过修改FORTRAN文件来创建它,或者使用FORTRAN模板作为向导,创建自己的C语言格式子程序。创建用户子程序的步骤:(1) 决定需要创建什么样的用户子程序。例如,如果有GFORCE的声明,可
11、以创建GFOSUB的用户子程序。(2) 决定要计算什么,需要什么输入参数。(3) 将合适的用户子程序模板从安装目录拷贝到当前目录。模板目录中包含了要使用的所有子程序模板。(4) 使用文字编辑器来察看用户子程序模板。(5) 按需要修改用户子程序。从用户子程序中调用功能子程序,或者其他FORTRAN或C语言子程序。(6) 保存用户子程序。因为可能对不同的模型会使用相同的子程序,所以最好给文件起一个容易区分的名字。5. 调用用户子程序可以通过使用声明或者命令来调用用户子程序。通过使用前面定义的用户子程序的名字来让ADAMS/Solver知道调用哪一个子程序。也可以使用子程序来定义一些模型元素。能调用
12、用户子程序的声明或命令如表1所示。表1 调用用户子程序的声明或命令要调用的子程序使用的声明/命令CONSUBCONTROLCOUSUB,COUXX,COUXX2COUPLERCURSUBCURVEDIFSUBDIFFFIESUBFIELDGFOSUBGFORCEGSE_DERIV,GSE_UPDATE,GSE_OUTPUT,GSE_SAMPGSEMOTSUBMOTIONRELSUBRELOADREQSUBREQUESTSAVSUBSAVESENSUBSENSORSFOSUBSFORCETIRSUBTIREUCOSUBUCONVARSUBVARIABLEVFOSUBVFORCEVTOSUBVTO
13、RQUE可以从用户子程序中调用功能子程序。这些子程序的功能就像是在用户的数据和用户使用的用户子程序的接口一样。例如,在driver userwritten subroutine(驱动用户子程序)中,可以使用control,access功能子程序。从evaluation userwritten subroutines(计算用户子程序)中,也可以调用access,function,以及某些情况下setup 函数。换句话说,可以从上面任何一个用户子程序中调用access和function函数,但用户只能从driver subroutine中调用control函数,从某个evaluation subr
14、outines中调用setup函数。6. 编译,连接和运行库在写完定制的子程序后,必须要将它们编译并连接到ADAMS以创建到ADAMS/Solver的用户库文件中去。然后,可以连同该库与ADAMS/Solver一同运行。必须有一个FORTRAN(Fortran语言)或C(用C语言)编译器,因为ADAMS本身不提供编译器。下面给出编译和连接的过程。(1) 软件平台在ADAMS中可以用FORTRAN或C进行User-subroutine的编写,文中实例使用的相应版本和编译命令如下:·· C语言的编译器是Microsoft Virtual C+ v6.0 +SP5,编译命令为:C
15、l/c/G6/Ox/MD xxx.c我们在使用的时候不需要计上面的命令,在ADAMS2005中可以直接把源代码编译成动态链接库(dll)。(2)编译和连接在命令行Command窗口下输入ADAMS05->CR-USER->xxx.c,之后会在你的工作目录下自动生成xxx.dll文件。图1 编译和连接命令行窗口图2编译和连接命令行窗口(3)运行加载dll链接库运行和加载dll的方法有两种:第一种是在命令行下面运行加载,其命令为:adams05 aview ru-u i n xxx.dll另外一种方法是在ADAMS/View用户界面中通过设置来加载dll,如图3所示。图3 加载用户子程
16、序加载后就可以在函数编辑器中使用自己定义的用户子程序了。4用户界面的定制ADAMS/View的界面对象都是以层次结构存储在模型数据库中,类似于零件模型的层次结构。所有定制的界面对象都存储在名为GUI的数据库中,该数据库可以很方便地管理所有的标准界面对象。界面对象的层次结构如图4所示。图4 界面对象的层次结构最上层的界面对象是窗口和对话框。如果主要建模窗口起名为main的话,其数据库全名应为.gui.main。尽管窗口和对话框看起来很相似,但它们却是很不相同的。窗口通常是在用户工作的时候在屏幕上停留一段时间,而对话框通常是在用户输入数据或是进行访问控制时才会出现。窗口有工具条和菜单栏,窗口和对话
17、框也包含其他的界面对象如按钮,标签等等。大多数用户化操作涉及到创建对话框或者修改标准对话框。但若不用创建一个完整的用户化界面时,则通常只用修改菜单条和工具栏。在大多数情况下,用户定制界面是指制作用户自己的菜单和对话框。通常可使用菜单编辑器和对话框编辑器来定制界面,通过它们可以很快地访问并改变大多数界面对象和功能。下面就这两方面的内容作简单介绍。4.1定制菜单4.1.1菜单编辑器通过以下菜单路径可以调出菜单编辑器窗口:Main menuToolsMenuModify菜单编辑器窗口如图5所示:图5 菜单编辑器窗口在菜单编辑器窗口中显示的是ADAMS菜单文件,菜单文件是按照一定的语法书写的解释性程序
18、文件,在默认情况下,菜单编辑器窗口里显示的是描述ADAMS标准菜单的菜单文件,通过按照一定的语法规则修改该菜单文件,就可以得到用户化的菜单。下面的程序段是对标准ADAMS/View菜单文件的节选,粗略显示了标准ADAMS/View菜单文件的各个菜单项和File菜单项所包含的按钮和分割条界面对象,以便读者能把握菜单文件的全貌,如图6所示为相应的图形界面。图6 File菜单的图形界面MENU1 &File !File菜单项 NAME=file HELP=Read and write files, print model views, or exit ADAMS BUTTON2 &N
19、ew Database:Ctrl+N !New Database按钮 NAME=new BUTTON2 &Open Database:Ctrl+O !Open Database按钮 NAME=open HELP=Open a Database File (ADAMS/View Binary File) BUTTON2 Save Database &As. !Save Database按钮SEPARATOR2 !分割线BUTTON2 &Import !Import按钮.BUTTON2 &Export !Export按钮.SEPARATOR2 !分割线BUTTON2
20、 &Print.:Ctrl+P !Print按钮SEPARATOR2 !分割线BUTTON2 &Select Directory. !Select Directory.按钮.SEPARATOR2 !分割线BUTTON2 E&xit:Ctrl+Q !Exit按钮MENU1 &Edit !Edit菜单项MENU1 &View !View菜单项MENU1 &Build !Build菜单项MENU1 &Simulate !Simulate菜单项MENU1 &Review !Review菜单项MENU1 Settin&gs !Set
21、tings菜单项MENU1 &Tools !Tools菜单项MENU1 &Help ! Help菜单项在菜单编辑器窗口中对菜单文件进行用户化修改后,点击编辑器窗口上的Menu bar菜单项下的Export Text按钮可将用户化的菜单文件到用户二次开发文件目录中。如果要重新调入菜单,使用菜单编辑器的Import Text按钮调入相应的菜单文件,然后点击Apply按钮;或者直接通过以下菜单路径来实现:Main menuToolsMenuRead.4.1.2菜单语法如前所述,菜单文件实际上是用解释性语言编制的程序段,下面介绍该解释性语言的编程语法。菜单对象有四种类型:菜单、按钮或图
22、标按钮、开关按钮和分割线,分别用关键词MENUn、BUTTONn、TOGGLEn和SEPARATORn定义。如表2所示列出的是菜单对象类型及其参数含义。表2 菜单对象类型及其参数含义菜单对象参数含义:MENUnLabelBUTTONnLabel or name of icon fileTOGGLEnLableSEPARATORn(none)表中菜单对象的参数含义如下:(1) n是从1到10之间的整数,它表示对象在菜单中出现的级别。例如,MENU1出现在菜单栏,BUTTON2出现在MENU1的之中。MENU菜单后面的n是必须要的,而对于其他的对象则为可选项。如果忽略级别,ADAMS/View将默
23、认该对象属于最后一个MENU。(2) lable是出现在菜单中的文本。对于图标按钮,可以指定图标的名字,或者其他图形格式文件。在Windows中图标名字为bitmap(.bmp)格式的文件名字。创建每种菜单对象的语法结构如下:创建MENU 可以创建多级的菜单,第一级菜单为MENU1,出现在菜单条上,低一级的菜单如MENU2和MENU3出现在层叠的下拉菜单中。语法: MENUn TITLE NAME=name HELP=Help参数:n=整数值,表明该菜单在菜单条中出现的层数。n=1时菜单出现在菜单栏上,n2时菜单出现在下拉菜单中。TITLE=字符串,出现在菜单栏上,可以在表提前加一个&
24、字符用作记忆法(如“&File”在菜单上显示为File)。NAME=模型数据库中对象的名字。HELP=出现在状态栏中的文字。创建BUTTON每个按钮对应一个菜单命令,可以在下拉菜单或是子菜单上放置按钮。语法:BUTTONn LABLE ACCELERATOR NAME=name HELP=help CMD=command参数:n=整数值,表明按钮出现的层数。N=2时按钮出现在下拉菜单上,n3时按钮出现在子菜单上。LABLE=按钮名,出现在下拉菜单或子菜单上。ACCELERATOR=键或键组用来执行菜单命令。NAME=模型数据库中菜单对象的名字。HELP=出现在状态条上的文字。CMD=点
25、击按钮时所执行的命令,当有:多行命令时,每一行前面都要加CMD。创建分隔符(SEPERATOR)在下拉菜单和子菜单中的各项目之间添加分割线。语法:SEPERATORn参数:n=整数值,表明分隔符出现的层数,n=2时分隔符出现在下拉菜单中,n=3时分隔符出现在子菜单中。创建开关按钮TOGGLE用于在两种状态之间设置切换开关,开关按钮可以在下拉菜单或是在子菜单上。语法:TOGGLEn TITLE NAME=name HELP=help STATE=state CMD=command其参数含义同上其他对象。下面是一个利用菜单编辑器定制用户化菜单的例子,该例在ADAMS/View标准菜单的Contro
26、ls之后定制了用户自己的菜单项MyMenu2005,通过展开该菜单项显示了用户菜单各层次之间的关系,如图7所示。图7 自定义菜单实例界面下面是本例的程序清单:MENU1 &ControlsMENU1 &MyMenu2003 NAME=mymenu2003 HELP=A Menu Test BUTTON2 My Button &1 NAME=My_Button_1 HELP=Test of My Button 1 CMD=Adams Command of My Button 1 BUTTON2 My Button &2 NAME=My_Button_2 HELP=
27、Test of My Button 2 CMD=Adams Command of My Button 2 BUTTON2 NAME=Some_Buttons HELP=Test of Some Button CMD=Adams Commands of Some Buttons BUTTON2 My Button &n NAME=My_Button_n HELP=Test of My Button n CMD=Adams Command of My Button n SEPARATOR2 MENU2 &Son Menu 1 BUTTON3 Son Button 1 NAME=So
28、n_Button_1 CMD=Adams Command of Son Button 1 BUTTON3 Son Button 2 NAME=Son_Button_2 CMD=Adams Command of Son Button 2 BUTTON3 NAME=Some_Son_Button CMD=Adams Command of Some Son Button BUTTON3 Son Button n NAME=Son_Button_n CMD=Adams Command of Son Button n SEPARATOR3 MENU3 Son's Son Menu BUTTON4
29、 Son's Son Button BUTTON4 MENU3 . MENU2 &Son Menu 2 MENU2 MENU2 &Son Menu n4.2定制对话框ADAMS/View中使用的对话框包括各种界面对象,如标签、数据区、按钮等等。可以使用ADAMS对话框编辑器来创建和修改对话框以更好地满足用户的需要。例如为标准对话框添加一个按钮来包含要作的选项,或添加一个对话框以执行经常运行的步骤等等。利用对话框编辑器创建用户自定义对话框的操作方法如下:4.2.1创建对话框对话框编辑器包含了用来创建对话框的所有工具,创建对话框的步骤如下:(1)通过如下菜单路径:在Tool
30、sDialog BoxCreate,于是出现对话框编辑器如图8所示:图8 对话框编辑器界面(2) 在Dialog Box菜单中,选择New按钮,出现新的对话框,如图9所示。图9 创建一个新的对话框(3) 在Name栏中输入你的对话框的标题,然后选择想在对话框上添加的默认按钮。(4) 选择OK按钮完成设置,于是出现一个新对话框如图10所示。我们可以在该对话框界面上添加和修改按钮等相关操作。图10 创建的新对话框4.2.2修改对话框可以利用对话框编辑器对创建好的对话框进行修改,可以添加各种不同的界面对象到对话框中,设计布局、外观、命令和对话框对象的大小等。具体做法为:(1) 选择在ToolsDia
31、log BoxModify,出现数据库向导。(2) 选择想修改的对话框,在从Tools菜单选择对话框编辑器之后,通过双击出现的对话框的背景,这样就显示对话框编辑器并可以修改对话框了。4.2.3增加界面对象到用户定制对话框可以利用对话框编辑器为用户定制对话框添加界面对象,ADAMS/View对话框的界面对象有以下几种类型。(1) Label显示对话框中的文字和图象。(2) Field提供输入文字和数值的空间。(3) Button激活操作;在按钮上有显示该操作的图象,标题或文字。(4) Toggle button显示激活状态。(5) Seperator划一条水平线。(6) Slider设置对象的数
32、值而不用键入数据。(7) Option menu从多个选择中挑选一个,有弹出式图框以显示整个菜单。(8) Button stack设置状态。(9) Button stack包含多个按钮,可通过右键弹出所有按钮。(10) Container可添加信息。利用对话框编辑器为用户定制对话框添加界面对象的步骤为:(1) 在Create菜单中,选择想添加的对象。(2) 将鼠标放在想添加对象的对话框中。(3) 放下鼠标左键,并拖动来创建对象。所有界面对象的属性都可以通过对话框编辑器进行修改。4.2.4在对话框中使用命令在用户定制对话框中,大多数界面对象都对应着一个ADAMS/View可执行命令,这些命令是为
33、了完成用户希望的某项功能,或改变模型,或改变用户输入数据,或作出选择。.可以用ADAMS/View命令语言(cmd)来为对象创建命令。也可以通过命令向导来找到所需要的命令。一旦你找到命令,就可将它从命令窗口和log文件中拷贝,并粘贴或键入到命令编辑框。(1) 察看对象的命令可以通过如下操作查看界面对象所对应的命令:· 双击你想察看命令的对象。· 从菜单的Attribute选项中,选择Commands。(2) 将命令替换成文本在执行命令之前,ADAMS/View会执行一些文本替代操作。这些替代操作就是用界面对象的属性值来取代替换文本,并将其用在命令中。替代文本表字符为“$”,
34、表明替代文本的位置。有四种形式的替代文本:· $object_name其名字与界面对象的名字相同。当ADAMS/View执行命令时,它会将当前object_name的值替换为$object_name的值。如表3所示列出了不同界面对象的值。表3 不同界面对象的值对象数值含义Field(数据区)当前数据区内容Option-menu(可选菜单项)当前选定的数据Radio-box(状态设置框)当前选定的数据Toggle-button(开关按钮)当前定义的开关值Slide(滑动条)当前的滑动整数值例如,为将命令中的my_value值赋给参数,可用以下语句:my_command my_param
35、eter=$my_value如果数据区内容为123,那么在ADAMS/View中执行命令时:my_command my_parameter=123缺省情况下,选择菜单或状态设置框的值为显示或选择按钮的文字,也可以为ADAMS/View的替换指定别的值。在toggle button开关按钮值的属性中,由数据区来设置开关数值。在OptionMenu选项菜单和Radio Box状态控制栏,你可以用“|”符来分割多个选择。· $_value替换包含该对象命令的值。例如,如果是名字为“my_toggle”的按钮上的命令,则$_value的含义与$_toggle是相同的。在可能的情况下,应该使用
36、$_value的值来替代实际对象的值,因为这样更容易理解和维护。如果在命令中看见了$_value,应该知道它代表界面对象的值,另外,如果要改变对象的名字,也不必改变命令。这一点对于toggle buttons,radio box和option menu特别有用,因为这样可以在相关联的命令中改变这些对象的值。· $_self,$_parent,$_topgui它们可使对话框更容易理解和维护。例如,对话框能用以下命令调入它的子类的数据:interface field set field=$_self.myfield strings=一般应尽可能使用$_self或$_parent命令来指代对象名字,而不用真实的名字。· $_1,$_2,$_3用来指代窗口或对话框显示命令相关的参数,窗口或对话框以及它们的子类都可以在命令中使用$_1,$_2,$_3。当ADAMS/View执行命令时,它可替代参数的当前值。(3) 条件命令替换替换文本被包含在单引号内,如果在引号内的$name或$value为空,则ADAMS/View除去单引号之间的文本。如果返回文字为空(),该对象无效或不显示,则$name
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025班组安全培训考试试题附完整答案(夺冠系列)
- 2025年企业负责人安全培训考试试题含答案【培优】
- 2025年企业级安全培训考试试题附答案(突破训练)
- 2025民间房产抵押借款合同范本下载
- 2025授权采购石油居间合同
- 2025《酒店业劳动合同》
- 2025年新型静电消除器项目合作计划书
- 2025年建筑防水卷材及制品项目合作计划书
- 2025装饰设计工程承包合同范本模板
- 2025因合同期满离职信
- 超导材料介绍课件
- 2023年版劳动实践河北科学技术出版社一年级下册全册教案
- 民法典合同编全面解读课件
- 一年级下学期家长会ppt
- 空调维修保养安全文明保障方案
- 实验室操作的生物因子及其危害程度分级一览表
- 5000t新型干法水泥生产线回转窑工艺设计及及说明书
- 数控铣床进给系统结构设计说明书
- 智慧农业平台解决方案
- 《骑鹅旅行记》阅读题(有答案,内容全)
- ●粘度对离心泵性能影响最新标准初析及粘液泵选型经验
评论
0/150
提交评论