本练习将学习如何根据原始MDL创建子系统模型以及如何调用子系统模型。调用的语句包括*Include()、*DefineSystem()、*System()、*SetSystem()、*Attachment()
该练习分为两部分:第一部分通过手动编辑的方式创建并调用子系统,原始模型为5.5.1节中的单摆模型;第二部分使用MotionView创建并调用子系统。两部分模型创建完毕后分别进行多体系统动力学分析。复摆模型如图5-12所示。复摆模型参数如表5-7所示。
图5-12 复摆模型
表5-7 复摆模型参数
1.通过手动编辑的方式创建并调用子系统
STEP 01 创建子系统
子系统结构与MDL类似,仅需少量编辑即可将上节定义的单摆模型转换为较为通用的子系统模型。
(1)打开上节创建的(或chap05目录中的)pendulum.mdl模型。
(2)将模型中的*BeginMDL()和*EndMDL()分别替换成*DefineSystem()和*EndDefine(),为子系统指定适当的变量名。
(3)单摆子系统模型的定义需要以下信息:
● 连接位置(attachment point)。
● 连接对象(attachment body)。
这里使用att_point和att_body作为连接对象的变量名。
(4)在*DefineSystem()中定义连接信息,如下所示:
注:连接对象可以是任意一种MDL对象。为便于模型调试,建议定义可读性较强的连接对象变量名,如使用att_point表示点对象。
(5)使用*Attachment语句定义各变量所代表的对象信息:
注:在原始MDL中,p_pendu_pivot表示支点。将单摆模型转换为单摆子系统时,该支点信息由连接点提供。
(6)此时p_pendu_pivot信息由连接点提供,不再需要定义支点。因此删去*Point(p_pendu_pivot,"Pivot Point")。
(7)保留pendulum CM point不变。
(8)保留*Body()语句,用以定义单摆体对象。
(9)*RevoluteJoint()语句连接B_Ground和p_pendu_pivot。这里分别使用att_body和att_point替代B_Ground和p_pendu_pivot。
(10)保留球体的外形语句*Graphic()。
(11)圆柱体的外形语句中参考了p_pendu_pivot。这里使用att_point替代p_pendu_pivot。
(12)保留*Output()语句,该语句用于输出模型中每个单摆体的位移信息。
(13)删除语句*setsystem(MODEL),*setpoint(p_pendu_pivot,0,5,5)。
(14)参数化子系统中的点坐标,在它们之间建立相互关系。这里,使用(att_point.y+5,att_point.z+5)定义CM点的坐标。
(15)定义完毕的模型如下所示:
*EndDefine()
(16)将模型保存为system.mdl。
STEP 02 调用子系统
上步定义了一个可重用的单摆子系统。本步将进行该子系统的实例化。通过手动编辑的方式,创建一个MDL模型,其中包含子系统定义及多次调用。
(1)打开文本编辑器,在新的会话中输入*BeginMDL()开始一个模型。
(2)使用*Include()调用子系统system.mdl,如下所示:
(3)使用*System()实例化第一个单摆子系统,如下所示:
进行子系统实例化时需注意:
● 在*System()语句中通过指定子系统的变量名来调用子系统,该变量名与子系统*DefineSystem()语句定义的变量名一致。这里system1通过sys_def_pendulum调用。
● 如果子系统中包含连接信息,则在进行实例化时需要编辑连接信息。例如,在子系统sys_def_pendulum中*RevJoint()将单摆与连接体对象att_body相连。这里希望将单摆与大地相连,因此将att_body设置为B_Ground。
重复上述步骤,创建第二个单摆子系统。
(4)使用*EndMDL()语句结束模型定义
(5)将文本编辑器中创建的MDL以文件名doublependulum.mdl进行保存。定义完毕的模型,如下所示:
STEP 03 保存并递交求解
(1)如果使用TextView进行文本编辑,那么在TextView界面下单击按钮,新建一个页面。
(2)将界面切换到MotionView。
(3)单击“打开模型”按钮,或通过下拉菜单选择File→Open→Model命令。
(4)在弹出的Open Model对话框中,选择此前创建的doublependulum.mdl模型文件。
(5)单击Open按钮,载入模型,如图5-13所示。
图5-13 doublependulum模型
(6)通过模型浏览树查看由文本编辑器建立的模型在MotionView界面下的对应关系。
(7)在Tools菜单中选择Check Model命令,检查模型是否有定义错误。
(8)在SolverMode菜单下选择MotionSolve。
(9)单击工具栏中的Run按钮,进入Run面板,设置分析类型为Transient。
(10)进入Simulation Parameter标签,设置End Time为2。
(11)进入Transient标签,查看积分器的相关参数设置。
(12)返回Main标签,单击“文件浏览”按钮,指定工作目录,以doublependulum.xml保存模型。
(13)单击Run按钮,求解模型。
(14)求解结束后,单击Animate按钮查看复摆运动历程,单击Plot按钮查看指定的结果输出,如图5-14所示。
图5-14 复摆运动历程及结果曲线
2.使用MotionView创建并调用子系统
首先在MotionView中根据表5-8中的数据创建单摆子系统,然后将其装配到doublependulum.mdl上形成图5-15所示的三摆系统。
表5-8 单摆子系统模型参数
图5-15 三摆系统
STEP 01 创建子系统
(1)打开MotionView,新建一个会话。
(2)右击工具栏中的System/Analysis按钮。
(3)在弹出的Add System/Assembly对话框中选中Syetem单选按钮,单击Next按钮,如图5-16所示。
(4)进入Add System对话框,使用默认的名称创建子系统,如图5-17所示。
图5-16 Add System/Assembly对话框
图5-17 Add System对话框(www.daowen.com)
(5)单击OK按钮,进入System面板。
(6)单击Add按钮,在弹出的Add an Attachment对话框中设定连接对象名称为att_point。将连接对象类型设置为point,如图5-18所示。
图5-18 Add an Attachment对话框
(7)单击OK按钮。
(8)再次单击Add按钮,创建连接体对象,使用att_body作为连接对象名称,连接对象类型为body。
(9)单击OK按钮。
(10)连接对象创建完毕,主面板上的状态为Unresolved。在Point位置双击鼠标左键,在弹出的Select a Point对话框中选择Global Point作为连接点对象。类似地,双击Body按钮选择Ground Body作为连接体对象,如图5-19所示。
图5-19 System/Analysis面板
(11)在项目浏览树中的system 0位置右击,选择Add Reference Entity→Point(或在工具栏中的Points按钮处右击)。
注:子系统对象需要创建在相应的system系统文件夹下。
(12)在弹出的Add Point or PointPair对话框中创建标题为Mass CG、变量名为p_cg的点,如图5-20所示。在默认情况下,该点从属于system 0系统。
(13)在Point面板的Properties标签中单击Y文本框,然后再单击面板上端的fx按钮。
图5-20 Add Point or PointPair对话框
(14)在弹出的表达式编辑器的Properties标签中找到连接点的y分量,单击Add按钮,将其加载到文本框中,然后输入“+5”,如图5-21所示。
图5-21 表达式编辑器
(15)按照上步的操作,使用arg_0.x参数定义X点,使用表达式arg_0.z+5参数化定义Z点。参数化定义的点坐标区域呈蓝色背景显示,如图5-22所示。
图5-22 Points面板
(16)在项目浏览树的system 0位置右击,选择Add Renference Entity→Body,使用默认的标题与变量名创建一个几何体。
(17)在Body面板的Properties标签中输入图5-23所示数据。
图5-23 Bodies面板(Properties标签)
(18)单击CM Coordinates标签,选中Use center of mass coordinate system复选框,选择Mass CG作为质心点,如图5-24所示。
图5-24 Bodies面板(CM Coordinates标签)
(19)在项目浏览树的system 0位置右击,选择Add Constraint→Joint,使用默认的标题与变量名新建一个旋转副(铰链类型为Revolute Joint)。
(20)在Joint面板中,Body1选择上步创建的Body0,双击Body2按钮,在弹出的Select a Body对话框中选择system0中的连接体对象。类似地,选择system0中的连接点对象作为旋转副的支点,旋转方向设置为全局坐标系的X轴,如图5-25所示。
图5-25 Joint面板
Joint面板中显示的Body 2是参数化几何体,指代att_body。同理,Point指代att_point。
(21)在项目浏览树的system 0位置右击,选择Add Reference Entity→Graphic,使用默认的标题创建一个圆柱图形(Cylinder)。
(22)在Graphic面板的Connectivity标签中单击Body按钮,选择System0中的Body0作为圆柱图形所从属的几何体对象。单击Point按钮,选择Mass CG作为圆柱图形的起点,选择连接点(att_point)定义圆柱副的建模方向,如图5-26所示。在Properties标签中,指定圆柱半径为0.5。
图5-26 Graphic面板(步骤20)
(23)按照上述步骤,在System0中创建一个球体图形(Sphere),选取Body0作为球体所从属的几何体,Mass CG作为球心。在Properties标签中,指定球体半径为1,如图5-27所示。
图5-27 Graphic面板(步骤21)
(24)单击工具栏中的System/Assembly按钮,进入Import/Export标签,选中Export单选按钮,指定子系统保存的路径与名称并单击Quick Export。
此时,上述步骤创建的模型将以子系统的形式保存在工作路径,如图5-28所示。
图5-28 System/Assembly面板(Import/Export标签)
注:使用MotionView保存和输入子系统,只能通过System/Analysis面板下的Import/Export功能。
(25)使用文本编辑器打开保存的子系统模型,完整的定义如下所示:
检查*Attachment行最后一项是否有参数,如果有,则将其删除,然后保存模型。例如,下述语句中P_Global_Origin指在子系统建模时用于等效连接点的全局坐标系原点,使用子系统时需要指定连接点,以将子系统连接到其他系统上,因此这里可以将其删去。
STEP 02 调用子系统
(1)打开MotionView,新建一个会话。
(2)单击Open Model按钮,载入本节第一部分创建的doublependulum.mdl模型,如图5-29所示。
(3)单击工具栏中的System/Assembly按钮,进入Import/Export标签。
(4)激活Import选项,选择上步创建的子系统subsystem.mdl模型。
(5)单击Import按钮。
(6)在弹出的Specify entity details对话框中使用默认的名称,单击OK按钮,如图5-30所示。
图5-29 doublependulum模型
图5-30 Specify entity details对话框
(7)单击项目浏览树中的System 0,然后单击主面板区域的System/Assembly面板中的Attachments标签。此时子系统的连接信息是空置状态,如图5-31所示。
图5-31 System/Assembly面板(Attachments标签)
(8)单击Point按钮,在图形区选择YZ视图下右上端的球心Pendulum CM,如图5-32所示。此步操作用于指定子系统中旋转副的支点位置。
(9)单击Body按钮,在图形区选择YZ视图下的右上端球体Pendulum Body,如图5-33所示。此操作用于指定子系统中旋转副连接的体对象。
图5-32 指定连接点
图5-33 指定连接对象
(10)在Tools中选择Check Model命令,以检查模型是否有定义错误。
(11)选择File→Save As命令,保存模型为triplependulum.mdl。
(12)在SolverMode菜单中选择MotionSolve。
(13)单击工具栏中的Run按钮,进入Run面板,设置分析类型为Transient。
(14)进入Simulation Parameter标签,设置End Time为2。
(15)进入Transient标签,查看积分器的相关参数设置。
(16)返回Main标签,单击“文件浏览”按钮,指定工作目录,以triplependulum.xml保存模型。
(17)单击Run按钮,求解模型。
(18)求解结束后,单击Animate按钮查看三摆系统运动历程,单击Plot按钮查看指定的结果输出,如图5-34所示。
图5-34 三摆系统分析结果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。