我正在使用 Modelon 的 pyFMI 在 systemC 和其他工具之间进行协同仿真,比如说 openModelica。
我们尝试获取和设置字符串类型的输入,但似乎不受支持。我们在 description.xml 文件中有什么:
<ScalarVariable name="clock_timescale" valueReference="0" description="timescale of the internal clock manager" causality="parameter" variability="fixed" initial="exact">
<String start ="NS" />
</ScalarVariable>
<ScalarVariable name="clock_period" valueReference="4" description="period of the internal clock manager" causality="parameter" variability="fixed" initial="exact">
<Integer start ="20" />
</ScalarVariable>
在这个例子中,clock_period 是一个整数,clock_timescale 是一个字符串。如果我们快速浏览一下 pyfmi 日志,我们可以看到:
FMIL: module = Model, log level = 4: [logFmiCall][FMU status:OK]
fmi2GetInteger: clock_period = 20
FMIL: module = Model, log level = 4: [logFmiCall][FMU status:OK]
fmi2GetInteger: number_isready = 0
FMIL: module = Model, log level = 4: [logFmiCall][FMU status:OK]
fmi2GetInteger: number_port = 0
FMIL: module = Model, log level = 4: [logFmiCall][FMU status:OK]
fmi2GetInteger: result_port = 0
FMIL: module = Model, log level = 4: [logFmiCall][FMU status:OK]
fmi2GetInteger: result_isready = 0
FMIL: module = Model, log level = 4: [logFmiCall][FMU status:OK]
fmi2GetBoolean: reset = true
FMIL: module = Model, log level = 4: [logFmiCall][FMU status:OK]
fmi2DoStep: currentCommunicationPoint = 0 communicationStepSize=20, noSetFMUStatePriorToCurrentPoint =1, internal time=0
我们可以看到 clock_period 的 getter 在 fmi2doStep 之前被正确调用,但不是 clock_timescale 。
此外,如果我们尝试设置字符串,我们会得到以下错误:
Traceback (most recent call last):
File "coordinator.py", line 56, in <module>
model.set_string([0],['MS'])
File "fmi.pyx", line 3555, in pyfmi.fmi.FMUModelBase2.set_string (src/pyfmi/fmi.c:31090)
NotImplementedError
有谁知道为什么它似乎不受支持?或者是否计划支持?有没有让它发挥作用的诀窍?
谢谢