Beispiel #1
0
void CEC_Equilibrium::BuildDataDefn(DataDefnBlk & DDB)
  {
  DDB.Text  ("Equilibrium");
  DDB.String("ExtentType",        "",        DC_,     "",      xid_RCTExtentType,   &Eq, SetOnChange|isParm, DDBExtentTypes);

  m_ddKEq.BuildDataDefn(DDB, "K_Eq",  "",      DC_,     "",    xid_RCTKEquilibrium, &Eq, "Rct", "Reqd");

  //DDB.Double("K_Eq",              "",        DC_,     "",      &m_dK_Eq,                &Eq, isResult);
  DDB.Double("K_EOStep",          "K_Act",   DC_,     "",      &m_dKEOStep,             &Eq, isResult);
  DDB.Double("K_Final",           "",        DC_,     "",      &m_dKFinal,              &Eq, isResult|NAN_OK);
  DDB.Double("ExtentError",       "",        DC_Frac, "%",     xid_ExtentError,         &Eq, isResult|noFile|noSnap|NAN_OK);
  if (m_bDoResTime)
    {
    DDB.Double("K_Rt",            "",        DC_,     "",      &m_dK_Rt,                &Eq, isResult);
    m_ddDefinedResTime.BuildDataDefn(DDB, "RT_Ref", "",  DC_Time, "s",  xid_RTRef,   &Eq, "Rct", "Reqd");
    m_ddActualResTime.BuildDataDefn(DDB, "RT",      "",  DC_Time, "s",  xid_ResTime, &Eq, "Actual", "Reqd");
    DDB.Double("Alpha",           "",        DC_,     "",      &m_dAlpha,                 &Eq, isResult);
    }

  if (m_iXSpcId>=0)
    {
    DDB.String("ExtentSpc", "", DC_, "", &m_sExtentSpc, &Eq, 0|InitHidden|noFileAtAll);
    CCnvIndex dc;
    pchar pCnvTxt;
    SDB.AddSpCnv(DC_Frac, SDB[m_iXSpcId].SymOrTag(), "%", dc, pCnvTxt);
    m_ddExtentRqd.BuildDataDefn(DDB, "Extent", "",  dc, pCnvTxt,  xid_RCTExtent, &Eq, "Rct", "Reqd");
    }
  };
Beispiel #2
0
void CEC_FracExt::BuildDataDefn(DataDefnBlk & DDB)
  {
  Strng T;
  T.Set("Fractional Extent %s", m_Spc.m_Name());
  if (m_bStablize)
    T += " (Stabilised)";

  DDB.Text  (T());
  DDEF_Flags VFlags=DDB.GetVisibility();
  DDB.String("ExtentType",        "",        DC_,     "",      xid_RCTExtentType,          &Eq, SetOnChange|isParm, DDBExtentTypes);
  DDB.SetVisibility(VFlags);

  if (m_iXSpcId>=0)
    {
    DDB.String("ExtentSpc", "", DC_, "", &m_sExtentSpc, &Eq, 0|InitHidden|noFileAtAll);
    CCnvIndex dc;
    pchar pCnvTxt;
    SDB.AddSpCnv(DC_Frac, SDB[m_iXSpcId].SymOrTag(), "%", dc, pCnvTxt);
    m_ddExtentRqd.BuildDataDefn(DDB, "Extent", "",  dc, pCnvTxt,  xid_RCTExtent, &Eq, "Rct", "Reqd");
    DDB.Double("ExtentAchieved",   "",     DC_Frac, "%",  &m_dKEOStep,  &Eq, isResult);

    if (!DynamicRate())
      DDB.Double("ExtentError",       "",        DC_Frac, "%",     xid_ExtentError,         &Eq, isResult|noFile|noSnap|InitHidden|NAN_OK);
    else
      {
      if (m_bDoRate)
        {
        m_ddFracRate.BuildDataDefn(DDB, "Rate", "",  DC_FracRate, "%/s",  xid_RCTFracRate, &Eq, "Rct", "Reqd");
        }
      }
    }
  }
