はじめに#
複数人でSimulinkモデルを設計する場合、何かしらのルールを導入しないと、人によってモデルの書き方が異なる場合があり、結合した際に統一感の無いモデルに仕上がってしまいます。
単に見た目が悪くなるだけでなく、場合によってはモデルに振る舞いに影響する場合もあります。
その様な場合は、モデルの検証をやり直ししたり設計効率にも悪影響を及ぼします。
その様な悪影響を抑えるために、様々な「モデリングガイドライン」が存在します。
モデリングガイドライン#
その中でも認知度が高いと思われるJMAABのモデリングガイドラインは日本国内の自動車OEMやサプライヤの方が知恵を出し合って作成されており、日本語で読めるガイドラインとなっています。
今回はこのガイドラインのルールID jc_0008 と jc_0009を遵守するためにSimulink APIを使ったユーティリティを作成したので、紹介しようと思います。このルールは各々、次のように解釈出来ます。
- 信号源となるブロックに信号名を付与し、接続される出力ポートはその信号名と同一とする。
- モデル階層を跨ぐ場合は伝播信号を有効にすること。
コードとサンプルモデル#
コードと動作確認用のSimulinkモデルはMathWorksのFile Exchange経由でGitHubからダウンロード出来るようにしました。
操作動画も併せて公開しました。(動画は2オペレーションですが、実際は1オペレーションで操作出来ます。)
本プログラムの目的#
この2つのルールは、Simulinkは信号フローの伝播によって、その信号の属性を接続先のブロックに継承させます。それによって、信号フローとしてモデルの可読性が向上し、Simulinkのセマンティックにより信号属性が正しく継承させることが狙いです。
また、複数人で設計している場合においては、サブシステム同士の接続ミスを無くすことにも繋ががります。
しかし、いざ設定を施そうとすると、
1. 信号線を1つ1つ選択してチェックを有効にしていく必要があります。非常に面倒臭い!!
2. Simulink APIで一括設定をしようとすると、設定を有効にする箇所と無効にする箇所の区別をプログラム的に判定することが容易ではない!!
そこで、マウスで選択したブロックに接続する信号線のみを対象に伝播信号の設定やポート名のを有効に出来れば、モデリングをしながらサクサクと設定を有効に切り替えられるのではないか?と考え、プログラム作成を行いました。(いわゆるコンテキストメニューのカスタマイズです。)
プログラム上のポイント#
プログラム的には複雑ではないので、興味のある方はダウンロードなりクローン作成して、中身を見てください。
ポイントは、マウスで選択したブロックが設定対象となるようなAPI記述です。
find_systemの第4引数、第5引数でSelectedというプロパティ値をonにすることがポイントです。
find_system(gcs,'SearchDepth', 1,'Selected', 'on');