你知道是否有一个C库来处理FMU和运行模拟,包括一个好的解算器吗
据我所知,有:
来自QTronic的FMUSDK
来自Modelon的FMI库
两者都可以打开FMU,但只允许运行FMU与简单的Euler解算器进行联合仿真
库包括处理不连续性的良好解算器,但不在C中,包括:
来自Modelon的PyFMI:用于Python
来自托勒密的JFMY:For Java(不确定这是否包括一个好的解算器)
我认为FMUSDK并没有真正得到维护,因此FMI库可能是这两者之间的更好选择
要改进解算器,您
我有一个字符串向量,其中包含一些物质的名称vec={“H2”,“O2”},我想使用这些字符串访问包中的记录,以便
Modelica.Media.IdealGases.Common.SingleGasesData.'vec[1]'
返回H2的数据
这在Modelica中是可能的,还是我必须手动执行?我最终手动执行:
import d = Modelica.Media.IdealGases.Common.SingleGasesData;
constant Modelica.Media.IdealG
模型很简单:我想给旋转接头的旋转法兰施加一个扭矩。
但是,扭矩反作用力不应施加在回转接头的支承法兰上。
扭矩反作用力确实在其他地方平衡,而不是在旋转关节本身平衡。
一个真实世界的例子是车轮:扭矩由动力总成提供,并通过轴传递到车轮,因此扭矩反作用力不会在轮毂上感知,而是在动力总成支架上感知。
因此,上述各项似乎都不正确:
蓝色:在革命的框架上有一种不应该存在的反应。支架(白色圆圈)似乎总是平衡施加在法兰上的扭矩(灰色圆圈)),但在这种情况下没有意义
红色:在旋转帧_a上没有反应,但在1D线上没
我只是从莫代利卡开始。我知道有一个内置的时间导数运算符[der(expr)]。如果我必须用其他变量进行求导,那怎么做呢?例如:如果我必须对w.r.t进行求导,变量“x”是如何形成的?例如,如果你需要时间导数以外的东西,我想你必须显式地声明导数
y = x^2;
der_y = 2x;
变量deruy应该在模型的前面声明,y和x也应该声明。如果你想要一个双导数,比如说,那么你可以这样做
dder_y = 2;
使用变量dder_y,如前所述,提前清除
在制作Modelica模型时,我并
考虑以下简单的包
package Test
connector Param
parameter Real k = 1.5;
end Param;
model Component
input Param p;
Real x;
equation
der(x) = p.k;
end Component;
model System
Param p;
Component c;
equation
connect(p
我想提出一个我以前问过的关于a的问题。考虑以下2个控制器之间的切换模型。
model Switch
input Real u;
input Integer sel;
output Real y;
protected
Real x;
equation
if sel == 1 then
y = 0.1 * (0 - u);
der(x) = 0;
else
y = 0.1 * (0 - u) + 0.2 * x;
der(x) = 0 -
这个问题涉及到
我有一些可以互换的子模型,我使用可替换/重新声明机制将它们包含在模型中(例如,冷却回路模型中不同类型热交换器的子模型)
我想将主模型的一些参数(比如管道的长度和直径)与子模块的相应参数“链接”。这通常在定义模型实例时完成(即在可替换行中),但是在重新声明组件网时,如何也应用此链接?特别是如果使用了选择所有匹配
以下是“我的”模型(感谢中的帮助):
我可以在注释中添加所有可能的重新声明,例如编写choice(redeclare Test.Call2 OBJ(pp=pp0))而不是使
我是modelica的noob,负责开发热交换器模型
我没有输入
air_in.X_outflow[1]=1;
air_out.X_outflowp[1]=1;
coolant_in.X_outflow[1]=1;
coolant_out.X_outflow[1]=1;
但我遇到了一些错误,如下面的捕获。
首先,我不知道C_流出的物理意义是什么。我可以发现C_流出=C_I/m
m是流体的质量,但找不到c_i的含义。
其次,我刚刚尝试输入描述中所说的值0~1,但遇到了上面的错误消息。我认为
我目前正在评估Dymola 2020,以建立一个太阳能发电厂模型,但在使用自定义连接器的模型中,我很难处理大量方程
代码如下:
connector Port
flow Real Q;
Real P;
Real T;
end Port;
我在模型中设置了3个方程,但有一个错误显示有4个方程。方程式是如何计算的?为什么有四个呢
这个问题在结构上是单一的
它有3个标量未知数和4个标量方程。真正的部分有3个
未知数和4个方程。整数部分有0个未知数和0个
方程。布尔部分有0个未知数和0个方程
我的目标是创建一个1D/2D查找表,该表可以读取JSON文件中的可变大小数组,而无需指定静态大小的Modelica数组参数
我首先尝试扩展externda,根据github问题中的建议实现一个自定义表:
概述的步骤是:
创建您自己的CombiTable副本,修改它以接受数据访问对象和稳定名称,请参见下面的代码段
创建ExternalCombiTable1D的副本,该副本将引用您自己的CombiTable数据对象
创建一个c函数,直接从json读取数据并将其存储到表对象中,然后将其传递给MSL
例如:
在我的脚本中,我启动了一个模型的模拟,其中包括10个水量,然后将所有结果存储在指定的.mat文件中。
对于某些变量的最终值,我想在另一个模型中对相同的10个卷进行参数化,都在同一个脚本中。
我对Modelica languange还不是很熟练,但我坚信这是可能的,不需要手工操作的繁琐。
谢谢。欢迎来到SO。请阅读并更新您的答案。是的,这是可能的!Modelica参数可以在模拟之间更改。根据您的描述,我认为最好的方法是编译到FMU,然后使用python脚本运行模拟,读取模拟结果,设置参数,
Modelica是否有与C++模板等价的东西?我想构建一个类来处理T类型的输入,但是T只有在实例化该类时才会被知道。我试图将该类型作为参数传递,但它给出了错误。您可以使用可替换的类型/类
model M
replaceable class C; // = some partial class if you need an interface constrainedby ...
C c;
end M;
model Test
M m1(redeclare class C = C1);
考虑一下这个场景。我使用OMEdit打印窗口中的“保存”选项保存打印的曲线。我想在同一模型的文档中使用此图像作为其他模型的参考。但问题是,使用此功能保存的图像非常大,并且在文档窗口中占用了大量空间(即宽度和高度)
我尝试使用HTML代码width=“xx”height=“yy”。但这并不奏效
是否有任何方法可以使用OpenModelica文档中的HTML代码调整图像大小?仅供参考。导出打印图像的大小取决于打印窗口的大小。打印窗口是MDI容器,因此可以调整打印窗口的大小,然后导出较小的图像
下面的
我想在医学背景下的Modelica模型中使用非SI单位。我在Dymola中使用Modelica。作为一名工程师,我更喜欢国际单位制。但我的模型参数来源于医学出版物,我希望避免转换错误。医疗单位还简化了与医生的沟通
例如,使用单位“毫米汞柱”(毫米汞柱)代替“帕”表示压力。压力变量在模型中定义如下:
type Pressure_mmHg = Real (final quantity="Pressure", final unit="mmHg")
defineUnitConversion("Pa",
我正在学习Modelica语言,Modelica.Reference非常有用,但我没有找到允许我在本文中搜索特定单词的网站。我必须尝试使用谷歌的自定义搜索。但效果并不好
有谁知道一个网站或一些方法,让我这样做
从标签和其他问题中,我假设您有Dymola。在Dymola中,您可以右键单击“Modelica.User's Guide”并选择“Search”。如果激活“Modelica文本”复选框,Dymola将搜索完整的Modelica文本,包括文档
对于其他型号,“完整文档”复选框可能更有意义。
我想知道是否有命令可以以编程方式获取和发布Dymola 2020x的共享许可证(库、二进制导出许可证等),而不必关闭整个程序
我特别感兴趣的是能够获得和发布代码出口许可证。我尝试过这两种方法,但在不关闭Dymola的情况下,可靠地发布许可证或(由另一个用户)获得最近释放的许可证并没有多大成功
DymolaCommands.Others.RequestOption()
Advanced.EnableCodeExport
关于获得许可证;我已经能够使用以下代码获取共享许可证:
RequestOp
我正在制作接口包,它可以在模拟回路中输入模型的参数。
为了连接接口包和仿真模型,我使用了标准Modelica库中的Controlbus。3.2.2
检查模型是可以的,但如果我模拟模型,就会出现如下图片所示的错误
这是与这个模型相关的方程
Omega_e=Omega_d*N_t[N]
Alpha_d=der(ωd)
为了解微分方程,我认为解算器需要一个特定的参数N_t。
因此,我从接口模型中输入参数,并使用标准Modelica库中的Controlbus组件发送参数
如上图所示,我明确地输入了
在Modelica中,我有一个变量x,它依赖于(a,b,c)。对于给定的模拟时间,其绘图(x,time)看起来平滑且连续。我想要得到这条曲线的斜率,而不必显式地微分der(x),因为我得到了关于a,b或c的偏导数的误差。这可能吗?换句话说,我想要最终输出的斜率,而不必区分它背后的内容。您不能在Modelica本身中执行类似操作,因为您无法访问积分器、以前的时间或类似内容。通过使用采样,可以在Modelica代码中获得近似值,但这会略微改变模拟结果,并可能成为性能瓶颈:
M型
实时信号=时间;
实
我刚开始使用Modelica(Dymola),并尝试了大部分教程
现在我只想建立一个简单的“有摩擦的斜面”模型。
这里有一些例子,比如
力学.平动.部件.有摩擦的质量
力学.平移.示例.摩擦
但我不知道如何在二维空间中“旋转”它们。我想让物体在重力的影响下在斜面上滑动
我的目标是,评估当粘滞变为摩擦时的临界倾角
我希望你理解我的问题,我期待着你的回答。这是一个很好的观点。我不知道这是不是一个好办法。你可以用一个简单的力来模拟会使块滑动的力,并使大小为sin(θ)*m*g。但问题是模拟倾斜平面
我继续研究如何在库和应用程序中最好地划分代码。在之前的几篇文章中,我使用了一个玩具示例DEMO_xx库和应用程序dxx_app7。下面是一个稍微更新的版本,以涵盖这里的问题。我已经考虑了将传感器添加到收获箱的可能性
现在,我想了解如何在应用程序代码中引入从库媒体2扩展而来的应用程序媒体7的信息,并在应用程序的新组件模型中充分使用这些信息
我的理解是,如果您导入一个从另一个包扩展而来的包,您只会得到“最新”的包,而不是通过扩展构建的包,以及聚合的总媒体信息
该示例通过将常数SensorX.comp
标签: Modelica
derivativecalculuspdeopenmodelica
在OPEN MODELICA中:
我有一个偏导数方程,
Q=-A*dy/dx
对于时间差,Q=-Ady/dt-I可以使用代码Q=-Ader(y)
有没有一种方法可以对空间导数进行编码?还是相同?根据“使用Modelica对技术和物理系统进行建模和仿真的介绍”,PDE在开放Modelica中不受支持
这里有更多上下文的相同问题:
我正在学习在dymola中调试modelica模型,我可以看到dymola将所有方程分为不同的组。例如,在dslog.txt文件中,有关于用于求解第7组方程组的迭代变量的信息,但是我在哪里可以找到第7组中使用的方程
这是我目前使用的设置
检查dsmodel.mof文件,Dymola在模拟设置窗口中激活相应的转换标志时创建该文件:
现在,您将在工作目录中获得文件dsmodel.mof。此文件包含水平和垂直排序的方程式。如果出现非线性方程组,您会发现它们与标签一起分组在该文件中,标签应与方程组编
我更改了模型中的参数,但有时会因为病态雅可比矩阵而导致模拟停止,我不确定这个错误意味着什么
我的问题是:
有没有关于如何在Modelica模型中求解DAE方程的解释,以便我理解雅可比矩阵的用法
我怎么知道是哪个方程或参数导致了Dymola中的这个问题
Modelica模型或多或少地映射到混合ODE系统(或索引1的混合DAE系统)。为了简单起见,假设它映射到一个显式的连续时间ODE系统
xdot=f(x,p,t),x(0)=x0
请注意,混合ODE系统由多个连续时间ODE系统组成。雅可比矩阵是fw
我试图通过使用pre操作符来避免Modelica中的代数循环,但是当我使用类似pre(x>0.5)的东西时,在pre的代码生成中会出现内部错误。
如果我使用pre(cond),其中cond是一个布尔型变量,就不会有任何错误
我的问题是:pre操作符是否有一些规定要求我不能在pre操作符中使用表达式
以下是代码和屏幕截图:
model WithAlgebraicLoop_Wrong2
"Demonstration of how to avoid generating algebrai
标签: Modelica
dymolaopenmodelicajmodelica
以下三个问题联系在一起,因此请原谅文章的长度
使用Dymola 2016
在模型中使用可替换函数调用为用户提供了拥有下拉选项的机会。示例如下:
model Test1
parameter Real x = 1;
Real y;
replaceable function a=b constrainedby d annotation(choicesAllMatching=true);
equation
y = a(x);
end Test1;
function Test2
i
我想使用可扩展连接器(例如a)为更复杂的子系统建模(主要是)输入和输出连接(一个数组将不允许其元素有不同的单位,扁平列表将变得很难处理,而一个记录不允许在不写等式的情况下轻松连接其一个变量)
虽然您可以简单地将变量连接到空的可扩展连接器,但它的单元(和其他属性)不会被传递。因此,我想灵活地声明可扩展连接器内的变量(例如x[:])并根据实际连接确定其尺寸
不幸的是,OpenModelica和Wolfram System Modeler中也没有验证这一点:
…将连接器声明为子组件并通过内部和外部传递
我试图从FMU获得模型雅可比矩阵,根据以下文献,我可以使用FMI2GetDirectionalDerivation来实现这一点,但我不确定我到底需要做什么
我的问题是:
我可以在Dymola或MATLAB中调用此函数吗
一个屏幕截图或一个例子会很有帮助
我不熟悉在MATLAB中调用DLL函数,但这是Python中的一个示例。FMPy()有这些包装器,用于在python中运行fmu
我在这里编写了一个简单的模型(),并对其进行了测试。在这种情况下,已知是状态或输入的值引用,未知是导数或输出的值引
我计划在文本字符串中显示变量的数量,因此我在中检查了DynamicSelect表达式的用法,如下所示:
这里是我制作的一个示例,它只包含一个Modelica.Blocks.Sources.Sine组件和一个文本标签,但我不确定为什么文本在模拟过程中没有更改。看起来DynamicSelect表达式根本不起作用。
我的问题是:
如何设置DynamicSelect表达式以使其工作
model fsdaf
Modelica.Blocks.Sources.Sine sine(amplitude=1
我尝试用Modelica语言在Ansys Twinbuilder 2021 R1中模拟一台液压机
整个系统如下图所示
首先,我尝试将整个系统划分为子系统。我模拟了pumpraum-1,pumpraum-2,pumpraum-3,出口组件的子系统。子系统独立工作,没有任何问题。然后我尝试将子系统编译成整个系统。那么模拟就不能顺利进行了。它会在任何时间步停止,不会继续到模拟结束。这是什么原因呢?我如何理解我整个系统中的问题在哪里
我的模型代码如下:
model HD_3Kolben_bsp
我自己创建了一个小型Modelica库。我创建它的方式是在一个文件中。但是我想让它成为一个合适的Modelica库,就像在每个子包都有多个目录的库中一样
这就是我所遵循的。文件>新建Modelica类>专门化-包>未选中将内容保存在一个文件中。我从单个文件库复制了整个包代码,粘贴到这里并保存了它。在这样做的过程中,我注意到这个库丢失了大部分extends子句,很少有模型丢失
我是否按照正确的程序创建了库,还是做错了什么
有人能给我指出正确的方向吗?@MSK,我无法帮助您使用OpenModelic
是否可以从文件中读取参数向量?
我试图创建一个对象向量,如图所示:从第49页开始。但是,我想从文本文件中提取特定的电阻和电容值。(实际上,我只是用这个例子来说明如何读入它)。
因此,该示例填充如下数据:
A.Basic.Resistor R[N + 1](R = vector([Re/2; fill(Re,N-1); Re/2]) );
A.Basic.Capacitor C[N](each C = c*L/N);
但是,我有一个文本文件,其中第一列是索引,第二列是R值,第三列是C值:
#1
我指的是一个用点绘制的图,比如a数组的第一个元素和B数组的第一个元素等等。你使用的是什么工具?OpenModelica?迪莫拉?使用Python和DyMat包进行绘图可能更容易:我正在使用OMEdit。我需要为我的项目在这一个做绘图。有一个命令“quiver”,但我不知道如何使用它!
我有一组数据需要插值。我的第一个数据集包含每个x1[:]和y1[:]的z1[:]值。我必须将我的第二个数据集x2[:],y2[:]w.r.t插值到我的第一个数据集,以得到z2[:]值。我的第一个数据集的大小与第二个数据集的大小不同。是否已经用Modelica编写了用于此功能的算法 不规则网格上的插值已被要求,但仍然不是Modelica标准库的一部分(从今天的3.2.2版开始)。因此,我唯一能解决这个问题的方法是编写一个双线性插值算法。我说的对吗?双线性插值(尽管是在常规网格上)已经是block
使用Dymola 2017
案例A)调用外部c脚本
我成功地实现了没有“#include”语句的简单外部c函数:
Modelica函数:
function chirp
input Modelica.SIunits.AngularVelocity w_start;
input Modelica.SIunits.AngularVelocity w_end;
input Real A;
input Real M;
input Real t;
output Real u &qu
我想用Modelica Dymola为区域供暖系统建模
哪些库可用于模拟用户、热源和区域供热网络?
-常用
-开源还是商业
我还希望您提供有关如何组装简单的第一个模型的提示。您可以从Modelon(火力发电库)获得一个商业的、受支持的、经过工业验证的库来模拟区域供暖系统,请参阅。例如,您可以对区域供热网络的生产装置进行基于优化的调度,等等 您可以从Modelon(火力发电库)获得一个商业、受支持且经工业验证的库来模拟区域供暖系统,请参阅。例如,您可以对区域供热网络的生产装置进行基于优化的调度,等
我试图模拟两个物体之间的接触,其中一个是上下移动,另一个是旋转,想象一下旋转工件的切割过程。我正在使用接触件库,请检查下图
我给旋转关节一个速度输入,我想看看接触块摩擦对主轴组件角速度的影响。我不能那样做。接触块中属性的任何更改都会导致旋转关节中扭矩的更改,但速度保持不变。是否有一种方法可以限制关节中的扭矩?或者,我应该做些什么来观察主轴速度中的摩擦效应减速或加速
PS:我使用的是Dymola免责声明:这很可能不是一个功能齐全的答案,但希望它能为您提供一个良好的起点
这与您的建模方式有关。您将输
我在使用默认为Modelica标准库2D combi表的可替换类型参数时遇到问题。我正在使用OpenModelica 1.14.1。我是Modelica的新手,所以我不确定我看到的是错误还是误解的结果
以下代码工作正常(当我按下“检查模型”时,没有翻译错误):
然而,这并不是:
model Error
replaceable class DefaultTable = Modelica.Blocks.Tables.CombiTable2D;
DefaultTable bob;
DefaultTab
假设我根据Modelica语法正确地建模了一个完整的系统,那么编译器是否足够成熟来处理它
我需要建立一个至少有15个连接组件的系统模型,每个组件相对简单,从数学上讲,只有代数方程。Modelica对我很有吸引力,但我是一个完全的初学者,这个项目对我很重要,所以我有点害怕承诺使用Modelica
我知道编译器不能完全模拟所有的标准库示例和模型,我怎么知道确切的限制是什么
谢谢。当然,这在很大程度上取决于你选择什么工具。根据个人经验,我可以告诉你们,十多年前,我在福特汽车公司的一个项目中使用了Dym
我想知道Modelica是否允许我们创建可替换的模型
我试图将Modelica.Blocks.Sources.Constant重新声明为一个控制恒定电压的块。我只需要改变变量k的单位。(从零到“伏特”)。
在openmodelica中可以这样做吗?您不需要可替换的模型。
只需在Modelica.Blocks.Sources.Constant组件上使用修改器:
Modelica.Blocks.Sources.Constant const(k(unit = "V"));
但要回答您的问题,Open
这是一个相当普遍的问题。我试图根据实验测量数据验证Modelica模型。在过去,我只是简单地添加了一个CombiTable,将数据复制到组件中。然而,我将处理至少15列我想匹配和比较的数据
我的问题是,你推荐什么方法、技巧和技巧来比较测量和模拟数据,从而更容易校准和验证你的Modelica模型?我一直很好奇其他人是如何做到这一点的
对我来说,我创建了一个模型,我把它放在我所有的例子中,进行回归测试,并在通过/失败时给出报告。“正确”的数据可以从combiTable(任意多个维度)输入,也可以直接
下面的代码
model FunctionCall
Boolean result;
function F
input Real p1;
output Boolean result;
algorithm
result :=p1 < 0.5;
end F;
algorithm
result :=F(time);
end FunctionCall;
模型函数调用
布尔结果;
函数F
输入实p1;
输出布尔结果;
算法
结果:=p1
我有一个模型,用它创建一个FMU,并希望将其导入python
在第一块画布上输入作品,并将其传输到作品中使用的块
由于python代码的体系结构,我需要为块的其余部分输入前缀
我举了一个简单的例子:
package testi
model source
Modelica.Electrical.Analog.Sources.SignalVoltage signalVoltage annotation(
Placement(visible = true, transforma
在我的模型中,我弄不明白为什么初始条件没有完全指定
以下是代码和屏幕截图:
model WithAlgebraicLoop_Right
extends Modelica.Icons.Example;
Real x;
Real y(start=1, fixed=true);
Boolean cond;
equation
cond = x > 0.5;
when pre(cond) then
y = 1*time;
end when;
x = sin(
关于CombitMetable,我有几个问题:我厌倦了将一个txt文件(3列:第一次+2个测量数据)导入CombitMetabletxt文件是否必须具有以下标题#1;double K(x,y)-CombitMetable中的表名必须与double后面的变量同名(在我的例子中是K),对吗如果尝试连接表的两个输出(第1列和第2列),则会出现错误。是否必须指定要导入的列数
和:为什么我必须在路径中使用“/”而不是“\”
多谢各位 战斗文件的标准文本文件格式为:
#1
双K(4,3)
0 1 10
如果可能,我想创建一个可替换介质包阵列,用户可以使用可用选项更改每个选项
下面是定义介质的典型方法
replaceable package Medium = Modelica.Media.Interfaces.PartialMedium
"Coolant medium" annotation (choicesAllMatching=true);
下面是一个原型,我希望在每个“媒介”都可能是不同的媒介的情况下可以实现
parameter Integer n = 1 "Number o
标签: Modelica
openmodelicajmodelicasystemmodeler
接下来,我修改了我描述的基于能量的控制器,以避免sqrt中出现负值:
model Model
//constants
parameter Real m = 1;
parameter Real k = 2;
parameter Real Fmax = 3;
parameter Real x0 = 1;
parameter Real x1 = 2;
parameter Real t1 = 5;
parameter Real v0 = -2;
//variable
我在试着破解密码
model modelTest
// types
type Mass = Real (unit = "Kg", min = 0);
type Length = Real (unit = "m");
type Area = Real (unit = "m2", min = 0);
type Force = Real (unit = "Kg.m/s2");
type Pressur
我必须自己制作一个感应电机模型,我的第一步就是复制一个已经存在的例子,即电机.Examples.异步感应电机.AIMC\u DOL。现在我已经复制了它,但是我不能参数化AIM\u鼠笼,因为我不能在其中设置所有默认值。请参阅附件。帮帮忙,谢谢
Errors:
------------------------------------------------------------------------------------------------------------------------
我在Modelica中有一段代码,如果变量的计算输出为0/0或inf,我必须为变量赋值1。
我发现了如何通过Modelica.Constants.inf表示无穷大。
但是,我找不到如何表示0/0,我已经搜索了NaN,但找不到它。请帮助我。还不可能,请参见此处的讨论:
我试图用Modelica来离散一个偏微分方程模型,但我被困于如何离散时间导数项
如下面的屏幕截图所示,这是热传导PDE模型的典型方法,它使用der运算符,而不是离散时间导数项。
我想做的是离散方程中的所有导数项,包括时间导数,但我不确定如何表示Q(t+Δt)-Q(t),因为我不知道Modelica中是否有一种机制允许我使用不同时间点变量的值
我的问题是:
可以对时间导数项进行离散化吗
对它没有简单的支持
一种简单的可能性是使用der(Q)=(Q(t+Δt)-Q(t))/Δt基本上给出了行的方法
上一页 1 2 3 4 5 6 7 8 9 ...
下一页 最后一页 共 16 页