{
  "spec_version": 1,
  "slug": "goulds-aquavar-cpc",
  "manufacturer": "Goulds Pumps (Xylem)",
  "model": "Aquavar CPC centrifugal pump controller, software version 204 and later",
  "category": "Pump controller",
  "supplier_url": "https://www.xylem.com/en-us/brands/goulds-pumps/",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "one_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst",
    "native_interface": "rs485",
    "serial": {
      "parity": "None",
      "baud_rate": 9600,
      "data_bits": 8,
      "stop_bits": 2
    }
  },
  "coils": [
    {
      "address": 1,
      "count": 1,
      "name": "STOP",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Control word bit 0. Write 1 to stop the drive; must be 0 to allow a start."
    },
    {
      "address": 2,
      "count": 1,
      "name": "START",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Control word bit 1. Write 1 to start the drive; STOP must be 0."
    },
    {
      "address": 5,
      "count": 1,
      "name": "RESET",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Control word bit 4. Write 1 to reset a fault."
    },
    {
      "address": 6,
      "count": 1,
      "name": "EXT2",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Control word bit 5. 1 = EXT2, 0 = EXT1."
    },
    {
      "address": 33,
      "count": 1,
      "name": "Relay output 1",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Relay output 1 command (not part of the control word)."
    },
    {
      "address": 34,
      "count": 1,
      "name": "Relay output 2",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Relay output 2 command."
    },
    {
      "address": 35,
      "count": 1,
      "name": "Relay output 3",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Relay output 3 command."
    }
  ],
  "discrete_inputs": [
    {
      "address": 1,
      "count": 1,
      "name": "READY",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Status word bit 0: 1 = ready, 0 = not ready."
    },
    {
      "address": 2,
      "count": 1,
      "name": "ENABLED",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Status word bit 1: 1 = enabled, 0 = not enabled."
    },
    {
      "address": 3,
      "count": 1,
      "name": "STARTED",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Status word bit 2: 1 = started, 0 = not started."
    },
    {
      "address": 6,
      "count": 1,
      "name": "ZERO_SPEED",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Status word bit 5: 1 = 0 Hz, 0 = above 0 Hz."
    },
    {
      "address": 7,
      "count": 1,
      "name": "ACCELERATE",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Status word bit 6: 1 = accelerating."
    },
    {
      "address": 8,
      "count": 1,
      "name": "DECELERATE",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Status word bit 7: 1 = decelerating."
    },
    {
      "address": 9,
      "count": 1,
      "name": "AT_SPEED",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Status word bit 8: 1 = at maximum frequency."
    },
    {
      "address": 16,
      "count": 1,
      "name": "FAULT",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Status word bit 15."
    },
    {
      "address": 17,
      "count": 1,
      "name": "ALARM",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Status word bit 16."
    },
    {
      "address": 33,
      "count": 1,
      "name": "Digital input DI1",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "State of digital input DI1."
    },
    {
      "address": 34,
      "count": 1,
      "name": "Digital input DI2",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "State of digital input DI2."
    },
    {
      "address": 35,
      "count": 1,
      "name": "Digital input DI3",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "State of digital input DI3."
    },
    {
      "address": 36,
      "count": 1,
      "name": "Digital input DI4",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "State of digital input DI4."
    },
    {
      "address": 37,
      "count": 1,
      "name": "Digital input DI5",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "State of digital input DI5."
    },
    {
      "address": 38,
      "count": 1,
      "name": "Digital input DI6",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "State of digital input DI6."
    }
  ],
  "input_registers": [
    {
      "address": 1,
      "count": 1,
      "name": "Analog input 1",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Level of analog input AI1, 0-100 %."
    },
    {
      "address": 2,
      "count": 1,
      "name": "Analog input 2 (transducer)",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Level of analog input AI2 (pressure transducer), 0-100 %."
    }
  ],
  "holding_registers": [
    {
      "address": 2,
      "count": 1,
      "name": "Reference 1",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "Speed reference for the Speed Control macro, 0-10000 = 0.00-100.00 % of maximum frequency (parameter 1401)."
    },
    {
      "address": 3,
      "count": 1,
      "name": "Reference 2 (set-point)",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "Remote set-point written over Modbus, 0-10000 = 0.00-100.00 % of the transducer range (0 % = 0 psi, 100 % = transducer maximum). Group 16 set-point select must be Fieldbus (parameter 1602 = 2)."
    },
    {
      "address": 31,
      "count": 1,
      "name": "Aquavar control word, least significant word",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Maps directly to the least significant word of the Aquavar profile control word."
    },
    {
      "address": 32,
      "count": 1,
      "name": "Aquavar control word, most significant word",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Maps directly to the most significant word of the Aquavar profile control word."
    },
    {
      "address": 33,
      "count": 1,
      "name": "Aquavar status word, least significant word",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Maps directly to the least significant word of the Aquavar profile status word."
    },
    {
      "address": 34,
      "count": 1,
      "name": "Aquavar status word, most significant word",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Maps directly to the most significant word of the Aquavar profile status word."
    },
    {
      "address": 301,
      "count": 1,
      "name": "FB command word 1",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fieldbus command word 1 (hex)."
    },
    {
      "address": 302,
      "count": 1,
      "name": "FB command word 2",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fieldbus command word 2 (hex)."
    },
    {
      "address": 303,
      "count": 1,
      "name": "FB status word 1",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fieldbus status word 1 (hex)."
    },
    {
      "address": 304,
      "count": 1,
      "name": "FB status word 2",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fieldbus status word 2 (hex)."
    },
    {
      "address": 305,
      "count": 1,
      "name": "Fault word 1",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fault word 1 (hex)."
    },
    {
      "address": 306,
      "count": 1,
      "name": "Fault word 2",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fault word 2 (hex)."
    },
    {
      "address": 307,
      "count": 1,
      "name": "Fault word 3",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Fault word 3 (hex)."
    },
    {
      "address": 308,
      "count": 1,
      "name": "Alarm word 1",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Alarm word 1 (hex)."
    },
    {
      "address": 309,
      "count": 1,
      "name": "Alarm word 2",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Alarm word 2 (hex)."
    },
    {
      "address": 310,
      "count": 1,
      "name": "AV alarm word",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Aquavar alarm word (hex)."
    },
    {
      "address": 311,
      "count": 1,
      "name": "AV fault word",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Aquavar fault word (hex)."
    },
    {
      "address": 43202,
      "count": 1,
      "name": "EFB station ID",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Drive parameter 3202, station ID 1-247 (address 0 is broadcast). This is the node address of the Aquavar on the RS-485 network."
    },
    {
      "address": 43203,
      "count": 1,
      "name": "EFB baud rate",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Drive parameter 3203. Default 9.6 kb/s; valid values 1.2, 2.4, 4.8, 9.6, 19.2, 38.4, 57.6 and 76.8 kb/s."
    },
    {
      "address": 43204,
      "count": 1,
      "name": "EFB parity",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Drive parameter 3204: 0 = 8N1, 1 = 8N2, 2 = 8E1, 3 = 8O1. Default is 8N2."
    }
  ],
  "combined_registers": [],
  "notes": "Source: Goulds Pumps (Xylem) \"Aquavar CPC - Modbus Communications (Software Version 204 and later)\", document ADAQCPC R1, addendum to installation and operation manual IM167 (https://d1pkofokfruj4.cloudfront.net/media/upload/resource/b/Goulds-Pumps-Aquavar-CPC-Centrifugal-Pump-Controller-Modbus-Instruction-Manual.pdf). Factory serial settings from the \"Wiring\" section: default baud rate 9.6 kb/s and default parity 8N2 (8 data bits, no parity, two stop bits); the station ID (parameter 3202, 1-247) has no documented factory value, so unit ID 1 is a placeholder. Addressing: the document prints 5-digit Modbus references (00001 coils, 10001 discrete inputs, 30001 input registers, 4xxxx holding registers); the seed stores the reference number after the data-area prefix (00002 -> 2, 40101 -> 101) and declares one-based, so the client sends reference minus one. Modbus RTU only (ASCII not supported), RS-485 two-wire. Modbus must be activated once (Group 30, option [1] STD MODBUS) and the application macro must be [1] Single Pump, [4] Constant Slv or [5] Speed Cntrl. Start/stop control over Modbus also requires parameter 1201 = [1] Fieldbus. Omitted on purpose: the group 1 and group 2 signal registers (40101-40209) and the selectable Actual 1-8 registers (40005-40012), because the document does not state their scaling (the Actual registers mirror whichever parameter is selected with 3210-3217 and the group 1/2 rows carry no scale); group 10/14/18/21/25/32 parameter rows are configuration values without documented units. Coils/interrupt bits whose reference is marked \"Reserved (Not Used)\" are omitted."
}
