Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

プロジェクトを使用したプログラムによるコードの生成とモデルのシミュレーション

この例では、プロジェクト API を使用して新しいプロジェクトを作成し、ファイルを操作するためのプロジェクト タスクを自動化する方法を示します。空のプロジェクトをプログラムにより作成し、ファイルとフォルダーを追加して、プロジェクト パスを設定し、プロジェクトのショートカットを定義して、コードを生成し、ハーネス モデルをシミュレートする方法を説明します。

プロジェクトにより、ファイルと設定の管理および共有、必要なファイルの検索、ソース管理の対話操作を実行して、大規模な設計を整理することができます。

モデルベース デザイン プロジェクトの管理

モデル例は、緑色のボールを追跡する、DC モーターに固定されたカメラを配置するコントローラーを提供します。

MBD アプローチはコントローラー操作のモデル化につながります。

  • プラントのモデル化: プラントは、回転してカメラを再配置する DC モーターです。

  • コントローラーのモデル化: 設計では、DC モーターの配置の角度位置に関するフィードバックと一緒に PID コントローラーが使用されます。

  • 高水準なボール追跡スケジューラのモデル化: スケジューラは緑色のボールの位置と基準角の飽和の有効性をチェックします。スケジューラは画面上に追跡するボールのないインスタンスを処理します。

設計およびプロジェクトには次のフォルダーがあります。

プラント -- プラントは次を提供します。

  • 基本的な Simulink ブロックを使用する連続時間動的システムをもつモデル。

  • 線形時不変 (LTI) システム ブロックを使用する LTI システムをもつモデル。

  • ワークスペースに対するシミュレーション データのインポートとエクスポート。

  • データ ディクショナリとモデル コールバックを使用するベース ワークスペースへのパラメーターの読み込み。

コントローラー -- コントローラーは次を提供します。

  • 基本的な Simulink ブロックを使用する離散時間動的システムをもつモデル。

  • PID Controller ブロックを使用する離散時間動的システムをもつモデル。

  • PWM 変換サブシステムを使用する信号の飽和の適用。

ボール追跡 -- ボール追跡は次を提供します。

  • 基本的なボール追跡アルゴリズム。

  • Terminator ブロックと Ground ブロック (プレースホルダーとして)。

  • Stateflow を使用してモーターの基準角を生成するハイブリッド コントローラー。

ハーネス -- ハーネスは完全なシステムの最上位のシミュレーションを提供します。

空のプロジェクトの作成とファイルの追加

1. 空のプロジェクトを作成します。[ホーム] タブで、[新規作成][プロジェクト][空のプロジェクト] をクリックします。

または、コマンド ウィンドウから、このプロジェクトを作成し、currentProject を使用してプロジェクト オブジェクトを取得し、プロジェクトを操作します。

matlab.project.createProject('modelBasedDesignCodeGenProject');
proj_modelBasedDesignCodeGen = currentProject
proj_modelBasedDesignCodeGen = 
  Project with properties:

                        Name: "modelBasedDesignCodeGenProject"
    SourceControlIntegration: ""
          RepositoryLocation: ""
       SourceControlMessages: [1×0 string]
                    ReadOnly: 0
                    TopLevel: 1
                Dependencies: [1×1 digraph]
                  Categories: [1×1 matlab.project.Category]
                       Files: [1×0 matlab.project.ProjectFile]
                   Shortcuts: [1×0 matlab.project.Shortcut]
                 ProjectPath: [1×0 matlab.project.PathFolder]
           ProjectReferences: [1×0 matlab.project.ProjectReference]
                StartupFiles: [1×0 string]
               ShutdownFiles: [1×0 string]
         DefinitionFilesType: FixedPathMultiFile
                 Description: ""
                  RootFolder: "C:\Users\ktripp\MATLAB\Projects\modelBasedDesignCodeGenProject"
         SimulinkCacheFolder: ""
        ProjectStartupFolder: "C:\Users\ktripp\MATLAB\Projects\modelBasedDesignCodeGenProject"
       SimulinkCodeGenFolder: ""

2. サンプル ファイルをプロジェクト内のフォルダーにコピーします。

または、コマンド ウィンドウで以下のように入力します。

copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','slproject_codegen_demo'), ...
fullfile(pwd),'f');

3. 既存のファイルをプロジェクトに追加します。

  • プロジェクトの [ファイル] ビュー ボタンをクリックして [すべて] のファイル ビューを選択します。

  • フォルダー ball_trackingcontrollerharnessesplantutilities を選択し、いずれかのフォルダーのアイコンを右クリックして [プロジェクトにフォルダーを追加 (子ファイルを含む)] を選択します。

または、コマンド ウィンドウからプログラムによりこれらのファイルをプロジェクトに追加します。