Beispiel #3
0
void CBlockEvaluator::Add_OnOff(DataDefnBlk &DDB, DDBPages PageIs)
  {
  BOOL DoIt=true;
  if (PrjFileVerNo()>=99)
    DoIt=DDB.BeginObject(m_pNd, "EB", "EB_Slct", 0, DDB_NoPage);
  
  if (DoIt)
    {
    DDB.String("", "EvalSeq.Feed", DC_, "", &m_sBlkSeqFeed, m_pNd, 0); 
    if (StateSemanticsOn())
      DDB.String("", "EvalSeq.Content", DC_, "", &m_sBlkSeqState, m_pNd, 0); 
    if (m_Options&BEO_WithMakeups)
      DDB.Long("Makeups", "", DC_, "", xidNMakeups, m_pNd, isParmStopped|SetOnChange); 
    if (m_Options&BEO_WithBleeds)
      DDB.Long("Bleeds",  "", DC_, "", xidNBleeds,  m_pNd, isParmStopped|SetOnChange); 

    //DDB.Text("");
    if (m_Options&BEO_WithMakeups)
      {
      for (int a=0; a<m_pMakeups.GetSize(); a++)
        m_pMakeups[a]->Add_OnOff(DDB, isParmStopped|SetOnChange, 100000+a*1000);
      }

    if (m_pRB)
      m_pRB->Add_OnOff(DDB, isParmStopped|SetOnChange);
    if (m_pHX)
      m_pHX->Add_OnOff(DDB, isParmStopped|SetOnChange);
    if (m_pEHX)
      m_pEHX->Add_OnOff(DDB, isParmStopped|SetOnChange);
    if (m_pVLE)
      m_pVLE->Add_OnOff(DDB, isParmStopped|SetOnChange);
    if (m_pEvap)
      m_pEvap->Add_OnOff(DDB, isParmStopped|SetOnChange);

    if (m_Options&BEO_WithBleeds)
      {
      for (int a=0; a<m_pBleeds.GetSize(); a++)
        m_pBleeds[a]->Add_OnOff(DDB, isParmStopped|SetOnChange, 200000+a*1000);
      }
    }

  if (PrjFileVerNo()>=99)
    DDB.EndObject();

  if (PrjFileVerNo()<99 && (DDB.DoingPutData() && DDB.ForFileSnpScn() || 0))
    {                      
    static DDBValueLst DDBBS[]={
      {0, "RB EHX VLE" },
      {1, "EHX RB VLE" },
      {0}};
    DDB.Byte("BlockActionSeq",         "",   DC_,  "",  xidOldBlkSeq, m_pNd, isParmStopped, DDBBS);
    }

  DDB.Text("");
  };
Beispiel #4
0
void CEC_EquilTXPoly::BuildDataDefn(DataDefnBlk & DDB)
  {
  DDB.Text  ("EquilTXPoly");
  DDEF_Flags VFlags=DDB.GetVisibility();
  DDB.String("ExtentType",        "",        DC_,     "",      xid_RCTExtentType,          &Eq, SetOnChange|isParm, DDBExtentTypes);
  DDB.SetVisibility(VFlags);

  DDB.Double("K_Eq",             "",        DC_,     "",      &dK_Eq,                  &Eq, isResult);
  DDB.Double("K_Act",            "",        DC_,     "",      &dK_Act,                 &Eq, isResult);
  DDB.Double("ExtentError",      "",        DC_Frac, "%",     xid_ExtentError,         &Eq, isResult|noFile|noSnap|NAN_OK);
  if (m_bDoResTime)
    {
    //DDB.Double("K_Rt",           "",        DC_,     "",      &dK_Rt,                  &Eq, isResult);
    //DDB.Double("Defined_RT",     "",        DC_Time, "s",     &m_ddDefinedResTime,        &Eq, isParm);
    //m_ddDefinedResTime.BuildDataDefn(DDB, "RT_Ref", "",  DC_Time, "s",  xid_RTRef,   &Eq, "Rct", "Reqd");
    //m_ddActualResTime.BuildDataDefn(DDB, "RT",      "",  DC_Time, "s",  xid_ResTime, &Eq, "Actual", "Reqd");
    //DDB.Double("Actual_RT",      "",        DC_Time, "s",     &m_ddActualResTime,         &Eq, isParm);
    DDB.Double("Alpha",          "",        DC_,     "",      &m_dAlpha,                 &Eq, isResult);
    }

//  if (m_iXSpcId>=0)
//    {
//    DDB.String("ExtentSpc", "", DC_, "", &m_sExtentSpc, &Eq, 0|InitHidden|noFileAtAll);
//    CCnvIndex dc;
//    pchar pCnvTxt;
//    SDB.AddSpCnv(DC_Frac, SDB[m_iXSpcId].SymOrTag(), "%", dc, pCnvTxt);
//    m_ddExtentRqd.BuildDataDefn(DDB, "Extent", "",  dc, pCnvTxt,  xid_RCTExtent, &Eq, "Rct", "Reqd");
//    }
  };
