MATLABユーザーコミュニティー

MATLAB和Si金宝appmulinkユーザーコミュニティー向け日本語ブログ

金宝app仿真软件の”ワークスペース”についてざっくり解説!

皆様、あけましておめでとうございます!

今年も我々 MATLABユーザーコミュニティメンバーはイベント紹介やユーザーの紹介、技術的な解説など様々な情報発信をしていきたいと思いますので、2021年もどうぞよろしくお願いいたします!

ということで,2021年1発目の記事を担当することになりました,トレーニングエンジニアの遠藤と申します。去年は”金宝app仿真软件MATLABをとつなぐ”をコンセプトとしていくつか技術的な記事を書いてきましたので,今回もその流れで技術的な記事を書いていきたいと思います。

具体的には、金宝app模拟と MATLABを連携させるうえでしばしば問題になる「ワークスペース」についてのお話になります。

ちょっとニッチな内容ではありますが、特に以下のような方はワークスペース関係の問題に直面しやすいので、ぜひ参考にしていただければと思います。

  • モデル内で使用しているパラメータ変数が多いため,Mスクリプトや .小地毯ファイルを使ってパラメータを管理している方
  • コンポーネントごとにモデルを作成し,最後にモデル同士を統合することを考えている方
  • 应用程序设计师などを使っていて、MATLAB関数の中でモデルのシミュレーションを行う必要のある方

ワークスペースとは吗?

金宝app模拟をメインで使っている方の中にはワークスペースのことをあまりよく知らない、という方もいらっしゃるかと思いますので、本題に入る前に「そもそもワークスペースとは何か」について簡単に説明します。「そんなこと知ってるよ!」という方は次のセクションまで読み飛ばしていただければと思います。

ワークスペースとは MATLAB上で作成された変数が格納される場所です。例えば MATLABのコマンドウィンドウで

>> x = 10

と実行すると MATLAB上の「ワークスペース」のところに xという変数が格納されます。

このMATLAB上に表示されているワークスペースはベースワークスペース呼ばれます。Mスクリプトやコマンドウィンドウで定義した変数は全てこのベースワークスペースに格納され、それらから自由にアクセスできます。

しかし、MATLAB関数の中で作成した変数についてはベースワークスペースに格納されず,その関数用の一時的なワークスペースに保存されます。

この一時的なワークスペースを関数ワークスペースと呼びます。MATLAB関数はこの関数ワークスペースにしかアクセスできないため、MATLAB関数内からベースワークスペース上の変数を参照することはできません。また,関数ワークスペースは一時的なものですので,その関数の実行が終わると格納されていた変数はすべて削除されます。

ワークスペースについてはこちらのドキュメントにも詳細が記載されていますので,合わせてご確認いただければと思います。

金宝app模拟とワークスペースの関係

上述した通り、Mスクリプトやコマンドウィンドウはベースワークスペース、MATLAB関数は専用の関数ワークスペースにアクセスすることができます。それでは、模拟金宝appのモデルはどのワークスペースにアクセスすることができるのでしょうか?

何も特別な操作を行わない場合,金宝app仿真软件のモデルはベースワークスペースに自動でアクセスします。ゲインブロックのゲイン値に変数を設定し,その値をMATLABのスクリプトで定義しておく,といったことができるのも,仿真金宝app软件がベースワークスペースの変数を自動で参照してくれているからです。

逆に言うと,金宝app模拟のモデルはそのままでは関数ワークスペースの変数にアクセスすることはできません。関数の中で模拟関数を使ってシミュレーションを実行しようとしたら、「変数が定義されていません」というエラーが出てきてしまった、という経験をしたことがある方もいらっしゃるのではないでしょうか?

金宝app仿真软件とワークスペースに関する主要なトラブル

上述の通り、金宝app模拟のモデルは MATLABのベースワークスペースの変数を自動で参照してくれますので、ベースワークスペースに変数を作成してさえいれば、多くの場合問題が生じることはありません。

しかし、例えば以下のような状況では、ベースワークスペースへの参照が問題となってしまいます。

【ケース1】

一个さんとBさんは,共同でモデルの開発をしています。Bさんは自分が担当している箇所のモデルを作成し終えたので,必要なパラメーターのデータファイルとセットで一さんに渡しました。早速一个さんはそれをモデル参照で自分のモデルに統合すると,Bさんからもらったデータファイルを読み込んでシミュレーションを実行しました。

しかし、シミュレーションが思い通りの結果になりません。原因を調査してみたところ、いつの間にかモデル内で使用している変数 Kの値が書き換わっていることに気づきました。実はBさんが作ったモデルの中でも変数 Kが使用されていたため、データファイルを読み込んだときに上書きされてしまったのです。2人はモデル内のいろいろな場所で変数 Kを使用しているので、変数名を変えるとなると大変です。どうすれば2つのモデルの同じ変数の値を使い分けることができるでしょうか?

【ケース2】

A.さんは、モデルをシミュレーションするための関数を開発することになりました。A.さんは、モデルが関数ワークスペース上の変数を参照できないことを知っていたため、assignin関数を用いてモデル内で使用されている変数 Kをベースワークスペース上に定義することにしました。

しかし,後日一个さんの開発した関数を使ったBさんから”シミュレーションしたらワークスペース上の解析結果が勝手に上書きされた”とクレームが来ました。Bさんはシミュレーションの入力信号を作成するためにMATLAB側でデータ解析を行っており,そこでKという変数を使っていたのです。どうすればベースワークスペース上の変数の上書きを防ぐことができるでしょうか吗?

ケース1の対処法:モデルワークスペースを利用して変数のバッティングを防ぐ

