0

Modelica では、単純なマッピング (ケース構造のペア) を作成して、MxN 値のテーブルを 5x5 値のテーブルに縮小しました。しかし、境界 (行 = M または列 = N) にある入力でシミュレートすると、マッピングは「5」を返すはずなのに「0」を返します。範囲外のケースを含めましたが、戻り値は「0」ではなく「3」である必要があります。出力として「0」を指定することはありません。

これは、関数が時不変であること、おそらく初期条件の欠如が原因でしょうか?

コードは次のとおりです。

model chooseTypeArrayPosition 
          Modelica.Blocks.Interfaces.IntegerInput ModuleRow "Module Row";
      Modelica.Blocks.Interfaces.IntegerInput ModuleCol "Module Column";
      Modelica.Blocks.Interfaces.IntegerInput ArrayRows "Rows in Array";
      Modelica.Blocks.Interfaces.IntegerInput ArrayCols "Columns in Array"; 

  output Modelica.Blocks.Interfaces.IntegerOutput FractExposedTypeRow;
  output Modelica.Blocks.Interfaces.IntegerOutput FractExposedTypeCol "Enumeration of FractExposed Column";
algorithm
  if ModuleCol > ArrayCols then
    FractExposedTypeCol := 3;
  elseif ModuleCol < 2 then
    FractExposedTypeCol := 1;
  elseif ModuleCol < 3 then
    FractExposedTypeCol := 2;
  elseif ModuleCol > ArrayCols - 1 then
    FractExposedTypeRow := 5;
  elseif ModuleCol > ArrayCols - 2 then
    FractExposedTypeCol := 4;
  else
    FractExposedTypeCol := 3;
  end if;

  if ModuleRow > ArrayRows then
    FractExposedTypeRow := 3;
  elseif ModuleRow < 2 then
    FractExposedTypeRow := 1;
  elseif ModuleRow < 3 then
    FractExposedTypeRow := 2;
  elseif ModuleRow > ArrayRows - 1 then
    FractExposedTypeRow := 5;
  elseif ModuleRow > ArrayRows - 2 then
    FractExposedTypeRow := 4;
  else
    FractExposedTypeRow := 3;
  end if;
end chooseTypeArrayPosition;

ご意見ありがとうございます。

4

1 に答える 1