Beispiel #5
0
void CEC_FinalConc::BuildDataDefn(DataDefnBlk & DDB)
  {
  Strng T;
  T.Set("Final Conc %s", m_Spc.m_Name());

  DDB.Text  (T());
  DDEF_Flags VFlags=DDB.GetVisibility();
  DDB.String("ExtentType",        "",        DC_,     "",      xid_RCTExtentType,          &Eq, SetOnChange|isParm, DDBExtentTypes);
  DDB.SetVisibility(VFlags);

  if (m_Spc.m_ReactTerm>=0 || m_Spc.m_ProdTerm>=0)
    {
    CCnvIndex dc;
    pchar pCnvTxt;
    SDB.AddSpCnv(DC_Conc, SDB[m_Spc.m_SpcId].SymOrTag(), "g/L", dc, pCnvTxt);
    Strng S,C("Rct"),R("Reqd");
    if (Valid(m_dRqdTemp))
      S.Set("@%.2f", K2C(m_dRqdTemp));
    else
      S="@FinalT";
    C+=S;
    R+=S;
    m_ddRqdConc.BuildDataDefn(DDB, "Conc_Rqd", "", dc, pCnvTxt, xid_RCTExtent, &Eq, C(), R());
    DDB.Double("Conc_MeasTemp",    "",          DC_T,     "C",  xid_RCTFinalConcT,  &Eq, isResult|noFile|noSnap|InitHidden);
    DDB.Double("Conc_EOStep",      "Conc_Act",  DC_,      "",   &m_dKEOStep,             &Eq, isResult);
    DDB.TagComment(S());
    DDB.Double("Conc_Final",       "",          DC_,      "",   &m_dKFinal,              &Eq, isResult|NAN_OK);
    DDB.TagComment(S());
    DDB.Double("ExtentError",      "",          DC_Frac,  "%",  xid_ExtentError, &Eq, isResult|noFile|noSnap|NAN_OK);
    }
  };
Beispiel #6
0
void Flare::BuildDataDefn(DataDefnBlk &DDB)
    {
  //  if (Page & 0x1)
  DDB.BeginStruct(this);
  DDB.Page   ("Page 1");
  DDB.Text   ("Datum");
  DDB.Double ("Datum",        "Z",    DC_L    , "m",    &dDatum,        this, isResult|0      | DYNMODE);
  DDB.Double ("Datum_Rqd",    "Z_Rqd",DC_L    , "m",    &dDatum_Rqd,    this, isParmStopped | DYNMODE|NAN_OK);
  DDB.Text   (" ");
  DDB.Double ("Mass_Flow",   "Qm",    DC_Qm,  "kg/s",  xidQm,     this, 0); //  ,NDT_ZERODEFAULT|NDT_SGN           )
  DDB.Double ("Vol_Flow",    "Qv",    DC_Qm,  "m^3/h", xidQv,     this, 0); //  ,NDT_SGN           )
  DDB.Text   (" ");
  DDB.Double ("Press_Input", "PiR",   DC_P,   "kPag",  xidPInRmt, this, 0); //  ,NDT_SGN    )
  DDB.Text   (" ");
//    }

//  if (Page & 0x2)
//    {
  DDB.Page   ("Page 2");
  DDB.String ("Flare",        "",           DC_,      "",     &FlareTag,   this,  isParm);
  DDB.Text   (" ");
//    }

  DDB.EndStruct();
  };
