# Property of PMA Electrical Solutions, LLC. # # Delta C2000-R (Liquid Cooled Motor Drive), embedded RS-485 (COM1). # # COVERAGE — the C2000-R series only, 460V models. NOT the C2000, C2000 Plus, # C2000-HS, CP2000, CH2000 or C200; each of those has its own manual and its # own profile. The C2000-R sits closest to the C2000 Plus (same 0x2101 # layout, same "2000h-20FFh regardless of decoding method" RS-485 rule) but # its fault table is NOT the Plus's: the C2000-R drops 17 (heatsink # overheating — it is liquid cooled) and 164/165, and adds 196 WCBo water # cooling temperature detection error. Nothing here was carried across. # # SOURCE — Delta C2000-R User Manual, document DELTA_IA-MDS_C2000-R_UM_EN_ # 20240614, downloadcenter.deltaww.com (1076 pp). Citations are PDF page # numbers in that file, not the printed folio (the manual restarts numbering # per chapter, so the folio is not a usable citation). # p. 205, 263 Pr.00-00 AC Motor Drive Identity Code (read-only) # p. 209 Pr.00-20 Master Frequency Command Source (1 = RS-485) and # Pr.00-21 Operation Command Source (2 = RS-485) # p. 212 Pr.01-00 Maximum Operation Frequency 0.00-599.00 Hz # pp. 212-220 extent of groups 01 (to 01-54) and 02 (to 02-75), including # the read-only members 02-50-02-54 and 02-70 on p. 219 # pp. 244-245 group 09 summary: 09-01 baud (default 9.6), 09-02 fault # treatment (default 3), 09-03 time-out (default 0.0), # 09-04 protocol (DEFAULT 1 = 7,N,2 ASCII) all on p. 244; # 09-30 (default 1) on p. 245 # pp. 410-417 Pr.06-17 fault record code list (transcribed below) # p. 466 Pr.09-30 Communication Decoding Method table # pp. 1064-1071 Appendix address list: 20xx control, 21xx/22xx monitor # # DRIVE-SIDE SETUP: 00-20 = 1 (RS-485 frequency source), 00-21 = 2 (RS-485 # operation source) — both default to 0 (digital keypad); 09-00 node address; # 09-01 baud; and 09-04 = 12 (8,N,1 RTU) — THE FACTORY DEFAULT IS 1, which is # 7,N,2 ASCII, so an untouched drive will not answer an RTU master at all # (p. 244). Pr.09-30 does NOT need changing for RS-485 on this model: p. 466 # reads "The address for reference is 2000h-20FFh regardless of decoding # method 1 or 2". That is the C2000 Plus rule, NOT the plain C2000 rule. # # Delta documents these as hex Modbus addresses that go on the wire as-is — # they are already 0-based protocol addresses. name = "Delta C2000-R" vendor = "Delta Electronics" device_type = "vfd" verified = false probe_register = 0x2101 [connection] summary = "Use either of the two built-in electrical access points for the same two-wire Modbus RTU bus; no communications option card is required." warnings = ["Choose one physical access point per drive. The screw terminals and modular jack are electrically the same bus, not two independent ports."] [[connection.methods]] id = "control_terminals_rs485" title = "Built-in RS-485 screw terminals" transport = "serial" hardware = "built_in" port = "Control terminals SG+ and SG-" connector = "Two control-terminal positions" adapter = "Isolated USB-to-RS-485 adapter, 2-wire half-duplex" cable = "Shielded twisted-pair RS-485 cable, 120 ohm nominal impedance" parts = ["Isolated two-wire RS-485 adapter", "Shielded twisted-pair RS-485 cable, 120 ohm nominal impedance"] steps = ["Lock out line and control power, wait the vendor-specified discharge time, and verify the DC bus is de-energized before opening a cover or landing conductors.", "Land the positive and negative data conductors exactly as shown; connect the cable shield or signal common only where the method identifies it.", "Route the communications cable away from motor and mains conductors. Terminate the two physical ends of a long multidrop trunk only.", "Restore control power with the motor area clear, configure the drive from its keypad, then verify identity and read-only monitor data before enabling remote control."] setup = ["Set 00-20=1, 00-21=2, 09-00=node, 09-01=baud, and 09-04=12 for RTU 8N1; 09-30 need not change for built-in RS-485."] warnings = ["RS-485 A/B naming is not consistent between manufacturers. Follow the + and - signal mapping in this guide, not the letter printed on an unfamiliar adapter.", "Do not use protective earth as the data return unless the vendor drawing explicitly calls for it.", "The factory communication format is Modbus ASCII on these families; set the documented RTU format from the keypad before expecting discovery."] source = "Delta C2000-R User Manual, PDF p. 62 (SG+/SG- and RJ45 pinout), pp. 244 and 466 (setup)" [[connection.methods.wiring]] adapter = "Adapter D+ / +" device = "SG+" signal = "RS-485 data positive" required = true [[connection.methods.wiring]] adapter = "Adapter D- / -" device = "SG-" signal = "RS-485 data negative" required = true [[connection.methods]] id = "rj45_rs485" title = "Built-in RS-485 modular jack" transport = "serial" hardware = "built_in" port = "Drive RJ45 communications jack" connector = "RJ45 (RS-485, not Ethernet)" adapter = "Isolated USB-to-RS-485 adapter, 2-wire half-duplex" cable = "Shielded twisted-pair cable terminated to the documented modular-plug pins" parts = ["Isolated two-wire RS-485 adapter", "Shielded twisted-pair cable terminated to the documented modular-plug pins", "Field-terminated modular plug or documented breakout adapter"] steps = ["Lock out line and control power, wait the vendor-specified discharge time, and verify the DC bus is de-energized before opening a cover or landing conductors.", "Land the positive and negative data conductors exactly as shown; connect the cable shield or signal common only where the method identifies it.", "Route the communications cable away from motor and mains conductors. Terminate the two physical ends of a long multidrop trunk only.", "Restore control power with the motor area clear, configure the drive from its keypad, then verify identity and read-only monitor data before enabling remote control."] setup = ["Set 00-20=1, 00-21=2, 09-00=node, 09-01=baud, and 09-04=12 for RTU 8N1; 09-30 need not change for built-in RS-485."] warnings = ["A modular communications jack is not automatically Ethernet. Never connect it to a LAN switch unless this guide explicitly identifies a Modbus TCP method.", "RS-485 A/B naming is not consistent between manufacturers. Follow the + and - mapping shown here.", "Pins 1, 2, 7, and 8 are reserved or accessory power depending on model revision. Do not connect them."] source = "Delta C2000-R User Manual, PDF p. 62 (SG+/SG- and RJ45 pinout), pp. 244 and 466 (setup)" [[connection.methods.wiring]] adapter = "Adapter D+ / +" device = "RJ45 pin 5 (SG+)" signal = "RS-485 data positive" required = true [[connection.methods.wiring]] adapter = "Adapter D- / -" device = "RJ45 pin 4 (SG-)" signal = "RS-485 data negative" required = true [[connection.methods.wiring]] adapter = "Adapter signal ground / shield" device = "RJ45 pin 3 or 6 (SGND)" signal = "Signal reference or shield drain" required = false # 09-01 default 9.6 kbps. Parity/stop below are what the drive must be SET to # (09-04 = 12); they are not the factory default, which is 7,N,2 ASCII. [serial] baudrate = 9600 parity = "N" stopbits = 1 [monitor] # Bits 1-0 are a 2-bit run state (00 fully stopped, 01 stopping, 10 standby, # 11 running), bits 4-3 a 2-bit direction-transition field (00 FWD, 01 # REV->FWD, 10 FWD->REV, 11 REV) and bits 15-13 a 3-bit HOA / LOC-REM mode # field, so none of those decodes as an independent flag. Bit 12 is Reserved # on this model. drive_status = { address = 0x2101, bits = { 2 = "Jog", 8 = "FreqFromComm", 9 = "FreqFromAnalog", 10 = "CmdFromComm", 11 = "ParamLocked" } } frequency_command = { address = 0x2102, scale = 0.01, unit = "Hz" } output_frequency = { address = 0x2103, scale = 0.01, unit = "Hz" } # p. 1067: "Drive's output current (XX.XX A). Decimal places can be referred # by the high byte of 211F" — this scale is FRAME-DEPENDENT. Read 0x211F bits # 9-8 before trusting the value. CAVEAT: the C2000-R address list itself has # no 211F row (its 21xx table runs 2100-210F, 2116, 211B and stops); 211F is # named only in this prose. Confirm the register answers before relying on it. output_current = { address = 0x2104, scale = 0.01, unit = "A" } current_decimal_attr = { address = 0x211F } dc_bus_voltage = { address = 0x2105, scale = 0.1, unit = "V" } output_voltage = { address = 0x2106, scale = 0.1, unit = "V" } # 0x2107 is the multi-step-speed STEP NUMBER, not a speed (0 = main speed). multistep_step = { address = 0x2107 } # 0x210A is the power factor ANGLE in 0.1 degrees (0.0-180.0), not cos phi. power_factor_angle = { address = 0x210A, scale = 0.1, unit = "deg" } output_torque = { address = 0x210B, scale = 0.1, unit = "%" } motor_speed = { address = 0x210C, unit = "rpm" } output_power = { address = 0x210F, scale = 0.001, unit = "kW" } # 0x2226 (p. 1071): bits 1-0 direction, bits 3-2 ready/error, bit 4 output # active, bit 5 alarm. Only bits 4 and 5 are independent flags. drive_status_2 = { address = 0x2226, bits = { 4 = "Output", 5 = "Alarm" } } [control] command_register = 0x2000 # Fault reset is a DIFFERENT register. On 0x2000 bits 1-0 = 10B is RUN, so # writing 0x0002 there commands an unexpected start in the last direction. reset_register = 0x2002 speed_register = 0x2001 speed_scale = 0.01 speed_unit = "Hz" max_ref = 599.0 # Pr.01-00 range, p. 212 step_delay = 0.05 stop = [0x0001] # 2000H bits 1-0 = 01B run_fwd = [0x0012] # bits 1-0 = 10B RUN, bits 5-4 = 01B FWD run_rev = [0x0022] # bits 1-0 = 10B RUN, bits 5-4 = 10B REV reset = [0x0002] # bit 1 of 0x2002 # 09-02 default is 3 = "No warning, no fault and continue operation" and # 09-03 time-out detection default is 0.0 = disabled, so a factory-default # C2000-R KEEPS RUNNING when the master goes quiet. Both must be set on the # drive for this keepalive to have a drive-side consequence. [control.watchdog] interval_ms = 300 fault = "CE10 Modbus transmission time-out (code 58) — only if 09-03 time-out is non-zero and 09-02 is 1 or 2; the factory default is no detection and no action" backstop_requires_setup = true # 0x2226 bit 4 is the manual's own "Motor drive did output" flag (p. 1071) — an # unambiguous single bit, unlike 0x2101 whose bits 1-0 are a 2-bit state # where no single bit means "running". [running_check] register = 0x2226 bit = 4 # p. 1066 states 0x2100 explicitly: "bit7~0: Fault code / bit15~8: Warning # code". Without the mask an active warning corrupts the fault lookup. [faults] register = 0x2100 mask = 0x00FF # Pr.06-17 code list, pp. 410-417, transcribed complete. Codes the manual # leaves unlisted are omitted rather than invented. [faults.codes] 0 = "No fault record" 1 = "ocA over-current during acceleration" 2 = "ocd over-current during deceleration" 3 = "ocn over-current during steady operation" 4 = "GFF ground fault" 5 = "occ IGBT short-circuit between upper and lower bridge" 6 = "ocS over-current at stop" 7 = "ovA over-voltage during acceleration" 8 = "ovd over-voltage during deceleration" 9 = "ovn over-voltage at constant speed" 10 = "ovS over-voltage at stop" 11 = "LvA low-voltage during acceleration" 12 = "Lvd low-voltage during deceleration" 13 = "Lvn low-voltage at constant speed" 14 = "LvS low-voltage at stop" 15 = "OrP phase loss protection" 16 = "oH1 IGBT overheating" 18 = "tH1o IGBT temperature detection failure" 19 = "tH2o capacitor hardware error" 21 = "oL over load" 22 = "EoL1 electronic thermal relay 1 protection" 23 = "EoL2 electronic thermal relay 2 protection" 24 = "oH3 motor overheating (PTC / PT100)" 25 = "INTR interrupt error" 26 = "ot1 over torque 1" 27 = "ot2 over torque 2" 28 = "uC under current" 29 = "LiT limit error" 30 = "cF1 EEPROM write error" 31 = "cF2 EEPROM read error" 33 = "cd1 U-phase error" 34 = "cd2 V-phase error" 35 = "cd3 W-phase error" 36 = "Hd0 current clamp hardware error" 37 = "Hd1 over-current hardware error" 38 = "Hd2 over-voltage hardware error" 39 = "Hd3 occ hardware error" 40 = "AUE auto-tuning error" 41 = "AFE PID loss ACI" 42 = "PGF1 PG feedback error" 43 = "PGF2 PG feedback loss" 44 = "PGF3 PG feedback stall" 45 = "PGF4 PG slip error" 48 = "ACE ACI loss" 49 = "EF external fault" 50 = "EF1 emergency stop" 51 = "bb external base block" 52 = "Pcod wrong password entered three times, locked" 53 = "ccod SW code error" 54 = "CE1 illegal command" 55 = "CE2 illegal data address" 56 = "CE3 illegal data value" 57 = "CE4 data written to read-only address" 58 = "CE10 Modbus transmission time-out" 60 = "bF brake transistor error" 61 = "ydc Y-connection / delta-connection switch error" 62 = "dEb deceleration energy backup error" 63 = "oSL over slip error" 64 = "ryF electric valve switch error" 65 = "PGF5 hardware error of PG card" 68 = "SdRv reverse direction of the speed feedback" 69 = "SdOr over speed rotation feedback" 70 = "SdDe large deviation of speed feedback" 71 = "WDTT watchdog" 72 = "STL1 STO loss 1" 73 = "S1 emergency stop for external safety" 75 = "Brk external brake error" 76 = "STO safe torque off" 77 = "STL2 STO loss 2" 78 = "STL3 STO loss 3" 82 = "OPHL output phase loss U phase" 83 = "OPHL output phase loss V phase" 84 = "OPHL output phase loss W phase" 85 = "AboF PG ABZ line off (PG-02U)" 86 = "UvoF PG UVW line off (PG-02U)" 87 = "oL3 overload protection at low frequency" 89 = "RoPd rotor position detection error" 90 = "FStp force to stop" 92 = "LEr pulse tuning Ld / Lq error" 93 = "TRAP CPU error 0" 101 = "CGdE CANopen guarding error" 102 = "CHbE CANopen heartbeat error" 104 = "CbFE CANopen bus off error" 105 = "CidE CANopen index error" 106 = "CAdE CANopen station address error" 107 = "CFrE CANopen memory error" 111 = "ictE InrCOM time-out error" 112 = "SfLK PM sensorless shaft lock error" 142 = "AUE1 auto-tune error 1 (no feedback current)" 143 = "AUE2 auto-tune error 2 (motor phase loss)" 144 = "AUE3 auto-tune error 3 (no-load current I0 measuring)" 148 = "AUE4 auto-tune error 4 (leakage inductance Lsigma measuring)" 171 = "oPEE over position error" 174 = "EcEr encoder error" 175 = "EcCe encoder communication error" 176 = "EcOF encoder multi-turn overflow" 177 = "EcNP encoder power off" 178 = "EcMc encoder multi-turn error" 179 = "PgMr PG multi-turn read error" 180 = "EcSc encoder single-turn error" 181 = "PgCe PG command error" 182 = "IPTE interpolation time error" 183 = "IPCM interpolation command failure" 184 = "NoMo no motion control" 185 = "MoTo motor code error" 187 = "FobF flux linkage observer failure" 188 = "TLAT load estimation error" 189 = "JsAT inertia estimation error" 190 = "BWAT bandwidth estimation error" 191 = "ATPF positioning failure during estimation" 192 = "HmOE homing deviation is too large" 193 = "CMTE cleaning multi-turn data failure" 195 = "ATTv ASR AT process is too short" 196 = "WCBo water cooling temperature detection error" # Pr.00-00 AC Motor Drive Identity Code (pp. 205, 263), read-only, an # enumeration of voltage class and kW. Values are Delta's identity numbers, # not a physical unit. [rating] register = 0x0000 words = 1 scale = 1.0 label = "AC Motor Drive Identity Code (Pr.00-00)" # Groups 01 (basic, up to 01-54 = 0x0136) and 02 (digital I/O, up to 02-75 = # 0x024B) in Delta's GGnn hex layout (p. 1065). # # The group 02 range is SPLIT around the read-only members. Pr.02-50-02-54 # (0x0232-0x0236, terminal-status monitors) and Pr.02-70 (0x0246, IO Card # Types) are marked "Read only" on p. 219. They read back fine, so a dump # captures them, and the restore then plans a write the drive NAKs — which # both fails an otherwise-perfect clone and is exactly what fault 57 (CE4, # "Data is written to read-only address") is for. # # Group 09 is DELIBERATELY EXCLUDED: it holds 09-00 node address, 09-01 baud, # 09-04 protocol and 09-30 decoding method. Cloning those onto a replacement # drive changes its address to the donor's — which either kills the link # mid-restore or puts two nodes at the same address on the plant's bus. [parameters] ranges = [[0x0100, 0x0136], [0x0200, 0x0231], [0x0237, 0x0245], [0x0247, 0x024B]]