# Property of PMA Electrical Solutions, LLC. # # Delta VFD-L (compact and panel-installation drives), discontinued but still # common in the installed base. Embedded RS-485 on the RJ-11 jack of the # control terminal block (pin 3 = SG-, pin 4 = SG+). # # COVERAGE — the 0.2 kW to 1.5 kW VFD-L, the models named in this manual's # CE declaration (p. D-2): VFD002L11A/B, VFD002L21A/B, VFD004L11A/B, # VFD004L21A/B, VFD007L21A/B, VFD015L23A. Delta's download centre calls this # file VFD-L2. # NOT CLAIMED: the 25 W-100 W VFD-L ("VFD-L1", Delta doc 5011604303, # DELTA_IA-MDS_VFD-L1_UM_EN_20030522). That unit is a different device on the # wire and CANNOT USE THIS PROFILE: its manual (p. 6) fixes the link at # "Modbus ASCII mode, protocol <7,N,2>, Baud rate 9600" with no RTU option at # all, the node address comes from DIP switches 1-6 (1-63) rather than a # parameter, RS-485 control only takes effect with DIP switch 7 ON, its # parameter space is a flat list of ten entries, on 2000H bits 1-0 the value # 11B is "No function" rather than Jog+Run, 2105H DC bus is whole volts and # 2104H current is 0.01 A, and its 2100H fault table is a third numbering # again (05/06, 08-13 and 17-19 reserved; 21-31 hardware failures). Also not # the VFD-L1 Plus or the VFD-L-I, which ship their own manuals; and not # the VFD-M or VFD-B: their fault tables differ from this one code-for-code # (this manual's 2100H list has no code 4 at all, 5 = oL1, 7 = cF3; the VFD-M # has 4 = oL, 5 = oL1, 7 = cF1). That carry-over is what corrupted an earlier # Delta profile — see profiles/delta_ms300.toml. # # SOURCES — Delta VFD-L User Manual, English, download-center file # DELTA_IA-MDS_VFD-L2_UM_EN_20020531.pdf. Citations are PRINTED pages; # printed = PDF page - 18. # pp. 5-1 to 5-3 0-00 Identity Code, 0-01 Rated Current Display, # 0-02 Parameter Reset, 0-07/0-08 passwords # p. 5-4 1-00 Maximum Output Frequency, 50.0-400 Hz # p. 5-10 2-00 frequency command source, 2-01 operation command # source # pp. 5-27 to 5-31 group 5 extent (5-00 to 5-08) # p. 5-34 6-07 to 6-12 fault records # pp. 5-40 to 5-41 9-00 address, 9-01 baud, 9-02 fault treatment, # 9-03 Modbus watchdog timer, 9-04 protocol # pp. 5-44 to 5-47 06H write example: 6000 (1770H) written to 0100H # (1-00, factory default 60.0 Hz) — the frequency # parameters are 0.01 Hz per count, not the 0.1 Hz the # parameter tables print as "Unit" # pp. 5-48 to 5-49 the 3.5 Address list: 2000H-2002H command, # 2100H-210AH status monitor # pp. 5-50 to 5-51 exception codes, including 10 = watchdog timer (CE10) # # DRIVE-SIDE SETUP: 2-00 = d4 (frequency from RS-485), 2-01 = d3 or d4 # (operation command from RS-485), 9-00 node address (d1 to d247), 9-01 baud # (4800/9600/19200 only — the VFD-L has no 38400 setting), and 9-04 = d6/d7/d8 # for Modbus RTU. THE FACTORY DEFAULT 9-04 = d0 IS MODBUS *ASCII* 7,N,2 — an # out-of-the-box VFD-L will not answer an RTU master at all. [serial] below is # the 9-04 = d6 (8,N,2 RTU) setting. # # Delta documents these as hex addresses that are already 0-based. # Parameters live at ggnnH: group then index, so Pr.4-01 = 0401H (p. 5-48). name = "Delta VFD-L" vendor = "Delta Electronics" device_type = "vfd" verified = false probe_register = 0x2101 [connection] summary = "This drive has one built-in two-wire Modbus RTU path; no option card is required." warnings = [] [[connection.methods]] id = "built_in_rs485" title = "Built-in RS-485 on RJ11" transport = "serial" hardware = "built_in" port = "Communications RJ11 beside the control terminals" connector = "RJ11 modular jack (RS-485, not Ethernet/telephone)" 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 2-00=d4, 2-01=d3 or d4, 9-00=node, 9-01=9600, 9-04=d6/d7/d8 for RTU, and set hardware DIP switch 7 ON."] 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.", "Pin 1 is accessory power. Confirm DIP switch 7 is ON before concluding that the wiring is faulty."] source = "Delta VFD-L User Manual, PDF p. 59 (RJ11 pinout) and profile-cited pp. 47-50 (setup)" [[connection.methods.wiring]] adapter = "Adapter D+ / +" device = "RJ11 pin 4 (SG+)" signal = "RS-485 data positive" required = true [[connection.methods.wiring]] adapter = "Adapter D- / -" device = "RJ11 pin 3 (SG-)" signal = "RS-485 data negative" required = true [[connection.methods.wiring]] adapter = "Adapter signal ground / shield" device = "RJ11 pin 2 (GND)" signal = "Signal reference or shield drain" required = false # 9-01 default d1 = 9600 bps (p. 5-40). Parity/stop bits here are the RTU # selection 9-04 = d6 <8,N,2>; the drive ships in ASCII mode. [serial] baudrate = 9600 parity = "N" stopbits = 2 [monitor] # p. 5-49. Bits 0-1 are a 2-bit RUN/STOP LED state and bits 3-4 a 2-bit # FWD/REV LED state, so neither decodes as an independent flag — read this # register as hex. Bits 12-15 are "Not Used" on the VFD-L: it has NO bit-12 # run flag, unlike the VFD-M and VFD-B. drive_status = { address = 0x2101, bits = { 2 = "Jog", 8 = "FreqFromComm", 9 = "FreqFromTerminal", 10 = "CmdFromComm", 11 = "ParamsLocked" } } frequency_command = { address = 0x2102, scale = 0.01, unit = "Hz" } output_frequency = { address = 0x2103, scale = 0.01, unit = "Hz" } # TWO decimals on the VFD-L (manual prints "A (XXX.XX)"), where the VFD-M and # VFD-B print one. Reading this at 0.1 overstates the current tenfold. output_current = { address = 0x2104, scale = 0.01, unit = "A" } # Also two decimals per the manual ("U (XXX.XX)"). The VFD-L is a 115 V/230 V # drive, so a DC bus under 655.35 V fits an unsigned 0.01 V count — but the # resolution differs from every sibling, so confirm it on a bench. dc_bus_voltage = { address = 0x2105, scale = 0.01, unit = "V" } output_voltage = { address = 0x2106, scale = 0.01, unit = "V" } # 0x2107 is the multi-step STEP NUMBER, not a speed. multistep_step = { address = 0x2107 } plc_step = { address = 0x2108 } plc_run_time = { address = 0x2109, unit = "s" } counter_value = { address = 0x210A } # The VFD-L exposes no motor speed, output power, power factor or heatsink # temperature register — the address list ends at 210AH. [control] command_register = 0x2000 # p. 5-48: on 2000H bits 1-0, 10B is RUN. Writing the reset value 0x0002 to # the command register would therefore command an unexpected start. Reset is # bit 1 of the SEPARATE 2002H register. reset_register = 0x2002 speed_register = 0x2001 speed_scale = 0.01 speed_unit = "Hz" max_ref = 400.0 step_delay = 0.05 stop = [0x0001] # bits 1-0 = 01B Stop 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 # The VFD-L is the only one of the three legacy families with a real Modbus # watchdog: 9-03 (d1 to d20 = 1 to 20 s) stops the drive's output and displays # CE10 when the timer expires, p. 5-41. It still DEFAULTS to d0 = disabled, so # the keepalive is not a confirmed stop backstop until 9-03 is set at # commissioning. 9-02 Transmission Fault Treatment also defaults to d0 # "Warn and keep operating". [control.watchdog] interval_ms = 300 fault = "CE10 Modbus watchdog timer (9-03; disabled by default)" backstop_requires_setup = true # p. 5-49. Bits 12-15 are "Not Used" on the VFD-L, so unlike the VFD-M and # VFD-B there is NO dedicated run flag, and this has to come out of the 2-bit # RUN/STOP LED field in bits 0-1. Its four states are: # # 00B RUN LED off, STOP LED on 11B RUN LED on, STOP LED off # 01B RUN LED blink, STOP LED on 10B RUN LED on, STOP LED blink # # NO SINGLE BIT IS AN ADEQUATE RUNNING-CHECK HERE, and the schema only takes # one bit. Both choices are blind to one non-stopped state: # # bit 0 -> Running for 01B and 11B; reports STOPPED for 10B # bit 1 -> Running for 10B and 11B; reports STOPPED for 01B # # bit 1 is chosen because 10B is the state THIS APP puts the drive in: the # control sequence writes the command word to 2000H and the reference to 2001H # as two separate writes, so a run command held against a zero reference sits # in 10B indefinitely. A running-check blind to 10B reports "stopped" for a # drive this app has already armed to start, and that answer feeds the restore # precondition. 01B by contrast is entered only after a stop command and # clears itself within the decel time. # # RESIDUAL, NAMED: bit 1 reads STOPPED during 01B. If 01B is deceleration then # the shaft is still turning while this says stopped. Do not lean on this check # as a proof of standstill. # # The VFD-L manual never says what a blinking LED means. Delta's VFD-E manual # (p. 4-146 of delta_vfd_e_um.pdf) prints a byte-identical table and does gloss # it — 01B "decelerates to stop", 10B "standby" — which is where the reasoning # above comes from. THAT IS A DIFFERENT FAMILY and is not claimed as VFD-L # behaviour. BENCH: confirm on a real VFD-L what 01B and 10B are, and whether # 10B is reachable, before this profile is marked verified. [running_check] register = 0x2101 bit = 1 # p. 5-48. Unlike the MS300 there is NO warning code in the high byte here — # 2100H is documented as a plain error code, so no mask is applied. # History is 6-08 through 6-12 (Second to Sixth Most Recent Fault Record, # p. 5-34); 6-07 holds the present record and duplicates 2100H. [faults] register = 0x2100 history = [0x0608, 0x0609, 0x060A, 0x060B, 0x060C] # Transcribed complete from the 2100H table, pp. 5-48 to 5-49. Codes 4, 12 and # 13 are genuinely absent: the manual skips 4 entirely and prints 12 and 13 as # "Reserved". They are left out rather than filled in from a sibling family. [faults.codes] 0 = "No errors occurred" 1 = "oc over-current" 2 = "ov over-voltage" 3 = "oH overheat" 5 = "oL1 overload 1" 6 = "EF external fault" 7 = "cF3 CPU failure" 8 = "HPF hardware protection failure" 9 = "ocA over-current during accel" 10 = "ocd over-current during decel" 11 = "ocn over-current at constant speed" 14 = "Lv low voltage" 15 = "cF1 CPU failure 1" 16 = "cF2 CPU failure 2" 17 = "bb base block" 18 = "oL2 overload 2" 19 = "cFA auto accel/decel failure" 20 = "codE software protection enable" # p. 5-3. 0-00 Identity Code of AC Motor Drive is read-only and is the drive's # frame identity. 0-01 Rated Current Display is the alternative and could # replace this after a bench read. [rating] register = 0x0000 words = 1 scale = 1.0 label = "Identity code (0-00)" # ggnnH parameter space, groups 1-8 at the extents in the parameter chapter. # Deliberately excluded: # group 0 identity code and rated current (read-only), 0-02 Parameter # Reset, 0-06 software version, 0-07/0-08 passwords # 6-07 to 6-12 (0x0607-0x060C) read-only fault records # group 9 node address, baud and protocol. Cloning those onto a # replacement drive moves it to the donor's address, which # either kills the link mid-restore or puts two nodes at one # address on the plant's bus. [parameters] ranges = [ [0x0100, 0x0112], [0x0200, 0x0206], [0x0300, 0x0303], [0x0400, 0x0406], [0x0500, 0x0508], [0x0600, 0x0606], [0x0700, 0x0703], [0x0800, 0x0811], ]