バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回はFMUのユーザ視点に於いての位置づけを確認し、
これを元に仕様の性質から予測される利用手順を列挙してみた。
やはり、modelDescription.xmlの中身を確認しないと具体的な見え方は分かりにくい。
よって、今回はmodelDescription.xmlの中身についてさらっと確認してみる。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
modelDescription.xmlの中身
じゃ、早速modelDescription.xmlの一部を抜粋。
<!-- Index of variable = "254" -->
<ScalarVariable
name="dcpm.ia"
valueReference="9"
description="Armature current"
variability="continuous"
causality="local"
>
<Real unit="A"/>
</ScalarVariable>
<!-- Index of variable = "255" -->
<ScalarVariable
name="dcpm.ie.n.v"
valueReference="13"
description="Potential at the pin"
variability="continuous"
causality="local"
>
<Real unit="V"/>
</ScalarVariable>
おー。
いきなりだな・・・。
とりあえず、DCモータの電流と電圧のところを引っこ抜いてきた感じだ。
各種パラメータ
パラメータとしては以下になるのかな?
- name
- valueReference
- description
- variability
- causality
- Real unit
そうだね。
name、description、Real unitはその名の通り、
名称、詳細、単位っては分かるけど、
それ以外の
valueReference、variability、causality
が分からないな・・・。
valueReference
valueReferenceはインターフェースに割り当てられたインデックスのようなものだな。
実際のシグナルの読み書きをする際は、このvalueReferenceを元に実施するようだ。
まぁnameを元にvalueReferenceを引いてきたり、
valueReferenceからnameを逆引きしたりとかはあると思うけど。
さらっと言ったけど、
結構重要なパラメータっぽいね。
そうだね。
プラットフォームの内部的にはこれを起点にFMU内部とやり取りしてるはずだからね。
仕様書上のvalueReferenceの説明
一応、FMI仕様も確認しておこう。
A handle of the variable to efficiently identify the variable valuein the model interface. This handle is a secret of the toolthat generated the C functions;it is not required to be unique.The only guarantee is that valueReferenceis sufficient to identify the respective variable valuein the call of the C functions. This implies that it is unique for a particular base data type (Real, Integer/Enumeration, Boolean, String) with exception of variables that have identical values (such variables are also called “alias” variables).Thisattribute is “required”.
FMI-Specification-2.0.2.pdf(https://github.com/modelica/fmi-standard/releases/download/v2.0.2/FMI-Specification-2.0.2.pdf)の2.2.7Definition of Model Variables(ModelVariables)より
↓日本語訳
モデル・インターフェースで変数の値を効率的に特定するための変数のハンドル。このハンドルは、C関数を生成したツール依存であり、一意である必要はない。唯一の保証は、C関数の呼び出しでそれぞれの変数値を識別するのに十分なvalueReferenceであること。これは、同一の値を持つ変数(このような変数は「エイリアス」変数とも呼ばれます)を除き、特定の基本データ型(Real、Integer/Enumeration、Boolean、String)に対して一意であることを意味しています。
つまり、
- 変数をハンドルするための値。
- 特に何が何番という決まりはない。
- 原則、同じ値が有ってはいけない。
- エイリアス変数ってのがあってこれは同じで良い。
- 基本データ型はReal、Integer/Enumeration、Boolean、String
ってことか。
正解!
エイリアスが何?ってのはあるけど。
まぁ今の時点では同じシグナルなんだけど、別名が付いてるものって程度の認識で良いよ。
名前的にもそんな感じだよねー。
まとめ
まとめだよ。
- modelDescription.xmlの中身を確認。
- name、valueReference、description、variability、causality、Real unitが存在。
- valueReferenceについて仕様確認。
- 変数ハンドル用で数値の衝突は禁止。
- ただし、エイリアスはその限りではない。
バックナンバーはこちら。
コメント