第5回 MBD(モデルベース開発)Simulinkモデルを流れるデータ
第5回 MBD【モデルベース開発】解説 コラム
第5回 MBD(モデルベース開発)コラム、今回は、Simulinkモデル内を流れるデータについて紹介します。
この連載コラムでは、Simulink を使った MBD の基礎的な内容を数回に分けてわかりやすくお伝えします。
目次
はじめに
https://member.eureka-box.com/products/10/categories/2150049210/posts/2158661784
Simulinkモデルでは、配線されたブロック間を流れるデータのことを信号と呼びます。
信号は3種類に大別できます。スカラー信号は、単一の値データです。ベクトル信号は、複数の値で構成される「配列」データです。どの値も同じ型になります。バス信号は、複数の値で構成される「構造体」データです。個々の値には名前が付与され、それぞれの型は異なっても構いません。
このコンテンツでは、ベクトル信号およびバス信号の生成・分解の方法、また、使い方のポイントなどを説明します。
ベクトル信号:生成、分解
https://member.eureka-box.com/products/10/categories/2150049210/posts/2158661784
まず、配列に該当するベクトル信号から見ていきましょう。
ベクトル信号は、スカラー信号をMuxブロックで合成して生成できます。また、右のように、1行N列の行ベクトル、あるいはN行1列の列ベクトルが指定されたConstantブロックも、ベクトル信号を出力します。
逆に、ベクトル信号を分解して各要素を取り出すには、Demuxブロックを使用します。
ベクトル信号:要素の抽出
https://member.eureka-box.com/products/10/categories/2150049210/posts/2158661784
ベクトル信号から任意の位置の要素を取り出すには、Selectorブロックを使用します。取り出す位置(添え字)は、Selectorブロックのプロパティとして直接指定することができます。ただしその場合、ダイアグラム上では上のように表示されるため、要素数が増えると取り出す要素がわかりにくくなります。ダイアグラムの可読性を上げるには、下のようにSelectorの入力信号として与える方法もあります。
ベクトル信号:使いどころ
https://member.eureka-box.com/products/10/categories/2150049210/posts/2158661784
ベクトル信号はどのような場合に使うとよいのでしょうか。
たとえばC言語の場合、配列の要素の値を合計する、あるいは各要素の値を変換するといった場合には、forループを使うのが一般的です。
それに対してSimulinkでは、配列をベクトル信号としてそのまま入力に取り、演算できるブロックが多数用意されています。そのおかげで、forループを用いることなく、配列の単位で演算することが可能になります。
上の例では、Sumブロックにベクトルを入力して、各要素の値を集計しています。同様に下の例では、ProductブロックとSumブロックにベクトルを入力して、各要素の値を2倍して1を足すということを実現しています。
Simulinkのテクニックとして、「複数の値に同一の処理を適用したい場合はベクトル化する」と覚えておくとよいでしょう。
Eureka Boxは厚生労働省が実施している助成金、人材開発支援助成金の適用対象となります。
バス信号:生成、分解
https://member.eureka-box.com/products/10/categories/2150049210/posts/2158661784
次は、「構造体」データを表すバス信号です。
バス信号は、Bus Creatorブロックで生成し、Bus Selectorブロックで分解します。バス信号の要素となるBus Creatorへの入力信号には名前を設定し、その名前に基づいて信号の取り出しを行います。
バス信号:値の設定
https://member.eureka-box.com/products/10/categories/2150049210/posts/2158661784
バス信号の一部の要素の値を書き換えるには、Bus Assignmentブロックを使用します。この例では、3つの信号のうちの2つの値を書き換えています。
バス信号は、関係の深いデータをまとめるために使うことができます。通常、Simulinkモデルには多数の信号が入力されます。それをバラバラのままで引き回すと、モデルが非常に煩雑になります。そのような場合に、意味的に関連の深い信号をバス信号にまとめ、その単位で引き回すことがよく行われます。
これからのMBD(モデルベース開発)に求められる技術を知るには
MBDの技術を実際に学んでみたいという方、まずは無料でお試しいただけるオンライン学習を準備しています。
業務が多忙なエンジニアでも、スキマ時間で効率的に実践的な学習が出来るEureka Boxは、エンジニアの現場の声から生まれたツールです。
エンジニアの独学・スキルアップに! 他では学べない技術が充実
上流工程ソフトウェア開発技術を学ぶ!
Eureka Box(ユーリカボックス)
無料会員登録だけでも以下の特典が受けられます。
- 各連載コラムの全容、未公開コラムも一気にまとめて読める(一部動画解説付!)
- USDM(要求記述)、MBD(モデルベース開発)、システムズエンジニアリング、AWS Greengrass(新世代エッジエンジニアのための技術講座)など、ソフトウェア開発に関わる知識がギュッと凝縮、困った時のお助けアイテムとしても長期で活用出来る
- ソフトウェア開発に関わる無料お試しコンテンツも充実
まとめ
https://member.eureka-box.com/products/10/categories/2150049210/posts/2158661784
本コラムでは、Simulinkモデルで扱われる信号のうち、特にベクトル信号とバス信号を取り上げて、使い方や用途について説明しました。モデル中を流れる信号を配列や構造体として扱うと、ロジックを簡潔かつすっきりと記述することが可能になります。本コラムで紹介した使いどころなどを参考に、有効に活用していきましょう。
コンサルティングサービスのご案内
システム・ソフトウェア開発の問題を解決するエクスモーションのコンサルティング。
エクスモーションのコンサルタントは、自動車業界・医療機器業界で多くの支援実績があります。開発現場の皆さまと一緒に手を動かし、状況に合った最適解を見つけることで問題解決に導きます。
MBD(モデルベース開発)のソリューションはこちらをご覧ください。
トップ企業をサポートしてきた技術と知見を1冊に「ソリューションガイドブック」
私達エクスモーションが行った、日本を代表する企業へのコンサルティングやトレーニングとは?
オンライン学習 Eureka Box誕生のベースとなった技術や知見が満載!
実際に支援を行ったお客様からのメッセージも掲載し、読み応えある1冊に仕上げています。