- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了一个函数,返回值为记录类型。
通常我会使用这个函数通过一个初始方程来初始化一个记录类型的实例。
但是因为我想在时钟模型中使用这个函数,所以不可能有初始方程。
对我来说,这似乎是使用属性 start 初始化变量的唯一方法。不幸的是,记录没有这个属性,只有它的组成部分。
这是一个简单的例子,展示了我想要做什么:
model RecordInitializeTest
record simpleRecord
Integer arg1;
Integer arg2;
end simpleRecord;
function initFunc
output simpleRecord sR;
algorithm
sR.arg1 := 1;
sR.arg2 := 2;
end initFunc;
model InitializeTest
input Boolean u(start=false);
output simpleRecord sR1;
equation
if u and not previous(u) then
sR1 =initFunc();
else
sR1 = previous(sR1);
end if;
end InitializeTest;
InitializeTest iT;
equation
iT.u = sample(time > 0.5,Clock(0.1));
end RecordInitializeTest;
这个模型在 dymola 中工作,但当然有警告,因为 iT.sR1.agr1 和 iT.sR1.arg2 没有起始值,但是 previous() 的参数。
output simpleRecord sR1(start=initFunc());
有没有人知道如何以方便的方式初始化 sR1 而无需像这样的分配
output simpleRecord sR1(arg1(start=1),arg2(start=2));
因为这对于大型结构化记录来说会很不方便。
最佳答案
如果我完全理解您的问题,只需进行一些小的修改即可让您的示例按预期运行:
model RecordInitializeTest
record simpleRecord
Integer arg1(start=0);
Integer arg2(start=0);
end simpleRecord;
function impureFunc
output simpleRecord sR;
algorithm
(sR.arg1, sR.arg2) :=Modelica.Utilities.System.getTime();
end impureFunc;
model ImpureTest
input Boolean u(start=false);
output simpleRecord sR1;
equation
if firstTick() or u and not previous(u) then
sR1 = impureFunc();
else
sR1 = previous(sR1);
end if;
end ImpureTest;
ImpureTest iT(u=sample(time > 0.5, Clock(0.1)));
end RecordInitializeTest;
在模拟结果中,我们看到新记录值精确计算了 2 次:在时间 0 和时间 0.5:
initFunc()
被 impureFunc()
取代, 在结果中看到函数在时间 0 和时间 0.5 被调用firstTick()
添加到在时间 0 调用不纯函数firstTick()
设置的。关于modelica - 如何通过同步模型中的函数初始化记录类型(modelica),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64588149/
我想知道是否有其他正则化技术(例如双曲正切)而不是 smoothStep函数存在于 Modelica 中。我处理我使用的复杂代码 smoothStep几次以避免在我的模型中喋喋不休;但是,我已经在我的
尽管 Modelica 是一种非因果建模语言,但我们学到了例如here它可以改变你写方程的方式。MutualInductor的代码模型在 Modelica.Electrical.Polyphase.B
我写了一个函数,返回值为记录类型。 通常我会使用这个函数通过一个初始方程来初始化一个记录类型的实例。 但是因为我想在时钟模型中使用这个函数,所以不可能有初始方程。 对我来说,这似乎是使用属性 star
我有一个本地模型,当我在 Dymola 中检查时,该模型声称有 35 个变量和 34 个未知数,而当我在 OMEdit 中检查完全相同的模型时,它的平衡率为 34/34。在确定什么算作变量时,是否包括
我有一个参数 z,我需要其值始终为 1。 model test Real parameter z = 1; end test; 当我拖放此模型并双击它时,参数选项卡将打开,我可以更改值。我怎样才能防止
我有一组关于不规则网格的数据。我通过插值来找到 f(x,y)。我在维基百科算法的帮助下实现了双线性插值。然而,它并不准确。我想实现双三次插值或双三次样条插值。我已经找到了双三次插值的算法,但我必须找到
我想提出一个我之前问过的关于 Modelica array of partial model 的问题。 。考虑以下两个 Controller 之间的切换模型。 model Switch input
如何使用 Modelica(OpenModelica、jModelica)为工厂和 Controller 的 C/C++ 例程实现控制系统设计的软件在环。您可以建议什么方法?我认为外部 C 函数会有所
我希望使用条件表达式减少具有超过 300000 个方程的大型通用模型,以便仅保留相关部分。为了说明这个问题,我有以下最小模型: model Test parameter Boolean level
我有一组必须进行插值的数据。我的第一个数据集包含每个 x1[:] 和 y1[:] 的 z1[:] 值。我必须将第二个数据集 x2[:], y2[:] w.r.t 插入到我的第一个数据集中以获得 z2[
我有一个参数 z,我需要其值始终为 1。 model test Real parameter z = 1; end test; 当我拖放此模型并双击它时,参数选项卡将打开,我可以更改值。我怎样才能防止
我有一组关于不规则网格的数据。我通过插值来找到 f(x,y)。我在维基百科算法的帮助下实现了双线性插值。然而,它并不准确。我想实现双三次插值或双三次样条插值。我已经找到了双三次插值的算法,但我必须找到
我正在尝试在模型的 equation 部分中实现一个简单的迭代猜测方案,但是,我收到以下错误:No viable alternative near token: while 在 OpenModelic
首先我想说我是 StackOverflow 和 Modelica 的新手。 我的目标是模拟旋转爆震发动机的喷油器系统。从本质上讲,这是一个从油箱到火箭发动机的管道系统。这个系统会根据实验设置而改变,所
我想知道是否有办法“调试”modelica 代码,我的意思是逐行调试代码,您可以看到变量如何变化,诸如此类? 我知道modelica代码被翻译成C,我只是想知道是否有可能以某种方式做到这一点,如果有,
我正在尝试根据电网电压控制并网光伏系统。 这个想法是这样的:当电网电压上升到 VMax 以上时,我想关闭系统 timeOff。当 timeOff 过去后,我想再次打开,但只有当电网电压低于 VMax
我正在尝试在 Modelica.Media 的基础上建立一个新的媒体模型。我的模型从 PartialMixtureMedium 扩展而来。当模拟一个开放的容器(取自 Modelica.Fluid)时,
在 Modelica 中计算连续信号的平均值 (mean) 和标准偏差 (StdDev) 的最佳方法是什么?应计算固定时间段 T 的均值和 StdDev;即,从 t-T 到 t。 最佳答案 下面是该问
在模拟相当复杂的稳态模型以模拟多回路制冷剂系统时,我收到来自 Dymola 的以下警告消息。 The following variables are iteration variables of th
我在 Modelica 上收到一条错误消息: All branches in if equation with non-parameter tests must have the same numbe
我是一名优秀的程序员,十分优秀!