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

Modelica Playground报‘Internal error function lexer failed’错误的解决方法

问题:Modelica Playground双摆模型报错Internal error function lexer failed

我在Modelica Playground中构建双摆模型时,系统提示Internal error function lexer failed错误,不确定是模型本身问题还是平台问题,求修复方法。

我的模型代码:

constant Real speed=0.2;
  constant Real gravity(unit="m/s2")=9.8 * speed;
  constant Real length(unit="m")=1;
  constant Real length2(unit="m")=1;
  constant Real mass(unit="kg")=1;
  constant Real mass2(unit="kg")=1;
  Real angle(unit="rad");
  Real momentum(unit="kg m/s");
  Real angle2(unit="rad");
  Real momentum2(unit="kg m/s");

initial equation
  angle = 130 * (3.142 / 180);
  momentum = 0;
  angle2 = 0; // relative to vertical
  momentum2 = 0;
equation
  der(angle) = (6/(mass * length^2)) * ((2 * momentum - 3 * cos(angle - angle2) * momentum2)/(16 - 9 * cos(angle - angle2)^2));
  der(momentum) = -0.5 * mass * length^2 * (der(angle) * der(angle2) * sin(angle - angle2) + (3 * (gravity / length) * sin(angle)));

  der(angle2) = (6/(mass2 * length2^2)) * ((8 * momentum2 - 3 * cos(angle - angle2) * momentum)/(16 - 9 * cos(angle - angle2)^2));
  der(momentum2) = -0.5 * mass2 * length2^2 * (-der(angle) * der(angle2) * sin(angle - angle2) + (3 * (gravity / length2) * sin(angle2)));

  //annotation(experiment(StartTime=0,StopTime=200)); // todo find out how this works

修复方案

1. 修正语法解析问题

Lexer错误大多源于语法不符合解析器预期,优先排查以下点:

  • 单位字符串空格替换:Modelica要求单位中的空格用下划线替代,比如momentum(unit="kg m/s")需改为momentum(unit="kg_m/s"),所有带空格的单位都要修正。
  • 表达式优先级歧义消除:给cos(angle - angle2)^2添加外层括号,写成(cos(angle - angle2))^2,避免解析器对运算顺序产生误解。
  • 常量计算方式调整:避免在常量定义中直接引用其他常量计算(如gravity=9.8 * speed),直接赋值计算结果,比如constant Real gravity(unit="m/s2")=1.96;,减少解析器的依赖处理压力。

2. 逐步排查定位问题

  • 先注释掉所有方程,仅保留变量定义和初始方程,确认模型能正常解析。再逐步添加方程,定位引发错误的具体语句。
  • 暂时移除所有unit属性,先让模型编译通过,验证逻辑无误后再重新添加单位定义。

3. 平台兼容性处理

如果本地Modelica工具(如OpenModelica、Dymola)能正常运行修正后的代码,说明是Playground平台的解析器问题:

  • 清理浏览器缓存后重新粘贴代码,避免旧缓存干扰。
  • 用平台自带的示例模型测试,确认平台本身运行正常。

修正后的示例代码
constant Real speed=0.2;
constant Real gravity(unit="m/s2")=1.96;
constant Real length(unit="m")=1;
constant Real length2(unit="m")=1;
constant Real mass(unit="kg")=1;
constant Real mass2(unit="kg")=1;
Real angle(unit="rad");
Real momentum(unit="kg_m/s");
Real angle2(unit="rad");
Real momentum2(unit="kg_m/s");

initial equation
  angle = 130 * (3.142 / 180);
  momentum = 0;
  angle2 = 0;
  momentum2 = 0;
equation
  der(angle) = (6/(mass * length^2)) * ((2 * momentum - 3 * cos(angle - angle2) * momentum2)/(16 - 9 * (cos(angle - angle2))^2));
  der(momentum) = -0.5 * mass * length^2 * (der(angle) * der(angle2) * sin(angle - angle2) + (3 * (gravity / length) * sin(angle)));

  der(angle2) = (6/(mass2 * length2^2)) * ((8 * momentum2 - 3 * cos(angle - angle2) * momentum)/(16 - 9 * (cos(angle - angle2))^2));
  der(momentum2) = -0.5 * mass2 * length2^2 * (-der(angle) * der(angle2) * sin(angle - angle2) + (3 * (gravity / length2) * sin(angle2)));

annotation(experiment(StartTime=0, StopTime=200));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:02:29