データフロー
概要
Mech-MSRでは、各「ステップ」がアルゴリズム処理の単位を表し、入力を受けて計算を行い、結果を出力します。ユーザーは、複数のステップをポートで接続することでデータフローを構成し、さまざまな種類のデータを段階的に処理し、最終的に測定および検査タスクを完了します。

データタイプ
Mech-MSRプロジェクトにおいて、データタイプはステップ間でやり取りされるデータの基本的な形式を示します。例えば、Surface(サーフェスデータ)、Profile(プロファイル)、Shape3DList(三次元形状リスト)、NumberList(数値リスト)などがあります。通常、接続されるポート同士は同じデータタイプである必要があり、それによって正しくデータが転送され、処理されます。
Mech-MSRでポートのデータタイプを確認する方法は、こちらをクリックすると表示されます。
プロジェクト編集エリアの空白部分を右クリックし、表示されるメニューから ステップポートの表示を設定 を選択します。その後、タイプと名前をすべて表示 または タイプのみを表示 を選択すると、ポポート上にデータタイプが表示されます。
ポートのデータタイプ名は <>
で囲まれて表示されます(例:<Surface>
、<Profile>
、<NumberList>
、<Shape3DList>
など)。

さらに、表示されるデータタイプ名から以下の情報も読み取ることができます。
-
名前の後ろに
-
が付いている場合:これはオプション入力であることを示します。例えば、多くのステップにある 位置合わせパラメータグループ(PoseList-
)は必須の入力ではなく、入力が空でもステップの実行に影響しません。 -
名前の後ろに
[]
が付いている場合:これはポートの定義されたデータ次元を示しています。詳細については、データ次元 をご参照ください。
データ次元
Mech-MSRプロジェクトにおいて、データ次元とは、データの構造的な階層レベルを表します。
-
ポート宣言次元
これはあらかじめ設定されたデータ構造の階層レベル、すなわちそのポートが受け取る/出力することを期待するデータの次元を意味します。
Mech-MSRでポート宣言次元を確認する方法は、こちらをクリックすると表示されます。
データタイプ名のみ が表示されている場合は0次元を示します。データタイプ名の後に
[]
が1組付くごとに、データ次元が1つ増加します。例:
-
Surface
:0次元のサーフェスデータ -
Surface []
:1次元のサーフェスデータ -
Surface [][]
:2次元のサーフェスデータ
-
-
実際の入出力データ次元
ステップの実行時に、ポートを通じて実際に受け取るまたは出力するデータの次元を指します。これは、宣言された次元よりも 大きい場合、等しい場合、または小さい場合 があります。ステップの動作ロジックに基づいて実際の入出力データ次元がどのように決まるかについては、ループ深度 をご参照ください。
Mech-MSRプロジェクトでは、ステップはポートの宣言次元と異なるデータを受け取ったり出力したりすることがありますが、その場合ステップが正常に動作しない可能性や、期待通りの結果が得られない可能性があります。
フレームループ
実際の入力データの次元がポートの宣言次元よりも 大きい 場合、ステップはポートの宣言次元に基づいて、入力データを階層ごとに順次処理します。このステップのループ処理動作を「フレームループ」と呼びます。
ステップがフレームループを行う必要がある場合、ステップカードの右下に アイコンが表示されます。アイコン上の数字はループの階層数を示し(階層数が1の場合は数字は表示されません)、ループ処理が不可能な場合は
アイコンが表示されます。

ループ深度
ループ深度とは、ステップが特定のポートのデータを処理する際に必要なループ実行の階層数を指します。これはポート上部に表示されるループアイコン によって示され、アイコン上の数字がループの階層数を表します(階層数が1の場合は数字は表示されません)。
ループ深度の計算式:ループ深度 = 実際の入力データの次元 − ポートの宣言次元。この式により、データの実際の次元を推定することができます。
ステップに複数のポートがあり、それぞれに入力がある場合、すべてのポートでループ深度が一致している必要があります。一致しない場合、そのステップは実行できません。 |
- 例
-
下図のように、「サーフェスの特徴点の位置決め」ステップの入力ポート(サーフェスデータ)に
アイコンが表示されてます。これは、このポートのデータに対してステップが階層的に処理を行う必要があることを示しており、ループ深度は2です。このポートの宣言次元が0であることがわかっているため、実際の入力データの次元は2次元であると判断できます。
次元増加/次元削減
複数のポートのデータにおいてループ深度が異なる場合、一般的にはいずれかのポートのデータに対して スライスによる次元増加 または 結合による次元削減 を行い、すべてのポートのループ深度を一致させる必要があります。
こちらをクリックすると、操作方法が表示されます。
データフローを右クリックし、スライスによる次元増加 または マージによる次元削減 オプションを選択して、データの次元を変更します。

スライスによる次元増加
スライスによる次元増加とは、データをスライス処理することで、データの次元を1つ上げる操作です。その後、ポートの上には アイコンが表示されます。
|

マージによる次元削減
マージによる次元削減とは、複数のデータをマージすることで、データの次元を1つ下げる操作です。その後、ポートの上には アイコンが表示されます。
|