addFolderIncludingChildFiles(proj_modelBasedDesignCodeGen,'ball_tracking');
addPath(proj_modelBasedDesignCodeGen,'ball_tracking');
addFolderIncludingChildFiles(proj_modelBasedDesignCodeGen,'controller');
addPath(proj_modelBasedDesignCodeGen,'controller');
addFolderIncludingChildFiles(proj_modelBasedDesignCodeGen,'harnesses');
addPath(proj_modelBasedDesignCodeGen,'harnesses');
addFolderIncludingChildFiles(proj_modelBasedDesignCodeGen,'plant');
addPath(proj_modelBasedDesignCodeGen,'plant');
addFolderIncludingChildFiles(proj_modelBasedDesignCodeGen,'utilities');
addPath(proj_modelBasedDesignCodeGen,'utilities');

4. work フォルダーを選択し、いずれかのフォルダーのアイコンを右クリックし、[プロジェクトのパス][プロジェクトのパスに追加 (サブフォルダーも含める)] を選択します。このフォルダーをパスに追加することを選択した場合、シミュレーションとコード生成によって生成されたファイル (アーティファクト) をプロジェクト パスで利用できます。生成されたファイルをプロジェクトに含めないことを選択した場合、依存性グラフにはこれらのファイルは表示されません。

または、コマンド ウィンドウからこのフォルダーをプロジェクト パスに追加します。

addPath(proj_modelBasedDesignCodeGen,'work');

5. プロジェクトによりアクセスしやすくするために、プロジェクト ショートカットのプロパティを定義および設定します。[ファイル] ビューで [プロジェクト] タブを選択します。utilities フォルダー ノードを開きます。

6. ファイル clean_up_project.mgenerate_controller_code.mset_up_project.m を選択し、いずれかのファイルのアイコンを右クリックして [ショートカットの作成] を選択します。

7. 現在の作業フォルダーの設定、シミュレーション キャッシュ フォルダーの設定、プロジェクトを開いたときに他のセットアップ スクリプトの実行を実施するには、次のようにします。

  • set_up_project.m スクリプトを選択します。

  • ファイルを右クリックします。

  • [起動時に実行] を選択します。

または、コマンド ウィンドウからこのセットアップ スクリプトをプロジェクトの起動に追加します。

addStartupFile(proj_modelBasedDesignCodeGen,fullfile(pwd,'/utilities/set_up_project.m'));

8.プロジェクトを閉じたときに前の設定を復元して、他のクリーンアップ スクリプトを実行するには、次のようにします。

  • clean_up_project.m スクリプトを選択します。

  • ファイルを右クリックします。

  • [シャットダウン時に実行] を選択します。

または、コマンド ウィンドウからプログラムによりクリーンアップ スクリプトをプロジェクトのシャットダウンに追加します。

addShutdownFile(proj_modelBasedDesignCodeGen,fullfile(pwd,'/utilities/clean_up_project.m'));

9. プロジェクトをもう一度開き、起動ショートカットを実行します。

または、コマンド ウィンドウからプロジェクトを再読み込みして、set_up_project を実行します。

reload(proj_modelBasedDesignCodeGen);
run('set_up_project');

依存性グラフからのコントローラーのコードの生成

1. [プロジェクト] タブで、[依存関係アナライザー] をクリックし、プロジェクトのすべてのファイルに対して依存関係の解析を実行します。

依存性グラフには、プロジェクトの構造とファイルの依存関係が表示されます。ファイルの相互関係が示されます。グラフの各項目はファイルを表しており、各矢印は依存関係を表しています。

work フォルダーの内容が依存性グラフに表示されないことを確認します。この設定によって、モデル ファイルと .m スクリプト ファイル内の依存関係を示すビューが簡略化されます。

a. 右側の [プロパティ] ペインで、必要な製品や問題のファイルなど、プロジェクトに関する有用な情報を確認します。

b. [ズームイン] ボタンを使用して、依存関係マップを拡大します。矢印キーを使用するか、マウスのローラー ホイールをクリック - ドラッグして、マップ内を移動します。

c. 依存関係の矢印にカーソルを合わせて、依存関係のタイプを確認する。たとえば、MATLAB スクリプトと関数がモデル コールバックによって実行されていることが示されます。

2. 依存関係マップで MBDController.slx モデルを選択します。モデルを右クリックして、[開く] を選択します。

3. Simulink でモデルが開かれたら、[ビルド] ボタンをクリックしてモデルのコードを生成します。あるいは、プロジェクトの generate_controller_code ショートカットを使用してコードを生成します。

または、コマンド ウィンドウからモデルのコードを生成します。この例では、書き込み権限を MBDController.slxc に設定してから、モデルのコードを生成します。

fileattrib('MBDController.slxc', '+w');
evalc('slbuild(''MBDController'')');

4. プロジェクト ウィンドウからプロジェクトを閉じます。

または、このプロジェクトを閉じて、コマンド ウィンドウから clean_up_project を実行します。

run('clean_up_project');
close(proj_modelBasedDesignCodeGen);

参考

addFile, addFolderIncludingChildFiles, addPath, addReference, addShortcut, addLabel, close, createCategory, createLabel, export, findCategory, findFile, findLabel, isLoaded, listModifiedFiles, listRequiredFiles, refreshSourceControl, reload, removeCategory, removeFile, removeLabel, removePath, removeReference, removeShortcut

詳細

関連する例