Beispiel #7
0
void CEC_MLFinalFrac::BuildDataDefn(DataDefnBlk & DDB)
  {
  Strng T;
  T.Set("Final Mole %sFraction %s", m_AsTotal?"":"Phase ", m_Spc.m_Name());

  DDB.Text  (T());
  DDEF_Flags VFlags=DDB.GetVisibility();
  DDB.String("ExtentType",        "",        DC_,     "",      xid_RCTExtentType,    &Eq, SetOnChange|isParm, DDBExtentTypes);
  DDB.SetVisibility(VFlags);

  if (m_Spc.m_ReactTerm>=0 || m_Spc.m_ProdTerm>=0)
    {
    CCnvIndex dc;
    pchar pCnvTxt;
    SDB.AddSpCnv(DC_Frac, SDB[m_Spc.m_SpcId].SymOrTag(), "%", dc, pCnvTxt);
    m_ddRqdFrac.BuildDataDefn(DDB, "Frac_Rqd", "",  dc, pCnvTxt,  xid_RCTExtent,    &Eq, "Rct", "Reqd");
    DDB.Double("Frac_EOStep",      "Frac_Act",      dc, pCnvTxt,   &m_dKEOStep,      &Eq, isResult);
    DDB.Double("Frac_Final",       "",              dc, pCnvTxt,   &m_dKFinal,       &Eq, isResult|NAN_OK);
    DDB.Double("ExtentError",      "",              DC_Frac, "%",  xid_ExtentError,  &Eq, isResult|noFile|noSnap|NAN_OK);
    }
  };
