# Property of PMA Electrical Solutions, LLC. # # Delta VFD-M (VFD-M SVC Micro Drives), discontinued but very common in the # installed base. Embedded RS-485 on the RJ-11 jack of the control terminal # block (pin 3 = SG-, pin 4 = SG+; pin 1 is +15V for the keypad — do not use). # # COVERAGE — the VFD-M family only. NOT CLAIMED: VFD-M-D (elevator door), # VFD-M-Z (treadmill) or VFD-M-I, which ship their own firmware and their own # manuals; and not the VFD-L or VFD-B, whose fault tables differ from this one # code-for-code (VFD-B numbers 02 = ov and 07 = occ where VFD-M has no 02 in # the 2100H table and 07 = cF1). This is exactly the cross-family carry-over # that corrupted an earlier Delta profile — see profiles/delta_ms300.toml. # # SOURCES — Delta VFD-M User Manual, English, download-center file # DELTA_IA-MDS_VFD-M_UM_EN_20150831.pdf (footer revision "Aug. 2015, ME16, # SW V3.13"; Delta document code 5011201815-ME15). Citations are PRINTED # pages; printed page = PDF page - 35. # pp. 4-6, 4-48 Pr.57 AC Drive Rated Current Display — READ ONLY # pp. 4-12 to 4-13 Pr.144/Pr.145 Total operation time — READ ONLY; # Pr.154 Reserved, Pr.155-157 exist (156/157 are comm # parameters). All excluded from [parameters] below. # pp. 4-20 to 4-21 Pr.00 frequency source, Pr.01 operation source, # Pr.03 Maximum Output Frequency (50.00-400.0 Hz) # pp. 4-52 to 4-53 Pr.73-75 fault records and their code table # p. 4-53 Pr.76 Parameter Lock and Configuration (09/10 = factory # reset — excluded from [parameters] below) # p. 4-58 Pr.80 Identity Code table (kW / voltage class / current) # pp. 4-58 to 4-59 Pr.88 address, Pr.89 baud, Pr.90 fault treatment, # Pr.91 time-out detection, Pr.92 protocol # pp. 4-65 Pr.17 = 50.00 written as 1388H — proves frequency # parameters are 0.01 Hz per count, not the 0.1 Hz the # parameter tables print as "Unit" # pp. 4-68 to 4-70 the 3.6 Address list: 2000H-2002H command, 2100H-2110H # status monitor # # DRIVE-SIDE SETUP: Pr.00 = 03 (master frequency from RS-485), Pr.01 = 03 or # 04 (operation command from RS-485), Pr.88 node address, Pr.89 baud, # and Pr.92 = 03/04/05 for Modbus RTU. THE FACTORY DEFAULT Pr.92 = 00 IS # MODBUS *ASCII* 7,N,2 — an out-of-the-box VFD-M will not answer an RTU # master at all. [serial] below is the Pr.92 = 03 (8,N,2 RTU) setting. # # Delta documents these as hex addresses that are already 0-based. # Parameters live at 00nnH: nn is the parameter number, so Pr.100 = 0064H # (p. 4-68). VFD-M is flat-numbered Pr.00-Pr.153; it has no parameter groups. name = "Delta VFD-M" 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 Pr.00=03, Pr.01=03 or 04, Pr.88=node, Pr.89=baud, and Pr.92=03 for RTU 8N2."] 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.", "RJ11 pin 1 carries +15 V for the keypad. Do not connect it to the adapter."] source = "Delta VFD-M User Manual, PDF p. 95 (pinout) and profile-cited communication setup pages" [[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 # Pr.89 default 01 = 9600 bps (p. 4-59). Parity/stop bits here are the RTU # selection Pr.92 = 03 <8,N,2>; the drive ships in ASCII mode. [serial] baudrate = 9600 parity = "N" stopbits = 2 [monitor] # p. 4-69. 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. Only the genuinely single-bit fields are named. drive_status = { address = 0x2101, bits = { 2 = "Jog", 8 = "FreqFromComm", 9 = "FreqFromTerminal", 10 = "CmdFromComm", 11 = "ParamsLocked", 12 = "Running", 13 = "JogCommand" } } frequency_command = { address = 0x2102, scale = 0.01, unit = "Hz" } output_frequency = { address = 0x2103, scale = 0.01, unit = "Hz" } # ONE decimal on the VFD-M (manual prints "A (XXX.X)"), not the two decimals # the MS300 uses. Reading this at 0.01 understates the current tenfold. output_current = { address = 0x2104, scale = 0.1, unit = "A" } dc_bus_voltage = { address = 0x2105, scale = 0.1, unit = "V" } output_voltage = { address = 0x2106, scale = 0.1, unit = "V" } # 0x2107 is the multi-step STEP NUMBER, not a speed. multistep_step = { address = 0x2107 } plc_run_time = { address = 0x2108, unit = "s" } external_trigger_count = { address = 0x2109 } # The manual calls this "The Correspondent Value of Power Factor (XXX.X)" and # does not say whether it is cos-phi or the angle. The VFD-B manual labels the # same address "Power factor angle". Treat the unit as unconfirmed. power_factor_value = { address = 0x210A, scale = 0.1 } drive_temperature = { address = 0x210D, scale = 0.1, unit = "C" } pid_feedback = { address = 0x210E, scale = 0.01, unit = "%" } pid_target = { address = 0x210F, scale = 0.01, unit = "%" } # 0x210B/0x210C are the low/high words of Pr.65 x output frequency (a # user-defined display scaling), not motor speed. The VFD-M exposes no rpm # register. 0x2110 is "AC Drive Mode Type Information" with no decode table. [control] command_register = 0x2000 # p. 4-68: 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 keepalive proves the LINK is alive. It is NOT a stop backstop on a # factory-default VFD-M: Pr.90 Transmission Fault Treatment defaults to 03 # "Keep Operation without Warning" and Pr.91 Time Out Detection defaults to # 0.0 (disabled) and is documented as applying to ASCII mode (p. 4-59). Set # Pr.90 = 01 or 02 and Pr.91 non-zero at commissioning if a comm-loss stop is # required. [control.watchdog] interval_ms = 300 fault = "Pr.90 transmission fault treatment (default 03 = keep operating, no warning)" backstop_requires_setup = true # p. 4-69, 2101H bit 12: "0: Stop 1: Run". [running_check] register = 0x2101 bit = 12 # p. 4-69. 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 Pr.74/Pr.75 (Second/Third Most Recent Fault Record, p. 4-52); # Pr.73 holds the present record and duplicates 2100H. [faults] register = 0x2100 history = [0x004A, 0x004B] # Transcribed from the 2100H table on p. 4-69. Codes 02 and 15 are taken from # the Pr.73-75 fault-record table on pp. 4-52 to 4-53 in the SAME manual. The # two tables agree on every other code, and they are not equally strong # imports: # 02 — the 2100H list has NO line for 02 at all; it jumps 01 -> 03. That is # an omission, and Pr.73 fills it with ov, which is also what 2100H # carries on the VFD-B and the VFD-L. Treat as sound. # 15 — a real CONTRADICTION, not a gap: 2100H prints "15: Reserved" while # Pr.73 prints "3 Phase Input Power Loss". This profile reads 2100H, so # if the register ever returns 15 for something else, the operator is # shown the wrong fault name. BENCH: confirm what a VFD-M actually # reports at 2100H = 15 before this profile is marked verified. [faults.codes] 0 = "No fault" 1 = "oc over-current" 2 = "ov over-voltage" # from Pr.73 table, absent from the 2100H list 3 = "oH overheat" 4 = "oL drive overload" 5 = "oL1 motor overload 1" 6 = "EF external fault" 7 = "cF1 CPU failure" 8 = "cF3 CPU or analog circuit failure" 9 = "HPF hardware protection failure" 10 = "ocA over-current during accel" 11 = "ocd over-current during decel" 12 = "ocn over-current at constant speed" 13 = "GF ground fault" 14 = "Lv low voltage" 15 = "3-phase input power loss" # from Pr.73 table; 2100H prints "Reserved" 16 = "cF2 CPU failure 2" 17 = "bb base block" 18 = "oL2 overload 2" 19 = "cFA auto accel/decel failure" 20 = "codE software protection" # p. 4-58. Pr.80 Identity Code is read-only and unique per capacity AND # voltage class (e.g. 04 = 230V 1.5 kW, 05 = 460V 1.5 kW), so it is a true # frame identity rather than a motor-nameplate value. [rating] register = 0x0050 words = 1 scale = 1.0 label = "Identity code (Pr.80)" # Flat 00nnH parameter space. The clone range runs Pr.00-Pr.153; Pr.154 is # Reserved and Pr.155-157 exist but are left out (p. 4-13) — Pr.156 # Communication Response Delay Time and Pr.157 Communication Mode Selection # (00 = Delta ASCII, 01 = Modbus) are comm parameters and belong with Pr.88-92 # below; Pr.155 Compensation Coefficient for Motor Instability is a named gap, # not cloned. # # Deliberately excluded: # Pr.57 (0x0039) READ ONLY — "AC Drive Rated Current Display", # pp. 4-6 and 4-48. It is the target drive's own # rated current, so on any replacement of a # different frame the donor value differs and a # restore would queue a write the drive must refuse. # Pr.73-75 (0x0049-0x004B) read-only fault records # Pr.76 (0x004C) Parameter Lock — settings 09/10 FACTORY-RESET the # drive, so a clone must never write it (p. 4-53) # Pr.80 (0x0050) read-only identity code (p. 4-58) # Pr.88-92 (0x0058-0x005C) 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 bus. # Pr.98-100 (0x0062-0x0064) read-only run-time counters and software version # Pr.144-145 (0x0090-0x0091) READ ONLY — "Total operation time (Day)" and # "(Minutes)", pp. 4-12 to 4-13. Same problem as # Pr.57: the donor's hours never match the target's, # so every restore would queue a refused write. [parameters] ranges = [ [0x0000, 0x0038], [0x003A, 0x0048], [0x004D, 0x004F], [0x0051, 0x0057], [0x005D, 0x0061], [0x0065, 0x008F], [0x0092, 0x0099], ]