# Property of PMA Electrical Solutions, LLC. # # Delta VFD-ED — elevator drive (VFD###ED21S / ED23S / ED43S, frames B…E). # Built-in RS-485; no option card involved. # # THIS IS A PASSENGER-ELEVATOR DRIVE. Group 02 carries the mechanical-brake # release and contracting delays and the torque check (02-37..02-39, printed # pp. 11-10..11-12), and group 01 carries the levelling and creep speeds. A clone # restored onto the wrong car is a dropped-load hazard, not a wrong reading. # Treat [parameters] below accordingly. # # NOT CLAIMED: any other Delta family. Taken from the VFD-ED manual alone, and # it differs from both the MS300 and the VFD-VE where carry-over would have # been silently wrong — the command/reference source parameters are 00-15 and # 00-14 (not 00-21 / 00-20), the fault records are Pr.06-16..06-21 (not # 06-17..06-22), the fault table runs to 95 with elevator-specific codes above # 63, the serial default is 19.2 kbps 8N2 RTU (not 9.6 kbps), and 01-00 tops # out at 299 Hz. # # SOURCES — Delta VFD-ED Series User Manual, # DELTA_IA-MDS_VFD-ED_UM_EN_20230614.pdf (downloadcenter.deltaww.com, doc # ID 4414), 447 PDF pages. Citations are PRINTED page numbers, with the PDF # page in parentheses. # 11-2 (p. 211) 00-00 identity code, marked Read Only # 11-5 (p. 214) 00-14 / 00-15 reference and command source # 11-6..11-12 (pp. 215-221) group 01 / 02 summary — the clone ranges, and # the read-only sweep that found only 01-37 # 11-7 (p. 216) 01-00 Maximum Output Frequency 5.00-299.00 Hz, # 01-37 Read only, 01-40 emergency decel time # 11-19..11-21 (pp. 228-230) Pr.06-16..06-21 fault record codes 0-95 # 11-30 (p. 239) 09-00..09-05 comm defaults # B-8..B-11 (pp. 439-442) Modbus address list (2000H / 21xxH / 22xxH) # # DRIVE-SIDE SETUP: 00-14 Master Frequency Command Source = 1 (RS-485 / keypad), # 00-15 Operation Command Source = 2 (RS-485 / keypad), 09-00 node address, # 09-01 baud. The manual states 2000H is "valid only when operation command # source is set to communication (Pr.00-15 = 2)" (p. B-8) — without it the # drive ACKs the write and ignores it. # # Delta documents these as hex addresses that are already 0-based. Parameter # Pr.GG-nn is register 0xGGnn — Pr.04-10 is 0x040A (p. B-8). name = "Delta VFD-ED" vendor = "Delta Electronics" device_type = "vfd" verified = false probe_register = 0x2119 [connection] summary = "The VFD-ED exposes the same built-in Modbus RTU channel at dedicated terminals and at its RJ45 service jack." warnings = [] [[connection.methods]] id = "control_terminals_rs485" title = "Built-in RS-485 terminals" transport = "serial" hardware = "built_in" port = "Control terminals SG1+ and SG1-" 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-14=1, 00-15=2, 09-00=node, and 09-01=baud."] 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.", "Use the SG1+ termination switch only when this drive is at a physical end of the RS-485 trunk."] source = "Delta VFD-ED User Manual, PDF pp. 49-50 (terminals, 120 ohm switch, RJ45 pinout) and profile-cited p. B-8 (setup)" [[connection.methods.wiring]] adapter = "Adapter D+ / +" device = "SG1+" signal = "RS-485 data positive" required = true [[connection.methods.wiring]] adapter = "Adapter D- / -" device = "SG1-" signal = "RS-485 data negative" required = true [[connection.methods]] id = "rj45_rs485" title = "Built-in RS-485 RJ45 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-14=1, 00-15=2, 09-00=node, and 09-01=baud."] 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.", "RJ45 pin 8 carries EV/accessory power; do not connect it to the adapter."] source = "Delta VFD-ED User Manual, PDF pp. 49-50" [[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 (SGND)" signal = "Signal reference or shield drain" required = false # 09-01 default 19.2 kbps and 09-04 default 13 = 8N2 RTU (p. 11-30). Unlike the # VFD-VE, a factory-default VFD-ED already speaks Modbus RTU — but at TWO stop # bits, not one. [serial] baudrate = 19200 parity = "N" stopbits = 2 [monitor] # p. B-9. Bits 1-0 are a 2-bit run state (00 fully stopped, 01 stopping, # 10 standby, 11 running) and bits 4-3 a 2-bit direction field (00 FWD, 01 REV # to FWD, 10 FWD to REV, 11 REV), so neither decodes as an independent flag. # Read this register as hex. drive_status = { address = 0x2119, bits = { 2 = "Jog", 8 = "FreqFromComm", 9 = "FreqFromAnalog", 10 = "CmdFromComm", 11 = "ParametersLocked", 12 = "KeypadCopyEnabled" } } frequency_command = { address = 0x2102, scale = 0.01, unit = "Hz" } output_frequency = { address = 0x2103, scale = 0.01, unit = "Hz" } # "XX.XX A. Decimal places can be referred by the high byte of 211F" (p. B-10) # — CONFIG-DEPENDENT. 0.01 A is the documented default form. output_current = { address = 0x2104, scale = 0.01, unit = "A" } dc_bus_voltage = { address = 0x2105, scale = 0.1, unit = "V" } # XXX.X V output_voltage = { address = 0x2106, scale = 0.1, unit = "V" } # XXX.X V # 0x2107 is the multi-step-speed STEP NUMBER (0 = main speed), not a speed. multistep_step = { address = 0x2107 } max_operation_frequency = { address = 0x2201, scale = 0.01, unit = "Hz" } # Pr.01-00 aui1_analog_input = { address = 0x2203, signed = true, scale = 0.01, unit = "%" } aui2_analog_input = { address = 0x2204, signed = true, scale = 0.01, unit = "%" } igbt_temperature = { address = 0x2206, scale = 0.1, unit = "degC" } # XXX.X degC heatsink_temperature = { address = 0x2207, unit = "degC" } # 40 HP and above digital_input_status = { address = 0x2208 } digital_output_status = { address = 0x2209 } [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 — # on an elevator, a car move. Reset is bit 1 of 0x2002 (p. B-9). reset_register = 0x2002 speed_register = 0x2001 speed_scale = 0.01 speed_unit = "Hz" max_ref = 299.0 # 01-00 range is 5.00-299.00 Hz (p. 11-7) step_delay = 0.05 stop = [0x0001] # bits 1-0 = 01B Stop run_fwd = [0x0012] # bits 5-4 = 01B FWD, bits 1-0 = 10B Run run_rev = [0x0022] # bits 5-4 = 10B REV, bits 1-0 = 10B Run reset = [0x0002] # bit 1 of 0x2002 # The keepalive proves the link is alive. The DRIVE only reacts to silence if # 09-03 Time-out Detection is non-zero; the factory values are 09-03 = 0.0 # (disabled) and 09-02 = 3 "No action and no display" (p. 11-30), i.e. a # factory-default VFD-ED keeps running after the master goes quiet. [control.watchdog] interval_ms = 300 fault = "cE10 Modbus transmission time-out (only if 09-03 != 0.0 and 09-02 = 0-1; the factory default is 09-03 = 0.0 / 09-02 = 3, monitoring disabled)" # bits 1-0 are a STATE FIELD, not a flag, and running_check can only test one # bit — so whichever bit is chosen, one of the four states is read wrong: # 00B fully stopped bit0=0 bit1=0 # 01B stopping bit0=1 bit1=0 motor still turning # 10B standby bit0=0 bit1=1 run command held, output at zero # 11B running bit0=1 bit1=1 # bit 0 is chosen because its blind spot (standby) is the short one — 10B lasts # only the brake-release delay 02-38, default 0.200 s — while bit 1's blind # spot is the whole deceleration ramp, seconds of a car still in flight # reported as Stopped. The restore gate only lets RunState::Stopped through, so # the blind spot is a fail-OPEN either way. # # OPEN FOR THE BENCH: neither bit is correct. The state field needs a # mask/value test ("bits 1-0 != 00B"), which RunningCheck does not have. Until # it does, do not trust Stopped on this drive during the 10B window. [running_check] register = 0x2119 bit = 0 # p. B-9 # p. B-9: "bit7-0: Fault code, bit15-8: Warning code". Without the mask an # active warning corrupts the fault lookup. [faults] register = 0x2100 mask = 0x00FF history = [0x0611, 0x0612, 0x0613, 0x0614, 0x0615] # Pr.06-17..06-21 # Pr.06-16..06-21 settings, pp. 11-19..11-21. Transcribed complete; the codes # the manual marks "Reserved" are omitted rather than filled from a sibling # family. No code is carried from the MS300 or VFD-VE. [faults.codes] 0 = "No fault" 1 = "ocA over-current during acceleration" 2 = "ocd over-current during deceleration" 3 = "ocn over-current during constant speed" 4 = "GFF ground fault" 5 = "occ IGBT short-circuit" 6 = "ocS over-current at stop" 7 = "ovA over-voltage during acceleration" 8 = "ovd over-voltage during deceleration" 9 = "ovn over-voltage during constant speed" 10 = "ovS over-voltage at stop" 11 = "LvA low voltage during acceleration" 12 = "Lvd low voltage during deceleration" 13 = "Lvn low voltage during constant speed" 14 = "LvS low voltage at stop" 15 = "PHL input phase loss" 16 = "oH1 IGBT overheat" 17 = "oH2 bulk capacitors overheat" 18 = "tH1o abnormal IGBT temperature detected" 19 = "tH2o abnormal bulk capacitor temperature detected" 20 = "FAn unusual cooling fan operation" 21 = "oL overload (150%, 1 minute)" 22 = "EoL1 motor overloaded" 24 = "oH3 motor PTC overheat" 26 = "ot1 over-torque 1" 27 = "ot2 over-torque 2" 30 = "cF1 memory writing error" 31 = "cF2 memory reading error" 32 = "cd0 Isum current detection error" 33 = "cd1 U-phase current detection error" 34 = "cd2 V-phase current detection error" 35 = "cd3 W-phase current detection error" 36 = "Hd0 CC current clamp hardware error" 37 = "Hd1 over-current hardware error" 38 = "Hd2 over-voltage hardware error" 39 = "Hd3 ground fault hardware error" 40 = "AUE auto-tuning error on motor parameter" 42 = "PGF1 PG feedback error" 43 = "PGF2 PG feedback loss" 44 = "PGF3 PG feedback stall" 45 = "PGF4 PG slip error" 49 = "EF external fault input" 50 = "EF1 emergency stop from external terminals" 52 = "Pcod password error after three attempts" 54 = "cE01 illegal communication command" 55 = "cE02 illegal communication address" 56 = "cE03 communication data length error" 57 = "cE04 communication write to a read-only address" 58 = "cE10 Modbus transmission time-out" 59 = "cP10 keypad transmission time-out" 60 = "BF brake transistor error" 64 = "MBF mechanical brake feedback error" 65 = "PG5 PG hardware error" 66 = "MCF magnetic contactor error" 67 = "MPHL output phase loss" 68 = "CANF CAN bus disconnected" 72 = "STL1 safe torque loss" 73 = "PGcd PG cd hardware error" 74 = "PGHL PG absolute signal error" 75 = "PGAF PG Z phase signal loss" 76 = "STO safe torque output stops" 77 = "STL2 safe torque loss 2" 78 = "STL3 safe torque loss 3" 82 = "OPHL U-phase output phase loss" 83 = "OPHL V-phase output phase loss" 84 = "OPHL W-phase output phase loss" 86 = "LSS levelling switch short-circuited" 87 = "LSo levelling switch open-circuited" 94 = "btt BTTx fail" 95 = "bttE BTTx error" # Frame-size guard. Pr.00-00 is the drive identity code, marked "Read Only" # (p. 11-2); it encodes voltage class and kW, so a restore onto a different # frame is refused rather than written. Without this the rating check is # Unverifiable on every clone — on a lift, the difference between a config that # belongs to this car and one that belongs to a different machine room. [rating] register = 0x0000 words = 1 scale = 1.0 label = "AC motor drive identity code (Pr.00-00)" # Groups 01 (basic, 01-00..01-40) and 02 (digital I/O, 02-00..02-43) in Delta's # 0x01gg-nn layout. Group 09 is DELIBERATELY EXCLUDED: it holds 09-00 node # address, 09-01 baud and 09-04 protocol. 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. # # THE GAP AT 0x0125 IS DELIBERATE. Pr.01-37 Direct Docking Terminal # Deceleration Distance is marked "Read only" (p. 11-7). A read-only register # inside a clone range is written by plan_restore whenever donor and target # differ, NAKs, and lands in RestoreResult::failed — so an otherwise perfect # clone reports failure, and the noise hides a real one. Every other member of # groups 01 and 02 was swept on pp. 11-6..11-12; 01-37 is the only one. # # READ THE WARNING AT THE TOP OF THIS FILE before restoring group 02 onto an # elevator: 02-37..02-39 are the brake torque check and the brake release / # contracting delays. 01-39/01-40 are the emergency-deceleration level and its # time — they are kept as a PAIR on purpose, because restoring the level onto a # drive still holding the 2.00 s default time is a mismatch nobody would see. [parameters] ranges = [[0x0100, 0x0124], [0x0126, 0x0128], [0x0200, 0x022B]]