问题标签 [systemmodeler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
53 浏览

modelica - 如何使用 SMPM 和逆变器修复“模型未全局平衡”

根据示例Modelica.Electrical.Machines.Examples.SynchronousInductionMachines.SMPM_VoltageSource,我正在尝试使用逆变器Modelica.Electrical.PowerConverters.DCAC.MultiPhase2Level来为 SMPM 供电。不幸的是我得到了错误

仿真模型不是全局平衡的,有 337 个变量和 335 个方程

但我无法弄清楚缺少哪两个方程。

更让我困惑的是,如果我删除和源signalPWM,模型是平衡的。inverterconstantVoltage

有人可能知道如何解决这个问题,以便我可以运行这个模型吗?

任何帮助将不胜感激!

0 投票
1 回答
129 浏览

modelica - 如何为 Wolfram SystemModeler 编写脚本以运行多个模拟?

我想用我的模型改变两个参数运行大约 100 次模拟,fTLoad跟踪相电流currentSensor.i[1]等的变化。

现在我坚持使用 Wolfram 网站上的文档,因为没有明确说明如何使用 SystemModeler 编写脚本。例如,我在 Wolfram 网站上找到了这个链接,其中包含一些代码,但没有解释我应该在哪个命令行中使用它。

我下载了 WolframScript 程序并尝试用它打开我的模型,wolframscript -file SMPM_VoltageSource_Inverter.mo但它说ToExpression::sntx: Invalid syntax in or before ...我的模型模拟完全正常并且在 SimulationCenter 中没有任何错误。

有人可以向我解释一下:

  • 是否可以编写脚本?

如果是:

  • 如何模拟我的模型?
  • 如何对f和进行参数扫描TLoad?是否如链接中所述?
  • 是否可以将数据导出currentSensor.i[1]为 csv 文件?怎么做?

感谢您的任何帮助!

0 投票
1 回答
197 浏览

modelica - Modelica 中的逆变器和 PMSM 的 PI-Controller 未达到参考值

我正在尝试研究 Modelica 示例Modelica.Electrical.Machines.Examples.SynchronousInductionMachines.SMPM_VoltageSource ,但我用signalVoltage一个逆变器和一个signalPWM基于Modelica.Electrical.PowerConverters.DCDC.Control.SignalPWM. 因此,我想研究 PWM 调制电压,而不是正弦电压。问题是由于控制器的积分部分,控制器不断线性增加其输出,因为它从未达到所需 q 电流的参考值。此外,它输出voltageController.y[1][24E3,...,150E3] 范围内的奇怪值,这可能是问题所在。

控制器输出: 在此处输入图像描述

和当前输出: 在此处输入图像描述

不幸的是,我不明白为什么控制器可以在正弦电压下正常工作,而不能在 PWM 电压下正常工作。

下面是我的主要模型:

和信号PWM模型:

编辑:我已经降低了所需的 q 电流从Idq={0,84} AtoIdq={0,10} A和负载从TLoad = 120 NmtoTLoad = 5 Nm并且仍然从voltageController.

  • 有人可能知道如何解决控制器的问题,以便我获得适当的模拟结果?
  • 为什么无法达到 MSL 示例中的参考值?PWM 模块有那么大的问题吗?
  • 模拟的这种行为让我感到困惑,因为我使用的是真正的电机和 PWM 控制,并且它在类似的配置下也能正常工作。

任何帮助将不胜感激!

0 投票
1 回答
948 浏览

modelica - 不同的 Modelica 仿真环境有什么区别?

有不同的 Modelica 仿真环境,包括 Dymola、Wolfram SystemModeler、OpenModelica 和 Jmodelica。所以,我尝试加载一个热流体库(ThermoSysPro https://github.com/Dwarf-Planet-Project/ThermoSysPro),但除了 Dymola,其他软件上的结果都以错误结束。

如果库和仿真环境都基于 Modelica 规范标准,为什么会出现兼容性问题?我认为该库可能包含一些仅由 Dymola 支持的功能。谁能澄清这些模拟环境之间的区别?

0 投票
2 回答
116 浏览

modelica - Modelica 变量未在此范围内声明

下面的 Modelica 模型通过了验证:

但是当我尝试模拟它时,编译代码中出现错误:

一定有一些基本的东西我不理解,为什么这个循环不模拟?如果我删除 h 值的第二个子句并使其简单地h[j] := has_heater[j]模拟工作。

0 投票
2 回答
58 浏览

function - 默认表达式可以引用函数声明中的其他输入吗?

在 Modelica中,我想实现一个functionclipClip与 Wolfram 语言类似的调用。也就是说,该函数将获取一个值列表x并返回一个相同长度的向量y,其中对于每个组件,我们都有一个分段函数

所以我们应该看到以下结果

我的方法如下:

请注意,这里的默认表达式extremes引用x_range本身具有默认表达式的输入{-1, 1}

不幸的是,我在 Wolfram SystemModeler 12.0 和OpenModelica (OMEdit v.1.13.2)中得到了错误的结果,它甚至无法编译

我的问题是:

  1. 根据规范,上述功能是否合法 Modelica 代码?
  2. 不管(1.)是否有另一种方法可以做到这一点?
0 投票
0 回答
280 浏览

modelica - 重新声明数组组件的可替换参数的正确语法

我开发了一个相当广泛地使用可替换记录的模型。参数被传递给组件数组。我尝试了两种方法来做到这一点,但它们都不能在我所有的测试环境 SimulationX (SimX)、OpenModelica (OM)、Dymola 和 Wolfram SystemModeler (WSM) 中工作。

让我们考虑一个简化的包来说明我的问题。根据所选的 sumbodel,模型计算可替换记录参数的总和或乘积。我尝试了两种方法来更改子模型中的记录。

  • 方法一:通过修改重新声明子模型记录(MOD)
  • 方法二:重新声明对应的内部记录,改变子模型(IO)内的外部记录

该软件包包含一个示例,其中包含 4 个模型,每个模型具有不同的 MOD 和 IO 记录/子模型组合。

  • 这两种方法在 SimX 中都能正常工作
  • Dymola 使用 MOD 方法正确模拟,但会产生 IO 错误
  • OM 可以模拟模型,但不能为所有场景产生正确的结果
  • WSM 会生成有关我提到的记录的警告消息,但会模拟正确的结果。

为了便于阅读,我从显示的代码中删除了示例和注释,但可以在此处下载完整的包:https ://hessenbox.tu-darmstadt.de/getlink/fiEgNjMEBZpSyJWHKafmoYYS/RedeclareTestPackage.rar

OM 中的错误消息为:

翻译警告 [RedeclareTestPackage: 39:3-39:84]:找不到外部组件 subModelDataset 的内部声明并自动生成。

奇怪的是,只有重新声明数据集和带有内部/外部的子模型的组合才会产生消息并且无法正确模拟。其他一切正常。

WSM 会为这两种方法生成错误消息。MOD方法产生例如:

警告:在变量或组件“MOD_ADD_1and2.submodel.subModelDataset”中:重复修改元素 =(无类型)1.0 和每个 =(类型)1.0 DAE.PROP(Real,C_CONST),值:组件上的 1.0 无论如何。

警告:重复修改元素 =(untyped) 1.0 和 each = (typed)1.0 DAE.PROP(Real, C_CONST), value: 1.0 on component 不管。

IO 方法的 WSM 示例如下:

警告:忽略外部元素的修改: IO_ADD_1and2.submodel[1,1].subModelDataset 。

不过,所有模型都在 WSM 中模拟了正确的结果。Dymola 仅适用于修改示例,内部/外部重新声明会产生如下错误:

Replaceable 必须是约束类的子类型。但是组件 subModelDataset 的内部/外部限定符不同。在组件 subModelDataset 的声明中:文件:C:/.../RedeclareTestPackage/RedeclareTestPackage.mo,第 39 行 subModelDataset 的原始声明:文件:C:/.../RedeclareTestPackage/RedeclareTestPackage.mo,第 39 行上下文:RedeclareTestPackage.partialSubModelType_innerOuter .subModelDataset

如果有人能启发我,我将不胜感激。我的实际模型在 SimX 中运行良好,但在我看来,Modelica 的主要原因之一是开发独立于供应商的模型,以便能够与大型社区共享它们。

最好的问候朱利安

0 投票
1 回答
152 浏览

wolfram-mathematica - Dymola 是否有类似 Wolfram 系统建模器的“方程浏览器”功能?

Wolfram 系统建模器有一个叫做“方程浏览器”的功能,这里的 youtube 视频(20:58)给出了关于“方程浏览器”的介绍,我想知道 Dymola 是否有同样的功能,它对调试非线性系统会有帮助。
此外,欢迎使用其他一些解决方法,例如使用 python 来可视化方程结构。

这是“方程式浏览器”的屏幕截图。
在此处输入图像描述

0 投票
1 回答
74 浏览

modelica - 如何拥有可更换类型的因果连接器?

虽然高级 Modelica 教程:开发 Modelica 库是从 2003 年开始的,但我仍然相信第 29 页中的代码会给出一个因果关系connector( RealPort) 和replaceable type

虽然此代码在 Wolfram 的当前版本中有效SystemModeler,但Open Modelica v1.16.0-dev.03 (64-bit)抱怨并给出以下错误:

'extends SignalType' 中的类 'SignalType' 是可替换的,基类名称必须是可传递不可替换的。

那么,关于这里的传递不可替换性以及如何正确地做到这一点,谁是正确的?

参考:

  • 第 6.2.1 节Modelica 语言规范 v3.5-dev (" Transitive non-Replaceable ")

  • 第 7.1.4 节Modelica 语言规范 v3.5-dev(“对基类的限制和将类型约束为传递不可替换”)

0 投票
1 回答
82 浏览

modelica - 为什么在函数中使用灵活的数组输入会在 OpenModelica 中引发翻译错误?

在我看来,以下简单function的 Modelica 代码是完全合法的:

使用Check ModelinOpenModelica v1.16.2 (64-bit)会引发错误:

Modelica 代码有问题还是 OME 问题?

编辑

只是为了表明,这实际上不是一个明确的案例:
这是foo在 Wolfram System Modeler 12.2 中验证时得到的消息:

[3] 10:59 验证函数 foo
验证函数 foo 成功完成。