You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenModelica中测量梁挠度?附代码问题求助

OpenModelica悬臂梁挠度问题排查:载荷变化后挠度无响应

针对你用OpenModelica求解悬臂梁挠度时,更改载荷后挠度无变化的问题,直接梳理核心问题和修复方案:

核心问题分析

  1. 未定义变量N:代码中计算挠度时使用了eMBS_Body.frame_node[N],但N从未被定义,编译器无法识别目标节点,导致读取的不是梁端部的位置数据。
  2. 载荷未实际作用到梁上:仅给tipForce赋值了力分量,但未将tipForce的frame_b接口连接到梁的端部节点,载荷完全没有传递到梁体,自然挠度不会随载荷变化。
  3. 仿真设置冗余:StopTime设为500秒对于静态挠度计算来说过长,建议改用稳态求解器或缩短至足够梁达到稳态的时长。

修正后的代码

model FlexibleBeam_Deflection
  extends Modelica.Icons.Example;
  inner Modelica.Mechanics.MultiBody.World world(label2 = "z", g = 9.81, n = {0, 0, -1}) 
    annotation(Placement(transformation(origin = {0, 10}, extent = {{-80, -10}, {-60, 10}})));
  
  // 定义节点数常量,避免未定义变量问题
  parameter Integer numNodes = 3;
  Components.EMBS_Body eMBS_Body(numModes = 10, 
    SIDfileName = Modelica.Utilities.Files.loadResource("modelica://EMBSlib/tt4.SID_FEM"), 
    numNodes = numNodes, d = 0.1) 
    annotation(Placement(transformation(origin = {-30, 10}, extent = {{-10, -10}, {10, 10}})));
  
  Modelica.Mechanics.MultiBody.Parts.Fixed fixed 
    annotation(Placement(transformation(origin = {-66, 34}, extent = {{10, -5}, {21, 12}})));
  
  Modelica.Blocks.Interfaces.RealOutput tipDeflection 
    annotation(Placement(transformation(origin = {14, -18}, extent = {{28, -28}, {35, 7}}), 
    iconTransformation(extent = {{40, -10}, {60, 10}})));
  
  Modelica.Blocks.Sources.Constant Fz(k = -400);  // z方向载荷(牛顿)
  Modelica.Mechanics.MultiBody.Forces.WorldForce tipForce(diameter = 0.008, color = {255, 255, 0}, 
    resolveInFrame = Modelica.Mechanics.MultiBody.Types.ResolveInFrameB.world) 
    annotation(Placement(transformation(origin = {-6, 10}, extent = {{40, -10}, {60, 10}}), 
    iconTransformation(extent = {{40, -10}, {60, 10}})));

equation
  connect(fixed.frame_b, eMBS_Body.frame_node[1]) 
    annotation(Line(points = {{-45, 37.5}, {-40, 37.5}, {-40, 10}, {-20, 10}}, color = {95, 95, 95}));
  connect(world.frame_b, eMBS_Body.frame_ref);
  // 连接载荷到梁的端部节点,确保载荷生效
  connect(tipForce.frame_b, eMBS_Body.frame_node[numNodes]);
  
  // 使用定义好的节点数计算端部挠度
  tipDeflection = eMBS_Body.frame_node[numNodes].r_0[3] - eMBS_Body.frame_ref.r_0[3];
  
  tipForce.force[3] = Fz.y; // z方向载荷分量
  tipForce.force[1] = 0; // x方向无载荷
  tipForce.force[2] = 0; // y方向无载荷
  
  // 调整仿真设置,改用稳态求解器提升效率
  annotation(experiment(StopTime = 10, Interval = 1e-3, __DSSOLVER__ = "DASSL"), 
    Diagram(coordinateSystem(preserveAspectRatio = false, extent = {{-100, -100}, {100, 100}})));
end FlexibleBeam_Deflection;

关键修改说明

  • 新增parameter Integer numNodes = 3,统一节点数定义,解决未定义变量N的问题;
  • 添加connect(tipForce.frame_b, eMBS_Body.frame_node[numNodes]);,将载荷连接到梁的端部节点,确保载荷传递到梁体;
  • 调整仿真设置,改用DASSL求解器并缩短StopTime,更快得到稳态挠度结果;
  • 替换挠度计算中的N为numNodes,确保读取的是梁端部节点的位置数据。

内容的提问来源于stack exchange,提问作者Kabir Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 16:33:23