接下来,我尝试使用生成两个时间相关的随机函数omega1和tau。不同之处在于,对于omega1和tau,我需要两个不同的采样周期,分别为0.05和0.17。我只是复制了我认为可以胜任的部分:
model testData
extends Modelica.Icons.Example;
import Modelica.Math.Random.Generators;
import Modelica.Math.Random.Utilities;
parameter Real k
谁能给我一个提示“代数循环”是什么意思——以及我应该如何通过添加“pre”操作符来应对这种情况?我真的不明白
Error: Failed to generate code for an algebraic loop
involving when equations or algorithms with when parts.
Unknowns:
pump.Hb_flow
pump.medium.d
pump.medium.h
pump.medium.state.melting
各位。我想模拟一些modelica模型,但不使用openmodelica或dymola,因此我认为如果我可以将模型代码转换为fmu,然后调用jfmi进行处理。
我读了相应的材料,但仍然找不到一些关于整个过程非常清楚的材料。那么,有没有人知道我在哪里可以得到详细的过程,或者有人已经实现了这一点?好吧,如果你有一个Modelica模型,并且你想生成一个FMU,那么你需要一个Modelica编译器来完成。你没有很好地解释你的需求。例如,Dymola有一个Java接口(尽管我不确定现在它的支持程度如何)
我想在外部程序中打开当前模型或子模型。
目前,我正在手动向所有模型添加命令。例如:
system("mytool --path \"C:\\MyModel.mo\" --model \"MyModel.SubModel\"");
是否有返回当前模型路径和名称的函数
编辑:
classDirectory()和getWorkingDirectory()只返回一个目录。
模型管理库似乎能够分析模型的AST。这看起来可以解决我的问题,但似乎太过分了,我没有执照
我曾希望找到一个简单的方法来做到这一点。
我创建了一个简单的连接器来处理二维坐标对。连接器包括实电位变量x和y
connector Coordinate_2D "2D Coordinate Connector"
Real x;
Real y;
end Coordinate_2D;
我想扩展连接器并创建一个3D版本,如下所示:
connector Coordinate_3D "Coordinate connector: x,y,z"
extends Coordinate_2D;
Real z;
end Coordin
我想知道是否有人在处理Modelica中的跳跃/不连续方面有任何技巧或窍门。我正在使用OpenModelica,下面显示了解决我的问题的简化示例代码
model PowerGenerator
Modelica.SIunits.Power P(start=0);
output Modelica.SIunits.Energy E;
equation
if (5 < time) and (time < 15) then P = 3;
else P = 0;
end if;
给定一个实数组(例如myArray)和一个布尔数组(例如myMask),我希望:
如果myMask[i]==true则myArray[i]=myValueTrue
如果myMask[i]==false则myArray[i]=myValueFalse
这个确实有效
model BooleanIndexing
parameter Boolean myMask[3] = {false, true, true};
parameter Boolean myMask_negated[3] = {
我模拟了一个由SweptVolume、ClosedVolume和dynamic pipe组成的模拟案例。当活塞移动时,活塞内的体积变小,活塞向下移动时,它将水推入ClosedVolume,然后,水将被吸入活塞室。我模拟了这种情况,发现ClosedVolume内的压力随着时间的推移而增加。原因是什么
检查总水质量是否恒定,由于数值问题,可能是水质量降低。尽量减小公差,以减少水的损失。检查总水质量是否恒定,由于数值问题,可能是水质量降低。尽量减少公差,以减少水分损失
model HD_Close
我的多体模型中的输入是道路不平度,作为距离的函数。该模型在时间模拟中运行良好,但当我将系统线性化时,会出现错误,表示未定义输入或输出。如图所示:
我将combitable定义为一个输入和参数,然后得到错误:
TRyViertalMbsa的翻译:
组件类型说明符CombitMetable是块,不能与前缀输入组合。
组件在Modelica.Blocks.Sources中声明为CombitMetable CombitMetable
CombitMetable(输入)及其元素y(输出)的冲突因果关系
我在Dymola中创建了一个热水储水缸的基本模型,使用了。我已将模型保存为.mo文件,并成功编译了fmu,并在JModelica中加载了模型。当我使用以下工具进行模拟时,会出现问题:
res = model.simulate(final_time=100000)
这将导致以下错误消息:
FMUEException回溯(最近的调用
最后)在()
---->1 res=模型模拟(最终时间=100000)
pyfmi.fmi.FMUModelME1.simulate中的src\pyfmi\fmi.p
我想弄清楚,在Modelica中模拟一阶传递函数的模型,时间常数等于零(T)是否可能(并且在语义上合法)。我使用的是OpenModelica 1.15.0~dev-48-g3656b95,但我是在一般Modelica上下文中提出这个问题的
我的背景是在Modelica模型上进行模型降阶实验,这使我尝试使用Modelica.Blocks.Continuous.FirstOrder和有时为空的时间常数。然而,为了使讨论更简单,下面是我正在研究的平面模型(标准一阶块的简化和改编):
我了解Modeli
我有一个稳态代数模型(没有der()表达式)和一个非线性方程。在Dymola中进行转换时,方程组将产生数值雅可比矩阵。我想删除数值雅可比矩阵(如果可能的话),以提高模型的性能
在设置参数Hidden.PrintFailureToDifferentiate=true(由于)后,我看到Dymola发出警告:
Cannot find derivative of function:
InitializationParameterLoop.InitFunctions.interpolate(xVector
我正在建立一个自定义的流体模型,最终考虑到三维速度。我设计了方程,使模型在以下边界条件下运行:
pressure_out = 500000;
hin=3000e3;
mdot[1] = 66.3;
然后,应通过模型计算入口压力、出口焓和出口质量流量。然后,我插入一个出口接头(标准Modelica流体端口,名为outlet):
并相应地移除压力_out的边界条件,以便:
hin=3000e3;
mdot[1] = 66.3;
模型仍然是平衡的。但是,一旦我添加入口接头并设
我想知道如何以动画的形式可视化Modelica模拟的结果
假设我有一个简单的模拟,如下所示:
model test
//parameters
parameter Real m_1 = 1;
parameter Real m_2 = 10;
parameter Real K_c = 100000;
//variables
Real x_1;
Real v_1;
Real x_2;
Real v_2;
Real f_1;
Real f_12;
initia
我试图创建一个通用警告块来识别设备循环。其目的是用户可以拖放此Modelica块并将其连接到传感器或设备,该块将查找循环模式并在模拟日志中发出警告
我创建了一个块,每当变量通过Modelica.Utilities.Streams.print和过零逻辑跨越范围时,该块都会发出警告(以限制每个限制跨越一次警告,并避免重复写入,直到时间变量不在给定范围内)
为了确定一个循环模式,我想用一个计数器来计算给定周期内最大值和最小值的数量。有更好的方法吗 对信号进行采样的另一个选项,但在稳定性分析中,您可能不
我现在正在使用Thermocycle library进行液压任务。
是否有方法将CellConst模块的流出法兰连接到Cell1Dim模块的流入法兰,反之亦然
我不想做任何计算。
我只想在两个Cell1Dim块之间相交一个cellcont块。
这无法通过其默认法兰实现
提前感谢您抽出时间。如果您在此处未收到答案,您不妨尝试使用热循环问题跟踪工具:如果您在此处未收到答案,您不妨尝试使用热循环问题跟踪工具:
我想看看Modelica模型的扁平化版本。传递给Modelica编译器的正确标志是什么?OpenModelica、JModelica或Dymola编译器的标记是否相同?如果您在OMEdit中,只需右键单击右侧的模型并说“实例化模型”
如果您在OMEdit中,只需右键单击右侧的模型并说“实例化模型”
编译器不同,它们不支持相同的标志。如果您在OMEdit中,只需右键单击右侧的模型并说实例化模型。您也可以从.mos脚本实例化emodel(ModelPath)使用。编译器不同,它们不支持相同的标志。如
我是Modelica和OpenModelica的新手,我正在努力自学这门语言
我目前正在研究一种模型,其目的是验证串联双调节的原理:
我放了一个热交换器。在热交换器的左侧,安装了两个阀门以调节热流(最大87 000 W)。在热交换器右侧,对三通分流阀进行调节,以获得等于80°C的最终温度(T_final)。该调节为PID调节。泵产生恒定的质量流量(1 kg/s)
由于组件“温度输入”,我施加了不同的温度。目标是获得80°C的最终温度,无论输入温度值如何(最大87 000 W)
对于以下型号,阀门
我应该如何处理Dymola中的两相润滑流
我想对IC发动机机油泵内可能出现的气穴或空气进行建模,但我不知道如何管理该部分的流体
对一侧的油介质和流动模型上的空化损失进行建模,或尝试对同一介质中的空气和油的可能组合进行建模。多年前,我们通过使用类似于上述方法的参数化模型对液压系统中的空化进行建模
应用于空化,您要做的是引入一个表示空化体积的组件。当压力大于0时,空化体积为零。当压力降至0以下时,只需创建更大的气穴体积即可。因此,如果您根据参数s对其进行参数化建模,您将得到:
P(s)=如果s@m
我使用的是Dymola 2017(编译器是Visual Studio 2013/VisualC++2013快速版(12.0))
我尝试将不同的MSL示例(例如Modelica.Electrical.Analog.examples.CauerLowPassAnalog)导出为FMU(co sim和模型交换)。我把FMU带回了迪莫拉。当我尝试模拟FMU时,总是会收到类似的错误消息:
此处显示FMU设置:
当我创建示例的FMU时:Modelica.Electrical.Analog.Example
我正试图在OpenModelica中使用OMOptim。在启动OMOptim时,需要花费相当长的时间来放置画布;打开后,我查看了消息输出(在Log/MO下),发现消息OMC未启动。请重新启动(菜单OMC->重新启动)。我尝试了Tools/OMC/start OMC,就像上一篇文章一样,我得到了:
08:43:31] OMC not started. Please start it again (menu OMC->restart)
[08:57:34] OMC: unable to fi
我正在创建一个建模库,与现有库不同的是,它使用了acausal连接器。对于“流”-元素,我有一个定义接口的GenericFlow类:
partial model GenericFlow "Flow Template with replaceable ports"
replaceable FlowPort portA "Flow from/to Stock A";
replaceable FlowPort portB "Flow to/from Stock B";
end Gene
警告已收到声明我有一个“冗余连接(由于其他连接)。”我正在将一个HeatPort链接到通过使用阵列扩展的多个组件。请参阅下面的代码段
每个的使用似乎都不起作用,或者我没有正确地使用
Redundant connection(s) (due to other connections):
connect(topFrontExteriorConvection.solid, module3_PipeComponents[2].port_a);
connect(topFrontExteriorConvec
我正在建立一个电梯模型,并希望在Dymola中模拟它从起点到固定目的地的运动。每次模拟后,例如电梯已到达一个目的地。我想从上一个立场继续动议下一个立场。在我的模型中使用了一个PID控制器,它有两个输入位置:目标位置和当前位置。我每次复制dsfinal输出文件,并将其定义为dsin输入文件,作为下次的开始条件。但是,接收定义的目标位置的输入信号总是记住第一次模拟中的信号。这意味着,PID控制器的定义值已更改,但最终进入PID控制器的值保持不变。有人能给点建议吗,如何解决这个问题?谢谢
我想我没有完
我尝试将二维组件阵列连接到包含一维连接器的一维组件阵列,但在检查模型时,显示不匹配的尺寸时出错。
但我可以将一维组件阵列连接到包含一维连接器的组件,
那么,为什么这不能在多维情况下工作呢?
我做错了吗
我查过密码了,好像用不了
连接(管壁、端口b、表面、q端口)
但是如果我使用下面的代码,它可以正常工作
用于1:x循环中的i
对于1:y循环中的j
连接(管壁[i]。端口[b[j],表面[i,j]。q\U端口);
结束于;
结束于
我做了更多的测试,下面是运行良好的测试代码:
model Unn
我已经在Visual studio 2015中编写了一个简单的add函数并从中生成了一个DLL。忽略int返回,这不是必需的,我只是在尝试一些东西
# define CLINKAGE extern "C"
# define STDCALL __stdcall
# define DLLFUNC __declspec(dllexport)
CLINKAGE
DLLFUNC int STDCALL ADD(int a, int b, int *c)
{
*c = a + b;
r
我在OpenModelica中创建了一个模型,并想从中创建一个FMU
在OpenModelica中,我可以通过以下方式初始化参数:
model r_ctrl
parameter Real startTime(start = 0.1);
parameter SI.Resistance u_ref(start = 230);
parameter SI.Power p_ref(start = 1000);
parameter Real r_start(start = u_ref*u_r
我注意到OpenModelica simulation设置中有几种可用的集成方法。我不知道这些是什么。我能得到一些关于这些的信息吗?如果集成方法发生变化,结果的质量会有所不同吗?OpenModelica中提供的关于集成方法的简短文档:
是的,如果您选择,质量(模拟速度,甚至找到解决方案)可能会有所不同
不同的方法。默认值是dassl。dassl是最好的解算器吗?它可以应用于所有类型的模型吗?我认为dassl是一个很好的默认值。但是,根据模型的不同,有时其他解算器会更好。不幸的是,我不是一个数字
我正在尝试使用Modelica解决我认为应该是一个简单的稳态组件暂存问题,但我正在努力找到一个解决方案
我准备了一个示例案例,其中有两个并联泵,必须向系统输送目标总流量(vTotal)。一个泵是变频泵,其输送的流量(v1)与指令频率(fPump1)成比例,可在0和fMax之间变化。另一台泵为定速泵,运行时输出固定流量(v2IfRunning),不运行时输出零流量
目标是计算正在运行的泵的数量和变速泵的频率。变速泵始终在运行,而定速泵仅在变速泵需要以高于fMax的频率运行时使用。我的示例代码如下:
这是什么类型的声明
Real x=time^2;
我可以把它放在任何方程或算法部分前面的模型中
我的问题是,它不是一个静态的参数,而是它附带了一个非静态工作的公式-该值在每个时间步都设置
这是什么样的声明?短模型还是短函数定义?类的新实例?“类型”类
任何帮助(特别是参考Fritzon或Tiller的书)都可以帮助我在晚上睡觉。这是变量声明中的约束方程,在编译模型时将成为正常方程。参见第8章。如果您想修改变量,对话框注释可能比较方便,例如,Real x=time^2注释(Dialog)谢谢你,
我想做一个实时模拟,如果我想使用Dymola中的固定步长解算器,不同的步长,结果可能会有点不同,那么有没有标准的步骤来选择步长?或者我需要做大量的计算来证明步长独立性,就像在CFD领域我需要证明网格独立性一样
我不知道是否有一个标准程序,但对于非线性/混合模型的数值求解来说,证明数值稳定性并不简单。因此,我会使用一些不严格的数学程序。由于您可以自由选择步长,因此我将执行以下操作
选项1(至少有一点数学背景):
使用“工具->线性分析->极点”对模型进行线性化
结果应包含一列freq.[Hz]
我有一个自定义包,我发现自己在Dymola模型中重复使用,我想把这个包放在一个公共目录中,每当我启动Dymola时,这个目录都会自动加载。我目前的策略是在加载我正在处理的模型时加载自定义包,然后保存总计。这并不优雅,因为自定义软件包的内容最终保存在我硬盘上的多个位置,如果我更改其中一个,更改不会反映到所有地方。我想要一个更强大的方式来分发这个自定义包到我的所有模型。有没有办法让Dymola每次都自动加载我的定制包 两条建议。首先,需要将包添加到MODELICAPATH。您必须查阅Dymola文档
我想在Modelica中模拟一个简单的弹性摆;
但我没有得到正确的结果-有人能帮忙吗?
质量、标称摆长和重力常数取一
model SP
parameter Real k = 1; "spring constant"
Real y1(start=1), y2(start=0),y3,y4;
Real ld;
equation
ld= k* (sqrt(y1^2+y2^2)-1)/sqrt(y1^2+y2^2);
der(y1) = y3;
der(y2) = y4;
我在模型model\u AA中有一个块(子模型)submodel\u a存在于包package\u a中。我想将子模型_A添加到另一个模型模型_AB,该模型存在于包包_B中
我试着复制组件或代码并粘贴到我想要的地方,但没有成功。通用的解决方案会很好
谢谢你提前回复 我不确定我是否明白你的意思。但两者都不是
右键单击子模型A(软件包浏览器)->复制类…
也不是
右键单击子模型(软件包浏览器)->重命名…
(可以使用此选项移动模型并确保对模型的所有引用都将更新)
解决您的问题?也许这有助于:
我对使用JModelica和我在Dymola中构建的模型感兴趣
具体地说,我有一个使用dynamicpe组件的锅炉模型,然后我将热量传递到管道以加热其中的水,并使用一个泵组件来控制整个锅炉的压差。该模型使用JModelica编译成FMU,我能够毫无问题地模拟它
然而,我现在不想找到一个最佳的控制序列,使锅炉进入某个工作点,在这里事情停止工作
我已经编写了一个带有优化问题的.mop文件,但是当我调用transfer\u optimization\u problem时,我得到以下错误:
Warnin
我有一个openmodelica接口
block InputInterfaceBlock
CPSModel.ConnectionObjects.SocketConnection con = CPSModel.ConnectionObjects.SocketConnection("/pathToSocket/rpcSocket");
Modelica.Blocks.Interfaces.RealOutput y annotation(
Placement(visibl
因此,我更改了调试设置,如下所示,以检查日志文件:
在dslog.txt文件中,我可以看到相同类型的错误很多:
如日志文件所示,所有这些错误都是由迭代发散和错误的开始值引起的:
为了查看哪个迭代变量导致了发散,我检查了所有迭代变量的迭代结果,但它们似乎都在正确的范围内。所以我不确定下一步该怎么做才能找到分歧的根源。Dymola帮助手册中的方法在实践中不起作用
我的问题是,面对Dymola中的初始化差异,我应该如何找到错误的开始值?
这里是库的链接、我构建的模型和生成的日志文件。
不
我有一个变量T,它是一个向量。变量取决于其导数,因此取决于时间:
T = function(der(T))
我想这样做:
T = function(der(T));
T = Modelica.Math.Vectors.sort(T);
不能这样实现,否则会弹出一个错误。我使用了以下解决方法:
T = function(der(T));
T2 = Modelica.Math.Vectors.sort(T);
when sample(0,t) then
reinit(T, T2);
en
我正在尝试使用thermal.fluid库组件(在OpenModelica中编译)在modelica中构建泵送水热交换回路的模型。定容泵的入口与加热管组件的流量端口相连,加热管组件表面上是由泵驱动的回路中的“最后”级,因此回路完成
当我的介质从环境源流出,通过泵,通过系统,然后流出到环境接收器时,该系统工作,但现在我已经“完成了电路”,模拟失败,我收到“循环相等”错误。这在物理上有一定的意义,因为压力类型变量需要一个基准来参考,但我的系统中基于摩擦的元件似乎会通过系统产生压力损失,并且泵会正常运
我在开发模型时遇到过一些问题,其中翻译时间(模拟速度很快,但翻译时间太长)已经成为一个严重的问题,我可以利用一些见解来解决这个问题
因此,问题是:
哪些主要因素会影响模型的翻译时间以及解决问题的思路
例如,可能产生影响的事项:
对于循环与向量化方法-一个基本模型测试这似乎没有影响任何东西
使用输入变量与参数
注释的影响(例如,Evaluate=true)
或者运气不好,这取决于工具(Dymola、OMEdit等):(
使用许多connect()-这似乎是一个因素(可能是主要因素),因为它迫使翻
标签: Modelica
dymolaopenmodelicajmodelica
这是我在使用OpenModelica软件时收到的最常见错误之一
我已经理解了当系统参数相互冲突和不一致时,通常是如何触发此错误的
我已经尝试忽略了我认为对我的系统来说不是必要的系统参数,但是似乎没有任何东西可以修复错误
我的系统一开始就很简单。目前,我正在进行子组件验证过程,以便正确构建工作的Rankine Power模型。该子组件的重点是一(1)个(2)个热交换器,该热交换器将用于双换热器系统中,该系统包括高压和低压涡轮机之间的再热过程
该子组件试图描述来自冷凝液体状态下泵的水,该水将通过热交
我想通过泵送系统(Pompa)从水源(火山灰)中提取水来填充一个开放式水箱(bacinella2)。问题很简单,但我无法在openmodelica中实现
我试图消除泵,直接连接两个管道tubo1和tubo2,系统正常工作,这就是为什么我认为缺陷存在于泵对象中
model Pompaggio
Modelica.Fluid.Machines.ControlledPump Pompa(
redeclare package Medium = Modelica.Media.Water.Stan
在模拟我在dymola中构建的模型时,它开始时有一些初始化错误,但最终成功。
这是否意味着非线性解算器成功地处理了错误
在初始化过程中,解算器正在搜索一组一致的变量,例如。当这样做时,可能会发生变量超出其有效范围的情况。在您的情况下,这意味着应计算负数的平方根。解算器识别此问题,跳过此点的计算并打印您看到的消息。之后,它尝试继续使用其他值(在“尝试处理此问题”中)。在您的情况下,算法成功地完成了这一操作,这就是为什么您的模拟能够成功地启动和完成
如果希望避免此类消息,可以为迭代中使用的变量设置合
我已经声明使用MSL CombitMetable,并将自己的代码替换为类似的函数。有没有办法在编译时只指定表的大小,然后再给出表的值
下面的声明代码有效
CombiTimeTable pump(
smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments,
extrapolation = Modelica.Blocks.Types.Extrapolation.HoldLastPoint,
我想在Modelica中对时间以外的变量函数进行积分,但我不知道怎么做。
例如,如何计算具有上限5和下限2的x dx积分
∫x dx=x^2/2
Modelica并不像Maple、Mathematica或Matlab那样被设计成CAS(计算机代数系统),但只要稍加编码,你就可以做到。问题是,你的问题不能用Modelica工具自动象征性地解决,但在数字上是的。
为了数值求解它,你必须用时间变量代替x,因为在Modelica中,你可以进行导数,因此只能对时间进行积分。因此,您可以使用要集成的函数创
我目前正在使用Dymola中的Modelica模型来模拟化学过程。反应堆建模本身已经达到了令人满意的程度,但我很难将这些模型实现到Modelica中,特别是在让各种媒体定义相互连接和通信方面。这也是Modelica实现该模型的关键成果
目前,我正在与一种特定类型的错误作斗争,尽管这种错误看起来非常明显和直接,但我发现相对来说很难解决。错误类型如下:
Note: The input connector p of coopolReactor_2706_1.medium is not connecte
我定义
type Enum = enumeration(A, B, C);
及
及
这是一个错误。我最好的猜测是a={1,2,3}是罪魁祸首。这确实是非法的吗?如果是,我如何在M中设置a
更新
经过进一步的检查,我发现上面的一切都是合法的。让我全力以赴:
type Enum = enumeration(A, B, C);
connector Conn
Real[Enum] a;
flow Real[Enum] f;
end Conn;
model M1
Conn conn;
当我模拟下面的模型时,我得到了标记为$STATESET1的附加变量,这些变量显然是自动生成的
从用户的角度来看,这些变量的用途是什么?一般来说,我只对解决方案感兴趣,而不感兴趣的是一个特定的解决方案所采用的具体策略,对吗?那么,这不是更像是只有在打开某种模型调试时才应该输出的东西,而不是普通OpenModelica用户可以利用的东西吗?如果存在多个“状态集”(例如$STATESET1和$STATESET2):给定这些变量的通用名称,我如何知道这些变量与模型的关系?更具体地说,什么是$STATES
在的第4.7章的示例1中,我不确定为什么没有结构奇点。我添加了两个根据流量变量生成的方程,这个方程组似乎没有唯一的解
那么,为什么在这个例子中没有结构奇点呢
我根据论文添加了两个方程(p.I=0 n.I=0),这是本文的屏幕截图
我应该如何理解顶级连接器的“通用耦合”概念?这是否意味着将流量变量设置为零或常量
据我回忆,通用耦合意味着:
p.i=f1(p.v, n.v);
n.i=f2(p.v, n.v);
对于某些未指定(或通用)函数f1和f2;不是简单的函数p.i=0。(可能是它的一
我试着用modelica编写代码。我计算了4个不同区域的值,分别是[1:3]的cpm_链接、[7:9]的cpm_-oben[4:6]和[10:12]的cpm_-oben。然后我想把这4个值存储在一个变量中,这个变量是[1:12]的cpm。我应该如何编写代码,以便将所有这4个变量存储在cpm中
cpm_links[1:n_Kapazitaten]=cp_Kunststoff*m_link[1:n_Kapazitaten];
cpm_oben[1:n_Kapazitaten]=cp_Kuns
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 16 页