第4回 MBD(モデルベース開発)Simulinkのブロック

第4回 MBD【モデルベース開発】解説 コラム
第4回 MBD(モデルベース開発)コラム、今回は、Simulinkモデルの開発初級者が最初に押さえておくべきSimulinkブロックと、そのブロックを使ってプログラムを作成する例を紹介します。
この連載コラムでは、Simulink を使った MBD の基礎的な内容を数回に分けてわかりやすくお伝えします。
目次
Simulinkモデルの例

https://member.eureka-box.com/products/10/categories/2150049210/posts/2158181906
早速、簡単なSimulinkモデルの例を見てみましょう。この図は、オンにすると1ずつインクリメントするカウンタを表しています。
Simulinkでは、プログラムをブロック線図モデルとして作成します。つまり、様々な機能を持つブロックをグラフィカルに貼り付け、つなぎ合わせることで、モデル、すなわちプログラムを作成します。
では、このような図を作成するためにSimulinkで提供されているブロックについて、よく使用するものをご紹介します。
構造およびデータに関するブロック(1)

https://member.eureka-box.com/products/10/categories/2150049210/posts/2158181906
まず、モデルの構造およびデータ(信号)の生成・保持に関連するブロックです。
Subsystemは、複数のブロックをグルーピングして1つの機能単位を作るためのブロックです。C言語における"関数"を作るためのブロックと捉えるとよいでしょう。ネストさせることができるため、モデルをSubsystemの階層構造として整理することができます。
InportはSubsystem(あるいはモデル)が入力信号を受け取る口(ポート)、OutportはSubsystem(あるいはモデル)からの出力信号を流す口(ポート)です。Subsystemを関数とすると、それぞれ入出力の引数に相当します。たとえば、先ほどのカウンタをサブシステム化し、入力信号、Subsystem、出力信号をつないだのが使用例の図です。
Constantは、定数値を出力するブロックです。たとえば、使用例の図の入力信号の代わりにConstantをつなぐと、定数値を渡すことができます。
構造およびデータに関するブロック(2)

https://member.eureka-box.com/products/10/categories/2150049210/posts/2158181906
もう1つ、Unit Delayというブロックもあります。
Simulinkモデルは時間駆動で動作します。つまり、「入力値の読み込み⇒処理⇒出力」というサイクルをサンプル時間の周期で繰り返します。そのため、モデル中の各サブシステムの処理も、サンプル時間毎に実行されることになります。しかし、サブシステムの中でサンプル時間をまたいで値を保持したい、つまり1サンプル前の値を使用したいことはよくあります。
そのような場合に使うのがUnit Delayです。Unit Delayは1サンプル前に記憶した値を出力します。たとえば、入力値を順次足し合わせていくような場合に使用できます。C言語における"static変数"を作るためのブロックと捉えるとよいでしょう。
Eureka Boxは厚生労働省が実施している助成金、人材開発支援助成金の適用対象となります。
演算に関するブロック(1)

https://member.eureka-box.com/products/10/categories/2150049210/posts/2158181906
次に、演算に関するブロックです。
加算・減算には、Add、Subtract、Sumを使用します。いずれも基本的には同じもので、ブロックパラメータでアイコンの形状や符号を設定します。
ProductとDivideは乗算と除算です。同じように、ブロックパラメータで乗算か除算かを切り替えます。
Relational Operatorは関係演算(比較演算)を行うブロックです。ブロックパラメータで関係演算子を指定します。
演算に関するブロック(2)

https://member.eureka-box.com/products/10/categories/2150049210/posts/2158181906
Logical Operatorは、入力された信号に対する論理演算を実行します。ブロックパラメータでANDやORなどの演算子を選択します。
Switchは、条件に応じて、2つの入力のうちどちらを出力するかを決定するブロックです。第2入力に指定された条件判定の結果が、真の場合には第1入力を、偽の場合には第3入力を出力します。Simulinkでif-then-elseのロジックを記述する際に、最もよく使用されるブロックです。
Lookup Table

https://member.eureka-box.com/products/10/categories/2150049210/posts/2158181906
Lookup Tableは、あらかじめ定義しておいた「表」に基づいて、入力値に対応する出力値を演算するブロックです。入力値と出力値の関係が、単純な計算式では近似できない(精度がとれない)場合や、その関係に適合(調整)の余地を残しておきたい場合などに利用されます。下に示した図は1-Dの例ですが、ブロックプロパティで青い丸に相当する値の表を設定し、さらに、丸の間の青い線の部分と、丸の外側、両端の点線部分をどう出力するかの手法も指定します。
モデルの例

https://member.eureka-box.com/products/10/categories/2150049210/posts/2158181906
では、最初に紹介したSimulinkモデルをもう一度見てみましょう。これはカウンタを表すものでした。
カウンタがオンの場合、つまりenableが真の場合には、Switchの第1入力が出力されます。出力された値はUnit Delayによって保持され、次のサイクルで1と足し合わされます。カウンタがオフになると、Switchの第3入力が出力され、カウンタはリセットされます。
Simulinkでは、このようにプログラムを作成します。
MBD(モデルベース開発)を実際に学んでみる
MBDの技術を実際に学んでみたいという方に、まずは無料でお試しいただけるオンライン学習プラットフォームを準備しています。
業務が多忙なエンジニアでも、スキマ時間で効率的に実践的な学習が出来るEureka Boxは、エンジニアの現場の声から生まれたツールです。
MBD(モデルベース開発)を正しく理解した上で適用し、最大限の効果を得られるようスキルアップしたい方にもEureka Boxでの学習はお勧めで、無料会員登録だけでも以下の特典が受けられます。
- 各連載コラムの全容、未公開コラムも一気にまとめて読める(一部動画解説付!)
- USDM(要求記述)、MBD(モデルベース開発)、システムズエンジニアリング、AWS Greengrass(新世代エッジエンジニアのための技術講座)など、ソフトウェア開発に関わる知識がギュッと凝縮、困った時のお助けアイテムとしても長期で活用出来る
- ソフトウェア開発に関わる無料お試しコンテンツも充実
まとめ
Simulinkでは、プログラムをブロック線図モデルとして作成します。つまり、さまざまな機能を持つブロックをグラフィカルに貼り付け、つなぎ合わせることで、プログラムとなるモデルを作成します。
そして、Simulinkは優に200種類を超えるブロックを標準で提供しています。提供されるブロックの種類も、四則演算、比較演算、論理演算といったプリミティブなものから、伝達関数、PIDコントローラ、アナログ・デジタルフィルタといった高機能なものまで、非常に豊富です。
そのような豊富なブロックの中から自身の用途に合致したブロックを見つけ出すのは大変と思われるかも知れませんが、実際にはコントローラ用のモデル、それもオートコードを前提としたモデルを作成する際に使用されるブロックの種類は、さほど多くはありません。
本コンテンツでは、コントローラ用のモデルを作成する、あるいは読む上で、最低限知っておくべきブロックを紹介しました。
コンサルティングサービスのご案内
システム・ソフトウェア開発の問題を解決するエクスモーションのコンサルティング。
エクスモーションのコンサルタントは、日本を代表する自動車メーカーや、医療機メーカー等の支援を数多く手掛け、実績を作ってきました。そのノウハウを持って開発現場の皆さまと一緒に手を動かし、状況に合った最適解を導き出すので、ご利用いただいた企業様より大変ご好評をいただいております。