# Property of PMA Electrical Solutions, LLC. # # Delta C2000 (Vector Control Drive), embedded RS-485 (COM1). # # ############################################################################ # READ FIRST — THIS PROFILE DOES NOT COMMAND A FACTORY-DEFAULT C2000. # Pr.09-30 Communication Decoding Method defaults to 1 = Decoding Method 2, # and p. 633 tabulates the RS-485 "Source of Operation Control" as 6000h-60FFh # under method 2 and 2000h-20FFh only under method 1. Until 09-30 is set to 0 # the 0x2000 control word below is NOT the operation source: the drive ACKs # every write to it and does nothing. Set 09-30 = 0 on the drive BEFORE arming. # (The C2000 Plus and C2000-R do not share this trap — their own manuals say # 2000h-20FFh applies regardless of decoding method. The plain C2000 does.) # ############################################################################ # # COVERAGE — the C2000 series only (VFD***C23A/E, C43A/E, C63B and the # 575V/690V models the manual lists). NOT the C2000 Plus, C2000-HS, C2000-R, # CP2000, CH2000, CT2000, C200, MS300 or VFD-M. The C2000 Plus in particular # has its OWN profile and is NOT a relabelled C2000: on this drive the RS-485 # operation source follows Pr.09-30 (20xx vs 60xx), whereas the C2000 Plus # manual states the RS-485 reference is 2000h-20FFh regardless of 09-30. The # two fault tables also differ (the Plus adds 25, 164, 165 and 174-195). # # SOURCE — Delta C2000 Series User Manual, document DELTA_IA-MDS_VFD-C2000_ # UM_EN_20210415, downloadcenter.deltaww.com (1173 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. 370 Pr.00-00 AC Motor Drive Identity Code (read-only) # p. 374 Pr.00-20 Master frequency command source (1 = RS-485) # p. 375 Pr.00-21 Operation command source (2 = RS-485) # p. 378 Pr.01-00 Maximum operation frequency 0.00-599.00 Hz # pp. 378-387 extent of groups 01 (to 01-51) and 02 (to 02-75), including # the read-only members 02-50-02-54 and 02-70 # pp. 566-573 Pr.06-17 fault record code list (transcribed below) # pp. 411-412 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. 411; # 09-30 (default 1) on p. 412 # pp. 619-625 ASCII/RTU frame format, function codes 03/06/10, addressing # pp. 626-631 address list: 20xx control, 21xx/22xx status monitor # p. 633 Pr.09-30 Communication Decoding Method table # # DRIVE-SIDE SETUP — three parameters, all of which default WRONG for this # profile: # 09-30 = 0 (Decoding Method 1, 20xx). THE FACTORY DEFAULT IS 1 (Decoding # Method 2, 60xx). p. 633 tabulates the RS-485 source of operation # control as 2000h-20FFh under method 1 and 6000h-60FFh under method # 2, so on an out-of-the-box C2000 the control words below are # simply not the operation source. The 21xx/22xx monitors are read- # only and are not switched by this parameter. # 09-04 = 12 (8,N,1 RTU). THE FACTORY DEFAULT IS 1, which is 7,N,2 ASCII — # an untouched drive will not answer an RTU master at all (p. 411). # The upside of that: a drive that answers RTU at all has already had # 09-04 changed by hand, so 09-30 is worth checking in the same visit. # 00-20 = 1 (RS-485 frequency source) and 00-21 = 2 (RS-485 operation # source); both default to 0 (digital keypad). # Then 09-00 node address and 09-01 baud. # # Delta documents these as hex Modbus addresses that go on the wire as-is # (p. 623: "01H (address) 03H (function) 21H 02H (starting data register)") — # they are already 0-based protocol addresses. name = "Delta C2000" 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, 09-04=12 for RTU 8N1, and 09-30=0."] 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 Series User Manual DELTA_IA-MDS_VFD-C2000_UM_EN_20210415, PDF p. 107 (SG+/SG- and RJ45 pinout), pp. 411-412 and 633 (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, 09-04=12 for RTU 8N1, and 09-30=0."] 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 Series User Manual DELTA_IA-MDS_VFD-C2000_UM_EN_20210415, PDF p. 107 (SG+/SG- and RJ45 pinout), pp. 411-412 and 633 (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 stop, 01 decelerating, 10 standby, # 11 running) and bits 4-3 a 2-bit direction-transition field (00 FWD, # 01 REV->FWD, 10 FWD->REV, 11 REV), so neither decodes as an independent # flag. Only the genuinely independent bits are named here. drive_status = { address = 0x2101, bits = { 2 = "Jog", 8 = "FreqFromComm", 9 = "FreqFromAnalog", 10 = "CmdFromComm", 11 = "ParamLocked", 12 = "KeypadCopyEnabled" } } frequency_command = { address = 0x2102, scale = 0.01, unit = "Hz" } output_frequency = { address = 0x2103, scale = 0.01, unit = "Hz" } # p. 628: "Output current (XX.XX A). When current is higher than 655.35, it # shifts the decimal as (XXX.X A). The decimal can refer to High byte of # 211F." So this scale is FRAME-DEPENDENT: on a large frame it is 0.1 A. # Read 0x211F bits 9-8 (decimal places) before trusting the value. 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. multistep_step = { address = 0x2107 } # 0x210A is the power factor ANGLE in 0.1 degrees, 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" } igbt_temperature = { address = 0x220E, scale = 0.1, unit = "degC" } capacitor_temperature = { address = 0x220F, scale = 0.1, unit = "degC" } # 0x2226 (p. 630) is a second, cleaner status word: bits 1-0 direction, bits # 3-2 ready/error, bit 4 output active, bit 5 alarm. Only bits 4 and 5 are # independent flags; the two 2-bit fields are not. drive_status_2 = { address = 0x2226, bits = { 4 = "Output", 5 = "Alarm" } } kwh = { address = 0x2229, scale = 0.1, unit = "kWh" } [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. 378 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 COM1 transmission fault treatment 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 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. 630) — 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. 627 states 0x2100 explicitly: "High byte: Warn Code / Low Byte: Error # Code". Without the mask an active warning corrupts the fault lookup. [faults] register = 0x2100 mask = 0x00FF # Pr.06-17 code list, pp. 566-573, 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" 17 = "oH2 heatsink 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)" 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 (230V / 460V models)" 72 = "STL1 STO loss 1" 73 = "S1 emergency stop for external safety" 75 = "Brk external brake error (230V / 460V models)" 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 forced to stop" 92 = "LEr pulse tuning Ld / Lq error" 93 = "TRAP CPU error 0 (230V / 460V models)" 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" # Pr.00-00 AC Motor Drive Identity Code (p. 370), read-only, an enumeration of # voltage class and kW — a real frame identity rather than a nameplate guess. # 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-51 = 0x0133) and 02 (digital I/O, up to 02-75 = # 0x024B) in Delta's GGnn hex layout (p. 626: "the address of Pr.04-10 is # 040AH"). # # 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 pp. 386-387. 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. The manual gives the same # warning itself on p. 632: "If the data is written to read-only parameters # from the upper unit, a communication error may occur." # # 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 — and # 09-30 would switch the control map out from under the master. [parameters] ranges = [[0x0100, 0x0133], [0x0200, 0x0231], [0x0237, 0x0245], [0x0247, 0x024B]]