Question-and-Answer Resource for the Building Energy Modeling Community
Get started with the Help page
Ask Your Question

Revision history [back]

The EMS:CurveOrTableIndexVariable is used to map an existing curve so that you can use your own inputs to the curve instead of those that would normally be used by the program. I don't see an example of this object in the EMSApplicationGuide document so I will try to create on for you. I replicated the EMS:ConstructionVariableIndex example in the EMSApplicationGuide document. I have never used this method so there may be some mistakes I am not aware of. Most likely my first attempt is probably wrong. Try this in your input file and let me know how it works for you.

EnergyPlus input file curve object:

Curve:Biquadratic,
  Mycurve,           !- Name
  0.942587793,       !- Coefficient1 Constant
  0.009543347,       !- Coefficient2 x
  0.000683770,       !- Coefficient3 x**2
  -0.011042676,      !- Coefficient4 y
  0.000005249,       !- Coefficient5 y**2
  -0.000009720,      !- Coefficient6 x*y

Map the existing curve object for use in EMS programming:

EnergyManagementSystem:CurveOrTableIndexVariable,
  MyCurve,           !- Index
  Mycurve;           !- Performance Curve or Table Name

Then use the index in the EMS Program using the @CurveValue object:

EnergyManagementSystem:Program,
  CalcCurveOutput,
  Set X = 12.0,
  Set Y = 21.5,
  MyCurveOutput = @CurveValue(MyCurve, X, Y),
  SomeVariableInYourProgram = MyCurveOutput * 0.01;

EnergyManagementSystem:ProgramCallingManager,
  EMSBasedCurveManager,              !- Name
  BeginTimestepBeforePredictor,      !- EnergyPlus Model Calling Point
  CalcCurveOutput;                   !- Program Name 1

The EMS variable SomeVariableInYourProgram can be used to actuate something in your simulation. For example, another curve:

EnergyManagementSystem:Actuator,
  CurveOverwrite,          !- Name
  SomeOtherCurveName,           !- Actuated Component Unique Name
  Curve,                   !- Actuated Component Type
  SomeVariableInYourProgram;            !- Actuated Component Control Type

There is also an example file named EMSCurveOverride_PackagedTerminalHeatPump which uses a different method to adjust performance curves (or tables) values. This may be what you looking for and this method I know does work. Review the EMS program in that example file before you attempt the method described above.

The EMS:CurveOrTableIndexVariable is used to map an existing curve so that you can use your own inputs to the curve instead of those that would normally be used by the program. I don't see an example of this object in the EMSApplicationGuide document so I will try to create on for you. I replicated the EMS:ConstructionVariableIndex example in the EMSApplicationGuide document. I have never used this method so there may be some mistakes I am not aware of. Most likely my first attempt is probably wrong. Try this in your input file and let me know how it works for you.

EnergyPlus input file curve object:

Curve:Biquadratic,
  Mycurve,           !- Name
  0.942587793,       !- Coefficient1 Constant
  0.009543347,       !- Coefficient2 x
  0.000683770,       !- Coefficient3 x**2
  -0.011042676,      !- Coefficient4 y
  0.000005249,       !- Coefficient5 y**2
  -0.000009720,      !- Coefficient6 x*y

Map the existing curve object for use in EMS programming:

EnergyManagementSystem:CurveOrTableIndexVariable,
  MyCurve,           !- Index
  Mycurve;           !- Performance Curve or Table Name

Then use the index in the EMS Program using the @CurveValue object:

EnergyManagementSystem:Program,
  CalcCurveOutput,
  Set X = 12.0,
  Set Y = 21.5,
  Set MyCurveOutput = @CurveValue(MyCurve, X, Y),
  SomeVariableInYourProgram = MyCurveOutput * 0.01;

EnergyManagementSystem:ProgramCallingManager,
  EMSBasedCurveManager,              !- Name
  BeginTimestepBeforePredictor,      !- EnergyPlus Model Calling Point
  CalcCurveOutput;                   !- Program Name 1

The EMS variable SomeVariableInYourProgram can be used to actuate something in your simulation. For example, another curve:

EnergyManagementSystem:Actuator,
  CurveOverwrite,          !- Name
  SomeOtherCurveName,           !- Actuated Component Unique Name
  Curve,                   !- Actuated Component Type
  SomeVariableInYourProgram;            !- Actuated Component Control Type

There is also an example file named EMSCurveOverride_PackagedTerminalHeatPump which uses a different method to adjust performance curves (or tables) values. This may be what you looking for and this method I know does work. Review the EMS program in that example file before you attempt the method described above.

