问题标签 [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 回答
92 浏览

modelica - 为什么连接器的图形注释在重新声明时不被继承?

我正在为系统动力学建模创建一个库,它与Cellier现有的免费库不同,它使用非因果连接器。对于“流” - 元素我有一个GenericFlow定义接口的类:

洋红色FlowPort连接器被声明为replaceable- System Modeler 中的图标如下所示:

带有 FlowPort 连接器的部分模型 GenericFlow 的图标

对于一些特殊情况,我将使用不同的端口,一个称为连接器SpecialFlowPort的连接器被可视化为红色方块。举个例子,下面是一个名为的类Outflow,它将重新声明用于其端口之一的连接器类(即 portA):

它的图标将自动显示已交换为 portA 的红色 SpecialFlowPort(在左侧):

模型流出的图标,显示重新声明的连接器

但是,当我在新模型中使用此组件(拖放)时,它将显示两个洋红色端口,并且在悬停在端口上时 System Modeler 会将类名命名为FlowPort- 而不是SpecialFlowPort

所有的颜色都去哪儿了?

但是组件的行为是正确的,并且禁止将洋红色FlowPort端口与所示的左侧端口连接。Outflow

难道我做错了什么?为什么在模型中使用重新声明的连接器的类的图形注释正确显示?

更新

来自 Wolfram MathCore 的 Otto Tronarp 正确地指出,上面的示例并不完整,因为我没有包含图形注释(这通常会使代码不可读,但在这种情况下相当重要)。

因此,为了提供SSCCE,我将在此处包含他的示例:

Outflow在 WSM 4.3 的模型图中使用此包中定义的类将显示错误的图形注释(例如,两个绿色而不是一个红色和一个绿色连接器)。

0 投票
2 回答
320 浏览

precision - 集成延迟脉冲信号的数值问题 (fixedDelay)

我注意到在 Modelica 中集成延迟固定时间的脉冲输入的数值问题(使用 Wolfram System Modeler 4.3):

模型图

对周期 = 1/a、幅度 = a、宽度 = 100 % 的脉冲进行积分应该得到 1.0。但从图中可以看出,这不是我得到的延迟脉冲:

X 和 Y 随时间变化的图

只有未延迟的信号才能使用 DASSL 给出正确的值。数值积分误差已经出现在period = 1/a = 1/8并且(自然地)随着a 的增长而增长。

什么是最好的补救措施?

0 投票
1 回答
235 浏览

events - 如何在 Modelica 中使用布尔开关来防止库存低于零?

问题描述

我正在构建一个库来支持系统动力学 (SD),例如 Modelica 中的建模。与Cellier 等人免费提供的库不同。我相信人们可以很好地利用非因果连接器:通过连接器将库存价值作为“潜在”传输可以构建紧凑的组件(例如流程 = 流程)。

在 SD 中,我们可能会将物质(“大众”)股票与可能变为负数的信息股票区分开来。为了支持这一点,我对质量端口使用以下定义(这里给出 a 的定义StockPort- 它的对应物 aFlowPort将简单地具有布尔输入变量而不是输出变量,稍后给出):

布尔开关指示原料的每个端口是否允许填充或排放。

对于“材料库存”,该stopOutflow开关应防止库存被排空到零以下。不幸的是,在下面的示例中,这将无法解决:库存将在略低于零的情况下耗尽。

使用连接器的最小示例

以下TestModel使用这些构建块:

  • function constrainedRate( indicated rate, stopInflow, stopOutflow)用于返回符合给定约束的速率(即布尔开关)

  • connector StockPort如上所述

  • connector FlowPort对应的StockPort
  • model MaterialStock一种库存成分,其成分StockPort不得低于零
  • model LinearDecline一个带有一个FlowPort(即 Sink)的流量元素,它模拟以恒定速率(此处设置为 1)排出连接的库存

模型简单地启动一个stockinitialValue = 5连接到process线性下降的一个declineRate = 1

使用 DASSL 从 模拟模型StartTime = 0揭示StopTime = 10变量的预期行为stock.outflow.stock

股票价值

不幸的是,该值略低于零t = 5.0

不知何故,事件(股票价值 <= 0)被检测到太晚了。我能做些什么?

(到目前为止,imo 不优雅的解决方法是使用when事件(状态事件)reinit将库存值归零。我在语句和布尔条件上使用noEvent包装器的实验if也没有成功。)

0 投票
0 回答
202 浏览

modelica - 在 Modelica 模拟中包含因果关系会导致模型展平时出现平移错误

我想模拟一个基于能量工作的质量弹簧模型的控制器:

但这会导致错误消息:

翻译错误

展平模型时出错

如果您能帮助我了解问题所在以及如何解决,我将不胜感激。

PS1。 SIMULINK也无法完成!

PS2。可以在这里看到新版本的代码。

P.S.3. According to this discussion on Discord, the algorithm section was not really meant for casual relations. More information about the keyword is here.

0 投票
1 回答
186 浏览

modelica - OpenModelica 抱怨不能为负的负值

这个问题之后,我修改了我在这里描述的基于能量的控制器,以避免出现负值sqrt

但是,它一直给我错误:

在时间 7.170000 违反了以下断言

模型错误:sqrt(K / m) 的参数是 -1.77973e-005 应该 >= 0

Integrator 尝试使用调用的断言来处理问题。

在时间 7.169500 违反了以下断言

模型错误:sqrt(K / m) 的参数是 -6.5459e-006 应该 >= 0

模型终止 | 模拟被当时的断言终止:7.1695

统计数据 

模拟过程失败。以代码 -1 退出。

如果您能帮助我了解问题所在以及如何解决,我将不胜感激。

0 投票
1 回答
108 浏览

runtime-error - 可以使用参数来设置组件的单位属性吗?

到目前为止,使用 Wolfram System Modeler 4.3 和 5.1 可以编译以下最小示例而不会出现错误:

但是随着 WSM 12.0 的新版本(版本的跳跃是由于与 Wolfram 的旗舰 Mathematica 的当前版本保持一致),我收到一条错误消息:

内部错误:Codegen.getValueString:非常量表达式:c.hasUnit

(注意:该错误是WSMLink'WSMSimulate在内部运行 System Modeler 12.0 的 Mathematica 12.0 中给出的;这里询问"InternalValues"上述模型的属性,因为我现在还没有安装 WSM 12.0)。

尝试在 OpenModelica [OMEdit v. 1.13.2 (64-bit)] 中模拟上述模型显示:

SimCodeUtil.mo: 8492:9-8492:218]: Internal error Unexpected expression (应该更早处理,可能在前端。Unit/displayUnit 表达式不是字符串文字:c.hasUnit

所以似乎设置单位属性我不能使用具有参数可变性的变量?为什么会这样 - 毕竟编译器在编译运行时可以硬连线单元就足够了(毕竟给定的模型将在 WSM 4.3 和 5.1 中运行而没有任何错误)?

编辑:从我的一个较旧问题的答案中,我相信至少可以使用最终参数来设置单位属性。进行最终修改(例如c( final hasUnit = "myUnit" ),不能解决问题。

0 投票
1 回答
76 浏览

modelica - 可以使用内部/外部全局设置类型并且可以替换吗?

问题描述

我想在经济建模(例如系统动力学)中使用非国际单位制单位。虽然我当然可以花几秒钟s)然后使用,但据我所知,在我主要使用的 System Modeler 中displayUnit没有很好的方法来修改displayUnit时间。

因此,在编写一个库时,我希望用户选择一个全局type调用ModelTime,理想情况下它会被声明为inner某个replaceable顶级类。然后模型中的任何组件都可以使用全局type来一致地处理任何与时间相关的变量。

最小的例子

下面的例子展示了我想如何实现它。

  • package Units声明了两种非国际单位制单位类型( Time_year, Time_month)
  • package Interfaces包含一个部分模型类GenericSimulationModel,它将成为使用该库编写的任何模型的顶级范围。它应该提供type ModelTimeasinnerreplaceable
  • package Components定义一个简单的block类,该类ModelTime通过outer定义来定义其在全局选择的时间单位中的output y简单显示time
  • model Example将所有这些联系在一起,以提供一个示例,使用该库的任何模型应该如何工作

这是代码:

虽然在 System Modeler 和 OpenModelica 中一切都编译没有错误,但不幸的是它没有成功:在Example上面给出的模型中的组件 c 中没有使用重新声明的类型。

我能做些什么来实现我想做的事情?

0 投票
2 回答
236 浏览

modelica - 如何在可扩展连接器中使用灵活的阵列大小?

我想使用expandable connector(例如类似总线的结构)来(主要)为更复杂的子系统建模input和连接(An将不允许其元素具有不同的单元,并且扁平列表变得笨拙,而 a不允许仅轻松连接它的一个变量没有写方程)。outputarrayrecord

虽然您可以简单地将一个变量连接到一个 expandable connector而没有问题,但它的unit(和其他属性)不会被传递。因此,我想在可扩展连接器(例如 like x[:])内灵活地声明变量,并让它们的尺寸由实际连接确定。

不幸的是,这在OpenModelicaWolfram System Modeler中均无效:

...也没有将其声明connector为子组件并通过以下方式传递数组大小inner并计算outer出:

如何expandable connector设置具有灵活、预定义的数组变量?

更新

这似乎是与 OpenModelica 和 Wolfram System Modeler 相关的问题,因为给出的示例在 Dymola 中运行良好(参见下面 f.wue 的评论)。我在Wolfram Community上交叉发布了一个类似的问题。

Modelica 规范(版本 3.2 修订版 2)中,我们在第 9.1.3 节可扩展连接器中找到:

在生成连接方程之前,在可扩展连接器中声明的非参数标量变量和非参数数组元素被标记为仅可能存在。非参数数组元素可以用数组维度“:”声明,表示大小未知。这适用于简单类型的变量和结构化类型的变量。

正如 f.wue 所指出的,我们应该连接connectors- 而不仅仅是输入和输出。我在上面的代码中对此进行了更改,但这并没有解决问题。

0 投票
2 回答
83 浏览

modelica - 如何在块中使用未指定的数组维度?

使用未指定的数组维度 ( :) 是设计灵活组件以供重用的基本特征。我很清楚在编译模型时必须固定实际尺寸。据我所知,将具有未指定数组维度的变量绑定到具有明确定义维度的变量就足够了。

所以我有点困惑为什么以下内容在任何一个或以下model Test都不会验证:OpenModelicaWolfram System Modeler

这样的事情怎么能做到呢?

0 投票
1 回答
59 浏览

modelica - 在 Modelica 中将逆变器与 smpm 连接时的仿真结果错误

我正在使用 Wolfram 的 SystemModeler 来研究连接到永磁同步电机的逆变器的系统行为。不幸的是,尽管我只使用了 Modelica 标准库中的组件,但我得到了错误的模拟结果。

到目前为止,我在下面的模型中尝试了几种设置。

  • 一种设置是:JLoad=0 和 TLoad=0

    我希望电机能够以怠速自由运行。相反,速度传感器显示幅度为 [-0.46;0.46] 的正弦波

  • 另一个设置:JLoad=0.29 和 TLoad=-180

    当我应用转矩阶跃时,电机的速度 = 0 并且从 t = 2s 开始减小并获得负值。

有人可以告诉我我的模型做错了什么以及为什么模拟结果是错误的吗?

我还尝试了图书馆中的一些示例,但它们从未将逆变器与电机一起使用。但我想研究 PWM,不想像示例中那样使用理想的正弦电压和电流......

感谢您的任何帮助!!