我有下面这个简单的层次模型,它包含了一个反应室内的反应。反应模型简单地将质量速率设置为质量,并连接到包围它的腔室
connector Conn
Real mass;
flow Real massRate;
end Conn;
model Reaction
Conn conn;
equation
conn.massRate = conn.mass;
end Reaction;
model Chamber
Real mass(start = 1);
Reaction re
我正在开发一个模型来描述双管网的行为。该网络连接到一个储罐,在该储罐中,根据外部质量流量从系统中注入或提取热量。加热和冷却的质量流量可任意假设随时间变化。
PipeTemp的初始值与参数StartTemp关联。但是,在不同的时间点,PipeTemp是通过max函数计算的
问题在于,由于变量PipeTemp依赖于使用PipeTemp值计算的其他时变变量,Dymola终止模拟并产生以下错误:无法使用牛顿解算器求解非线性系统
这个简单的模型可以很容易地在Excel中模拟,因为它能够处理单元变量之间的相
在Modelica中,计算连续信号的平均值(mean)和标准偏差(StdDev)的最佳方法是什么。应计算固定时间T内的平均值和STDEV;i、 例如,从t-t到t。下面是问题的离散解决方案。它在Modelica中编码为一个块,具有1个连续输入和2个连续输出信号。使用Modelica内置函数示例完成离散化:
block MeanStdDevDiscr
"Determines the mean value and standard deviation of a signal for a fixed
我在Modelica模拟中选择了一些变量(使用Dymola),运行良好。现在我想画出这些变量中某些变量的行为,这些变量被编号(带有索引)。我不想描绘变量与时间的关系,而是与它们的指数的关系。我计划使用plotArray函数,但这并不是我在这篇文章中真正感兴趣的。问题是,当我调用它们时,所有变量都是零,这确实是它们的初始值,但我想在稳态开始时获得它们的值,比如说当time=5000时。因此,我需要在这个特定的时间评估变量
如何在模拟的特定时间或在模拟结束时评估变量
编辑:在大量的谷歌搜索之后,我找
在中,我问如何在启动时将自定义包添加到MODELICAPATH,但答案有些含糊不清。根据答案,我可以使用
openModel("path\to\file.mo")
或
我想知道这些命令的区别,如果有的话,以及何时使用其中一个或另一个
编辑:如果您回答,请在Modelica文档中提供来源。我甚至不知道如何在文档中找到这些命令,所以这可能是一个很大的障碍 乍得
有关Dymola中“内置”命令的任何问题,请注意,您可以通过使用document(…)功能获得一些基本文档(显然,help过于平淡,而de
我在模拟中使用了Modelica标准库(MSL)中的一些组件。这些组件都有一些参数。例如,Modelica.Fluid.Sources.MassFlowSource\u T有一个参数m\u flow。通常,可以在模拟运行之间更改参数,而无需重新编译。对于m_flow,情况并非如此,因为它具有注释(Evaluate=true),因此用于符号处理。
是否可以在实例化时更改参数的注释?我尝试了以下方法,但没有成功
Modelica.Fluid.Sources.MassFlowSource_T sour
我试图将模型(块)的参数定义为变量。例如:
Real WallThickness = 0.5;
Real WallConductance = 10*WallThickness;
Modelica.Thermal.HeatTransfer.Components.ThermalConductor TopPanelConductor(G=WallConductance);
我想定义“G”,使其在整个模拟过程中保持不变,但系数在模拟之前根据其他变量“壁厚”进行更新。当将导热系数“G”定义为模型中的变量
我在中创建了一个名为combitable1.txt的txt.文件
C:\Users\Yamaha R6\Desktop\FileOpenModelica
我想将此文件的数据“加载”到OpenModelica中的combitable1D中。如果你看到图像,在语音“表格”下,我写道:
loadResource("C:/Users/Yamaha R6/Desktop/FileOpenModelica/combitable1.txt")
但当我模拟模型时,会出现以下错误:
15:51:20翻译错误
我正在尝试写一个块解码器,它是ADC的一部分。输入和输出为数字矢量,由逻辑“1”或“0”组成。
当ADC具有10位时,输入向量为1023位(1023=2^10-1)lang,输出向量为10位lang
解码器的理想是:首先,我得到输入向量中的数字“1”。然后我使用函数div()和mod()将十进制中的数字改为二进制。对于数字输出的其余部分,我给出所有位“0”
但是编译人员说
“给定的系统是混合确定的。[索引>3]请签出
选项“-maxMixedDeterminedIndex”
然后我删除了初始算法
我在Modelica初始化方面遇到了一些问题。我想模拟有限状态机的初始步骤,我希望初始状态从false开始,并在模拟开始时立即变为true
equation
OUTPUT=active;
algorithm
when change(INPUT) then X:= not X; reinit(t,0); end when;
initial algorithm
active:=true;
这是代码。
变量输入、输出和X都是布尔类型。输入是一个使状
当使用可压缩气体作为介质并考虑到动态动量平衡时,我在理解离散化Modelica.Fluid.Pipes.DynamicPipe的模拟结果时遇到问题。
为了说明这一点,我建立了一个非常简单的模型:压力源+管道+压力接收器。压力源中的压力随时间线性增加。管道的参数化主要对应于默认值,但参数“momentumDynamics”设置为“Modelica.Fluid.Types.Dynamics.FixedInitial”
对于较低的气体速度(=较小的入口压力),压降在某种程度上近似线性分布在管道的离散
如何基于给定的输入编号创建多个CombiTmeTable并在循环中修改其每个参数?
所需的结果是生成的CombitMetable数量等于输入n,其中每个表具有不同的tableName和fileName。我是Modelica的新手,下面的代码解释了逻辑,但它会产生许多错误:
model DataTables "Model to create CombiTimeTable"
parameter Integer n=10 "Number of tables to be
略为概括的示例:
当我定义模型方程时,如何创建带有异常的for循环
以下工作:
model Test
Real[9] q;
equation
q[2] = 1.2;
q[4] = 1.4;
for i in {1,3,5,6,7,8,9} loop
q[i] = 0;
end for;
end Test;
但我更愿意写这样的东西:
model Test
Real[9] q;
equation
我在Modelica上看到一个错误,它说:
具有非参数测试的if方程中的所有分支必须具有相同数量的方程
错误的来源是代码的以下部分:
equation
if der(Posit2.s)<=0 then
pressure=4e5+((500e5-4e5)/0.0111)*(0.0111-Posit2.s);
end if;
方程
如果der(Posit2.s)你需要一个else,那么最明显的想法是压力不会改变:
equation
if der(Posit2.s)&
我想找到Dymola中撕裂算法选择的变量集。这样我就可以知道哪些变量将系统的不同部分连接在一起。但我不知道如何在Dymola中显示这些变量。我查看了Dymola的帮助文档,但没有找到任何与如何显示这些变量相关的内容。
您应该能够在dsmodel.mof中看到它,它是在设置Advanced.OutputModelicaCode=true后创建的或使用“模拟设置->翻译->在dsmodel.mof中生成翻译后的Modelica代码列表”在UI中激活它
Dymola将在//撕裂部分中生成相关代码。在d
我尝试模拟这个简单的示例(在OpenModelica 1.9.1 Beta1(r18938)中):
模型daadd
参数Real tw1=32.1
参数Real tw2=36.4
真实tk2
方程式
1=(tw2-tw1)/(2.3*log10((tk2-tw1)/(tk2-tw2))
结束sjoelund.se
结束daadd
然后我得到一条消息:数据矩阵中的行太少了
然后我还收到另一条错误消息:
LOG_NLS | warning | Error solving non
我的模型目前大约是2000个方程,模拟周期是几周。我正在使用OpenModelica连接编辑器
我面临的问题是大量的输出变量,我已经有过几次绘图窗口崩溃
因此,问题是如何减少输出变量的数量
我只对其中的20-50个感兴趣。我知道我可以通过保护参数输出来删除参数输出,但我无法找到任何类似的变量技巧。如果您是通过命令行模拟模型,请查看simulate命令的variableFilter参数
如果您使用的是OMEdit,那么Simulation->Simulation Setup->Output->Va
我有一个函数,它返回两个大小不等的数组a,B。它们用于确定模型的初始条件,因此我希望将它们分别定义为模型中的参数数组。这是否可能,如果可能,如何实现
下面是问题的一些伪代码:
作用
模型
我尝试过几件失败的事情。一种成功的方法是使用初始方程部分。但是,它要求我定义一个变量,并在一个等式部分中添加derA_start=0,并阻止我为变量提供一个非固定的猜测值,即Astart=A_start,这可能会导致问题
谢谢你的帮助,即使这证实了我运气不佳。像往常一样,你发布东西的那一刻,你就会顿悟
通过在参
我可以在2D域中使用PDEModelica进行计算吗。PDEModelica支持多少域,或仅支持DomainLineSegment1D?
我使用OpenModelica。似乎不是。
PDEModelica1是一维偏微分扩展(PDE)的非标准实验模型语言扩展。似乎不是。
PDEModelica1是针对一维偏微分扩展(PDE)的非标准实验模型语言扩展
在Modelica中编译代码时,出现以下错误:
命令编译失败,出现以下错误:用户错误:错误:com.modelon.oct.modelica.api.InternalAPIException中的java异常,消息为:编译生成的C代码失败
我在下面添加代码
model SimModelcode
Real heatcapacity[n_Kapazitaten];
Real thermalconductance[n_Kapazitaten+1];
Real l_link;
//Real
目的是:
在MAT文件中输出一些特定变量,而不使用标准Modelica输出提供的复杂结构;
无需任何后处理,即在模拟后,我希望MAT文件准备就绪,无需进一步的步骤;
不使用特定于IDE的Dymola或OpenModelica命令;
可能不产生事件;
起初我想到的是Modelica.Utilities.Streams.writeRealMatrix实用程序,但我无法使append参数正常工作
以下是我尝试过的:
model WriteRealMatrixToFileTest
discrete
我试图在Modelica中执行一个字符串。这个字符串将保存在一个变量中,以便在需要时可以更改它
function Test
input String inComp="resistor.R:=2";
output String outComp;
algorithm
outComp:=inComp;
end Test;
你能帮我吗
我用的是Dymola
我需要做的是以下几点
-从文本文件读取组件名称(或在执行函数时输入)
-然后更改这些组件的参数。此代码是一个示例:
func
当我设置模拟Dymola的输出间隔时,我希望在.mat文件中接收个间隔数+1个数据点。事实并非如此,为什么
审查:
输出间隔以指定存储结果的频率。可以根据模拟的间隔长度或间隔数来指定。默认情况下,结果也存储在离散事件中
我假设期望值和产生值之间的差异与离散事件的存储有关。如果这是正确的,如何关闭此功能?在我的Dymola(2015)版本中,输出选项卡中有一个选项:在事件中存储变量。如果该框在Dymola 2012中可用,请取消选中该框
我试图创建一个热交换器(液-液),它是基于AC库中的冷凝器(空调。热交换器。冷凝器)。
问题是,有一个错误告诉我“HXCoolant制冷剂中未找到类别或成分'tion'
我检查了ThermoFluidPro.PipesAndVolumes.HXCoolant,但没有找到任何组件名称“tion”
以前有没有人犯过这种错误?那你怎么修呢
谢谢这是一个非常晚的答案,但其他人暗示的解决方案是删除代码中的以下行:
tion=geometry.tubeOrientation,
这似乎只是由于复制和粘贴错误
我正在尝试使用以下语法导入Dymola中的FMU:
importFMU(fileName="xyz", includeAllVariables=false, integrate=true, promptReplacement=true, packageName="abc");
它给了我这个错误:
错误:声明窗口第3行第10列,语法错误在“(”
缺少{标识符“[”}
我遗漏了什么?您使用的是什么Dymola版本?在上一个版本2016FD01中,您的命令工作正常,但可能输入了错误的文件名或pack
在JModelica中,我希望使用多个现有库中的组件创建模型
这意味着将多个库添加到MODELICAPATH中非常有用,这样可以在不更改现有路径的情况下引用组件。类似的事情在中国似乎是可能的
在JModelica 1.13中,这似乎曾经是可能的:
我已经阅读了JModelica 2.1文档,但似乎没有提到这个论点。我还尝试运行上面的脚本,但编译器无法找到包含在选项中列出的库中的模型路径
在JModelica安装中向第三方MSL文件夹添加库不是一个选项,因为我将使用的多个库是GitHub repo
我不理解Modelica上下文中“类”的含义
来自modelica.org教程:“在modelica中,基本结构元素是一个类。有七个具有特定名称的受限类,例如model…”。有人有更简单的解释吗?我对Modelica非常陌生。如果您在Dymola或OpenModelica之类的工具中打开Modelica库,则在包或库浏览器中看到的所有内容都是类
一旦您使用这些类中的一个,例如在图表层中使用拖放,您就可以创建此类类型的新组件。
实例化的组件不是类的副本,而是对它的引用。因此,如果更新类定义,也会更
我在OpenModelica中创建了一个模型,该模型使用插值表组装状态空间矩阵。矩阵是使用一个表创建的,该表接受一个输入和39个输出(13个特征值、13个系统输入和13个系统输出)。我可以很好地组合矩阵,但是当将它们分配到状态空间块时,我得到以下错误:
[53:52-53:57]:可变性参数的组分A具有更高可变性的约束“ssA”
模型由以下代码给出:
block ZapuniInterpolation
// --------------------------------------------
我建立了一个基于Modelica.Media的介质模型来模拟相变泥浆。该模型适用于静态问题(静止介质)的研究。但如果我试图通过Modelica.Fluid的标准管道来输送介质,事情就不会发生了
我在DropBox上放了一个Modelica演示包——如果有人能看一下,我将不胜感激。
在下面找到我的电脑包
该软件包包含介质模型以及三个测试模型:
EmptyTanks0显示了两个直接相互连接的平衡罐
EmptyTanks1显示了相同的设置,但有一个连接储罐的静态管道。在这种情况下,不使用介质。为什么
OpenModelica上的两个模拟结果都是x始终等于5。为什么?
似乎模型中的xtry应该是5。但是当时间等于3时,为什么模型try1中的x不是10呢。首先,请记住,在处理when子句时,通常谨慎地使用pre(…)运算符来明确说明所引用的值是新值还是前一值。我不知道在这种情况下是否有严格的必要(即使我知道,我也不确定Modelica工具的所有开发人员是否都使用一致的语义),但这是一个好主意,只要让代码的读者清楚就行了
另一个问题是算法的处理。通常,这些语句是按照它们在算法部分中出现的顺序执行的
流变模型通常使用三(或四)个基本元素建立,这些基本元素是:
弹簧(例如存在于Modelica.Mechanics.Translational.Components中)。其方程为f=c*(s_rel-s_rel0)
减震器(减震器)(也存在于Modelica.mechanical.Translational.Components中)。其方程为f=d*v_rel对于线性阻尼器,可以很容易地修改an以模拟非线性阻尼器:f=d*v_rel^(1/n)
滑块,据我所知,该库中不存在该滑块。。。它的方程是
我在Modelica中编写了一个代码,用于为我的硕士论文训练前馈两层神经网络。代码接收六个元素的向量(u[nin]),并提供两个元素y[nout]的输出向量。当我在dymola中翻译代码时,我收到一个错误,指出特定代码行中包含的部分的维度必须相等。一旦我删除了这一行,代码就被成功地翻译了。我真的花了很多努力试图解决这个错误,但徒劳无功!如果您能在这个问题上给予帮助,我们将不胜感激
代码如下:(请注意,导致翻译错误生成的行在代码中标记为/)
一旦我使用LogSig删除这些行,我就可以让OpenMo
在第99页的Modelica 3.3 rev 1语言规范中,有以下参数声明
parameter Real A[:,:] = [1];
[1]在此上下文中是什么意思?运算符[]是串联运算符。参见第15页和第123页:10.4.2.1沿第一和第二维度的阵列连接。
基本上,结果是:
parameter Real A[1,1] = 1;
我想在一个模型内设置一个默认变量名T(=xx)——将该模型拖到一个新模型中,并在那里定义变量xx。
我得到错误消息:使用未声明的变量xx
这是子模型
model test
parameter Real T = xx;
Real f;
equation
f = T + time;
end test;
这是完整的模型
model fullmodel
parameter Real xx = 12;
Test Test1;
end fullmodel;
我的问题是:在Mode
我目前正在使用标准Modelica发行版中包含的多体库处理多体机械系统
我需要在法兰之间实现一个开关,以便为给定的接头选择位置或力控制
model FlangeSwitch "Switch between flanges"
Modelica.Mechanics.Translational.Interfaces.Flange_a flange_a_1;
Modelica.Mechanics.Translational.Interfaces.Flange_b flange_b_1;
Mo
我正在学习modelica,进展顺利。直到我想向我的同事展示电阻器的实用性。我们问自己的问题是:当来自电阻器的热功率为1W时,1欧姆电阻器的压降和电流是多少(显然答案应该是1V,1A)。除了0 V,0 A之外,我没有得到任何其他结果。从物理上讲,我对结果感到满意,因为我不希望电阻器在加热后变成电源,但我不明白在代码中,这种因果关系是在电阻器模型中构建的。
我通过电阻器-ConditionalHeatPort-HeatPort_a-HeatPort追溯到modelica库,但据我所知,modeli
我使用Dymola平台制作PI控制器,遇到如下错误消息
这是我的一些代码,包括计算disp的阀门和控制disp量的PI控制器。
他们正在使用标志相互通信
//PI控制器///
如果标志输入==1,则//标志输入==1:停止控制/标志输入==0:重新启动控制//
控制:=0;
其他的
控制:=P_项+I_项/单位;
如果结束;
如果代码片段中出现错误,则很难判断问题的确切位置
Dymola告诉您,您创建了一个大型代数循环,覆盖顶部“未知”下列出的所有变量和下面“方程式”部分中列出的方程式。
当您使
使用ThermoSysPro库时,我在初始化过程中遇到错误
看起来Turbine5.Pe比Turbine2.Pe大,所以结果是负数。但是我检查了我的参数,不应该有这样的问题
这是因为非线性解算器无法解下图中的方程吗
没有足够的信息,我建议在“模拟设置”>“调试”>“非线性解算器诊断”中设置详细信息和/或非线性迭代,以获取更多信息
导致问题的完整表达式是sqrt((Turbine2.Pe^2-Turbine5.Pe^2)/(Turbine2.Cst*Turbine2.proe.T))
由于这两
我想将蒸发器的一个单一输出连接到两个阀门的两个不同输入端(如代码main_1所示),并尝试在MODELICA中将两个阀门的两个输出端连接到蒸发器的一个单一输入端(如代码main_2所示)是否可行?
-型号蒸发器有一个输入和一个输出。
-2型蒸发器有一个输入和一个输出
model main_1
evaporator EVAP;
valve_a valve_1;
valve_b valve_2;
equation
connect(EVAP.port_out,valve_1.port_in);
我正在Ansys Twin builder中使用Modelica建模。虽然我给出了初始化值,但在编译代码时遇到了初始化错误。误差如下
model Hochdruckreiniger2
//Declaration(s)
Real V_max = 0.000003;
Real V_tod = 0.000002;
Real pi = 3.14;
Real N = 2800;
Real T_per;
Real f;
Real opening
我正在研究一个简单的模型,其中包括dy/dx的导数,但在Modelica中,我不能直接写出这个方程,我可以使用x=time和der(y)的组合,但我认为这是一个折衷方案,因为Modelica语言的局限性
我的问题是:
有没有其他更好的方法来描述Modelica中的导数
代码如下:
model HowToExpressDerivative "dy/dx=5, how to describe this equation in Modelica?"
Real x,y;
equa
我想读取当前日期,如果该日期超出限制,则应终止系统。下面的代码可以工作
import Modelica.Utilities.System.getTime;
model M
Integer[7] today;
constant Integer[7] limit={0,0,0,0,0,0,2021};
Real x;
equation
today = getTime();
if today[7] >
我对Modelica完全陌生,所以我可能还没有完全掌握这个话题。我正在尝试使用Thermopower 2.1库,但它没有在我的OpenModelica软件上运行。我在谷歌上搜索了一下,搜索结果显示该库与Modelica 2.2兼容
我有OpenModelica 1.9,它是最新版本!我假设Modelica和openmodelica是两种不同的软件。所以我查阅了Modelica2.2,看看是否可以找到它并下载,但没有成功。有人能帮我吗
谢谢大家 OpenModelica部分支持热电3.1:
我建
我对莫代利卡是相当陌生的。我想知道是否有任何简单的库,可以很容易地理解下载?如果库中的示例的总方程式不超过100个左右?您可以在OpenModelica笔记本中尝试DrModelica。它附带OpenModelica,是一种交互式Modelica教程。只需启动OpenModelica笔记本。您可以在OpenModelica笔记本中尝试DrModelica。它附带OpenModelica,是一种交互式Modelica教程。只需启动OpenModelica笔记本。查看SystemModeler提供的
在OpenModelica的图标/图表层中创建正多边形时,我可以理解原点是多边形的中心/质心,多边形点的坐标是使用原点作为参考来计算的
有谁能告诉我在OpenModelica中如何生成不规则多边形的原点坐标和点坐标吗?每个图形形状都有一个边框。此矩形的中心用作原点
你想实现什么?我只是想知道它是如何工作的。我认为中心是多边形的质心。但是当我计算多边形点到中心的距离时,所有的距离都是不同的。
如何使用Modelica确定随时间推移的混合时间连续和时间离散信号x(t)的最大值,即
y(t)=max{x(s),其中s在[startTime,t]}
这是Modelica bug跟踪器中的一个公开问题(请参阅)
我将给出一个特定于SimulationX的解决方案。SimulationX通过返回参数最后接受值的last-运算符扩展了Modelica。在事件时间点,它返回在事件迭代之前集成停止的值。
last-运算符可用于计算当前x值和最后一个最大值的最大值。请参见下面的工作示例
model t
当我盯着屏幕上慢慢向右移动的蓝色小线看的时候,我开始想,在Dymola/OpenModelica中有一个功能会很好(如果它还不存在的话)
我想到的特性将监视系统的行为,并在达到稳定状态时报告,或者在达到稳定状态时终止模拟。我想这可以用来监控所有状态变量的导数,以及当它们都等于零时(在用户定义的公差范围内)。显然,对于简单的模型,这可以由用户完成,但对于复杂的模型,这需要一个“幕后”的自动化功能
我可以想到几个用例:
当您想要生成用于重新启动另一个模拟的稳定状态解决方案时,这将避免需要模拟很长时间
我在Dymola中使用spatialDistribution()操作符,并在使用Hidden.PrintFailureToDifferentiate=true时获得以下消息
“只能计算指定导数的函数的非标量梯度,而不能计算:空间分布”
我这样称呼接线员:
(时间-速度,时间-流量)=空间分布(时间,时间,x/长度,v水>=0,{0.0,1.0},{time,time})
然后用它来计算管道的出口温度
有人知道问题在哪里吗?我真的不明白错误信息
更完整的示例:
cp_in = //Calculat
我在迪莫拉做模型。我把这个模型的质量定义为一个参数,因为它会被转换成其他的模,并被调用。但在模拟过程中,质量应在不同的时间间隔内发生变化。例如,在前100秒内,质量应保持在500kg,在100至200秒内,乘客将进入,因此应计算新质量,包括乘客的质量。但是已经证明,这个问题在结构上是奇异的,因为参数值被赋予了两次。有人能给点建议来解决这个问题吗?非常感谢 Modelica参数是由一个事实定义的,即它们不会随时间而改变。因此,您需要停止模拟,更改参数并重新启动模拟。请参阅另一个。根据您的描述,我不
是否有任何软件允许设计Modelica组件的图标,然后复制到Dymola中?
用Dymola很难画出这幅画
作为答案的简短摘要,此任务有4个软件支持:
OMEdit
搬家
墨水空间
幻灯片
是的,有,但开发似乎停止了。对于某些任务来说更好。图形元素的属性很好地显示在一个对话框中,您可以轻松地编辑直线和多边形的点
另一种方法是使用svg和png文件,这些文件可以很好地绘制。另一种创建图标和信息图形的方法是将它们制作在标准绘图包中,以适当的格式保存(例如.png),然后使用它们。这就是我对我的图
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 16 页