1

私は、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 へのゲッターが 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

サポートされていないように見える理由を誰かが知っていますか? または、サポートされる予定がある場合は? それを機能させるためのトリックはありますか?

ありがとう

4

1 に答える 1

1

ご覧のとおり、PyFMI (バージョン <= 2.2) を使用した文字列の設定と取得はサポートされておらず、残念ながら動作させるためのトリックはありません。

ただし、次のバージョンではサポートされる予定です。機能はすでに実装されており、開発バージョンが使用されている場合 (ソースからビルド) に使用できます。

于 2016-02-17T21:17:37.240 に答える