Modelify で C プロジェクトを設定し、関数を Simulink モデルに変換して、リダクション、オプション、チェックリストで変換を仕上げる方法です。
まず概要をご覧下さい。その後、このページの「Modelifyの利用を開始」に沿って進めてください。参照情報は、ほかの 4 ページにあります。
1 はじめに
Modelifyは大規模なC言語のコードをSimulinkモデルに変換します。Modelifyは文字通りに変換するのではなく、C言語の低レベルのロジックをSimulinkにおける高度なモデルに転換します。これによって、モデルが維持可能でMAABモデリングガイドラインに厳密に準拠することになり、Simulinkでの使用に適した状態になります。
ModelifyはCコードをXCSGに変換するAtlasをベースに開発されています。XCSGとは制御フロー図、データフロー図、および、呼び出しの構造を含む、詳細で、尚且つ意味を正確に表示するグラフ形式です。
下の画像はModelifyの構造を説明するものです。
本ユーザーマニュアルでは 「Modelifyの利用を開始」 セクションでModelifyを使って実演用のプロジェクトを変換する方法を説明し、「参照」セクションではツールを詳しく説明しています。
2 Modelifyの利用を開始
Modelifyはエンジニアと連携し、完了するまで変換を反復的に調整するツールです。Modelifyの一般的なプロセスは以下の手順で構成されています:
変換に満足することができるまでは最後の手順を繰り返してください。最後に任意でSimulinkのエディターでモデルを編集し、最終調整を行うことが可能です。
下の画像はプロセス全体を説明するものです。
プロジェクトの設定
Modelifyは AtlasとEclipseプラットフォームの延長線上にあるため、まずはC言語のコードをEclipseのC言語プロジェクトにインポートします。
以下の手順に従い、コードをインポートしてください。
Modelifyを開始
Modelifyのインストールディレクトリに置かれているmodelify.exeを実行し、Modelifyを起動します。するとModelifyはワークスペースのディレクトリを選択するよう求めますが、これはプロジェクトが保存されるディレクトリのことです。
初めてModelifyを開くと、ウェルカムスクリーンが表示されます。ウェルカムタブでXボタンをクリックすると、ワークベンチを開くことができます。
C言語のプロジェクトをインポート
このセクションでは、実演プロジェクトを用いて説明していきます。「Modelifyの利用を開始」セクションの完了後、お客様自身のコードをインポートする方法に関しては「プロジェクトの設定」セクションの指示を参考にしてください。
デモプロジェクトをインポートする方法:
- ModelifyメニューでModelify > デモプロジェクトをインポートの順にクリックしていきます。
- Stopwatch デモプロジェクトを選択し、デモプロジェクトをインポートダイアログで終了をクリックします。
するとStopwatch デモプロジェクトをインポートし、自動的にプロジェクトにmodelify.configプロジェクト変換ファイルを作成します。
プロジェクトの変換ファイルを作成
新しいプロジェクトを作成する場合、手動でプロジェクトの変換ファイルを作成する必要があります。プロジェクトの作成後、Modelify > プロジェクトをSimulinkに変換の順にクリックします。続いて、ダイアログ内でプロジェクトを選択し、終了をクリックします。
modelify.configプロジェクト変換ファイルが作成され、プロジェクト変換エディターでファイルが開きます。Atlasによるプロジェクトのマッピングはまだ行われていないため、Modelifyはプロジェクトのマッピングを行うべきかどうかを確認するダイアログを表示します。Yesをクリックして先に進んでください。
プロジェクトがまだビルドされていない場合、Atlasはマッピングを実行する前にビルドしたいかどうかを尋ねます。優れたビルドはより正確なコードマップの作成に役立ちます。「プロジェクトの設定」セクションはEclipseでプロジェクトをコンパイルする上で有益な情報を提供しています。ただし、この実演の目的上、ビルドの手順は省いて構いませんので、Noをクリックします。
変換のオプションを選択
プロジェクト変換エディターで変換のオプションを設定することができます。
このエディターは複数のタブで構成されており、変換のオプションを設定し、変換を実行することができます。
初めて変換エディターを開くと、Modelifyは、はじめにコードを分析し、推奨、変換のタイプ、および、コンポーネントのカラムに最善の設定を選択します。変換のタイプとコンポーネントのカラムはいつでも変更することが可能です。
エディターの詳しい説明は、「Modelifyの設定」セクションを参照してください。
変換を実行するため、最初にModelifyで少なくとも1つのMATLABの設定を行う必要があります。Modelifyで使用するMATLABの設定方法に関する詳しい説明はMATLAB Installationのセクションをご参照下さい。
ModelifyはプロジェクトのModelifyサブフォルダで生成したモデルを保存します。一般タブから直接モデルを保存するディレクトリを変更することが可能です。
Modelifyのチェックリストビューを確認
Modelify チェックリストビューは変換に影響を与える可能性のある変換に関するメッセージを表示します。これらのメッセージには、コードのマッピング中に見つかった、Atlasが提供するメッセージ、および、変換プロセス中に作成された、Modelifyが提供するメッセージが含まれます。
初めての変換を実行する前に、マッピングのプロセス中にAtlasが報告したメッセージがあるかどうか確認する必要があります。
例えば、欠けているコードに言及するメッセージ(欠けている関数の定義等)があった場合、欠けている定義を追加し、その後、Modelifyがコードを再分析することができるように、Atlasを使ってマッピングをやり直す必要があります。コードのマッピングを再び実行するには、メインメニューで Atlasを選択し、ワークスペースを再マッピングを選択してください。
このビューに関する詳細は「Modelify チェックリスト ビュー」を参照してください。
Modelify/Simulinkの制約
問題の一つとしてModelifyの制約が存在します。これらの制限によりユーザーが希望する変換を実行することができない可能性があります。例えば、ループを含む場合、関数に対する変換のタイプをSimulinkに設定することができません。要求されるSimulinkのブロックを作るために、必要とされる制御フローとデータフロー分析をModelifyがまだ実行していないため、この問題は発生します。
MATLABの制約も問題の一つです。文字通り、MATLABまたはSimulink/Stateflowのツールボックスには制約が存在します。 例えば、再帰関数はSimulinkやStateflowに変換することができません。Modelifyが問題なく再帰関数をモデルに変換することができても、Simulinkはモデルの循環参照を検知すると、エラーメッセージを表示します。
プロジェクトの変換中に変換の制約が見つかるとModelify チェックリストビューに追加されていきます。変換の制約のセクションで既知の制約の詳細な一覧をご覧頂けます。
変換
変換タブの右上のツールバーに以下の2種類の変換を実行するためのボタンが用意されています。
-
プロジェクト内の全ての関数を変換
-
選択した要素を変換
選択した要素に子ノードが含まれている場合は、子ノードも全て変換されます。呼び出された当該の関数は、変換されていない場合、変換の対象になります。
従って、プロジェクト全体を変換するには、変換タブ内のプロジェクトのノードを選択し、この
ボタンをクリックする必要があります。
Modelifyのトライアル版を利用し、変換バンドルをプロジェクトに作成していない場合、Modelifyは以下の通知メッセージを表示し、関数がスタブモデルに変換されることを知らせます。スタブモデルは、Inport と Outport のみを含むモデルです。
変換を進める場合はOKをクリックしてください。
変換のバンドルを適切に作成するまでは、Simulinkのモデルにアクセスすることができない点を予めご理解ください。変換バンドルを作成する手順に関しては、「変換バンドル」のセクションを参照してください。
精査、微調整、再変換
状態と情報のカラムを確認することで、変換の結果を精査することができます。ここでは変換が問題なく行われたか、あるいは、問題が生じたかどうかを確かめることが可能です。
次の4つの結果が表示されます:
- 変換は完了し、モデルがシミュレーションを実施します
- 変換は完了したものの、モデルがシミュレーションを実施しません
- 変換は失敗し、部分的にモデルが作成されました
- 変換は失敗し、モデルは作成されませんでした
以下に記すアクションの大半では、生成されたモデルを開く必要があります。変換バンドルを作成している場合のみ、モデルにアクセスすることができます(変換バンドルのセクションを参照してください)。 作成していない場合は、スタブモデルにアクセスできます。 盛り込まれたStopwatchのデモプロジェクトで作業を行う場合は例外です。この場合、変換バンドルを作成しなくてもモデルにアクセスすることができます。
1) 変換は完了し、モデルがシミュレーションを実施します
変換した関数のモデルを開くには、関数のノードをダブルクリック、もしくは、右クリックして、コンテキストメニューからモデルを開くを選択します。
SimulinkのUpdate Diagram 機能を使って、変換されたモデルがシミュレーションの準備ができているかどうかを特定することができます。Simulinkが何らかの問題を検知した場合、Diagnostic Viewerに表示されます。
ポートデータのタイプを表示の設定が有効にされている場合(「モデル」 セクションを参照)、モデルを開くと自動的にUpdate Diagram のアクションを実行します。この設定を有効にしていない場合は、Simulinkのウィンドウ内でSimulation → Update Diagramをクリックすれば、手動で実行することができます。
2) 変換は完了しましたが、モデルがシミュレーションを実施しません
この場合、Modelifyは、モデルは問題なく変換されたものの、シミュレーションを実施するためには1つ、または、複数の微調整を行う必要があることを示唆しています。Simulink Diagnostic Viewer内のメッセージに診断エラーと警告メッセージに対する提案および解決策が記されています。
モデルを手動で編集して、必要な微調整を行うことが可能です。
3) モデルは失敗し、部分的にモデルが作成されました
Modelifyは変換中に問題に遭遇すると、その重大性に応じて問題を記憶し、変換を進めることがあります。この場合、部分的にモデルが生成されます。
警告メッセージやエラーメッセージは変換タブの情報カラムに掲載されます。また、メッセージの隣に省略ボタンが配置され、このボタンをクリックすると、Modelify チェックリストビューに移動します。このビューは問題に関する詳しい情報と有力な次善策を提供します。
4) 変換は失敗し、モデルは作成されませんでした
一部の問題によりModelifyは変換を進めることができず、モデルが生成されなくなる可能性があります。変換の問題に関する詳細を得るには次の手順に従ってください:
- 情報カラム内の省略ボタンをクリックし、Modelify チェックリストビューで開く
- ビューのエントリをダブルクリックし、問題の詳細を記すダイアログを開く
手動でモデルを編集
上のケース2とケース3において手動でモデルを編集することも可能です。ここで、関数を再変換した場合、実施した変更は上書きされるのかという疑問が生じます。
Modelifyはこのシナリオを理解し、手動の変更が上書きされるのを防ぎます。要するに、関数を変換する前に、Modelifyは関数に対するモデルが既に生成されていたかどうかを検知します。既に生成されていた場合は、モデルがユーザーによって手動で編集されたかどうかをチェックし、手動で編集されていた場合は、変換を進める前にモデルを上書きするよう指示します。
変換の調整
変換が成功した場合、モデルを精査し、ご自身の組織のモデリングガイドラインと一致するかどうかを判断することをお薦めします。ModelifyはMAABのモデリングガイドラインを厳密に準拠するモデルを生成します。Modelifyのリダクションを有効化/無効化して、モデルを改善または低減して望ましいモデルのスタイルを実現することが可能です。
変換に失敗した場合、Modelify チェックリストビューにアクセスし、変換を進める上で必要な情報を得ることが可能です。
必要な微調整を実行した後、再変換対象の一連の関数を選択し、再変換を実行することができます。変換に満足するまで、この調整-再変換のプロセスを繰り返してください。
Modelifyユーザーマニュアル
Copyright (c) 2017-2023 EnSoft Corp.無断複写・転載を禁じます
本マニュアルはEnSoftの書面による同意なしにマニュアル全体、または、一部分において複写、複製、または、再配布することはできません。ソフトウェアに対する権利は付随のエンドユーザーライセンス契約書に準拠するものとします。本マニュアルの情報の正確性を保証するためあらゆる努力をしています。Ensoftは印刷または事務的な誤りの責任を負いません。
EnSoft Corp.
2625 North Loop Drive Suite 2580
Ames, IA 50010 USA
電話: +1-515-296-3253
Eメール: contactus@ensoftcorp.com
本文書で言及されているその他の全ての会社名および製品名はそれぞれの会社の商標です。第三者の製品の言及は情報提供のみを目的として行われており、承認や推奨を意味するものではありません。EnSoftはこれらの製品のパフォーマンスまたは利用に関する責任は負いません。
ご質問、または修正のご希望はありますか?
ありがとうございます。
このページについての内容を受け取りました。

