我的电路中有几个块“ FixedCurrent”。我希望能够通过FMU更改这些模块的电流值。我可以使用“参数”更改值,如下面的代码所示:
type Current = Real(unit = "A", min = 0);
parameter Current CurrentTest1(start = 50) "Test current";
PowerSystems.Generic.FixedCurrent fixedCurrent3(
I = CurrentTest1,
redeclare package PhaseSystem = PhaseSystem),
annotation(...);
PowerSystems.Generic.FixedCurrent fixedCurrent1(
I = 55,
redeclare package PhaseSystem = PhaseSystem),
annotation(...);
但是我不能为他们分配输入。例如,如果我使用输入命令(1)或RealInput块(2)设置块fixedCurrent3的电流值:
// 1)
input Real TZtest(start=50);
PowerSystems.Generic.FixedCurrent fixedCurrent3(
I = TZtest,
redeclare package PhaseSystem = PhaseSystem),
annotation(...);
// 2)
Modelica.Blocks.Interfaces.RealInput TZTest2 annotation(...);
PowerSystems.Generic.FixedCurrent fixedCurrent3(
I = TZtest,
redeclare package PhaseSystem = PhaseSystem),
annotation(...);
我收到相应的错误:
1) Translation Error
Component fixedCurrent3.I of variability PARAM has binding TZtest of higher variability VAR.
2)Translation Error
Component fixedCurrent3.I of variability PARAM has binding TZTest2 of higher variability VAR.
因此,我无法通过FMU输入来设置参数值。我将很高兴为您解决这个问题。
答案 0 :(得分:2)
简而言之:问题在于变量的可变性。用允许设置可变电流的模块替换您的FixedCurrent模块。因此,除了参数之外,它还需要具有当前I的实际输入。
在Modelica中,变量可以具有以下变量之一(从最低到最高):
只能将变量分配给具有相同或更高可变性的其他变量。例如,不能使用连续变量设置参数。在示例1)和2)中,您正试图做到这一点。
对于1),您可以使用前缀参数将输入的可变性设置为参数:
parameter input Real TZtest(start=50);
在情况2)中,您会遇到FMU的输出连续的问题。因此,如该答案开头所提到的,您应该用某种可变电流块替换FixedCurrent块。
请注意,还有一种变通方法,该方法可以根据初始方程式中的连续变量设置参数(如this所述),但是我仅在绝对必要时使用它。