GAIO CLUB

2022年03月04日

【第2回】プログラム言語としてのMATLAB Simulink

MBDてさぐり奮戦記
MBD(モデルベース開発)てさぐり奮戦記
こんにちは。
当時(1999年頃)、我々にとってMATLAB Simulink(MathWorks社)のようなデータフロープログラミングは制御機器の組込ソフトウェアとして全く未経験で、MATLABが制御系設計支援ツールとして優れていることは十分認識していましたが、Simulinkモデル図(以下モデル図と略します)で開発したプログラムを制御機器へ組み込むことについて、どんな課題があるのか分からず手探り状態でした。

MATLAB Simulinkの分析を進めると、モデル図は記述により可読性が大きく変わるので、分かりやすいモデル図の記述方法が検討課題となりました。

また、組込ソフトウェアの中でなるべく広範囲の処理を同じ言語で開発するほうが、開発効率、技術者育成や言語間の境界でおきる様々な品質リスク回避という点で優れているため、いろんな処理について分析を進めて行きましたが、手続き的な処理、実行時間の影響が大きい処理や割込競合の回避などについてなんらかの工夫が必要だったため、このような処理について、モデル図での適切な記述方法が検討課題となりました。今回はこれらの概要を説明いたします。

データフロープログラミング

分かりやすい記述

MBD手法による組織的な量産開発では、モデル図を関係者の誰にでもわかりやすい記述をすることが、組織的にモデル図のレビュー(インスペクション)検証や保守する上でとても重要なため、可読性の良い記述方法を決めたルールを作成し運用する必要がありました。しかしながら、参考となる先例がなかったため、どのように記述すれば可読性がよいのかが検討課題になりました。

手続き的処理

マイコンに内蔵されたタイマやA/Dなどのハードウェアを制御するSFR(Special-Function Register :特別機能レジスタ)や、異なる処理(プロセス)間の通信手順などで複数の変数やレジスタに対してアクセスする手順が厳密に決まっている場合があります。このような処理について、モデル図での適切な記述方法が検討課題となりました。

実行時間の影響

1.実行時間

Simulinkはデータフロー言語であり、例えば下図左のC言語のIF文を単純に右のスイッチブロックで置き換えた場合、左は条件によりAまたはBが実行されるのに対して、右はAもBも実行されたあと通過する信号が選択されるので実行時間が異なるなど、C言語のような手続き型プログラミングとの違いを熟知する必要があり、モデル図で開発したプログラムの実行時間は、C言語の感覚とは合わないことがありました。また、実行時間はMATLAB上のシミュレーションでは分かりづらく、実行時間に制約のある処理ついて、モデル図での適切な記述方法が検討課題となりました。
プログラム言語としてのMATLAB Simulink

2.処理遅れ

実行時間の影響を受けるような処理、例えば、演算するタイミングの時刻を基準に演算するような処理では、マイコンのハードウェアで計時している時刻を読み込んでから演算するまでの(処理遅れとなる)実行時間で演算時の基準となる時刻を補正する必要があるため、時刻を読み込んでから演算するまでの実行時間を厳密に見積もる必要があります。このような処理について、モデル図での適切な記述方法が検討課題となりました。

割込

モデル図よりスタック上に確保した動的変数を使用したC言語プログラムが生成されるため、プログラムが実行中に、より上位の割込優先レベルを持つ処理が割り込んでもほとんどの場合は割込競合がおきませんが、静的変数への入出力処理や他の処理と共有するリソースにアクセスするような処理では割込競合が発生する可能性がありました。このような割込競合をどのように回避するのかが課題となりました。

物理量演算

Simulinkのシミュレーションは通常、物理量による倍精度浮動小数点演算で処理されていましたが、当時(1999年頃)は、我々の量産機種開発にむけて単精度浮動小数点演算器を搭載したマイコンを新規に採用し始めた時期で、我々の制御仕様ではまだ浮動小数点演算処理を採用していませんでした。

当時はSimulinkの固定小数点演算処理に対する対応がまだ十分ではなかった時代だったと記憶しているのですが、この固定小数点演算処理について、モデル図での適切な記述方法が検討課題となりました。

変数の初期化

我々の製品が制御するシステムでは、システムの複数の状態に応じて異なる初期値を静的変数に設定する場合があります。このような初期化処理を適切に簡潔に記述するにはどうしたらいいのかが課題となりました。
次回は、これらの課題に対してどのようにMBD手法を適応するのか、その方法について検討した概要を説明いたします。
最後まで、お読みいただきありがとうございました。

筆者紹介

のんびり田舎暮らしのエンジニア

約40年前に製造業の会社に入社後、リアルタイム制御をおこなうマイコン組込製品の量産開発を35年間担当し、アセンブラやC言語による制御プログラム開発や、MBDを含むソフトウェア開発環境の構築に従事しました。現役時代は理屈の世界で生きてきたので、退職後は感性の世界に憧れ、写真で絵作りをする世界で遊んでいます。

人気のコラム

最新のコラム