入力の再利用
ポートデータが次元増加または次元削減を行えない、またはその必要がない場合は、次元の低いポートデータをステップの実行時に繰り返し使用(入力の再利用)することで、ステップを正常に動作させることができます。再利用されているポートの上部には アイコンが表示されます。
こちらをクリックすると、操作方法が表示されます。
ステップのパラメータ設定エリアで、実行フラグ を展開し、入力の再利用 オプションにチェックを入れます。

|
- 例
-
同じ入力データでも、「スライスによる次元増加」や「入力の再利用」によって全く異なる結果になることがあります。
フレームループの有無
なし
あり
ステップ入力
-
サーフェスデータ:0次元、円穴の画像データ。
-
位置合わせパラメータグループ:0次元、6つの円穴の位置情報。
操作内容
なし
-
「位置合わせパラメータグループ」のデータフローに対して スライスによる次元増加 を行い、0次元から1次元に変更します。
-
ステップパラメータで 入力の再利用 にチェックを入れます。
実行時の画像
実行結果
-
自動次元増加
実際の入力データの次元がポートの宣言次元よりも 小さい 場合、システムは入力データに対して自動的に次元増加を行い、ポートの宣言次元の要件を満たすようにします。自動次元増加されたポートの上部には アイコンが表示され、アイコンの数字は増加した次元数を示します(次元が1つ増加した場合は数字は表示されません)。
現在、データ抽出 および データをマージ ステップのみ、パラメータ設定欄の 次元 パラメータによってポートの宣言次元を変更できます。実際の入力データの次元がポートの宣言次元より 小さい 場合、システムは自動的に入力データの次元を増加させます。

スライスによる次元増加とは異なり、自動次元増加はデータ全体をまとめてパッケージ化する方法で次元を上げます。 |
トップレベル次元
全てのパラメータを受け入れる ステップの入力ポートには固定の宣言次元がありません。そのため、上流からのデータをそのまま受け取り、そのデータの次元をポートの宣言次元として扱います。この状況を トップレベル次元 と呼び、ポートの上部には アイコンが表示されます。このとき、ポートの データタイプ には受信したデータの次元が表示されます。

全てのパラメータを受け入れる ステップを使用することで、データ次元を素早く確認することもできます。 |
トラブルシューティング
データのループ深度が一致しない
問題:
プロジェクトまたはステップを実行すると、あるステップに対して「ループ深度が一致しません:……」というポップアップメッセージが表示されます。
解決策:
-
入力の再利用:いずれかのポートのデータがリストでない場合は、ステップパラメータ欄の「実行フラグ」で 入力の再利用 にチェックを入れてください。
-
次元削減:ループ深度が高いポートのデータが配列(リスト)である場合、データフローの接続線を右クリックして マージによる次元削減 を選択し、データの次元を下げてポート間のループ深度を一致させてください。
-
次元増加:ループ深度が低いポートのデータが配列(リスト)である場合、データフローの接続線を右クリックして スライスによる次元増加 を選択し、データの次元を上げてポートのループ深度を一致させてください。
-
各ポートの入力を確認し、入力データが正しいかどうかを確認してください。
ポートデータの数が一致しない
問題:
プロジェクトまたはステップを実行すると、あるステップに対して「ポートデータの数が一致しません:……」というポップアップメッセージが表示されます。
解決策:
-
データ数が少ないポートのデータがリストでない場合は、ステップパラメータ欄の「実行フラグ」で 入力の再利用 にチェックを入れてください。
-
データ数が少ないポートのデータがリストである場合は、データフローの接続線を右クリックして マージによる次元削減 を選択し、データの次元を下げた後、ステップパラメータ欄の「実行フラグ」で 入力の再利用 にチェックを入れてください。
-
上記の方法でも問題が解決しない場合は、データ抽出 ステップやその他の有効な方法を使用し、すべてのポートのデータ数を一致させるようにしてください。
スライス操作による次元増加ができない
問題:
データフローをクリックし、右クリックメニューから スライスによる次元増加 を選択してステップまたはプロジェクトを実行すると、「スライシングによって次元を増加することはできません:……」というポップアップメッセージが表示されます。
考えられる原因:
-
該当ポートの入力データがリスト(List)形式ではありません。
-
次元増加後のデータの次元数がステップの処理可能上限を超えています。
解決策:
スライスによる次元増加 のチェックを外してください。もしループ深度の不一致がある場合は、データのループ深度が一致しない をご参照ください。それでも問題が解決しない場合は、Mech-Mind株式会社のテクニカルサポートにお問い合わせください。
マージ操作による次元削減ができない
問題:
データフローをクリックし、右クリックメニューから マージによる次元削減 を選択してステップまたはプロジェクトを実行すると、「マージによって次元を削減することはできません:……」というポップアップメッセージが表示されます。
考えられる原因:
-
該当ポートの入力データが既に0次元であり、これ以上次元を削減できません。
-
該当ポートの入力データがリスト形式ではないため、次元の削減ができません。
解決策:
マージによる次元削減 のチェックを外してください。もしループ深度の不一致がある場合は、データのループ深度が一致しない をご参照ください。それでも問題が解決しない場合は、Mech-Mind株式会社のテクニカルサポートにお問い合わせください。