1. 株式会社PALTEK
  2. TECHブログ
  3. 技術情報
  4. MATLAB®スクリプトでSimulink®モデルを修正してみた【第1回】Simulink® APIの基本1 (基礎の基礎)

TECHブログ

MATLAB®スクリプトでSimulink®モデルを修正してみた【第1回】Simulink® APIの基本1 (基礎の基礎)

MATLAB®スクリプトでSimulink®モデルを修正してみた【第1回】Simulink® APIの基本1 (基礎の基礎)

このブログでは、自動車業界で普及している、モデルベース設計ツールのMathWorks社のSimulink®で作成したモデルを、MATLAB® スクリプトで修正することを試みます。

スクリプトでモデル変更を自動化して効率化する際にご活用ください。MATLAB®スクリプトでは、Simulink® APIを使ってモデルの修正を行います。

今回は第1回目でSimulink® API*の基本1(基礎の基礎)について説明します。全3回の予定で、次回以降は以下の内容を予定しています。

第2回:Simulink® APIの基本2(モデル編集のAPI)
第3回:実際にモデルを修正してみた

* Simulink® API:
MATLAB® から Simulink® の機能を使用するためのコマンド群のことで、Simulink® のエディタ上で行っている操作の一部(ブロックの追加やパラメータの変更など)を、MATLAB® からプログラム的に行うための機能

なお、実行した環境は以下の通りです。

OS Microsoft Windows 10 Pro
MathWorks社製 MATLAB® バージョン 9.9 (R2020b)
Simulink® バージョン 10.2 (R2020b)

それでは始めましょう。

目次

Simulink® APIで取得・変更できる対象

Simulink® APIを使って取得・変更できる対象には以下のものがあります。

  -block_diagram:モデル内のルートレベルの階層
  -block:ブロック
  -port:ブロックの入出力
  -line:信号線
  -annotation:モデル内の注釈

Simulink® APIで取得・変更できる対象の対応を図1の簡単なモデルに示しました。

Simulink® APIで取得・変更できる対象の対応

図1 Simulink® APIで取得・変更できる対象の対応

基本的なSimulink® API

基本的なSimulink® APIに以下のようなものがあります。これらを使用することでSimulink®モデルのさまざまな情報を知ることができます。

 -gcs:現在のシステムまたはサブシステムのパスを取得する
 -bdroot:ルートレベルの階層の名前を取得する
 -gcb:最後に選択したブロック(現在のブロック)のパスを取得する
 -get_param:指定した対象のパラメータ値を取得する
 -set_param:指定した対象のパラメータ値を設定する
 -find_system:指定したモデルの中のすべてのブロックを検索して表示

図2、図3のモデルを利用して具体的に各APIの働きを見ていきます。


モデルのルートレベル階層

図2 モデルのルートレベル階層

サブシステムAddsの階層

図3 サブシステムAddsの階層

gcs

現在のシステムまたはサブシステムのパスを取得することができます。

Simulink®で図2のルート階層(all_add)にいるときに、MATLAB®のコマンドウィンドウ上でgcsを実行すると図4のようになり、サブシステムAddsの階層に下りて実行すると図5のように、現在のシステムまたはサブシステムのパスを表示します。

gcsの実行結果1

図4 gcsの実行結果1

gcsの実行結果2

図5 gcsの実行結果2

bdroot

ルートレベルの階層の名前を取得することができます。図3 サブシステムAddsの階層にいるときにbdrootを実行すると、ルートレベルの階層の名前を表示します。

bdroot実行結果

図6 bdroot実行結果

gcb

最後に選択したブロック(現在のブロック)のパスを取得することができます。図3 サブシステムAddsの階層でGain_1ブロックを選択した状態でgcbを実行すると、ブロックまでのパスを表示します。

gcb実行結果

図7 gcb実行結果

get_param

指定した対象のパラメータ値を取得することができます。get_param(ブロックパス, 'パラメータ名')で指定した対象のパラメータ値を取得します。図3のGain_1ブロック内「Gain」パラメータを読み出す場合は図8のようになります。

get_param実行結果

図8 get_param実行結果

なお、対象ブロックのパラメータ名を調べる方法を、図3のGain_1ブロック内「Gain」パラメータを例に説明します。

Gain_1ブロックを選択しダブルクリックすると、図9のようなブロックパラメータ ウィンドウが開きます。
「メイン」タグ内の「ゲイン」を右クリックすると「これはなに?」と出るので、これを選択し図10のように「これはなにヘルプ」ウィンドウを開きます。このウィンドウ内でブロックパラメータに記載があるのが、パラメータ名となります。

ブロックパラメータ ウィンドウ

図9 ブロックパラメータ ウィンドウ

パラメータ名確認

図10 パラメータ名確認

set_param

指定した対象のパラメータ値を設定することができます。set_param(ブロックパス, 'パラメータ名', ‘パラメータ値’)で指定した対象のパラメータに値を設定します。
図3のGain_1ブロック内「Gain」パラメータに’5’を設定します。パラメータ値を書き込んで読出した結果が図11のようになります。「Gain」パラメータに’5’が正しく書かれています。

set_param実行結果

図11 set_param実行結果

find_system

指定したモデルの中のすべてのブロックを検索して表示することができます。 図2のモデルで図12のように実行すると、ルートレベル階層以下の階層にあるすべてのブロックが表示されます。(図2、図3にあるすべてのブロックが表示されている。)

find_system実行結果1

図12 find_system実行結果1





なお、find_system(検索対象モデル, パラメータ名, パラメータ値)とすることで、特定の対象のみを検索して表示することができます。図13のように実行することで、ルート階層以下にあるゲインブロックのみを表示することができます。

find_system実行結果2

図13 find_system実行結果2

おわりに

今回は「MATLAB®スクリプトでSimulink®モデルを修正してみた」の第1回目で「Simulink® APIの基本1(基礎の基礎)」と題して、もっとも基本的な6個のSimulink® APIについて説明し、対象物のパスや名前の検出やパラメータの読み書き、対象ブロックの検索などを学びました。

次回は第2回目として「Simulink® APIの基本2(モデル修正のAPI)」と題して、モデル修正に使用されるSimulink® APIについて学びます。

もし、モデルベースデザイン設計委託やお手元にあるSimulink®モデルのHDL化のご要望がございましたら、弊社デザインサービス事業までお気軽にお問い合わせください。

 

お問い合わせはこちら

最後までお付き合いいただきありがとうございました。

 

参考文献[1]:MathWorks社 「Simulink API トレーニング」テキスト, 2019年

このブログのシリーズ

関連ブログ