The EMS:CurveOrTableIndexVariable is used to map an existing curve so that you can use your own inputs to the curve instead of those that would normally be used by the program. I don't see an example of this object in the EMSApplicationGuide document so I will try to create on for you. I replicated the EMS:ConstructionVariableIndex example in the EMSApplicationGuide document. I have never used this method so there may be some mistakes I am not aware of. Most likely my first attempt is probably wrong. Try this in your input file and let me know how it works for you.

EnergyPlus input file curve object:

Curve:Biquadratic,
  Mycurve,           !- Name
  0.942587793,       !- Coefficient1 Constant
  0.009543347,       !- Coefficient2 x
  0.000683770,       !- Coefficient3 x**2
  -0.011042676,      !- Coefficient4 y
  0.000005249,       !- Coefficient5 y**2
  -0.000009720,      !- Coefficient6 x*y

Map the existing curve object for use in EMS programming:

EnergyManagementSystem:CurveOrTableIndexVariable,
  MyCurve,           !- Index
  Mycurve;           !- Performance Curve or Table Name

Then use the index in the EMS Program using the @CurveValue object:

EnergyManagementSystem:Program,
  CalcCurveOutput,
  Set X = 12.0,
  Set Y = 21.5,
  Set MyCurveOutput = @CurveValue(MyCurve, X, Y),
  Set SomeVariableInYourProgram = MyCurveOutput * 0.01;

EnergyManagementSystem:ProgramCallingManager,
  EMSBasedCurveManager,              !- Name
  BeginTimestepBeforePredictor,      !- EnergyPlus Model Calling Point
  CalcCurveOutput;                   !- Program Name 1

The EMS variable SomeVariableInYourProgram can be used to actuate something in your simulation. For example, another curve:

EnergyManagementSystem:Actuator,
  CurveOverwrite,          !- Name
  SomeOtherCurveName,           !- Actuated Component Unique Name
  Curve,                   !- Actuated Component Type
  SomeVariableInYourProgram;            !- Actuated Component Control Type

There is also an example file named EMSCurveOverride_PackagedTerminalHeatPump which uses a different method to adjust performance curves (or tables) values. This may be what you looking for and this method I know does work. Review the EMS program in that example file before you attempt the method described above.

The EMS:CurveOrTableIndexVariable is used to map an existing curve so that you can use your own inputs to the curve instead of those that would normally be used by the program. I don't see an example of this object in the EMSApplicationGuide document so I will try to create on for you. I replicated the EMS:ConstructionVariableIndex example in the EMSApplicationGuide document. I have never used this method so there may be some mistakes I am not aware of. Most likely my first attempt is probably wrong. Try this in your input file and let me know how it works for you.

EnergyPlus input file curve object:

Curve:Biquadratic,
  Mycurve,           !- Name
  0.942587793,       !- Coefficient1 Constant
  0.009543347,       !- Coefficient2 x
  0.000683770,       !- Coefficient3 x**2
  -0.011042676,      !- Coefficient4 y
  0.000005249,       !- Coefficient5 y**2
  -0.000009720,      !- Coefficient6 x*y

Map the existing curve object for use in EMS programming:

EnergyManagementSystem:CurveOrTableIndexVariable,
  MyCurve,           !- Index
  Mycurve;           !- Performance Curve or Table Name

Then use the index in the EMS Program using the @CurveValue object:

EnergyManagementSystem:Program,
  CalcCurveOutput,
  Set X = 12.0,
  Set Y = 21.5,
  Set MyCurveOutput = @CurveValue(MyCurve, X, Y),
  Set SomeVariableInYourProgram = MyCurveOutput * 0.01;

EnergyManagementSystem:ProgramCallingManager,
  EMSBasedCurveManager,              !- Name
  BeginTimestepBeforePredictor,      !- EnergyPlus Model Calling Point
  CalcCurveOutput;                   !- Program Name 1

The EMS variable SomeVariableInYourProgram can be used to actuate something in your simulation. For example, another curve:

EnergyManagementSystem:Actuator,
  CurveOverwrite,        SomeVariableInYourProgram,   !- Name
  SomeOtherCurveName,           !- Actuated Component Unique Name
  Curve,                    !- Actuated Component Type
  SomeVariableInYourProgram; Curve Result;                !- Actuated Component Control Type

There is also an example file named EMSCurveOverride_PackagedTerminalHeatPump which uses a different method to adjust performance curves (or tables) values. This may be what you looking for and this method I know does work. Review the EMS program in that example file before you attempt the method described above.