如下例所示:
model HelloWorld "A Simple Model"
Real x(start = 1);
equation
**der(x) = -x;**
annotation (uses(Modelica(version="3.2")));
end HelloWorld;
我计划编写一些代码,将Modelica源代码转换为java格式。但是,我找不到像der()等特殊运算符的源代码
我的意思是:java中的示例可以写成以下格式:
class HelloWorld
我有以下问题:
我有超过20个不同的模型,我想一个接一个地模拟,但每次我都想更改模拟目录
现在,我在每次模拟后手动更改目录(从./ModelOne到./ModelTwo),我想知道在初始化或转换新模型时是否有方法自动更改目录
问候
Nev最好的方法是写一个脚本,我认为:
pathOfSave = {"E:\\work\\modelica\\SimulationResult\\Model1\\","E:\\work\\modelica\\SimulationResult\\Model2\\
是否可以根据与时间相关的变量的值(相对于参数)声明(或重新声明)组件?这里已经多次讨论了条件声明(例如和),但是在这些示例中,条件取决于参数
我的情况是这样的:我有两个模型,自然对流传热和强制对流传热,它们从同一界面扩展而来部分传热。在第三个模型中,我想这样做:
model MyProblem
// stripped other declarations
input v "Velocity of fluid flow";
replaceable PartialHeatTransfer
我需要帮助用modelica解微分方程。特别是对于边界条件,在我的例子中,这些条件在z=0时没有定义
方程式非常简单:
a*y'-y'-b*y=0
边界条件:
在z=0时,a*y'=y-1
z=1时y'=0
我知道“初始等式”和“开始”命令,但它们是在z=0时定义的。如何定义其他z值处的边界条件
谢谢大家! 您试图解决的是一个边值问题(据我所知,您并没有真正定义z是什么)。Modelica设计用于处理初始值问题。因此,我认为您无法直接在Modelica中解决此问题。您可以做的是围绕初始值问题解决
我有下面的代码,它是抛出错误相关的翻译警告。我使用扫掠体积将流体从储罐泵送至管道和水槽。任何帮助都将不胜感激
model Trial2 "Model of a pumping system"
import Modelica.Fluid;
inner Modelica.Fluid.System system annotation(
Placement(visible = true, transformation(origin = {30, -42}, extent = {{-10,
Modelica将测量单位(例如国际单位制和非国际单位制)存储为变量的属性。以下是非SI单位的示例:
type Time_months = Real( quantity = "Time", unit = "mo", displayUnit = "months" )
因为对于经济学中的模型来说,以秒为单位给出速率是非常合适的,所以我想写一个相当通用的单位转换函数,它允许转换时间单位。因此,理想情况下,转换为另一个时基的函数应使用三个输入和一个输出:
input Real timeValue "t
我有一个Modelica模型:
model test
Real x;
Real y (start=10);
function try
input Real x;
output Real y;
external "C" testC(x,y)
annotation(Include="#include <test.c>");
end try;
function round
input Real u;
input Real acc
我指的是这个帖子:
我想测量一个RMS值或一个具有可变采样频率的平均值,我可以将其作为输入信号输入
建议的方法几乎符合我的需要,如下所示:
model RMS
constant Real f_max = 2*2*asin(1.0);
constant Real f = 1+abs(2*asin(time));
Real signal = sin(time);
Real rms = if time < f then (if time < 1e-10 then signa
转换库是用Dymola开发的。
尝试在OpenModelica中进行模拟时,我遇到错误:
[12] 12:09:51 Translation Warning
[TRANSFORM.Fluid.Pipes.BaseClasses.PartialDistributedVolume: 12:26-12:31]: Non-array modification '0' for array component, possibly due to missing 'each'.
[13] 12:09:51 T
我试图控制一个基于电网电压的并网光伏系统。
这个想法是这样的:当电网电压上升到VMax以上时,我想关闭系统进行延时关闭。当超时结束时,我想再次打开,但仅当电网电压低于VMax时
我目前有两个实现;两者都在创造许多活动,我想知道是否有更有效的方法。现在是这样实施的:
package Foo
model PVControl1 "Generating most events"
parameter Real VMax=253;
parameter Real timeOff=60;
input Rea
如何使用工厂的Modelica(OpenModelica,jModelica)和控制器的C/C++例程实现控制系统设计的软件在环。你可以建议什么方法?
我认为外部C函数会有所帮助,但它们似乎有一些限制,因此它们应该遵守引用透明性属性,即为相同的输入返回相同的值(不应该有内部状态) 在这种情况下,调用外部C函数的问题不适用。的确,Modelica限制了函数在连续方程中的使用,因此函数必须为相同的参数返回相同的值。在这些情况下,您必须找到一种方法将状态传递到函数中,并让它返回新状态(如果您希望满足此
我用的是Dymola程序。正如您在图中所看到的,我们有我们的温度目标(refTemp),我们将此温度与系统中的温度(kvtemp)进行比较。我们的目标是区分这些温度,然后将差值乘以一个小数字,这样在进入积分器之前,我们的值将在0-1之间。现在我的问题是,积分器的输出怎么可能是我们想要发送到系统的温度(y1)?关于如何设置通过积分器进入系统(y1)的温度,是否有任何解释?能否请您解释一下问题的背景?在我看来,您在图中所示的是一个积分控制器。闭环系统(系统+控制器+反馈)的温度响应取决于您尚未显示的
在Modelica中,可以定义附加到对象(如连接器)的注释,以更改其图形外观
是否可以定义从一个连接器到另一个连接器的连接外观?
例如,连接器类“foo”的两个实例将始终有一条虚线作为连接,而类“bar”的两个实例将有一条更粗的实线
到目前为止,我注意到连接线采用了连接器外部笔划的颜色,但仅此而已。我在文档中没有找到与此相关的任何内容。是的,有可能:
如果您查看Modelica.Blocks.Examples.BusUsage\u Utilities.ControlBus,您将看到从图标(Mod
标签: Modelica
inverseopenmodelicasteady.js
我想知道一个模型是否可以在modelica中反转。(这里的反向是指:如果在因果关系陈述中y=x+a;x和a是输入,y是输出;但是如果我想找到'x'作为输出,而'y'和'a'作为输入,这个模型被称为反向/反向模型)例如,如果我有一个压缩机,有输入空气端口和输出空气端口,端口有与之相关的变量是压力(P),温度(T)和质量流量(mdot)。我有一个简单的稳态模型,包含以下三个方程:
OutPort.mdot=InPort.mdot
OutPort.P=rc*InPort.P
OutPort.T=InP
我正在将一个传统模型从Simulink传输到Dymola,该模型包括一个反馈回路,在该回路中,输出信号被传递回输入进行衰减计算。在Simulink中,内存块用于创建单积分时间步长延迟,并初始化信号。我尝试在Dymola中使用单位步长延迟,但是我们没有使用固定步长解算器,模型发散。固定延迟也没有按预期工作
对于如何在正确初始化时将输出传递给输入,有什么建议吗?这些信号都是“实”型。Simulink中的内存块将信号延迟连续积分的一个时间步(如果未放置在迭代器子系统中)。与可变步长解算器组合时,结果是
基于示例Modelica.Electrical.Machines.Examples.synchronousicponsionmachines.SMPM\u voltage source,我尝试使用Modelica.Electrical.PowerConverters.DCAC.multiphase2 level中的逆变器为SMPM供电。
不幸的是,我得到了错误
仿真模型不是全局平衡的,有337个变量和
335方程
但我不知道缺少哪两个方程式
更让我困惑的是,如果我移除信号PWM、逆变器和恒定电压
我在“受保护”部分下有一个参数,需要进一步计算:
parameter Integer Ns = integer(ceil(L / dx))
它不应该被修改这就是为什么我把它放在那里。
但是,我希望在构建常规模型时访问此参数。特别是在其他组件中访问它,我可以执行以下操作:
Ns = componentName.Ns
但由于它是受保护的部分,这是不可能的。我只是在“常规”部分添加了另一个参数,从而解决了这一问题:
parameter Integer N=Ns
但是,这个参数会出现在GUI中,并
我在Dymola中遇到了一个函数调用错误,因此我试图找到原因以及在模型中调用函数的位置。以下是错误信息:
原因是焓为负
根据错误信息,我可以找到参数的定义,但找不到模型调用函数的位置
如果我想调试这个错误,我怎么能继续
在程序包浏览器中创建新程序包。
复制该功能,并放入新的
创建了一个包。
在此包中使用其他名称创建新记录。
剪切并粘贴所有以“输入”开头的行
因为代码不再在函数中,我们应该声明每个“输入”
在复制的代码中作为“参数”
然后,通过添加以“输入”开头的行来编辑复制的函数
命令,然后
我试图在模型的方程部分中实现一个简单的迭代猜测方案,但是,我得到了以下错误:在令牌附近没有可行的替代方案:而在OpenModelica中。有没有一个简单的解释来解释为什么这个while循环不起作用
while hf>=dh loop
v_guess = v_guess*0.95;
f_guess = Functions.f_Haaland(v=v_guess, D=d, rho=rho, mu=mu, eps=roughness);
hf = Functions.H_
我(初学者)正在使用dymola为车辆和俯仰运动的半轨道车辆动态系统建模
该模型只有车轮、转向架、车身和弹簧减振器连接,没有输入和棱柱接头。我只需要每个身体的垂直运动和车体的节距w.r.t时间。虽然最后一个变量并没有错误,但系统正在下降。我该怎么办?我有垂直轨道不平顺文件作为距离的函数。如果有任何答案,我将非常高兴
我想你最好的选择是这样一个图书馆:
我建议您添加一些错误消息或其他内容。很难仅就这一描述发表评论。你的模型类似于(但适用于火车)吗?一个相关的问题……你的模型是否假设车轮总是与轨道接
我正在使用OpenModelica进行多组分流体的过程模拟。我注意到在某些情况下初始化失败是由于(当合成向量X被设置为零数组作为解初始非线性方程组的初始估计时)。为了避免它,我必须声明我的连接器如下
package Air = Modelica.Media.IdealGases.MixtureGases.CombustionAir;
FluidPort port(redeclare package Medium = Air,
Xi_outflow
标签: Modelica
dymolaopenmodelicajmodelica
我正在考虑在Modelica语言中使用OpenModelica 1.14.1的一个功能
该功能将自动添加表示所需值总和的方程式
表示总和的值将在模型顶层实例化的全局组件中声明
较低级别嵌套组件的每个贡献都将由connect语句表示
为此,可以使用带有流量变量的连接器类,因为它生成正确的方程式。内部和外部关键字可以使这成为可能。我试图用以下方式编写一个示例:
package global_sum_test
connector X_sum
flow Real x;
end X_sum;
mode
我使用的是Dymola中的商业库,但我无法生成Flat Modelica代码或.mof文件,这是因为加密吗
有没有其他方法可以让我看到平面代码
加密库时,开发人员可以决定用户可以访问哪些库(如Modelica代码/图表等是否可见)。其中一个选项是允许或拒绝使用加密注释中的showFlat-标志生成平面Modelica代码。您正在使用的库似乎已将此注释设置为不允许生成平面代码。这将导致屏幕截图显示的内容,并禁用相应的.mof文件的生成,忽略翻译设置中的选项
据我所知,在这种情况下没有生成平面代码的
我正在Modelica中模拟热泵热水系统。我已经附上了我模特的照片。但是,当我运行该模型时,我得到错误“media is partial,partial类中不允许名称查找”。请告诉我:
我应该如何指定水箱、热泵冷凝器和管道中的水
如何指定热泵蒸发器中的空气
总的来说,我没有在Openmodelica中找到任何热系统建模的例子,你能推荐一个来源吗
谢谢通常可以在参数对话框中选择介质,您可以双击任何组件打开该对话框,或右键单击并选择“参数”。在某些情况下,介质被设置为系统的顶级参数,我确实没有
我试图在Dymola中模拟一个大型Modelica模型。此模型使用多条记录定义时间序列输入数据(1年内每隔900秒的数据),并通过CombitMetable模型读取这些数据
如果我将记录限制为仅包含2周的数据(也是900秒的间隔),则模型模拟效果良好
对于年度数据,转换似乎成功运行,但模拟失败。dslog文件包含消息初始变量数据的存储不足
这种情况发生在内存为8 GB的Windows 10系统以及内存为32 GB的Windows 7系统上
是否有任何方法可以避免此错误并使模拟运行?提前谢谢 建议
我有以下代码:
parameter Boolean Powerplant_on_Bus=true
"Activate/Deactivate Conventional Energy Generation on Bus" annotation (
Evaluate=true,
HideResult=true,
choices(__Dymola_checkBox=true),
Dialog(group="Generation"));
parameter I
我正在使用OpenModelica
我有大量的.csv格式或.mat格式的浮点数(~4000000个数字)(它们对我来说同样方便)
我使用externda包(.csv)或Modelica.Utilities.Streams.readRealMatrix(.mat)将数据加载到OpenModelica中。它存储为实数类型的常量数组
我已经生成了一个C函数,它在这个数据集上执行一些操作(一些奇怪的插值)。这与保存数据的ExternalObject相关联,该数据通过其构造函数和Modelica接口提供
在Modelica标准库中,比能量和比焓的单位是J/kg,但我想使用kJ/kg作为显示单位,我的第一个想法是修改Modelica标准库,但我不确定它是否会导致意外问题,因此我想找到一种自定义我自己的Modelica标准库的方法。这样,我可以选择使用自己的版本或标准版本
我的问题是:有这样的方法吗
在Dymola中,有多种可能扩展单位转换。也许最好的答案是下面Hans Olsson提到的问题,但你也可以
创建如下函数:
执行该函数后,转换应可用于Dymola的当前会话。因此,您需要在每次启动Dy
当开发人员从工作包(比如Library.package.ForFMUExport.MyModel)生成模型的fmu时,下游用户可以从ModelDescription.xml检查源模型信息(Library\u package\u ForFMUExport\u MyModel)、生成时间、生成工具等
然而,源Modelica模型在存储库中得到更新,可能有多个开发人员拥有开发分支,可以从中生成fmu,并且这些fmu可以在其他用户/团队之间共享。现在,如果下游用户希望追溯到原始的Modelica文件,则
我正在寻找一种将代码分为两部分的好方法:通用库和应用程序代码,
我使用的示例通常包含液体,我希望使通用库独立于液体中的组件数量。其思想是,应用程序代码设置所使用的液体介质,然后从通用库导入设备,并使这些设备适应实际介质
下面的示例是一个非常简洁的示例,说明了进行代码划分的一种方法。在这里,我让组件数量的值nc在部分包MediumBase中未定义。稍后,当设备库适应实际介质时,nc将获得一个值。这就是我对结构参数“延迟”设置的意思。代码在JModelica和OpenModelica中都运行良好
是否可以从OpenModelica中提取ODE系统
使用OpenModelica的漂亮GUI生成一个ODE系统,该系统可用于进一步的处理,例如Python,这将非常好
我知道FMI接口,我们目前使用它进行模拟,但由于许多错误和问题,尤其是使用PyFMI时出现的错误和问题,仅使用ODE系统可能会使我们在进一步研究中获得更多的控制和稳定性
我知道我可以这样定义参数单位:
parameter Modelica.SIunits.Mass m0 = 2 "Mass";
Real m(start=m0, fixed=true, min=0, max=100, unit="kg");
状态变量的单位如下:
parameter Modelica.SIunits.Mass m0 = 2 "Mass";
Real m(start=m0, fixed=true, min=0, max=100, unit="kg");
但是如何定义导数的单位
是否有电气连接器的示例/适配器型号可将Modelica(电气组件)型号导出为FMU?
我的电机(电机、发电机)模型在Modelica中,一些电气部件模型在Simulink中。因此,我想将Modelica中的电气组件作为FMU导出。对于电气元件,我使用的是PowerSystems库,但任何其他库中的任何类似示例(或说明)都将有助于将电气元件导出为FMU。有可能,请参阅示例
我正在使用Wolfram的SystemModeler来研究连接到永磁同步电机的逆变器的系统行为。
不幸的是,即使我只使用Modelica标准库中的组件,我也会得到错误的模拟结果
到目前为止,我在下面的模型中尝试了几种设置
model InverterSMPM
import Modelica.Constants.pi;
parameter Integer m = 3 "Number of phases";
parameter Modelica.SIunits.Frequency f =
在dymola中,当我模拟一个模型时,我得到一个错误,显示某个函数的参数是错误的,并且日志显示了函数调用堆栈,因此我更改为“used classes”视图以显示所有使用的代码,但我没有发现错误消息中显示的函数的任何用法
我的问题是,我应该如何在我的模型中找到这个函数的用法
对于tph1,问题可能在于它被间接调用,被调用的函数默认不包含在“已用类”中,但可以在已用类的上下文菜单中更改(即右键单击):
(请注意,根据Dymola版本的不同,对话框中的名称略有不同。)
名称以\u der结尾的函数可
我正在Dymola中处理一个大型热流体模型,但是当使用默认解算器(Dassl)时,该模型无法收敛,因为它显示模型是刚性的。所以我尝试使用另一个解算器,结果只有一个解算器(Esdirk45a)工作正常
这是劳伦斯伯克利国家实验室的建筑图书馆()的建议,但这个解决方案在我的案例中不起作用
我的问题是:
1.不同解算器之间的区别是什么?
2.我应该如何为不同的模型选择合适的解算器?只需在Google中搜索“”就会返回几个有趣的结果,例如:只有一个解算器工作是一个强烈的迹象,表明模型本身非常关键。一
我试图建立一个平衡的三相星形连接模型(见foto 1)
我想得到这个模拟结果(见foto 2)。下面是一些基本的方程式
我尝试了很多次都没有成功,有人可以检查并修复我的模型,这样我就可以得到与foto 2相同的模拟结果吗
model Unnamed
parameter Integer m=3 "Number of phases";
Modelica.Electrical.QuasiStationary.MultiPhase.Basic.Star starS annotation (
我想在modelica中模拟一个简单的“弹簧摆”:
model Pendulum
parameter Boolean animation=true "= true, if animation shall be enabled";
inner Modelica.Mechanics.MultiBody.World world(axisLength=0.6)
Modelica.Mechanics.MultiBody.Parts.Body body1(
m=1,
我有一个问题要问泵专家。
我有两个并联的泵,在modelica中连接到压力源作为边界,这样两个泵都连接到同一水槽的下游,但它们有单独的体积源
控制策略如下。一个泵打开,另一个泵关闭,90秒后,通过过滤器和平滑斜坡(如三通阀),第二个泵开始旋转,第一个泵关闭
事实上,我的问题是,为什么如果泵中的功率和扭矩信号下降、上升或从零开始,那么在任何情况下,泵1打开和2关闭时,两个泵中的转速都不是零,反之亦然?有一种阻力或阻力拉动泵,使其旋转,即使没有负载或扭矩需求
期待你的回答
维克多你能为你的模型发布代
我想建立一个连续时间系统的模型,它在预先知道的某个时刻改变它的行为。下面是一个小例子
model time_event
Real x(start = 0) "state variable for this example";
parameter T_ch = 5 "time at which the system dynamics undergoes a change";
equation
if time <= T_ch then
der(x) = x + 1;
我想用条件表达式来简化包含300000多个方程的大型通用模型,这样只剩下相关部分。
为了说明这个问题,我使用了以下最小模型:
model Test
parameter Boolean level1=true;
parameter Boolean level2=false;
Integer x=1 if level1;
Integer y=2 if level2;
Integer z;
equation
if level1 and level2 then
z = x
我注意到JModelica的输出文件保存了所有内容,这意味着复杂模型会创建大量文件,特别是对于长时间的模拟
是否可以只在输出文件中保存相关变量?我已经阅读了用户手册,但我看不出在哪里可以指定这样的参数
例如,我的模型创建变量[a,b,c,d,e,f,g,time],但我只想保存[a,b,time]确实是这样,模拟选项对象有一个参数控制着这一点,它被称为过滤器,其描述如下:
用于选择实际存储结果的变量的筛选器。语法可以在这里找到。例如filter=“*der”,存储以“der”结尾的所有变量,fi
在Dymola中,我经常遇到非线性系统初始化失败,或者在大型热流体系统中很难解决的刚性系统,但是对于一个简单的系统,就不会有这种问题。我的问题是:
所以我想知道求解非线性系统模型的最大能力是多少?例如,我的模型中最多可以包含多少个非线性方程
Dymola中是否有任何设置可以提高解决非线性系统的能力
如何减少模型中非线性方程的数量而不损害模型的准确性
这些问题很难用一种普遍有效的方式来回答。尽管如此,我还是会尝试分享一些我在Dymola和非线性系统方面的经验
没有硬性数字限制大小。这更多地取决于方
我在Windows上使用JModelica 2.1,直到最近,我一直能够导入pyjmi而没有任何问题。例如,在IPython控制台中,我通常会毫无问题地运行以下内容:
cd C:\mydirectory
from pyjmi import *
然而,最近,我意外地打开了一个新的IPython控制台,并运行了以前的代码段,但没有意识到我已经打开了一个正在运行优化问题的代码段。此后,前面的代码将抛出以下错误:
--------------------------------------------
新OpenModelica编译器前端似乎存在问题。我正在windows-7 64位操作系统上使用openmodelica 1.14的官方发行版
package Test1_14
model M1
parameter Integer size = 2 "matrix size";
parameter Real A[size] = {1.0, 1.0};
Real B[size];
Real T = 1;
Real P = 2;
equation
使用Dymola中的以下设置,Modelica标准库(Modelica.Fluid.Examples.HeatingSystem)中的模型会导致很多错误,比如无法求解非线性方程,即使最终,非线性解算器成功地处理了这个问题,但我不理解这个过程
我的问题是:
是否有一些简单的例子来详细说明这个过程
我认为这里的关键问题是Dymola打印错误,尽管它可以从问题中恢复。这是令人困惑的,将会得到改进。但有时Dymola无法从问题中恢复,因此我认为最好避免这些问题,即尽可能避免非线性。但是根据Dymola产
我是modelica的新手,尝试用一个新模型在Dymola中建立一个方程。然而,我最终遇到了和模型的结束线相关的错误。我想不出来。
你能帮帮我吗。
提前谢谢。
为了便于参考,我附上了2个图像文件的描述。
方程(j=j_0*{…})的末尾需要一个分号 方程(j=j_0*{…})末尾需要一个分号 我建议以后将代码作为文本而不是图像发布。作为Modelica的新手,我建议您查看以下两个来源:和。欢迎来到Modelica的精彩世界。我建议以后将代码作为文本而不是图像发布。作为Modelica的新手,我建
我在Modelica中寻找一个命令,它可以选择相同类型的所有组件。
我想总结一个由100多个单个动态管道组成的广泛管道系统的体积,然后将其保存为一个变量。目前Modelica没有该变量
然而,有一项提议将改变这种状况
它已经在Dymola和其他工具中实现了测试
另见文件:
另一种替代方法是用专用管道模型替换管道模型,该模型通过内部/外部等方式传达总体积
我正试图在Modelica.Media的基础上建立一个新的媒体模型。我的模型是从PartialMixtureMedium扩展而来的。当模拟一个开放容器(取自Modelica.Fluid)时,该容器既没有进料也没有排水,而是从外部加热,质量平衡无法实现。当der(m)保持为零时,m大幅增加
有人给我一个提示吗
提前谢谢
蒂莫。我不确定您的问题是否出在中型车型上。如果有关成分或密度的偏导数错误(并在模型中使用),则可能是介质模型导致了问题,但如果没有更多信息,我无法确定这一点。可能还有其他原因,开放
我尝试用python读取dymola生成的.mat文件,但每次运行模拟时,.mat文件都保存在不同的文件夹中。我怎样才能有一个单一的出口路径
多谢各位 Dymola将模拟结果写入工作目录。使用cd进行更改
如果使用openModel加载其他模型,请注意它会使用默认参数更改工作目录。设置changeDirectory=False以防止出现这种情况
您可以在编写python代码时使Dymola GUI可见,这将使调试更容易
下面是一个简单的示例,它在窗口可见的情况下启动Dymola,更改工作目录并模
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 16 页