3. Simpack建模环境
Simpack 的建模环境并不是一个“画图窗口”,而是一套以模型树为骨架、以参考坐标系为空间基准、以单位系统为数值基准的数据库式建模框架。理解这三者的关系,比记住某个菜单在哪里更重要:模型树决定“对象放在哪里、谁依赖谁”,参考坐标系决定“位置和方向相对谁定义”,单位系统决定“输入的数字按什么物理量解释”。本节围绕这三条主线,给出可操作的设置方法。
一、模型树:模型的唯一权威结构
打开 Simpack 后,左侧的模型树(Model Tree)以层级方式列出整个模型。典型的一级节点包括:Model(模型根)、Bodies(体)、Joints(铰接/约束)、Force Elements(力元)、Subsystems(子系统)、Sensors(传感器)、Measurements(测量)等。每个节点下再挂具体对象,例如 Bodies 下可能有 Chassis、Wheel_Front_L 等。
模型树的关键规则有三条。第一,对象必须挂在正确的父节点下:体不能直接挂在 Joints 下,力元也不能挂在 Bodies 下。第二,名称即引用:力元、铰接、传感器在定义时通过对象名引用其他对象,因此重命名会触发引用更新,但手工在外部文本中改名字会导致引用断裂。第三,树中的顺序不代表求解顺序,Simpack 在生成方程时会根据拓扑关系自动排序,因此不要试图通过拖动节点来“调整计算顺序”。
实际操作中,建议在建模前先规划命名前缀,例如用 B_ 表示体、J_ 表示铰接、F_ 表示力元、S_ 表示传感器。这样在模型树中展开时,对象类型一目了然,也便于在力元表达式中快速找到目标对象。
二、子系统:把重复结构封装成可复用单元
子系统(Subsystem)是 Simpack 中实现“一次定义、多次实例化”的机制。它本质上是一个局部模型,拥有自己的体、铰接、力元和局部参考坐标系,然后作为一个整体被插入到上级模型中。典型应用包括:四分之一车辆悬架、单轮转向节总成、电机-减速器总成、机械臂的单个关节模块。
创建子系统的标准流程是:在模型树中右键 Subsystems → New,输入子系统名称;进入子系统编辑界面后,像建普通模型一样建立其内部对象;完成后返回上级模型,通过 Insert Subsystem 将其实例化。每个实例可以有自己的安装位置和安装方向,但内部拓扑保持不变。
需要特别注意两点。其一,子系统内部的局部参考坐标系是子系统的“安装接口”,实例化时就是把这个局部坐标系对齐到上级模型的某个参考坐标系。其二,子系统内部的参数如果需要在不同实例间变化,应将其提升为参数或使用参数集,而不是在每个实例中手工改数值,否则复用价值会大打折扣。
三、参考坐标系:位置与方向的共同基准
Simpack 中所有位置、方向、速度、力都必须在某个参考坐标系下定义。常见的参考坐标系类型包括:
- 全局坐标系(Global / Ground):整个模型的绝对基准,通常取重力方向为 -Z 或 -Y,取决于单位系统与行业约定。
- 体参考坐标系(Body Reference Frame):每个体自带的局部坐标系,体的质心位置、惯量张量通常相对它定义。
- 标记点(Marker):挂在体上的局部点,用于定义铰接位置、力元作用点、传感器测点。
- 参考坐标系(Reference Frame):独立于体的坐标系,常用于定义子系统安装接口、测量基准或中间变换。
设置参考坐标系时,必须同时明确原点位置和三轴方向。例如,定义一个悬架下摆臂的转动铰接,需要指定铰接点在全局坐标系下的位置,以及铰接轴的方向向量。如果方向向量写反,铰接的转动正方向就会相反,后续力元或传感器的符号也会整体反号。
四、单位系统:数值的物理含义
Simpack 允许在模型级别设置单位系统,常见选项包括 SI(m、kg、s、N、rad)、mm-t-s(mm、t、s、N、rad)以及自定义单位。单位系统一旦设定,模型树中所有数值输入都按该单位解释,求解器内部通常统一转换为 SI 进行计算,输出时再转换回用户单位。
设置单位系统的位置一般在 Model → Properties → Units 或全局首选项中。需要重点检查的物理量包括:长度、质量、时间、力、力矩、角度、频率。例如,若选择 mm-t-s,则长度输入 500 表示 500 mm,质量输入 1.2 表示 1.2 t,力输入 1000 表示 1000 N。若误把 mm 当 m 输入,模型尺寸会放大 1000 倍,重力、惯量和接触刚度都会严重失真。
一个实用的检查方法是:建模完成后,查看模型树中关键体的质量属性,确认总质量与工程估算一致;再查看重力加速度的数值,确认其单位与长度单位匹配。例如在 mm-t-s 下,重力加速度应输入 9810(mm/s²),而不是 9.81。
五、四者协同:一次完整的设置示例
下面以一个简化的单轮悬架模型为例,说明模型树、子系统、参考坐标系和单位系统如何协同工作。假设采用 mm-t-s 单位制,全局坐标系 Z 轴向上,重力沿 -Z。
Model: Suspension_Demo
Units: mm-t-s, angle = rad
Gravity: (0, 0, -9810) mm/s^2
Subsystems:
Sub_WheelAssembly
Local Ref Frame: origin at wheel center, X forward, Z up
Bodies: B_Hub, B_Rim, B_Tire
Joints: J_Spindle (revolute about local Y)
Force Elements: F_TireRadial, F_TireLateral
Bodies:
B_Chassis
Marker: M_LowerArmFront at (0, -750, 350) mm
Marker: M_LowerArmRear at (0, 750, 350) mm
Joints:
J_LowerArmFront: revolute, axis (1,0,0), between B_Chassis.M_LowerArmFront and Sub_WheelAssembly.LocalRef
Sensors:
S_WheelTravel: relative Z displacement between B_Chassis and Sub_WheelAssembly
在这个示例中,子系统 Sub_WheelAssembly 的局部参考坐标系原点设在轮心,方向为 X 向前、Z 向上。实例化时,把这个局部坐标系安装到 B_Chassis 的 M_LowerArmFront 附近,并通过铰接 J_LowerArmFront 约束相对运动。传感器 S_WheelTravel 测量轮心相对车身的 Z 向位移,用于观察悬架跳动。
判断设置是否正确,可以按以下顺序检查:单位系统下重力数值是否为 9810;模型树中体、铰接、力元是否挂在正确父节点;子系统实例的安装位置是否与设计值一致;铰接轴方向是否与预期正方向一致;传感器读数在静平衡时是否接近设计载荷下的理论值。若其中任一项异常,优先回到参考坐标系和单位系统排查,而不是直接修改力元参数。
最后强调一个常见误区:很多初学者在模型报错时第一反应是修改力元参数或求解器设置,但实际问题往往出在参考坐标系的方向或单位系统的量纲上。建议养成“先查树、再查系、后查单位、最后查参数”的排查顺序,这样能显著减少无效调试时间。