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

3章 CommonMPの要素モデルを作成する
3.5 計算結果を 他の要素モデルへ送る
3.5.4 情報送信に必要なメソッド等


 要素モデルの情報送信に関連する処理は以下の通りです。

@送信パターンの設定
  Factoryクラス: モデルプロパティ情報設定メソッド( CreateModelProperty )

A送信接続チェック
  要素モデルクラス: 出力側の接続情報チェックメソッド( SendConnectionCheck )

B要素モデル演算結果を外部のエレメントに対して公開する
  要素モデルクラス: 出力メソッド( DataFusion )



 @「送信パターンの設定」については既に前頁に示しました。
 
 A「送信接続チェック」は、要素モデルの接続線のチェックを行う機能です。
  例えば、次のようなチェックを行います。
   ・要素モデルが出力する送信パターンと接続線に設定されている伝送情報の型式が一致しているか等を調べて、エラーや警告を出す。
   ・要素モデルに1本も接続線が存在しない時に エラーや警告を出す。

 B要素モデルの演算結果の出力
  送信パターンに従って、演算結果を伝送接続線に設定します。



 A、Bの処理で使用するメソッドや方法を以下に纏めてみます。

●接続線のインスタンスは、 メソッドの引数で与えられます。 

     protected override bool SendConnectionCheck(ref McStructErrorInfo csErrorInf, long lOutputDataNum, McSendCellDataIF[] csOutputCellData)
      protected override long DataFusion(long lOutputDataNum, ref McSendCellDataIF[] csOutputCellData)

     long  lOutputDataNum : 要素モデルに接続されている 出力側の接続線の数
     McSendCellDataIF[] csOutputCellData : 出力側の接続線のインスタンス配列

(注意)
 ここで、csOutputCellData を 「接続線のインスタンス」と呼んでいますが、本当はデータクラスです。 しかしながら、説明としては、接続線として扱ったほうが解りやすいので、敢えて「接続線」として説明します。


●接続線に設定されている「送信パターン」を知る方法
 
 接続線に設定されている送信パターンIDを取得します。HySID クラスで取得されます。 
long  lIdx=0;  // 調べる接続線
HySID csOutPtnID = csOutputCellData[lIdx].GetSendPatternID();

 取得された情報は、Factoryクラス CreateModelProperty()メソッド内で設定した「送信パターンID」になります。


●接続線の「データの型」を取得する方法
 
 接続線のデータの型を取得します。 HySObjectKind クラスで取得されます。
long  lIdx=0;  // 調べる接続線
HySObjectKind csCellType = csOutputCellData[lIdx].GetTranInfoKind();

 取得されたデータの型は、 

  McTranInfoDefine.SINGLE_CELL_SERIAL
 McTranInfoDefine.D1_CELL_SERIAL
 McTranInfoDefine.D2_CELL_SERIAL
 McTranInfoDefine.D3_CELL_SERIAL

 等になります。

●1レコード内に配置されるセルの配列情報とセル内のデータの数を取得する方法
 
 セル配列数と、セル内データ数を取得します。

long lDimNum = 0;       //データの次元数
long lDim1 = 0;       //配列数:Dim1 
long lDim2 = 0;        //配列数:Dim2 
long lDim3 = 0;       //配列数:Dim3>

long lDataDimInCell=0;        //セル内の変数の数

long  lIdx=0;  // 調べる接続線

lDimNum = csOutputCellData[lIdx].GetDimension(ref  lDim1, ref  lDim2, ref  lDim3, ref  lDataDimInCell);


 データの型が McTranInfoDefine.D2_CELL_SERIAL ならば lDimNumには2が入ります。
 CommonMPのGUI上で セルの配列が 100×200 に設定されたなら lDim1 には、100が、lDim2 には200が入ります。 lDim3 はゼロのままです。
 セルに、流量、水位を設定する場合には、 lDataDimInCell には 2が入ります。






セル型データによる伝送仕様規定の限界

 データをセルに入れることで、伝送情報を規定することが可能で 且つ、自由度をもたせる事が可能である事を示しました。 しかし、セル型のデータ伝送にも限界があります。 例えば、次の様な例を考えてみます。

  

 送信側も受信側もセル内には、「流量:Q」、「水位:H」の情報が入り、セルは1次元配列であると共通の認識を持っています。
 しかし、送信側は セル配列に対して 河道の上流側から情報を格納していますが、 受信側では、 下流側から情報が格納されていると認識しています。 
  現在のCommonMPでは セルへの格納順序までは、規定していません。 また、配列の格納順序の違いを吸収する機能も持っていません。
 おそらく、何らかの規格が必要になるものと思われます。

  例えば、2次元配列を使用する場合には 以下の順でループのネストを行う

 


for(  幅方向)
{
     for( 長さ方向)
     {
     }
}

for(  高さ方向  )
{
     for( 長さ方向 )
     {
     }
}

for(  高さ方向  )
{
     for( 幅方向 )
     {
     }
}


  例えば3次元の配列を使用する場合には 以下の順でループのネストを行う

for( 高さ方向  )
{
     for(  幅方向 )
     {
          for(  長さ方向  )
          {
          }
     }}
}







 次の頁から 先に作成した要素モデル「MyDynamicWaveModel」の計算結果を 外部に出力できるようにします。
 


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

初版:2013/06/23 |