3章 CommonMPの要素モデルを作成する
3.3 要素モデル スタブを作成する(その4)
(手順6:スタブの確認)
クラスのスタブの制作が完了した所で、3.2章で示した様に、制作したクラスの動作確認を行なってみます。
要素モデルディバッグ用ソリューションで メニュー 「ディバッグ」−「ディバッグ開始」 を選択します。
ディバッグ用CommonMPの中に開発中の要素モデルDLLが組み込まれていれば、CommonMPのライブラリ管理画面の中に 追加した要素モデル「演習:DynamicWaveモデル」が表示されます。
スタブの動作確認用のCommonMP計算プロジェクトを制作します。
このプロジェクトで、計算時間を2分として 計算を開始します。
制作したスタブに ブレークポイントを仕掛けておいくと、各メソッドがコールされる度にプログラム実行が停止し、動作状況を知ることができます。
プログラム動作を確認するために、ブレークポイントを仕掛けておく事で、動作を確認することができますが、CommonMPでは、ディバッグ用のログ出力により、動作を確認することも可能です。 ログとは、動作履歴を記録しておき、後ほどその履歴を確認することでプログラムがどのように動作したかを解析できる仕組みです。
CommonMPのディバッグ用のログは、デフォルト状態で \CommonMP\Execute\log\ModelDebugLog.txt
(デバッグ環境では、\CommonMP\Source\HYMCO\OptionImpl\ModelDeveloperExpressEdition\bin\log\ModelDebugLog.txt
)に出力されます。
ディバッグログを出力するためには、プログラム中にログ出力用のコードを実装しておく必要があります。
ログは下記の通り記述します。( メソッド名:McLog.DebugOut )
McLog.DebugOut(
this.m_csSimTime,
第1引数:シミュレーション時刻(右の例の通り、またはGetSimulationTime()として下さい)
GetID(), 第2引数:モデルの識別子(右の例の通りとして下さい)
"MyDynamicWaveModel", 第3引数:クラス名称を記述します
"Calculate", 第4引数:メソッド名を記述します
"任意文字列"); 第5引数:任意の文字列を記述します
型紙では、ディバッグログ出力部分がコメントアウトされているので、ログ出力はそれを参考にして下さい。
例えば、Calculateメソッド内には、次のようなディバッグログがコメントとして記述されています。
// McLog.DebugOut(GetSimulationTime(),
GetID(), "MyModel", "Calculate",
"out");
ここで、クラス名称を”MyModel”から”MyDynamicWaveModel”へ変更します。
McLog.DebugOut(GetSimulationTime(),
GetID(), "MyDynamicWaveModel", "Calculate",
"out");
これで、ログ出力用のコードが記述できました。
ここで、ディバッグモードで動作させても、ログファイルには何も出力されません。
本来、ディバッグ用のログは ディバッグの時のみ必要で、プログラムが完成してしまえば不要となります。 しかしながら、プログラム完成時に ログ出力を手動でコメントアウトすると、その作業中に
誤って重要なコードを変更してしまうかもしれません。 そこで、CommonMPは、プログラムのディバッグ時のみログを出力し、ディバッグ終了後、ログ出力用のコードをコメントアウトしなくても良いように、 ログ出力のON/OFFスイッチ機能があります。
\CommonMP\Execute\conf\ja\CommonMP.cfg(ディバッグ環境であれば\CommonMP\Source\HYMCO\OptionImpl\ModelDeveloperExpressEdition\bin\conf\ja\CommonMP.cfg)の中に ログの出力レベルを設定する記述があります。
#
ログ出力レベル(右記のうちどれか一つ { ONLINE, TRIAL_RUN, DEBUG, SYSTEM_DEBUG }
)
LOG_LEVEL = TRIAL_RUN
LOG_LEVEL = DEBUG
ならば、ディバッグログの出力が行われます。(デイバッグ環境では、デフォルトでログ出力がONになっています)
一方、ディバッグ対象要素モデル以外のログ出力がONであると、膨大なログデータの中から、必要な情報を取り出すに苦労します。 そこで、ログを出力する要素モデルを絞るため、さらに
\CommonMP\Execute\conf\HymcoModelDebug.cfg(ディバッグ環境であれば\CommonMP\Source\HYMCO\OptionImpl\ModelDeveloperExpressEdition\bin\conf\HymcoModelDebug.cfg)のディバッグ対象のクラス名を記述します。
HymcoModelDebug.cfg ファイルへの記述例
#============================================================
# 要素モデルデバックログ出力クラス指定
# (CommonMP.cfgファイル内のLOG_LEVEL = DEBUG の時に有効)
# 要素モデルのディバッグ時に、本クラスに指定された名称のクラスだけがログを表示します。
# ログを出力が多いほど、計算速度は遅くなります。
# 性能の面から、完成したモデルは、本ファイルから削除する事を推奨します。
#============================================================
MyDynamicWaveModel
McTestBasin
(必ず1行に1クラスのみ)
クラス名称は McLog.DebugOut の第3引数として 与えたクラス名です。
ここで、先のプロジェクトの計算を行わせると、ModelDebugLog.txt にログの出力が記録されます。
ログ出力結果
s2013/06/15 13:00:00 <MyDynamicWaveModel[E215-11513-1562013]::Initialize> out
s2013/06/15 13:00:00 <MyDynamicWaveModel[E215-11513-1562013]::DataFusion> out
s2013/06/15 13:00:00 <MyDynamicWaveModel[E215-11513-1562013]::ReadyCalculation> out
s2013/06/15 13:00:00 <MyDynamicWaveModel[E215-11513-1562013]::Calculate> out
s2013/06/15 13:01:00 <MyDynamicWaveModel[E215-11513-1562013]::DataFusion> out
s2013/06/15 13:01:00 <MyDynamicWaveModel[E215-11513-1562013]::Calculate> out
s2013/06/15 13:02:00 <MyDynamicWaveModel[E215-11513-1562013]::DataFusion> out
s2013/06/15 13:02:00 <MyDynamicWaveModel[E215-11513-1562013]::CompleteCalculation> out
Initialize()直後に、DataFusion()がコールされ、 計算直前に ReadyCalculation()が呼ばれます。
計算を開始すると、Calculate()とDataFusion()が2回コールされ、計算終了特後にCompleteCalculation()が呼ばれて計算終了します。
時刻には s2013/06/15 13:00:00 の様に ”s”がついています。 これは、記録された時刻がシミュレーション時刻であることを示しています。
ログは ディバッグログの他に、システムのログがあります(log フォルダー内に CommonMPSystemLog15.txt 等がありますが、それが、CommonMPとしてのシステムログです。) システムログは、 シミュレーション時間ではなく、本体が動作した現実の時刻を記録するため、現実時刻とシミュレーション時刻を区別するため ディバッグログ用の時刻は”s”の文字を付けて区別しています。
尚、ディバッグログは、CommonMPのモデル管理画面に表示されます。
但し、画面に表示されるログは メモリを食い潰してしまわないように記録数を制限しています。
この為、ログ数が多い場合には、古いログから順に削除されていきます。
また、初期化時に 画面上のログはクリアされるため、初期化より後に動作した箇所のみ出力されます。
ディバッグ完了後は、HymcoModelDebug.cfg から対象クラス名を削除しておいて下さい。
ここで作成した要素モデル開発プロジェクト(Ex02_MyExerciseModel.lzh)
ダウンロードしたら解凍して生成されたフォルダー「MyExerciseModel」を
\CommonMP\Source\HYMCO\OptionImpl\
下に置きます。
解凍して生成されたプロジェクト:MyExerciseModel.csproj を ディバッグ用ソリューションに追加し、スタートアッププロジェクト(TestModelDeveloperMainExp)の依存関係に追加します。
(1)
(2)
(3)
(4)
またテスト用のCommonMP計算プロジェクト(Ex02_CommonMPData.lzh)
解凍して生成された、「MyExerciseStep1」フォルダーを
\CommonMP\CommonMPData\ 下に置いて下さい。
初版:2013/06/15 |