ケース1の問題点は、2つのモデルがどちらもベースワークスペースを参照していることにあります。ベースワークスペース上には同じ名前の変数を複数用意しておくことはできませんので、2つのモデルがベースワークスペースを参照している限りは同じ値が参照されてしまいます。逆に言うと、各モデルが別々のワークスペースを参照してくれれば、同じ変数名であっても別の値を使用することができます。

そこで登場するのが モデルワークスペース です。モデルワークスペースとは、モデルごとに専用に用意されているワークスペースのことで、各モデルからしか参照することができません。そのため、そのモデル内でしか使わない変数を格納する際に便利なワークスペースとなります。

モデルワークスペースは 金宝app模拟の「モデルエクスプローラー」から確認することができます。金宝app模拟エディタの「モデル化」タブから「モデルエクスプローラー」を起動すると、現在開いているモデルが表示されます。ここでモデルの下の階層を開くと、それぞれのモデルに 模型工作空间が用意されていることがわかるかと思います。

このモデルワークスペースには、ワークスペースと同様に自由に変数を格納しておくことができます。新規で変数を作成したい場合は、上部の「MATLAB」変数の追加」をクリックします。自動で変数が作成されますので、変数名や値、データ型などを自由に設定できます。

もしベースワークスペースで既に作成してある変数をモデルワークスペースに移動したい場合は,ドラッグ&ドロップで移動できます。

モデルワークスペースは各モデルからしか参照できないため、別のモデルとの変数のバッティングを防ぐことができます。さらに、ベースワークスペースよりも優先的に参照されるため,ベースワークスペース上に同じ名前の変数があってもそちらが参照されることはありません。ケース1の場合はBさんが変数Kを自身のモデルのモデルワークスペースに格納しておけば,一个さんがベースワークスペースで使用している変数Kではなくモデルワークスペース上の変数Kが参照されるため,別々の値を使用することができる,というわけです。

ただし、モデルワークスペースに作成した変数は,他のモデルから参照することができません。もし別のモデルでもその変数の値を使いたい、という場合はちゃんとベースワークスペース上に作っておく必要があります。他にも、変数がどこで管理されているのかわかりにくい、といった欠点もありますので、個人的には基本はベースワークスペースを使用し、変数のバッティングが怖い場合はモデルワークスペースを使う、というような使い分けがいいかなと思っています。

※パ、ラメータをより詳細に管理したい場合

金宝app模型数据字典という機能を使うと、モデルごとに独立して参照してほしいデータ群や複数のモデルで共有してほしいデータ群を 数据字典という形式でそれぞれまとめて管理することができます。パラメータ数やモデル数の多い大規模モデルの開発においては特に有用な機能となっています。

数据字典の概念や使い方については、英語ですが以下の動画がわかりやすいので、興味のある方はこちらもぜひご参照いただければと思います。

ケース2の対処法:モデルが関数ワークスペースの変数を参照するように設定する

ケース2の問題点は、モデルが関数ワークスペースの変数を参照できないことにあります。関数内で定義した変数をモデルが参照してくれれば、ベースワークスペース上の変数の上書きは起こりません。

ここで使用するのが、sim 関数の SRC工作空间オプションになります。

sim卡関数を実行する際は様々なオプションを指定することができますが,このSrcWorkspaceプロパティは”モデルがどのワークスペースを参照するか“を設定できるオプションです。

既定の設定ではこの SRC工作空间は ’基地'に設定されているため、モデルはベースワークスペースの変数を参照し、関数ワークスペースは参照しません。これを ‘电流'に変更することで、模拟関数が実行された時に使用されているワークスペースが参照されるようになります。すなわち,mスクリプトやコマンドウィンドウ上で実行された時はベースワークスペース,MATLAB関数内で呼ばれた時は関数ワークスペースが参照されます。

函数我的乐趣
K = 5;
模拟(“myModel”,“SrcWorkspace”,“当前”);%呼び出された場所のワークスペースを参照
终止

これを使えば、A.さんは変数 Kをわざわざベースワークスペース上に用意する必要はなくなりますので、Bさんの解析結果を上書きせずに済みます。

ただし、参照先として設定できるワークスペースは1つだけです。関数ワークスペースに作成されている変数はそれを用いる,ない場合はベースワークスペースの変数を用いる,というようなことはできないので注意が必要です。また,関数ワークスペースの変数は関数実行後に消えてしまいますので,後からその変数はどんな値だったのかを確認することができない点も注意が必要です。

※関、数内でシミュレーションを実行しなければならない状況

ケース2だけ見ると,“そもそも関数じゃなくてスクリプトでモデルをシミュレーションすればいいんじゃない吗?“と思う方もいらっしゃるかと思います。確かに,通常モデルをシミュレーションするだけであればわざわざ関数を使用する必要はありません。

しかし、例えばシミュレーションアプリを作成する場合、アプリの動作は全て関数で記述する必要があるため、必然的に関数の中でシミュレーションを実行することになります。

そのため,アプリ内でパラメータの値を設定しそれを用いてシミュレーションする場合はこのSrcWorkspaceオプションが非常に重要になってきますので,シミュレーションアプリを作成する人はぜひ覚えておきましょう。

(シミュレーションアプリの作成については、应用程序设计师で 模拟モデルの金宝appシミュレーションアプリを作るの記事もご参照ください)

まとめ

今回は仿金宝app真软件とワークスペースの関係によって生じる主要なトラブルとその対処法ついて解説しました。金宝app仿真软件のワークスペースへのアクセスの仕方は少し癖があるので,MATLABのスクリプトや関数と連携させる際に問題が生じやすいです。逆に,金宝app仿真软件が参照する場所を自在に操ることができると,MATLABとの連携だけでなく大規模モデルの管理も効率的に行えるようになりますので,頭の片隅に置いておくと意外な場面で役立つかもしれませんよ!

|

评论

如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。