{
 "manufacturer": "EVAPCO",
 "manufacturer_slug": "evapco",
 "bacnet_transport": [
  "BACnet IP",
  "BACnet MS/TP"
 ],
 "firmware": null,
 "default_device_instance": null,
 "access_inferred": false,
 "model": "eco-Air Controller (AC / NEMA Motors)",
 "model_slug": "eco-air-controller-ac-motor",
 "aliases": [
  "eco-Air PLC",
  "EVAPCO Controller",
  "COMM24 AC",
  "COMM22NEMA",
  "eco-Air NEMA motor"
 ],
 "equipment_type": "Dry / adiabatic fluid cooler controller",
 "applies_to": "EVAPCO eco-Air air-cooled and adiabatic fluid coolers and condensers with AC (NEMA-style) fan motors on VFDs.",
 "summary": "Same eco-Air PLC as the EC edition but for units with conventional AC fan motors, so the per-EC-fan objects are unused. BACnet IP runs on the Ethernet port and BACnet MS/TP on the RS-485 terminal shared with Modbus RTU. The object list covers enable and state, temperatures, setpoints, fan-speed limits, adiabatic pre-cooling stages and remote fan-speed control.",
 "notes": [
  "BV 13-76 and AV 31 and AV 49-100 are EC-fan objects and do not apply to AC-motor units, so they are left out.",
  "The 2022 US edition (COMM22NEMA) lists the same core objects; this file follows the newer 2025 EU edition."
 ],
 "source": {
  "title": "EVAPCO Controller User's Manual Addendum - Communications Guide AC Motor Edition",
  "doc_number": "COMM24 AC-E",
  "revision_date": "2025-10",
  "url": "https://www.evapco.eu/media/772760"
 },
 "points": [
  {
   "type": "BV",
   "instance": 0,
   "name": "bnEnableUnit",
   "description": "Enables the unit if it is configured to be enabled via BMS",
   "units": "",
   "access": "W",
   "states": "0=Unit not enabled, 1=Unit enabled"
  },
  {
   "type": "BV",
   "instance": 1,
   "name": "bnRemoteDigital",
   "description": "State of remote digital input",
   "units": "",
   "access": "R",
   "states": "0=No voltage present, 1=Voltage present"
  },
  {
   "type": "BV",
   "instance": 2,
   "name": "bnProcessAlarm",
   "description": "Fault for either the outlet temperature sensor or the inlet pressure",
   "units": "",
   "access": "R",
   "states": "0=Normal, 1=Process sensor is not detected"
  },
  {
   "type": "BV",
   "instance": 3,
   "name": "bnValveStatus1",
   "description": "State of first adiabatic precooling valve",
   "units": "",
   "access": "R",
   "states": "0=Valve off (water not flowing), 1=Valve on (water flowing)"
  },
  {
   "type": "BV",
   "instance": 4,
   "name": "bnValveStatus2",
   "description": "State of second adiabatic precooling valve",
   "units": "",
   "access": "R",
   "states": "0=Valve off (water not flowing), 1=Valve on (water flowing)"
  },
  {
   "type": "BV",
   "instance": 5,
   "name": "bnValveStatus3",
   "description": "State of third adiabatic precooling valve",
   "units": "",
   "access": "R",
   "states": "0=Valve off (water not flowing), 1=Valve on (water flowing)"
  },
  {
   "type": "BV",
   "instance": 6,
   "name": "bnValveStatus4",
   "description": "State of fourth adiabatic precooling valve",
   "units": "",
   "access": "R",
   "states": "0=Valve off (water not flowing), 1=Valve on (water flowing)"
  },
  {
   "type": "BV",
   "instance": 7,
   "name": "bnManualFlush",
   "description": "Manually starts the precooling flushing cycle",
   "units": "",
   "access": "W",
   "states": "0=Not active, 1=Start manual flush"
  },
  {
   "type": "BV",
   "instance": 8,
   "name": "bnReleasePrecool",
   "description": "Release precool",
   "units": "",
   "access": "W",
   "states": "0=Precooling system will not function, 1=Precooling system will function when needed"
  },
  {
   "type": "BV",
   "instance": 9,
   "name": "bnEnableCommonAlarm",
   "description": "Enables the common alarm for the digital output",
   "units": "",
   "access": "W",
   "states": "0=Common alarm not enabled, 1=Common alarm enabled"
  },
  {
   "type": "BV",
   "instance": 10,
   "name": "bnCommonAlarmStatus",
   "description": "Status of the alarm digital output",
   "units": "",
   "access": "R",
   "states": "0=No alarm/not active, 1=Alarm/active"
  },
  {
   "type": "BV",
   "instance": 11,
   "name": "bnForceFullSpeed",
   "description": "Force full speed",
   "units": "",
   "access": "W",
   "states": "0=Not enabled, 1=Forces fans to run at 100 percent fan speed"
  },
  {
   "type": "BV",
   "instance": 12,
   "name": "bnEnableStageOntime",
   "description": "Enable stage ontime",
   "units": "",
   "access": "W",
   "states": "0=Not active, 1=Valve must remain on for the minimum run time"
  },
  {
   "type": "BV",
   "instance": 77,
   "name": "bnRemoteEnable",
   "description": "Remote enable",
   "units": "",
   "access": "W",
   "states": "0=Not enabled, 1=Fan speed is controlled either by analog input or communication."
  },
  {
   "type": "AV",
   "instance": 0,
   "name": "bnOutletTemp",
   "description": "Outlet temperature of the process fluid",
   "units": "Deg.",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 1,
   "name": "bnAmbientTemp",
   "description": "Temperature detected by the ambient temperature sensor",
   "units": "Deg.",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 2,
   "name": "bnActiveSetpoint",
   "description": "Active set point that the eco-Air unit will maintain",
   "units": "Deg.",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 3,
   "name": "bnSetpointTemp",
   "description": "Primary process temperature setpoint used when all other alternate setpoints are not",
   "units": "Deg.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 4,
   "name": "bnSetpoint2TempTrig",
   "description": "Setpoint that when the ambient temperature falls below, will switch the control",
   "units": "Deg.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 5,
   "name": "bnTempRegulationBand",
   "description": "Temperature band between the minimum and maximum fan speed for P fan",
   "units": "Deg.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 6,
   "name": "bnSetpoint2TempTrigDiff",
   "description": "Temperature differential added to the ambient temperature setpoint 2 trigger",
   "units": "Deg.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 7,
   "name": "bnPrecoolMinTemp",
   "description": "Minimum ambient temperature at which the precooling system may operate",
   "units": "Deg.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 8,
   "name": "bnPrecoolMinTempDiff",
   "description": "Ambient temperature offset added to the minimum allowable temperature",
   "units": "Deg.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 9,
   "name": "bnProportionalGain",
   "description": "Proportional gain constant used for the PID controller",
   "units": "Units",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 10,
   "name": "bnSwitchTemp1",
   "description": "Minimum temperature, above which the precooling stage 1 has permission to operate",
   "units": "Deg.",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 11,
   "name": "bnSwitchTemp2",
   "description": "Minimum temperature, above which the precooling stage 2 has permission to operate",
   "units": "Deg.",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 12,
   "name": "bnSwitchTemp3",
   "description": "Minimum temperature, above which the precooling stage 3 has permission to operate",
   "units": "Deg.",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 13,
   "name": "bnSwitchTemp4",
   "description": "Minimum temperature, above which the precooling stage 4 has permission to operate",
   "units": "Deg.",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 14,
   "name": "bnFlushFanSpeed",
   "description": "Desired fan speed while performing a flushing cycle",
   "units": "%",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 15,
   "name": "bnSetpoint2Temp",
   "description": "Alternate process temperature set point",
   "units": "Deg.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 16,
   "name": "bnUnitState",
   "description": "Current state of the EVAPCO Controller",
   "units": "",
   "access": "R",
   "states": "1=Unit on and operational, 2=Unit is off by an alarm, 4=Unit is off via BMS, Modbus/ BACnet, 6=Unit is off via the digital input, 7=Unit is switched off locally, 8=Manual mode enabled for fan speed control"
  },
  {
   "type": "AV",
   "instance": 17,
   "name": "bnMinFanSpeed",
   "description": "Minimum allowable fan speed",
   "units": "%",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 18,
   "name": "bnMaxFanSpeed",
   "description": "Maximum allowable fan speed",
   "units": "%",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 19,
   "name": "bnEnergySaveFanSpeed",
   "description": "Fan speed, above which the precooling system will activate",
   "units": "%",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 20,
   "name": "bnQuietMaxFanSpeed",
   "description": "Maximum allowable fan speed in quiet operation",
   "units": "%",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 21,
   "name": "bnPID_Integral",
   "description": "PID integral term",
   "units": "Sec.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 22,
   "name": "bnPID_Derivative",
   "description": "PID derivative term",
   "units": "Sec.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 23,
   "name": "bnNumWetStages",
   "description": "Count of stages that have been enabled for the adiabatic system",
   "units": "Units",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 24,
   "name": "bnPrecoolStage1_Increase",
   "description": "Count of seconds that must pass with the process temperature above set",
   "units": "Sec.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 25,
   "name": "bnPrecoolStage1_Decrease",
   "description": "Count of seconds that must pass with the process temperature below set",
   "units": "Sec.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 26,
   "name": "bnRefrigerant",
   "description": "For condenser applications",
   "units": "",
   "access": "W",
   "states": "1=R22, 2=R134a, 3=R404A, 4=R407C, 5=R410A, 6=R407A, 7=R407F, 8=R290, 9=R507A, 10=R717 (NH3), 11=R723, 12=R1234ze, 13=R744 (CO2), 14=R448A, 15=R427A, 16=R450A (N13), 17=R513A, 18=R449A, 19=R1234yf, 20=R454B, 21=R454C, 22=R455A, 23=434A, 24=R422A, 25=R32, 26=R452B, 27=R452A, 28=Custom"
  },
  {
   "type": "AV",
   "instance": 27,
   "name": "bnPrecoolStage1_MinOn",
   "description": "Minimum amount of time the precooling stage remains active",
   "units": "Sec.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 28,
   "name": "bnPrecoolStage2_MinOn",
   "description": "Minimum amount of time the precooling stage remains active",
   "units": "Sec.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 29,
   "name": "bnPrecoolStage3_MinOn",
   "description": "Minimum amount of time the precooling stage remains active",
   "units": "Sec.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 30,
   "name": "bnPrecoolStage4_MinOn",
   "description": "Minimum amount of time the precooling stage remains active",
   "units": "Sec.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 32,
   "name": "bnInletPressure",
   "description": "Inlet pressure reading via pressure sensor input",
   "units": "Press.",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 33,
   "name": "bnRefFanSpeed",
   "description": "Desired fan speed determined by the controller",
   "units": "%",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 34,
   "name": "bnFlushingTime",
   "description": "Count of minutes to perform the flushing routine once initiated",
   "units": "Min.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 35,
   "name": "bnFlushTimeAcc",
   "description": "Count of seconds the flushing routine has been active",
   "units": "Sec.",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 36,
   "name": "bnDryingTime",
   "description": "Count of minutes to dry the pre-cooling pads",
   "units": "Min.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 37,
   "name": "bnDryTimeAcc",
   "description": "Count of seconds the drying routine has been active",
   "units": "Sec.",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 38,
   "name": "bnFan_Hours",
   "description": "Count of hours the fans have been operational",
   "units": "Hours",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 39,
   "name": "bnPrecoolStage1_Hours",
   "description": "Count of hours the first valve has been operational",
   "units": "Hours",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 40,
   "name": "bnPrecoolStage2_Hours",
   "description": "Count of hours the second valve has been operational",
   "units": "Hours",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 41,
   "name": "bnPrecoolStage3_Hours",
   "description": "Count of hours the third valve has been operational",
   "units": "Hours",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 42,
   "name": "bnPrecoolStage4_Hours",
   "description": "Count of hours the fourth valve has been operational",
   "units": "Hours",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 43,
   "name": "bnPrecool24_Increase",
   "description": "Count of seconds that must pass with the process temperature above setpoint",
   "units": "Sec.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 44,
   "name": "bnPrecool24_Decrease",
   "description": "Count of seconds that must pass with the process temperature below setpoint",
   "units": "Sec.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 45,
   "name": "bnPrecool24_DecreaseAcc",
   "description": "Count of seconds with the process temperature below setpoint",
   "units": "Sec.",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 46,
   "name": "bnPrecool1_DecreaseAcc",
   "description": "Count of seconds with the process temperature below setpoint",
   "units": "Sec.",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 47,
   "name": "bnPrecool24_IncreaseAcc",
   "description": "Count of seconds with the process temperature above the setpoint",
   "units": "Sec.",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 48,
   "name": "bnPrecool1_IncreaseAcc",
   "description": "Count of seconds with the process temperature above the setpoint",
   "units": "Sec.",
   "access": "R",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 101,
   "name": "bnRemoteSource",
   "description": "Source of the reference fan speed:",
   "units": "",
   "access": "W",
   "states": "1=Analog Input, 2=Communication see ANALOG_ VALUE:105"
  },
  {
   "type": "AV",
   "instance": 102,
   "name": "bnRemoteAmbTrig",
   "description": "When the source is set to Analog Input",
   "units": "Deg.",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 103,
   "name": "bnRemoteHighFanSpeed",
   "description": "Fan(s) will operate at the high default fan speed with a loss",
   "units": "%",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 104,
   "name": "bnRemoteLowFanSpeed",
   "description": "Fan(s) will operate at the low default fan speed with a loss",
   "units": "%",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 105,
   "name": "bnRemoteFanSpeed",
   "description": "With remote fan speed enabled and the source set to Communications",
   "units": "%",
   "access": "W",
   "states": ""
  },
  {
   "type": "AV",
   "instance": 106,
   "name": "bnFanSpeedAI",
   "description": "Fan speed ai",
   "units": "%",
   "access": "R",
   "states": ""
  }
 ],
 "integration": {
  "summary": "Select BACnet MS/TP or Modbus RTU for the serial port on the HMI (BACnet IP is always on the Ethernet port), set addresses under Service > BMS & Network, then use BV 0 to enable the unit from the BMS. Read AV 16, AV 0 and the common alarm and write AV 3 for the process setpoint; remote fan speed works through BV 77, AV 101 and AV 105.",
  "minimum_points": [
   {
    "ref": "BV 0",
    "name": "bnEnableUnit",
    "why": "BMS enable/disable when configured for BMS enable"
   },
   {
    "ref": "AV 3",
    "name": "bnSetpointTemp",
    "why": "Primary process setpoint (writable)"
   },
   {
    "ref": "AV 16",
    "name": "bnUnitState",
    "why": "Operating state and reason it is off"
   },
   {
    "ref": "AV 0",
    "name": "bnOutletTemp",
    "why": "Process fluid outlet temperature"
   },
   {
    "ref": "AV 2",
    "name": "bnActiveSetpoint",
    "why": "Setpoint currently in control"
   },
   {
    "ref": "AV 33",
    "name": "bnRefFanSpeed",
    "why": "Commanded fan speed"
   },
   {
    "ref": "BV 10",
    "name": "bnCommonAlarmStatus",
    "why": "Common alarm output status"
   }
  ],
  "enable": "Write BV 0 bnEnableUnit = 1 (only works when the unit is configured to be enabled via BMS); AV 16 = 4 means off via BMS.",
  "heartbeat": null,
  "remote_sensors": "Remote fan speed: BV 77 bnRemoteEnable = 1, AV 101 bnRemoteSource = 2 (Communication), then write AV 105. AV 103/AV 104 set the fallback speeds used if the analog speed input is lost.",
  "setup": [
   "Default communication parameters are on page 1 of the panel wiring diagram.",
   "Switch the unit off, log in at Service level, open Service > BMS & Network, change values and hold Update for 3 s; the HMI and PLC restart.",
   "The serial port is either MS/TP or Modbus RTU; BACnet IP and Modbus TCP both run on Ethernet."
  ],
  "gotchas": [
   "Writable parameters are stored in the PLC's non-volatile memory, rated for about 100,000 writes; never write them cyclically.",
   "Points marked for adiabatic units (pre-cooling valves, flush, wet-stage timers) can be ignored on dry-only units."
  ]
 },
 "page": "https://easybacnet.com/bacnet-points-lists/evapco/eco-air-controller-ac-motor",
 "note": "Re-typed from the manufacturer's public documentation (see source). Point availability varies by firmware and options; verify against the live device."
}