Beispiel #8
0
void CActuator::BuildDataDefn(DataDefnBlk & DDB)
  {
  DDB.BeginStruct(this, "CActuator", NULL, DDB_NoPage);
  DDB.Text("");
  DDB.CheckBoxBtn("On",           "",         DC_, "", &bOn,           this, isParmStopped, DDBYesNo);
  DDB.CheckBoxBtn("ShowCnv",      "",         DC_, "", &bWithCnvComment,this, isParmStopped, DDBYesNo);
  DDB.Visibility();
  DDB.Long("", "Ac_Cnt",  DC_, "", idmCount,       this, isParmStopped/*|AffectsStruct*/);
  DDB.Text("");
  if (m_DataBlk.GetSize()>0)
    {
    DDB.Button("Check_tags",   "", DC_,    "",    idmCheckBtn,      this, isParmStopped);
    DDB.Text("");
    DDB.String("State",        "", DC_,    "",    &m_StateLine[0],  this, noSnap|noFile);
    DDB.Text("Error:");
    DDB.String("Msg_1",        "", DC_,    "",    &m_StateLine[1],  this, noSnap|noFile);
    DDB.String("Msg_2",        "", DC_,    "",    &m_StateLine[2],  this, noSnap|noFile);
    DDB.Text("");
    }
  DDB.Text("----------------------------------------");

  static DDBValueLst DDBFail[]={
      {Fail_None,                         "None"             },
      {Fail_Hold,                         "Hold"             },
      {Fail_Hold|Fail_Noise,              "Hold,Noise"       },
      {Fail_MinVal,                       "MinVal"           },
      {Fail_MaxVal,                       "MaxVal"           },
      {Fail_LoVal,                        "LoVal"            },
      {Fail_HiVal,                        "HiVal"            },
      {Fail_MinVal|Fail_Ramp,             "MinVal,Ramp"      },
      {Fail_MaxVal|Fail_Ramp,             "MaxVal,Ramp"      },
      {Fail_LoVal|Fail_Ramp,              "LoVal,Ramp"       },
      {Fail_HiVal|Fail_Ramp,              "HiVal,Ramp"       },
      {Fail_MinVal|Fail_Noise,            "MinVal,Noise"     },
      {Fail_MaxVal|Fail_Noise,            "MaxVal,Noise"     },
      {Fail_LoVal|Fail_Noise,             "LoVal,Noise"      },
      {Fail_HiVal|Fail_Noise,             "HiVal,Noise"      },
      {Fail_MinVal|Fail_Ramp|Fail_Noise,  "MinVal,Ramp,Noise"},
      {Fail_MaxVal|Fail_Ramp|Fail_Noise,  "MaxVal,Ramp,Noise"},
      {Fail_LoVal|Fail_Ramp|Fail_Noise,   "LoVal,Ramp,Noise" },
      {Fail_HiVal|Fail_Ramp|Fail_Noise,   "HiVal,Ramp,Noise" },
      {0}};
  static DDBValueLst DDBXForms[]={
      {XF_None,   "None"   },
      {XF_Linear, "Linear" },
      //{XF_Sqr,    "Sqr"    },
      //{XF_Sqrt,   "Sqrt"   },
      {0}};
  static DDBValueLst DDBFilters[]={
      {Flt_None,        "None"   },
      {Flt_FirstOrder,  "FirstOrder" },
      {0}};
  static DDBValueLst DDBRawXLates[]={
      {XL_None,     "None"   },
      {XL_AtoD,     "AtoD"  },
      {XL_Linear,   "Linear" },
      //{XL_PulseEncode  "PulseWidth" },
      {0}};
  char Buff[128];
  Strng Tag;
  if (DDB.BeginArray(this, "Cfg", "Ac_Cfg", m_DataBlk.GetSize()))
    {
    for (int i=0; i<m_DataBlk.GetSize(); i++)
      {
      if (1)// i>0 && (i % 2)==1)
        {
        sprintf(Buff, "%d", i);
        DDB.Page(Buff, DDB_OptPage);
        }
      DDB.BeginElement(this, i);
      CActuatorBlk * T = m_DataBlk[i];
      Strng CnvTxt;
      if (bWithCnvComment && XRefsValid() && T->m_bValid)
        GetValidCnvTxt(T->m_OutputVar, CnvTxt);
      DDB.String("ID",                 "",            DC_,          "", idmCfgTags+(i*NoOfCfgTags)+1, this, isParmStopped|isTag);
      DDB.String("OutputTag",          "",            DC_,          "", idmCfgTags+(i*NoOfCfgTags)+2, this, isParmStopped|isTag);
      //DDB.Double("RequiredValue",      "ReqdVal",         DC_,          "", &T->m_dReqdValue,               this, isResult|noFileAtAll);
      DDB.Double("RequiredValue",      "Rqd",         DC_,          "", &T->m_dReqdValue,               this, isResult|noFileAtAll);
      if (CnvTxt.Len())
        DDB.TagComment(CnvTxt());

//      DDB.Byte  ("Transform",          "",            DC_,          "",   &T->m_Xform.m_iType,  this, isParm|SetOnChange, DDBXForms);
//      DDB.Visibility(NSHM_All, T->m_Xform.m_iType);
//      DDB.Float ("Xf.Factor",          "",            DC_,          "",   &T->m_Xform.m_dFactor,      this, isParm);
//      DDB.Float ("Xf.Bias",            "",            DC_,          "",   &T->m_Xform.m_dBias,        this, isParm);
//
//      DDB.Visibility();
//
//      DDB.Byte  ("Filter",             "",            DC_,          "",   &T->m_Flt.m_iType,   this, isParm|SetOnChange, DDBFilters);
//      DDB.Visibility(NSHM_All, T->m_Flt.m_iType == Flt_FirstOrder);
//      DDB.Float ("Flt.TimeConst",      "Flt.Tau",     DC_Time,      "s",  &T->m_Flt.m_dTau,    this, isParm);
//      DDB.Double("Flt.PrevValue",      "",            DC_,          "",   &T->m_Flt.m_dPrevValue, this, InitHidden);
//      DDB.Visibility();
//
//      DDB.Byte  ("Fail.Mode",          "",            DC_,          "",   &T->m_Fail.m_iType,   this, isParm|SetOnChange, DDBFail);
//      DDB.Float ("Fail.LoValue",       "",            DC_,          "",   &T->m_Fail.m_dLoValue,   this, isParm);
//      DDB.Float ("Fail.HiValue",       "",            DC_,          "",   &T->m_Fail.m_dHiValue,   this, isParm);
//      DDB.Float ("Fail.NoiseStdDev",   "",            DC_,          "%",  &T->m_Fail.m_dNoiseStdDevFrac,   this, isParm);
//      DDB.Float ("Fail.SlewTime",      "",            DC_Time,      "s",  &T->m_Fail.m_dSlewTime,   this, isParm);
//
//
//      DDB.Float ("MinValue",           "MinV",        DC_,          "",   &T->m_dMinValue,   this, isParm);
//      DDB.Float ("MaxValue",           "MaxV",        DC_,          "",   &T->m_dMaxValue,   this, isParm);
//      DDB.Double("Value",              "",            DC_,          "",   &T->m_dValue,      this, isResult);
//
//      DDB.Float ("LoLimit",            "LL",          DC_,          "",   &T->m_dLoLimit,    this, isParm);
//      DDB.Float ("HiLimit",            "HL",          DC_,          "",   &T->m_dHiLimit,    this, isParm);
//
      flag ff=0;
      DDB.CheckBox  ("LoInvert",       "",            DC_,          "",   &T->m_bLoInvert,   this, isParm|SetOnChange);
      DDB.CheckBox  ("HiInvert",       "",            DC_,          "",   &T->m_bHiInvert,   this, isParm|SetOnChange);
      DDB.Bool      ("",               "Lo",          DC_,          "",   &T->m_bLo,         this, isResult);
      DDB.Bool      ("",               "Hi",          DC_,          "",   &T->m_bHi,         this, isResult);

//      DDB.Byte      ("RawTransform",   "",            DC_,          "",   &T->m_RawXform.m_iType,  this, isParm|SetOnChange, DDBRawXLates);
//      DDB.Visibility(NSHM_All, T->m_RawXform.m_iType>=XL_AtoD);
//      DDB.Float     ("Raw.MinValue",   "",            DC_,          "",   &T->m_RawXform.m_dMinValue,    this, isParm);
//      DDB.Float     ("Raw.MaxValue",   "",            DC_,          "",   &T->m_RawXform.m_dMaxValue,    this, isParm);
//      DDB.Visibility();
//
      //DDB.Double    ("OutputValue",    "Output",      DC_,          "",   &T->m_dOutputValue,   this, isResult);
      DDB.Double    ("OutputValue",    "Out",         DC_,          "",   &T->m_dOutputValue,   this, isResult);

      DDB.String    ("PLCAddess",      "",            DC_,          "",   &T->m_sPLCAddress,    this, isParmStopped|InitHidden);
      
      DDB.Long      ("Priority",       "",            DC_,          "",   idmCfgTags+(i*NoOfCfgTags)+4, this, isParmStopped|InitHidden);
      DDB.Text("----------------------------------------");
      }
    }
  DDB.EndArray();

  DDB.EndStruct();
  }
