{
 "manufacturer": "Schneider Electric",
 "manufacturer_slug": "schneider-electric",
 "model": "Altivar 212 (embedded Modbus RTU)",
 "model_slug": "atv212",
 "short_model": "ATV212",
 "aliases": [
  "ATV212",
  "Altivar 212",
  "ATV212H",
  "ATV212W",
  "ATV212HU15N4",
  "ATV212WD11N4"
 ],
 "equipment_type": "Variable frequency drive (HVAC fans and pumps)",
 "applies_to": "ATV212H (IP21) and ATV212W (IP55) drives on the built-in Modbus RTU ports (RJ45 and open-style terminal), per Modbus manual S1A53844.",
 "summary": "Schneider Electric's HVAC variable frequency drive for fans and pumps, with Modbus RTU built in on two RS-485 ports: an RJ45 socket and an open-style screw terminal. Parameters are addressed by their hexadecimal communication numbers (Fd00, FA01, F802...) sent unchanged as the register address, and the drive reads or writes only one register per request. This map covers command word 1 and 2, frequency and speed references, relay and analog output control, the status words, output frequency, current, voltage and power monitors, trip and alarm codes with trip history, I/O states, and the Modbus and control-source settings.",
 "transport": [
  "RTU"
 ],
 "defaults": {
  "unit_id": 1,
  "baud": 19200,
  "parity": "Even",
  "data_bits": null,
  "stop_bits": null,
  "tcp_port": null
 },
 "addressing": {
  "convention": "hex 0-based",
  "note": "Each parameter's communication number is its register address in hex: Fd00 is 16#FD00 = 64768, FA01 is 16#FA01 = 64001, and F802 is 16#0802 = 2050 (the leading F of Fxxx parameters is not part of the address). The manual prints both forms, and its example frame reads output frequency with starting address FD 00, so the address goes on the wire unchanged, with no 40001 offset and no minus 1."
 },
 "default_word_order": null,
 "firmware": null,
 "source": {
  "title": "Altivar 212 - Variable speed drives for asynchronous motors - Modbus communication manual",
  "doc_number": "S1A53844 (file revision 02)",
  "revision_date": "2012-09",
  "url": "https://download.schneider-electric.com/files?p_Doc_Ref=S1A53844",
  "pages": "pp. 9 (functions), 12-14 (wiring), 20-29 (communication, control source, indirect blocks, time-out, F851), 33-41 (frames and examples), 45-47 (control and monitoring parameter list), 48-56 (FA00, FA20, FA01, FA13, status words, alarm and trip codes, I/O, FA50/FA51)"
 },
 "notes": [
  "Second source: Altivar 212 Programming Manual S1A53838 rev 04 (06/2025), https://download.schneider-electric.com/files?p_Doc_Ref=S1A53838 - used for the F207 value list (p. 88), parameters that can only be changed while stopped (p. 41), the CMOd/FMOd notes and the F851/F829 remarks (pp. 87, 148-149), and the keypad meaning of the percent monitors (pp. 20-22).",
  "Every register is one 16-bit word; the map has no 32-bit values. The manual gives no signed/unsigned type and no ranges for the monitors. The ones kept (frequencies, speed, current, voltages, loads, input power) are magnitudes with no negative case in the manual's descriptions (direction is a separate status bit) and are typed UINT16; the writable registers have ranges from 0 upward.",
  "Output current FE03, DC bus voltage FE04 and output voltage FE05 are in 0.01 % steps, not amps or volts. The Modbus manual does not state the 100 % base. On the keypad, current in % is relative to the drive's rated output current and voltage in % to 200 V (240 V class) or 400 V (480 V class) (programming manual p. 20).",
  "Monitors marked 'value before trip' in the manual's description column (FE02, FE05, FE15, FE16, FE22, FE26, FE27, FE29) are kept with that wording; Fd00, Fd06 and Fd07 are tagged as current values, and FE03, FE04 and FE90 carry no tag.",
  "FA00, FA01, FA13, FA20, FA50 and FA51 live in RAM only: they return to 0 at power-off, reset or factory setting, so the priority bits and reference must be rewritten after a power cycle.",
  "Left out: torque FE18, torque current FE20, exciting current FE21 and output power FE30, because they can plausibly be negative and the manual gives no signedness; input/output energy FE76/FE77 (1 Wh in a 16-bit word while the keypad shows kWh per F749, unclear) and run-time counters FE14/FE80 (manual says 0.01 h, keypad says 0.01 = 1 hour, conflicting).",
  "Left out: ACC (address 9) because the Modbus manual's worked example gives both 0.1 s and 0.01 s as its unit; other drive parameters (FH, UL, LL, motor data) because the Modbus manual does not print their addresses and the current programming manual has no address column.",
  "Left out: FE06/FE07 (I/O at last trip; FE07's decimal address is misprinted as 65030), Fd42/Fd49 trip copies FE42/FE49, FA49 damper feedback (address not printed), drive model code F805/FB05 (two different codes printed) and LI selection F112 (long function list).",
  "Trip codes Err1 (speed reference alarm) and CFI2 (download transfer fault) have no numeric code in the manual and are not in the value list.",
  "Indirect blocks: after setting F875-F879 (power cycle), one FC03 read at 16#1875 with quantity 1-5 returns those monitors in order; after setting F870/F871, one FC16 write of 2 registers at 16#1870 writes both items. These block addresses only accept those exact request shapes."
 ],
 "registers": [
  {
   "table": "holding_register",
   "address": 3,
   "documented": "3 (16#3, CMOd)",
   "name": "CMOd - Command mode sel",
   "description": "Run/stop source in remote mode; change only when stopped.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Logic inputs (terminals)",
    "1": "HMI (graphic display option)",
    "2": "Communication (serial)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4,
   "documented": "4 (16#4, FMOd)",
   "name": "FMOd - Frequency mode sel",
   "description": "Speed reference source in remote mode; change only when stopped.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "1": "VIA",
    "2": "VIB",
    "3": "HMI (graphic display option)",
    "4": "Serial communication",
    "5": "+/- Speed"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 519,
   "documented": "519 (16#207, F207)",
   "name": "F207 - Remote spd ref 2",
   "description": "Secondary reference source, selected by a logic input set to function 38.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "1": "VIA",
    "2": "VIB",
    "3": "HMI",
    "4": "Communication",
    "5": "+/- Speed"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2048,
   "documented": "2048 (16#800, F800)",
   "name": "F800 - Mdb RJ45 baud",
   "description": "Baud rate of the RJ45 port; applies after power cycle.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "9600 bps",
    "1": "19200 bps"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2049,
   "documented": "2049 (16#801, F801)",
   "name": "F801 - Mdb RJ45 parity",
   "description": "Parity of the RJ45 port; applies after power cycle.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "None",
    "1": "Even",
    "2": "Odd"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2050,
   "documented": "2050 (16#802, F802)",
   "name": "F802 - Modbus address",
   "description": "Slave address for both ports, 1-247 (0 = inactive). Factory 1.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2051,
   "documented": "2051 (16#803, F803)",
   "name": "F803 - Com. time out",
   "description": "Comm-loss timeout 1-100 s; 0 disables detection. Factory 3 s.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "s",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2055,
   "documented": "2055 (16#807, F807)",
   "name": "F807 - Com channel choice",
   "description": "Port that may send commands and the reference.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "RJ45",
    "1": "Open style (factory)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2080,
   "documented": "2080 (16#820, F820)",
   "name": "F820 - Mdb network baud",
   "description": "Baud rate of the open-style port; applies after power cycle.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "9600 bps",
    "1": "19200 bps"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2081,
   "documented": "2081 (16#821, F821)",
   "name": "F821 - Mdb network parity",
   "description": "Parity of the open-style port; applies after power cycle.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "None",
    "1": "Even",
    "2": "Odd"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2089,
   "documented": "2089 (16#829, F829)",
   "name": "F829 - Network protocol",
   "description": "Protocol on the open-style port; applies after power cycle.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "1": "Modbus RTU",
    "2": "Metasys N2",
    "3": "Apogee P1",
    "4": "BACnet",
    "5": "LonWorks"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2129,
   "documented": "2129 (16#851, F851)",
   "name": "F851 - Com. fault setting",
   "description": "Reaction to comm loss; on Modbus only 1 differs from a trip. Factory 4.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Ramp stop, control returns to CMOd/FMOd (LonWorks board only)",
    "1": "Not active (keep running)",
    "2": "Ramp stop",
    "3": "Freewheel",
    "4": "Trip Err5 / Err8"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2160,
   "documented": "2160 (16#870, F870)",
   "name": "F870 - Block write data 1",
   "description": "First item of the indirect write block; applies after power cycle.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "No selection",
    "1": "Command word 1 (FA00)",
    "2": "Command word 2 (FA20)",
    "3": "Frequency setpoint (FA01)",
    "4": "Relay command (FA50)",
    "5": "FM analog output command (FA51)",
    "6": "Speed setpoint (FA13)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2161,
   "documented": "2161 (16#871, F871)",
   "name": "F871 - Block write data 2",
   "description": "Second item of the indirect write block; applies after power cycle.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "No selection",
    "1": "Command word 1 (FA00)",
    "2": "Command word 2 (FA20)",
    "3": "Frequency setpoint (FA01)",
    "4": "Relay command (FA50)",
    "5": "FM analog output command (FA51)",
    "6": "Speed setpoint (FA13)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2165,
   "documented": "2165 (16#875, F875)",
   "name": "F875 - Block read data 1",
   "description": "Item 1 of the indirect read block; applies after power cycle.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "No selection",
    "1": "Status (Fd01)",
    "2": "Output frequency (Fd00)",
    "3": "Output current (FE03)",
    "4": "Output voltage (FE05)",
    "5": "Alarm info (FC91)",
    "6": "PID feedback",
    "7": "Input terminal monitor",
    "8": "Output terminal monitor",
    "9": "VIA monitor",
    "10": "VIB monitor",
    "11": "Motor speed monitor"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2166,
   "documented": "2166 (16#876, F876)",
   "name": "F876 - Block read data 2",
   "description": "Item 2 of the indirect read block; applies after power cycle.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "No selection",
    "1": "Status (Fd01)",
    "2": "Output frequency (Fd00)",
    "3": "Output current (FE03)",
    "4": "Output voltage (FE05)",
    "5": "Alarm info (FC91)",
    "6": "PID feedback",
    "7": "Input terminal monitor",
    "8": "Output terminal monitor",
    "9": "VIA monitor",
    "10": "VIB monitor",
    "11": "Motor speed monitor"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2167,
   "documented": "2167 (16#877, F877)",
   "name": "F877 - Block read data 3",
   "description": "Item 3 of the indirect read block; applies after power cycle.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "No selection",
    "1": "Status (Fd01)",
    "2": "Output frequency (Fd00)",
    "3": "Output current (FE03)",
    "4": "Output voltage (FE05)",
    "5": "Alarm info (FC91)",
    "6": "PID feedback",
    "7": "Input terminal monitor",
    "8": "Output terminal monitor",
    "9": "VIA monitor",
    "10": "VIB monitor",
    "11": "Motor speed monitor"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2168,
   "documented": "2168 (16#878, F878)",
   "name": "F878 - Block read data 4",
   "description": "Item 4 of the indirect read block; applies after power cycle.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "No selection",
    "1": "Status (Fd01)",
    "2": "Output frequency (Fd00)",
    "3": "Output current (FE03)",
    "4": "Output voltage (FE05)",
    "5": "Alarm info (FC91)",
    "6": "PID feedback",
    "7": "Input terminal monitor",
    "8": "Output terminal monitor",
    "9": "VIA monitor",
    "10": "VIB monitor",
    "11": "Motor speed monitor"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2169,
   "documented": "2169 (16#879, F879)",
   "name": "F879 - Block read data 5",
   "description": "Item 5 of the indirect read block; applies after power cycle.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "No selection",
    "1": "Status (Fd01)",
    "2": "Output frequency (Fd00)",
    "3": "Output current (FE03)",
    "4": "Output voltage (FE05)",
    "5": "Alarm info (FC91)",
    "6": "PID feedback",
    "7": "Input terminal monitor",
    "8": "Output terminal monitor",
    "9": "VIA monitor",
    "10": "VIB monitor",
    "11": "Motor speed monitor"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 64000,
   "documented": "64000 (16#FA00, FA00)",
   "name": "FA00 - Command word 1",
   "description": "Run/stop, direction, reset; bits 14/15 take reference/command priority.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "0": "Preset speed select bit 1",
    "1": "Preset speed select bit 2",
    "2": "Preset speed select bit 3",
    "3": "Reserved (keep 0)",
    "4": "Motor 2 / THR2 selection",
    "5": "PI control off",
    "6": "Accel/decel pattern 2 (F500/F501)",
    "7": "Forced DC braking",
    "9": "Reverse (0 = forward)",
    "10": "Run (0 = stop)",
    "11": "Coast stop",
    "12": "Emergency stop (E trip)",
    "13": "Fault reset",
    "14": "Setpoint priority to communication (ignores FMOd)",
    "15": "Command priority to communication (ignores CMOd)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 64001,
   "documented": "64001 (16#FA01, FA01)",
   "name": "FA01 - Frequency reference from comm.",
   "description": "0 to FH (max frequency). 6000 = 60.00 Hz.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "Hz",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 64019,
   "documented": "64019 (16#FA13, FA13)",
   "name": "FA13 - Speed reference from network",
   "description": "0-24000 rpm, converted with motor poles F856.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "rpm",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 64032,
   "documented": "64032 (16#FA20, FA20)",
   "name": "FA20 - Command word 2",
   "description": "Energy counter reset and over-current stall level select.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "1": "Reset input/output energy counters (clear it again afterwards)",
    "12": "Over-current stall level 2 (F185) instead of 1 (F601)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 64080,
   "documented": "64080 (16#FA50, FA50)",
   "name": "FA50 - Terminal output data from comm.",
   "description": "Drives relays assigned to the serial-data functions.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "0": "Relay FL (F132 = 38/39)",
    "1": "Relay RY (F130/F137 = 40/41)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 64081,
   "documented": "64081 (16#FA51, FA51)",
   "name": "FA51 - Analog output data from comm.",
   "description": "FM output, 0-1023 (10-bit); needs FMSL = 18.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 64656,
   "documented": "64656 (16#FC90, FC90)",
   "name": "FC90 - Trip code",
   "description": "Present trip; 0 = none.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "nErr - no error",
    "1": "OC1 - overcurrent during accel",
    "2": "OC2 - overcurrent during decel",
    "3": "OC3 - overcurrent at constant speed",
    "4": "OCL - overcurrent in load at start",
    "5": "OCA - arm short circuit",
    "8": "EPHI - input phase loss",
    "9": "EPHO - output phase loss",
    "10": "OP1 - overvoltage during accel",
    "11": "OP2 - overvoltage during decel",
    "12": "OP3 - overvoltage at constant speed",
    "13": "OL1 - drive overload",
    "14": "OL2 - motor overload",
    "16": "OH - overheat",
    "17": "E - emergency stop",
    "18": "EEP1 - EEPROM write fault",
    "19": "EEP2 - EEPROM read fault",
    "20": "EEP3 - EEPROM fault",
    "21": "Err2 - RAM fault",
    "22": "Err3 - ROM fault",
    "23": "Err4 - CPU fault",
    "24": "Err5 - communication fault",
    "26": "Err7 - current detector fault",
    "27": "Err8 - option board / network fault",
    "28": "Err9 - graphic keypad communication fault",
    "29": "UC - undercurrent",
    "30": "UP1 - main circuit undervoltage",
    "32": "Ot - overtorque",
    "34": "EF2 - ground fault",
    "37": "OC1P - element overcurrent during accel",
    "38": "OC2P - element overcurrent during decel",
    "39": "OC3P - element overcurrent in run",
    "41": "EtYP - drive type error",
    "46": "OH2 - external thermal input",
    "47": "SOUt - VIA cable break",
    "50": "E-18 - analog signal cable break",
    "51": "E-19 - CPU fault",
    "52": "E-20 - excess torque boost",
    "53": "E-21 - CPU fault",
    "72": "Fd1 - damper 1 (closed) fault",
    "73": "Fd2 - damper 2 fault",
    "84": "Etn1 - auto-tuning error"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 64657,
   "documented": "64657 (16#FC91, FC91)",
   "name": "FC91 - Alarm code",
   "description": "Pre-alarm flags.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "Overcurrent",
    "1": "Drive overload",
    "2": "Motor overload",
    "3": "Overheat",
    "4": "Overvoltage",
    "5": "Main circuit undervoltage",
    "7": "Undercurrent",
    "8": "Over-torque",
    "10": "Run-time hours reached",
    "13": "Main circuit undervoltage (MOFF)",
    "14": "Forced decel/stop after momentary power loss (F256)",
    "15": "Auto stop after running at low limit (F302)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 64768,
   "documented": "64768 (16#FD00, Fd00)",
   "name": "Fd00 - Output frequency",
   "description": "Present output frequency.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 64769,
   "documented": "64769 (16#FD01, Fd01)",
   "name": "Fd01 - Status word",
   "description": "Present drive status.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "FL relay active",
    "1": "Tripped (incl. retry / trip retention)",
    "2": "Alarm present",
    "3": "MOFF main circuit undervoltage",
    "4": "Motor 2 (THR2) selected",
    "5": "PI control prohibited",
    "6": "Accel/decel pattern 2",
    "7": "Forced DC braking",
    "9": "Reverse",
    "10": "Running",
    "11": "Coast stop (ST off)",
    "12": "Emergency stop",
    "13": "Standby with ST and RUN on",
    "14": "Standby (ready)",
    "15": "Local (0 = remote)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 64774,
   "documented": "64774 (16#FD06, Fd06)",
   "name": "Fd06 - Digital inputs status",
   "description": "Present logic input states.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "F",
    "1": "R",
    "2": "RES",
    "7": "VIA (only when used as a logic input, F109)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 64775,
   "documented": "64775 (16#FD07, Fd07)",
   "name": "Fd07 - Digital outputs status",
   "description": "Present relay states.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "RY",
    "2": "FL"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 64834,
   "documented": "64834 (16#FD42, Fd42)",
   "name": "Fd42 - Status word 2",
   "description": "",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "1": "Energy counters being reset",
    "8": "Accel/decel pattern 2",
    "12": "Over-current stall level 2"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 64841,
   "documented": "64841 (16#FD49, Fd49)",
   "name": "Fd49 - Status word 3",
   "description": "",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "RY output hold",
    "12": "RCH (F102) on",
    "13": "RCHF (F101/F102) on"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65024,
   "documented": "65024 (16#FE00, FE00)",
   "name": "FE00 - Output frequency at last trip",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65025,
   "documented": "65025 (16#FE01, FE01)",
   "name": "FE01 - Status word at last trip",
   "description": "Same bits as Fd01, frozen at the trip.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "FL relay active",
    "1": "Tripped (incl. retry / trip retention)",
    "2": "Alarm present",
    "3": "MOFF main circuit undervoltage",
    "4": "Motor 2 (THR2) selected",
    "5": "PI control prohibited",
    "6": "Accel/decel pattern 2",
    "7": "Forced DC braking",
    "9": "Reverse",
    "10": "Running",
    "11": "Coast stop (ST off)",
    "12": "Emergency stop",
    "13": "Standby with ST and RUN on",
    "14": "Standby (ready)",
    "15": "Local (0 = remote)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65026,
   "documented": "65026 (16#FE02, FE02)",
   "name": "FE02 - Frequency reference before ramp",
   "description": "Reference before PI and ramp; manual tags it 'value before trip'.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65027,
   "documented": "65027 (16#FE03, FE03)",
   "name": "FE03 - Output current",
   "description": "Percent, not amps (see notes on the base).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65028,
   "documented": "65028 (16#FE04, FE04)",
   "name": "FE04 - DC bus voltage",
   "description": "Percent, not volts.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65029,
   "documented": "65029 (16#FE05, FE05)",
   "name": "FE05 - Output voltage",
   "description": "Percent, not volts; manual tags it 'value before trip'.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65040,
   "documented": "65040 (16#FE10, FE10)",
   "name": "FE10 - Latest trip code",
   "description": "Same code list as FC90.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "nErr - no error",
    "1": "OC1 - overcurrent during accel",
    "2": "OC2 - overcurrent during decel",
    "3": "OC3 - overcurrent at constant speed",
    "4": "OCL - overcurrent in load at start",
    "5": "OCA - arm short circuit",
    "8": "EPHI - input phase loss",
    "9": "EPHO - output phase loss",
    "10": "OP1 - overvoltage during accel",
    "11": "OP2 - overvoltage during decel",
    "12": "OP3 - overvoltage at constant speed",
    "13": "OL1 - drive overload",
    "14": "OL2 - motor overload",
    "16": "OH - overheat",
    "17": "E - emergency stop",
    "18": "EEP1 - EEPROM write fault",
    "19": "EEP2 - EEPROM read fault",
    "20": "EEP3 - EEPROM fault",
    "21": "Err2 - RAM fault",
    "22": "Err3 - ROM fault",
    "23": "Err4 - CPU fault",
    "24": "Err5 - communication fault",
    "26": "Err7 - current detector fault",
    "27": "Err8 - option board / network fault",
    "28": "Err9 - graphic keypad communication fault",
    "29": "UC - undercurrent",
    "30": "UP1 - main circuit undervoltage",
    "32": "Ot - overtorque",
    "34": "EF2 - ground fault",
    "37": "OC1P - element overcurrent during accel",
    "38": "OC2P - element overcurrent during decel",
    "39": "OC3P - element overcurrent in run",
    "41": "EtYP - drive type error",
    "46": "OH2 - external thermal input",
    "47": "SOUt - VIA cable break",
    "50": "E-18 - analog signal cable break",
    "51": "E-19 - CPU fault",
    "52": "E-20 - excess torque boost",
    "53": "E-21 - CPU fault",
    "72": "Fd1 - damper 1 (closed) fault",
    "73": "Fd2 - damper 2 fault",
    "84": "Etn1 - auto-tuning error"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65041,
   "documented": "65041 (16#FE11, FE11)",
   "name": "FE11 - 2nd previous trip code",
   "description": "Same code list as FC90.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "nErr - no error",
    "1": "OC1 - overcurrent during accel",
    "2": "OC2 - overcurrent during decel",
    "3": "OC3 - overcurrent at constant speed",
    "4": "OCL - overcurrent in load at start",
    "5": "OCA - arm short circuit",
    "8": "EPHI - input phase loss",
    "9": "EPHO - output phase loss",
    "10": "OP1 - overvoltage during accel",
    "11": "OP2 - overvoltage during decel",
    "12": "OP3 - overvoltage at constant speed",
    "13": "OL1 - drive overload",
    "14": "OL2 - motor overload",
    "16": "OH - overheat",
    "17": "E - emergency stop",
    "18": "EEP1 - EEPROM write fault",
    "19": "EEP2 - EEPROM read fault",
    "20": "EEP3 - EEPROM fault",
    "21": "Err2 - RAM fault",
    "22": "Err3 - ROM fault",
    "23": "Err4 - CPU fault",
    "24": "Err5 - communication fault",
    "26": "Err7 - current detector fault",
    "27": "Err8 - option board / network fault",
    "28": "Err9 - graphic keypad communication fault",
    "29": "UC - undercurrent",
    "30": "UP1 - main circuit undervoltage",
    "32": "Ot - overtorque",
    "34": "EF2 - ground fault",
    "37": "OC1P - element overcurrent during accel",
    "38": "OC2P - element overcurrent during decel",
    "39": "OC3P - element overcurrent in run",
    "41": "EtYP - drive type error",
    "46": "OH2 - external thermal input",
    "47": "SOUt - VIA cable break",
    "50": "E-18 - analog signal cable break",
    "51": "E-19 - CPU fault",
    "52": "E-20 - excess torque boost",
    "53": "E-21 - CPU fault",
    "72": "Fd1 - damper 1 (closed) fault",
    "73": "Fd2 - damper 2 fault",
    "84": "Etn1 - auto-tuning error"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65042,
   "documented": "65042 (16#FE12, FE12)",
   "name": "FE12 - 3rd previous trip code",
   "description": "Same code list as FC90.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "nErr - no error",
    "1": "OC1 - overcurrent during accel",
    "2": "OC2 - overcurrent during decel",
    "3": "OC3 - overcurrent at constant speed",
    "4": "OCL - overcurrent in load at start",
    "5": "OCA - arm short circuit",
    "8": "EPHI - input phase loss",
    "9": "EPHO - output phase loss",
    "10": "OP1 - overvoltage during accel",
    "11": "OP2 - overvoltage during decel",
    "12": "OP3 - overvoltage at constant speed",
    "13": "OL1 - drive overload",
    "14": "OL2 - motor overload",
    "16": "OH - overheat",
    "17": "E - emergency stop",
    "18": "EEP1 - EEPROM write fault",
    "19": "EEP2 - EEPROM read fault",
    "20": "EEP3 - EEPROM fault",
    "21": "Err2 - RAM fault",
    "22": "Err3 - ROM fault",
    "23": "Err4 - CPU fault",
    "24": "Err5 - communication fault",
    "26": "Err7 - current detector fault",
    "27": "Err8 - option board / network fault",
    "28": "Err9 - graphic keypad communication fault",
    "29": "UC - undercurrent",
    "30": "UP1 - main circuit undervoltage",
    "32": "Ot - overtorque",
    "34": "EF2 - ground fault",
    "37": "OC1P - element overcurrent during accel",
    "38": "OC2P - element overcurrent during decel",
    "39": "OC3P - element overcurrent in run",
    "41": "EtYP - drive type error",
    "46": "OH2 - external thermal input",
    "47": "SOUt - VIA cable break",
    "50": "E-18 - analog signal cable break",
    "51": "E-19 - CPU fault",
    "52": "E-20 - excess torque boost",
    "53": "E-21 - CPU fault",
    "72": "Fd1 - damper 1 (closed) fault",
    "73": "Fd2 - damper 2 fault",
    "84": "Etn1 - auto-tuning error"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65043,
   "documented": "65043 (16#FE13, FE13)",
   "name": "FE13 - 4th previous trip code",
   "description": "Same code list as FC90.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "nErr - no error",
    "1": "OC1 - overcurrent during accel",
    "2": "OC2 - overcurrent during decel",
    "3": "OC3 - overcurrent at constant speed",
    "4": "OCL - overcurrent in load at start",
    "5": "OCA - arm short circuit",
    "8": "EPHI - input phase loss",
    "9": "EPHO - output phase loss",
    "10": "OP1 - overvoltage during accel",
    "11": "OP2 - overvoltage during decel",
    "12": "OP3 - overvoltage at constant speed",
    "13": "OL1 - drive overload",
    "14": "OL2 - motor overload",
    "16": "OH - overheat",
    "17": "E - emergency stop",
    "18": "EEP1 - EEPROM write fault",
    "19": "EEP2 - EEPROM read fault",
    "20": "EEP3 - EEPROM fault",
    "21": "Err2 - RAM fault",
    "22": "Err3 - ROM fault",
    "23": "Err4 - CPU fault",
    "24": "Err5 - communication fault",
    "26": "Err7 - current detector fault",
    "27": "Err8 - option board / network fault",
    "28": "Err9 - graphic keypad communication fault",
    "29": "UC - undercurrent",
    "30": "UP1 - main circuit undervoltage",
    "32": "Ot - overtorque",
    "34": "EF2 - ground fault",
    "37": "OC1P - element overcurrent during accel",
    "38": "OC2P - element overcurrent during decel",
    "39": "OC3P - element overcurrent in run",
    "41": "EtYP - drive type error",
    "46": "OH2 - external thermal input",
    "47": "SOUt - VIA cable break",
    "50": "E-18 - analog signal cable break",
    "51": "E-19 - CPU fault",
    "52": "E-20 - excess torque boost",
    "53": "E-21 - CPU fault",
    "72": "Fd1 - damper 1 (closed) fault",
    "73": "Fd2 - damper 2 fault",
    "84": "Etn1 - auto-tuning error"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65045,
   "documented": "65045 (16#FE15, FE15)",
   "name": "FE15 - Frequency reference after ramp",
   "description": "Manual tags it 'value before trip'.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65046,
   "documented": "65046 (16#FE16, FE16)",
   "name": "FE16 - Estimated speed",
   "description": "In Hz; manual tags it 'value before trip'.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65058,
   "documented": "65058 (16#FE22, FE22)",
   "name": "FE22 - PID feedback value",
   "description": "Manual tags it 'value before trip'.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65062,
   "documented": "65062 (16#FE26, FE26)",
   "name": "FE26 - Motor load",
   "description": "Manual tags it 'value before trip'.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65063,
   "documented": "65063 (16#FE27, FE27)",
   "name": "FE27 - Drive load",
   "description": "Manual tags it 'value before trip'.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65065,
   "documented": "65065 (16#FE29, FE29)",
   "name": "FE29 - Input power",
   "description": "Manual tags it 'value before trip'.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "kW",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65077,
   "documented": "65077 (16#FE35, FE35)",
   "name": "FE35 - Analog input VIA value",
   "description": "Raw 0-1023 (10-bit).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65078,
   "documented": "65078 (16#FE36, FE36)",
   "name": "FE36 - Analog input VIB value",
   "description": "Raw 0-1023 (10-bit).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65093,
   "documented": "65093 (16#FE45, FE45)",
   "name": "FE45 - Command mode status",
   "description": "Where run commands come from now.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "Terminal board",
    "1": "Operation panel",
    "2": "Serial communication"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65094,
   "documented": "65094 (16#FE46, FE46)",
   "name": "FE46 - Setpoint mode status",
   "description": "Where the speed reference comes from now.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1": "VIA",
    "2": "VIB",
    "3": "Operation panel",
    "4": "Serial communication",
    "5": "Terminal up/down",
    "255": "Preset speed operation"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65145,
   "documented": "65145 (16#FE79, FE79)",
   "name": "FE79 - Alarm of run time",
   "description": "Lifetime / service alarms.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "Fan life",
    "1": "Circuit board life",
    "2": "Main circuit capacitor life",
    "3": "User-set run time"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65168,
   "documented": "65168 (16#FE90, FE90)",
   "name": "FE90 - Output speed",
   "description": "Motor speed.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "rpm",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  }
 ],
 "integration": {
  "summary": "Give the drive a unique F802 address (factory 1), make sure F807 points at the port you are wired to, then either set CMOd = 2 and FMOd = 4 (drive stopped) or keep them and set bits 15/14 in FA00. Write FA01 in 0.01 Hz and FA00 = 0400h (run forward) or C400h (run forward with command and reference priority). Poll Fd00, Fd01, FE03 and FC90 one register at a time.",
  "minimum_registers": [
   {
    "table": "holding_register",
    "address": 64000,
    "why": "FA00: run/stop/reset and priority bits"
   },
   {
    "table": "holding_register",
    "address": 64001,
    "why": "FA01: frequency reference, 0.01 Hz"
   },
   {
    "table": "holding_register",
    "address": 64768,
    "why": "Fd00: output frequency, 0.01 Hz"
   },
   {
    "table": "holding_register",
    "address": 64769,
    "why": "Fd01: status word"
   },
   {
    "table": "holding_register",
    "address": 65027,
    "why": "FE03: output current, 0.01 %"
   },
   {
    "table": "holding_register",
    "address": 64656,
    "why": "FC90: present trip code"
   },
   {
    "table": "holding_register",
    "address": 64657,
    "why": "FC91: alarm flags"
   },
   {
    "table": "holding_register",
    "address": 2129,
    "why": "F851: reaction to comm loss"
   }
  ],
  "enable": "All communication settings are in [PROGRAMMING MENU] > [COMMUNICATION MENU] COM. F807 chooses which port may command the drive: 0 = RJ45, 1 = open-style terminal (factory). On the open-style port also set F829 = 1 (Modbus RTU, factory). F802 is the address for both ports (0 disables). Full network control: CMOd = 2 (Communication) and FMOd = 4 (Serial com ref.), changed only while stopped. Alternatively leave CMOd/FMOd on terminals and set FA00 bit 15 (commands) and bit 14 (reference) to take priority over the bus; the LOC/REM key and a logic input set to function 48 (Forced local) can still take control back.",
  "watchdog": "F803 [Com. time out], 0-100 s, factory 3 s (0 disables). The timer starts at the first valid frame addressed to the drive and is restarted by any request (read, write or identification). F851 lists the reactions 0 ramp stop and hand control back to CMOd/FMOd (LonWorks board only), 1 ignore, 2 ramp stop, 3 freewheel and 4 trip Err5 (RJ45) or Err8 (network port, factory). The programming manual adds that on Modbus only setting 1 is honoured and every other setting trips in Err5/Err8, so on Modbus expect either no reaction (1) or a trip. Detection is active when CMOd = 2 or FMOd = 4.",
  "quirks": [
   "Function 03 reads exactly one register per request (quantity 1); asking for 2 at Fd00 returns exception 03. The only multi-register read is the indirect block at 16#1875 (quantity 1-5).",
   "Function 16 writes exactly one register (or the 2-register indirect block at 16#1870). Supported functions are 03, 06, 16 and 43/14 only - no FC04.",
   "Addresses are the hex communication numbers sent as-is: Fd00 -> 0xFD00 (64768), F802 -> 0x0802 (2050). Don't add 40001 and don't subtract 1.",
   "FA00 examples: 0400h run forward, 0600h run reverse when CMOd/FMOd are on serial; C400h / C600h run with communication priority regardless of CMOd/FMOd. Bit 13 resets a fault.",
   "Frequency values are 0.01 Hz: 6000 = 60.00 Hz, 8000 = 80.00 Hz.",
   "The drive transmits 2 stop bits and accepts 1 or 2, so masters set to 1 or 2 stop bits both work. Baud and parity changes need a power cycle.",
   "Read Device Identification (43/14) reports the vendor as 'Télémécanique', the catalog number (e.g. ATV212H075M3X) and the control software version as 4 ASCII digits."
  ],
  "setup": [
   "RJ45 port: pin 4 = D1 (B), pin 5 = D0 (A), pin 2 = common, pin 7 = 10 V supply for a converter or the graphic display; pins 1, 3, 6, 8 not connected.",
   "Open-style terminal: B (+), A (-), GND (common), SCR (shield); two wires per cage are allowed for daisy chaining.",
   "Set switch SW103 to Term to connect the built-in 120 ohm terminator at a bus end (switch only with power off).",
   "Set F802 (address), then F800/F801 (RJ45) or F820/F821 (open style) for baud and parity; factory is 19200 bps, even parity. Cycle power so baud/parity take effect.",
   "Check traffic on the keypad monitor [Mdb com stat], which shows Rx/Tx activity for each port."
  ],
  "gotchas": [
   "F807 defaults to the open-style port. A master on the RJ45 socket can read but its run commands and reference are ignored until F807 = 0.",
   "Output current and voltages are percentages, not amps or volts.",
   "FA00/FA01 are not retained: after a power loss the drive comes back with no communication priority and a zero reference until the master writes them again.",
   "CMOd and FMOd can only be changed while the drive is stopped; a write while running returns exception 04.",
   "F803 = 0 or F851 = 1 disables communication-loss protection; use only for commissioning."
  ]
 },
 "page": "https://easymodbus.com/modbus-register-maps/schneider-electric/atv212",
 "address_note": "address = 0-based Modbus wire (PDU) address; documented = as printed in the source.",
 "note": "Re-typed from the manufacturer's public documentation (see source) and verified against it. Registers vary by firmware and options; verify against the live device before writing."
}
