(前頁)<<      >>(次頁)          (Up)

4章 CommonMPにおける計算制御 その1
4.5 制御に関連する注意/補足事項
    (初期化メソッド内でのデータ受信)




(3) 初期化メソッド(Initialize)で 受信データを取得する場合の注意

 要素モデルの初期化メソッド(Initialize)には、引数として、初期化設定情報(csInitialData)の他に、 入力情報(csInputCellData)が与えられています。 
 これまで、要素モデルを作成してきましたが、初期化メソッドの入力情報は使用してきませんでした。
 これは、初期化時の入力情報は汎用的に(どんな場合にでも)初期化に必要な情報を取得できる事が保障されないためです。

 この事を 「TutorialSampleModel」を用いて確認してみます。
 プロジェクト「TutorialSampleModel」を CommonMPディバッグ環境で動作させる方法は3.2章で示しました。 ここで、初期化メソッド(Initialize)内で入力情報の中身を確認するための処理を追加します。

public class MyForecastModel : McForecastModelBase
{
    。。。。。。。。。。。。。。。。

        protected override bool Initialize(ref McPropertyInfoRoot csInitialData, long lInputDataNum, ref McReceiveCellDataIF[] csInputCellData)
        {
            bool bRtn = false;

            HySCellData csRcvCellData = null;
            for (int iLp = 0; iLp < lInputDataNum; iLp++)
            {
                csRcvCellData = csInputCellData[iLp].GetInterpolatedCell(0);
            }

            // 引数で与えられたデータを キャストしています。
            McInitialInfo csInDt = csInitialData as McInitialInfo;
    。。。。。。。。。。。。。。。。
        }
}

public class MyStateCalModel : McStateCalModelBase
{
    。。。。。。。。。。。。。。。。

        protected override bool Initialize(ref McPropertyInfoRoot csInitialData, long lInputDataNum, ref McReceiveCellDataIF[] csInputCellData)
        {
            bool bRtn = false;
           
            HySCellData csRcvCellData = null;
            for (int iLp = 0; iLp < lInputDataNum; iLp++)
            {
                csRcvCellData = csInputCellData[iLp].GetInterpolatedCell(0);
            }

            // 引数で与えられたデータを キャストしています。
            McInitialInfo csInDt = csInitialData as McInitialInfo;
    。。。。。。。。。。。。。。。。
        }
}


 CommonMPをディバッグ起動し、追加した処理部にブレークポイントを入れて 入力情報の値を確認します。
 
 (3−1)確認条件その1
  プロジェクト:012_初期化時受信TestMdl1.cmprj 
  計算方法:非同期型制御
  上流モデル:未来予測型

  下流モデル側の 初期化メソッドでの受信情報を確認する。


 
     
 上図に示すように、受信情報には、上流のモデルが設定した値が設定されています。



 (3−2)確認条件その2
  プロジェクト:012_初期化時受信TestMdl2.cmprj 
  計算方法:非同期型制御
  上流モデル:現況計算型

  下流モデル側の 初期化メソッドでの受信情報を確認する。

 

     
 上図に示すように、受信情報には、上流のモデルが設定した値は設定されていません。

 このように、初期化時の受信情報は必ずしも、有効な値が設定されているとは限りません。

 
 初期化時に、受信情報が有効であるためには、上流の要素モデルが接続線上に初期値を送信しておく必要があり、これは、非同期制御方式で、且つ上流に未来予測型の要素モデルが接続されている場合のみです。 同期制御では、計算の順序として上流から計算が行われるとは限らないため、受信側では、上流が初期化情報を送信している事を確信できません。接続にループが存在する場合も同様です。 また、現況計算型は初期化時に情報を送信しません。 
 
 以上の理由から、初期化メソッド内で受信情報を利用するのは特殊な場合に限られ、汎用的には、初期化メソッド内での受信情報は無視することを推奨しています。


 ここで作成した使用した確認用プロジェクト(Ex091_CommonMP.lzh

 ダウンロードしたら解凍して生成されたフォルダー「MyExerciseModel」を \CommonMP\Source\HYMCO\OptionImpl\ 下に置きます(上書きします。012_初期化時受信TestMdl1.cmprj、012_初期化時受信TestMdl2.cmprj が確認用のプロジェクトです。)
 また、解凍して生成された、「TutorialSampleModel」フォルダーを \CommonMP\Source\HYMCO\OptionImpl\ 下に置きます(上書きします)。


(前頁)<<      >>(次頁) 

初版:2013/09/10 |