Beispiel #9
0
/*This provides access to the variables of the model and calls the
BuildDataDefn for objects used by the model.*/
void BeltCnv::BuildDataDefn(DataDefnBlk & DDB)
  {
  DDB.BeginStruct(this);

  //DDB.Page   ("Parms");
  DDB.Text    ("");
  DDB.Visibility(NM_Dynamic|SM_All|HM_All);
  BuildDataDefnElevation(DDB);
  DDB.Text("");
  DDB.Double  ("BeltSpeed",    "",                DC_Ldt,  "m/s",   xidBeltSpeed,       this, isResult);
  DDB.Visibility();
  DDB.Double  ("Length",       "L",               DC_L,    "m",     xidBeltLength,      this, isParm);
  DDB.Visibility(NM_Dynamic|SM_All|HM_All);
  DDB.Double  ("MaxSpeed",     "",                DC_Ldt,  "m/s",   &m_MaxVelocity,     this, isParm);
  DDB.Double  ("MaxLoading",   "MaxSpillLoad",    DC_MpL,  "kg/m",  &m_MaxSpillLoading, this, isParm);
  DDB.Double  ("MinLoading",   "",                DC_MpL,  "kg/m",  &m_MinLoading,      this, isParm|InitHidden);
  DDB.Long    ("MaxTurndown",  "",                DC_,     "",      &m_MaxTurnDown,     this, isParm|InitHidden);

  DDB.Visibility(NM_Dynamic|SM_All|HM_All);
  DDB.Double  ("",             "MaxStallLoad",    DC_M,    "kg",    &m_MaxStallLoading, this, isParm);
  DDB.CheckBox("",             "StartIfStalled",  DC_,     "",      &m_fStartIfStalled, this, isParm);
  DDB.Byte    ("",             "WasRunning",      DC_,     "",      &m_fWasRunning,     this, isResult|InitHidden);

  DDB.Double  ("TotalMass",    "",                DC_M,    "kg",    xidTotalMass,       this, isResult);
  DDB.Double  ("AvgLoading",   "",                DC_MpL,  "kg/m",  xidAvgLoading,      this, isResult);

  if (OrigPrjFileVerNo()<90 && DDB.ForFileSnpScn())
    DDB.String  ("SpillArea",    "",              DC_,     "",      &m_sAreaTag,        this, isParmStopped);
  DDB.Double  ("TotalSpilt",   "",                DC_M,    "kg",    xidTotSpilt,        this, isParm);
  DDB.Double  ("TotalVented",  "",                DC_M,    "kg",    xidTotVented,       this, isParm);

  DDB.Page("BeltDrive", DDB_RqdPage);
  DDB.Text    ("Power Draw");
  DDB.Double  ("NoLoadPower",  "",                DC_Pwr,  "kW",    &m_NLPower,         this, isParm);
  DDB.Double  ("FullLoadPower","",                DC_Pwr,  "kW",    &m_FLPower,         this, isParm);
  DDB.Double  ("Power",        "",                DC_Pwr,  "kW",    &m_Power,           this, isResult);

  DDB.Text("");
  m_Pwr.BuildDataDefn(DDB);
  m_BeltSB.BuildDataDefn(DDB, this, "Speed", 1);
  DDB.Visibility();

  DDB.Text("");
  DDB.Long    ("NoWtMtrs",     "",                DC_,     "",      xidNWtMtrs,         this, isParm);
  static DDBValueLst DDB1[] = {
    {QPT_None,        "None" },
    {QPT_FixedPts,    "Fixed Points"},
    {QPT_AllSections, "All Section Pts"},
    {QPT_MinSections, "Min Section Pts"},
    {0}};
  DDB.CheckBox("ShowProfile",  "",                DC_,     "",      xidShowProf,        this, isParm|SetOnChange);
  DDB.Visibility(NM_Dynamic|SM_All|HM_All, m_fShowProfile);
  DDB.Long    ("ProfDispType", "",                DC_,     "",      xidProfDispType,    this, isParm, DDB1);
  //DDB.Visibility(NM_Dynamic|SM_All|HM_All, m_fShowProfile && m_ProfDispType==QPT_FixedPts);
  //DDB.Long    ("ProfilePts",   "",                DC_,     "",      xidProfPts,         this, isParm);
  DDB.Visibility(NM_Dynamic|SM_All|HM_All);
  DDB.Long    ("NSections",    "",                DC_,     "",      xidNSections,       this, isResult);
  if (DDB.BeginStruct(this, "MinSect", 0, DDB_NoPage))
    {
    DDB.Double  ("Length",     "",                DC_Frac, "%",     &m_Q.m_dMinFracSectLen,  this, isParm);
    DDB.Visibility(NM_Dynamic|SM_All|HM_All, m_Q.m_dMinFracSectLen>0);
    DDB.Double  ("LoadTol",    "",                DC_Frac, "%",     &m_Q.m_dLoadTol,  this, isParm);
    DDB.Double  ("TempTol",    "",                DC_Frac, "%",     &m_Q.m_dTempTol,  this, isParm);
    DDB.Double  ("MFracTol",   "",                DC_Frac, "%",     &m_Q.m_dMFracTol,  this, isParm);
    }
  DDB.EndStruct();

  DDB.Text("");
  BuildDataDefnShowIOs(DDB);


  if (m_WtMtrPos.GetSize())
    {
    DDB.Page("WtMtrs", DDB_RqdPage);
    if (DDB.BeginArray(this, "WtMtr", "WtMtr", m_WtMtrPos.GetSize(), 0))
      {
      for (int i=0; i<m_WtMtrPos.GetSize(); i++)
        if (DDB.BeginElement(this, i))
          {
          DDB.Double("Pos",      "",                  DC_L ,     "m",     xidWtrMtrPos0+i,      this, isParm);
          DDB.Double("Loading",  "",                  DC_MpL,    "kg/m",  xidWtrMtrLd0+i,       this, isResult|0);
          DDB.Double("Rate",     "",                  DC_Qm,     "kg/s",  xidWtrMtrRate0+i,     this, isResult|0);
          DDB.Text("");
          }
      }
    DDB.EndArray();
    }


  int FdLst[MaxIOList], PrLst[MaxIOList];
  int nFd=0, nPr=0;
  for (int i=0; i<NoFlwIOs(); i++)
    if (IOId_Self(i)==idFeed)
      FdLst[nFd++]=i;
    else if (IOId_Self(i)==idProd)
      PrLst[nPr++]=i;

  int DoOld=((!DDB.ForFiling() && !DDB.ForSnapShot() && !DDB.ForScenario() && !DDB.ForView()) ||
            (DDB.ForFiling() && DDB.DoingPutData()));

  Strng Nm;
  DDB.Page("Feeds", DDB_RqdPage);
  if (DDB.BeginArray(this, "Fd", "BltCnvFd", nFd, 0))
    for (i=0; i<nFd; i++)
      if (DDB.BeginElement(this, Nd_Rmt(FdLst[i])->FullObjTag()))
        {
        DDB.Double     ("Pos",      "",  DC_L , "m",      xidFeedPos0+i,      this, isParm);
        DDB.Visibility(NM_Dynamic|SM_All|HM_All);
        DDB.CheckBoxBtn("Limited",  "",  DC_, "",         xidFeedLimited0+i,  this, isParm);
        DDB.Visibility(NM_Dynamic|SM_All|HM_All, m_Q.FeedLimited(i));
        DDB.Double     ("Capacity", "",  DC_Frac, "%",    xidFeedCapFrac0+i,  this, isParm);
        DDB.Visibility();
        DDB.Double     ("Qm",       "",  DC_Qm , "kg/s",  xidFeedQm0+i,       this, 0);
        DDB.Text("");

        if (DoOld)
          {
          DDB.BeginElement(this, i);
          DDB.Double("Pos",     "",  DC_L , "m",    xidFeedPos0+i,       this, isParm);
          DDB.Double("Qm",     "",  DC_Qm , "kg/s",  xidFeedQm0+i,       this, 0);
          }
        }
  DDB.EndArray();

  DDB.Page("Products", DDB_RqdPage);
  if (DDB.BeginArray(this, "Pr", "BltCnvPr", nPr, 0))
    for (i=0; i<nPr; i++)
      if (DDB.BeginElement(this, Nd_Rmt(PrLst[i])->FullObjTag()))
        {
        DDB.Double("Pos",     "",   DC_L ,     "m",    xidProdPos0+i,       this, isParm);
        DDB.Double("Removal","",    DC_Frac , "%",     xidProdRemove0+i,    this, isParm);
        DDB.Double("Qm",    "",     DC_Qm ,   "kg/s",  xidProdQm0+i,        this, 0);
        DDB.Double("Loss",  "",     DC_Qm ,   "kg/s",  xidProdLoss0+i,      this, 0);

        DDB.Text("");

        if (DoOld)
          {
          DDB.BeginElement(this, i);
          //DDB.TagComment(Nd_Rmt(PrLst[i])->FullObjTag());
          //DDB.BeginElement(this, Nd_Rmt(PrLst[i])->FullObjTag());
          DDB.Double("Pos",     "",   DC_L ,     "m",    xidProdPos0+i,       this, isParm);
          DDB.Double("Removal","",    DC_Frac , "%",     xidProdRemove0+i,    this, isParm);
          DDB.Double("Qm",    "",     DC_Qm ,   "kg/s",  xidProdQm0+i,        this, 0);
          DDB.Double("Loss",  "",     DC_Qm ,   "kg/s",  xidProdLoss0+i,      this, 0);
          }
        }
  DDB.EndArray();

  if (m_fShowProfile)
    DDB.Object(&m_Q.Profile(), this);

  //BuildDataDefnAreaIOs(DDB);

  DDB.EndStruct();
  };