# Property of PMA Electrical Solutions, LLC. # # Delta ME300 — Basic Compact Drive, built-in RS-485 Modbus on the RJ45 port. # # COVERAGE — the ME300 series only (115 V / 230 V / 460 V models, frames A-D, # identity codes per Pr.00-00). NOT CLAIMED: MS300, MH300, MX300, CFP2000, # CP2000, C2000, VFD-E, VFD-M or any other Delta family. The ME300 manual # names no sibling model anywhere, and Delta ships MS300, MH300 and MX300 as # separate documents with separate fault tables. Every value below was read # out of the ME300's own manual, not carried across from the MS300 file next # to it — where the two differ (210Fh output-power decimals, the group 01/02 # extents, the fault list) this file follows the ME300 document. # # SOURCE — Delta ME300 Series User Manual DELTA_IA-MDS_ME300_UM_EN_20250402 # (EN, 517 PDF pages, issue 2025-04-07), downloadcenter.deltaww.com. # The PRINTED page = PDF page - 10; citations below are PRINTED pages. # p. 202 Pr.00-00 identity code / Pr.00-01 rated current display, and # the 115 V / 230 V / 460 V identity-code tables # pp. 211-212 Pr.00-20 Master Frequency Command Source, Pr.00-21 Operation # Command Source (AUTO, REMOTE) # p. 221 Pr.01-00 Motor 1 Maximum Operation Frequency, 0.00-599.00 Hz # p. 170 chapter 11 summary of group 02, incl. the "Read only" marks # on Pr.02-50 / 02-51 / 02-54 # p. 288 Pr.06-17 … Pr.06-22 Fault Record 1-6 # pp. 337-338 Group 09 communication parameters and their DEFAULTS # (09-00 … 09-04, 09-09, 09-10) # p. 339 Pr.09-30 decoding method # p. 403 Summary of Fault Codes (transcribed complete below) # pp. 497-499 parameter addressing GGnnH; 20xx control command table; # 2001h frequency command, 2002h fault/control command # pp. 499-500 21xx status monitor table # pp. 501-502 22xx status monitor table # # ADDRESSING — Delta documents these as hex addresses that are ALREADY 0-based # protocol addresses (p. 497: the RTU read is "01h + 03h + 00xxh-26xxh"; the # address in the table is the address on the wire). Parameters are GGnnH, GG = # group and nn = parameter number in hex — the manual's own worked example is # Pr.04-10 -> 040Ah (p. 497). So Pr.06-17 -> 0611h. # # DRIVE-SIDE SETUP: # 00-20 = 1 Master Frequency Command Source (AUTO, REMOTE) = RS-485 # 00-21 = 2 Operation Command Source (AUTO, REMOTE) = RS-485 # 09-00 node address (1-254, default 1) # 09-01 baud (default 9.6 kbps; 4.8 / 9.6 / 19.2 / 38.4 only on ME300) # 09-04 = 12 protocol 8,N,1 RTU — THE FACTORY DEFAULT IS 1 = 7,N,2 ASCII # (p. 337). Out of the box this drive does not speak Modbus RTU # at all; 09-04 must be changed on the panel first. # 09-30 decoding method, default 1. p. 339 states the RS-485 operation # control addresses "are 2000h-20FFh regardless of decoding # method 1 or 2", so this profile does not require 09-30 = 0. # The Modbus appendix's own note on 2000h says the control word is "valid only # when operation command source is set to communication (Pr.00-03 = 2)". # Pr.00-03 is not a command-source parameter in this manual's chapter 12; the # parameter that carries setting 2 = RS-485 is Pr.00-21 (p. 212). Treated as a # stale cross-reference in the appendix, and 00-21 is what is listed above. # AUTO vs HAND: 00-20/00-21 are the AUTO/REMOTE sources. A multi-function # input (MIx = 41/42/56) or the optional KPC-CC01 keypad switches the drive to # HAND/LOCAL, where Pr.00-30/00-31 take over and these commands are ignored; # the manual states the multi-function input has the highest priority. # # COMM-LOSS DEFAULTS ARE PERMISSIVE: Pr.09-02 Modbus Transmission Fault # Treatment defaults to 3 = "No warning, no fault, and continue operation" and # Pr.09-03 Modbus Time-out Detection defaults to 0.0 s = detection off # (p. 337). The keepalive below proves the link from our side; the DRIVE only # trips CE10 (fault 58) on silence once 09-03 is non-zero and 09-02 is 1 or 2. # Note also that CE10 latches — p. 337: the error "remains even if the # transmission status returns to normal, and is not cleared automatically". name = "Delta ME300" vendor = "Delta Electronics" device_type = "vfd" verified = false probe_register = 0x2101 [connection] summary = "Built-in two-wire Modbus RTU is available without an option card." warnings = [] [[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."] 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 8 carries accessory/keypad power and must not be connected to an RS-485 adapter."] source = "Delta ME300 User Manual, PDF p. 50 (RJ45 pinout), p. 337 (RTU 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 7 (signal ground)" signal = "Signal reference or shield drain" required = false # Pr.09-01 default 9.6 kbps. Parity/stopbits below are the 09-04 = 12 # (8,N,1 RTU) setting the drive must be moved to; its factory 09-04 = 1 is # 7,N,2 ASCII framing. [serial] baudrate = 9600 parity = "N" stopbits = 1 [monitor] # p. 499. bits 1-0 are a 2-bit RUN/STOP state (00 fully stopped, 01 stopping, # 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 field decodes as a # set of independent flags. bits 15-13 are a 3-bit HOA / LOC-REM mode field # for the same reason. Only the single bits are named here; read this register # as hex. drive_status = { address = 0x2101, bits = { 2 = "Jog", 8 = "FreqFromComm", 9 = "FreqFromAnalog", 10 = "CmdFromComm", 11 = "ParamsLocked" } } frequency_command = { address = 0x2102, scale = 0.01, unit = "Hz" } output_frequency = { address = 0x2103, scale = 0.01, unit = "Hz" } # CONFIG-DEPENDENT SCALE. p. 500: the register "automatically shifts one # decimal place as XXX.X A" once the current exceeds 655.35 A, and the decimal # places are reported in the high byte of 211Fh. 0.01 is the reading for every # ME300 frame (the largest is 40 HP / 55 kW, far under 655 A), but confirm # 211Fh on the unit before trusting the scale. output_current = { address = 0x2104, scale = 0.01, unit = "A" } dc_bus_voltage = { address = 0x2105, scale = 0.1, unit = "V" } output_voltage = { address = 0x2106, scale = 0.1, unit = "V" } # 2107h is the multi-step-speed STEP NUMBER (0 = main speed), not a speed. multistep_step = { address = 0x2107 } # 210Ah 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" } # p. 500: "Drive's output power (X.XXX kW)" — THREE decimals. The MS300 # profile carries 0.1 at this same 210Fh address; that is the MS300's own # figure and does not apply here. output_power = { address = 0x210F, scale = 0.001, unit = "kW" } igbt_temperature = { address = 0x220E, scale = 0.1, unit = "degC" } # p. 501 digital_input_status = { address = 0x2210 } # p. 501 digital_output_status = { address = 0x2211 } # p. 501 # p. 502. bits 1-0 are a 2-bit direction field (00 no direction, 01 FWD, # 10 REV) and bits 3-2 a 2-bit ready/error field (01 ready, 10 error) — again # not independent flags. bit4 (drive is outputting) and bit5 (warning) are. drive_status_2 = { address = 0x2226, bits = { 4 = "Output", 5 = "Warning" } } [control] command_register = 0x2000 # Fault reset is a DIFFERENT register. On 2000h bits 1-0 = 10b is RUN, so # writing 0x0002 there commands an unexpected start in the last direction. # 2002h bit1 = Reset (p. 499). reset_register = 0x2002 speed_register = 0x2001 speed_scale = 0.01 # p. 498, "Frequency command (XXX.XX Hz)" speed_unit = "Hz" max_ref = 599.0 # Pr.01-00 upper limit, p. 221 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 2002h [control.watchdog] interval_ms = 300 fault = "CE10 Modbus transmission time-out (fault 58) — only once Pr.09-03 is non-zero and Pr.09-02 is 1 or 2; the factory defaults (09-03 = 0.0 s, 09-02 = 3) leave the drive running on silence" # 2101h bits 1-0 are a 2-bit state, not a flag (p. 499): 00b fully stopped, # 01b stopping, 10b STANDBY, 11b running. Bit 0 is set by 01b and 11b — the two # states where the shaft is still turning — so it never reports "stopped" while # the motor is moving. That is why bit 0 and not bit 1: bit 1 covers 10b + 11b # ("a RUN command is latched") and CLEARS during 01b, which would report a # decelerating, still-spinning motor as stopped. Bit 0 fails safe, bit 1 does # not. # # KNOWN BLIND SPOT, needs the bench. Bit 0 is CLEAR in standby (10b), which the # manual defines as "RUN indicator is ON / STOP indicator flashes" — a run # command is latched and the drive is simply at zero output. running_state() # is a single-bit test, so it reports Stopped there, and a restore precondition # that only requires "stopped" will pass on a drive armed to start the instant # the reference leaves zero. Fully covering this needs a 2-bit decode of # 2101h bits 1-0 (unsafe only for 10b), which the single-bit schema cannot # express. Until then: confirm the drive is not in standby before restoring. [running_check] register = 0x2101 bit = 0 # p. 499: "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 … Pr.06-22, Fault Record 1-6 -> 0611h … 0616h (p. 288). history = [0x0611, 0x0612, 0x0613, 0x0614, 0x0615, 0x0616] # Transcribed complete from the ME300 "Summary of Fault Codes" table, printed # p. 403 — the same ID numbering Pr.06-17 and 2100h report. ME300 numbering # only; it is NOT the MS300 or CFP2000 table, both of which differ in this # range (the ME300 has no code 5 occ, no PG faults 42-45, and codes 79-81 are # Aoc/boc/coc rather than Uoc/Voc/Woc). [faults.codes] 0 = "No record" 1 = "ocA over-current during acceleration" 2 = "ocd over-current during deceleration" 3 = "ocn over-current during steady operation" 4 = "GFF ground fault" 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 over-heat key components" 18 = "tH1o IGBT temperature detection failure" 19 = "tH2o capacitor hardware fault" 21 = "oL over load" 22 = "EoL1 electronic thermal relay 1 protection" 23 = "EoL2 electronic thermal relay 2 protection" # The manual lists this one as two sub-codes, 24_1 (PTC) and 24_2 (PT100). # 2100h carries a single byte, so both surface here as 24. 24 = "oH3 motor overheating (PTC / PT100)" 26 = "ot1 over torque 1" 27 = "ot2 over torque 2" 28 = "uC under current" 31 = "cF2 EEPROM read error" 33 = "cd1 U-phase error" 34 = "cd2 V-phase error" 35 = "cd3 W-phase error" 36 = "Hd0 cc hardware failure" 37 = "Hd1 oc hardware error" 38 = "Hd2 ov hardware error" 40 = "AUE auto-tuning error" 41 = "AFE PID loss ACI" 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" 61 = "ydc Y-connection / delta-connection switch error" 62 = "dEb deceleration energy backup error" 63 = "oSL over slip error" 72 = "STL1 S1 internal loop error detected" 76 = "STO safe torque off" 77 = "STL2 S2 internal loop error detected" 78 = "STL3 internal loop error detected" 79 = "Aoc U-phase over-current before run" 80 = "boc V-phase over-current before run" 81 = "coc W-phase over-current before run" 82 = "oPL1 output phase loss U phase" 83 = "oPL2 output phase loss V phase" 84 = "oPL3 output phase loss W phase" 87 = "oL3 overload protection at low frequency" 89 = "roPd rotor position detection error" 140 = "Hd6 oc hardware error" 141 = "b4GFF GFF occurs before run" 142 = "AUE1 auto-tuning error 1" 143 = "AUE2 auto-tuning error 2" 144 = "AUE3 auto-tuning error 3" 149 = "AUE5 auto-tuning 5" 150 = "AUE6 no-load current I0 measurement fault" 151 = "AUE7 dq axis inductance measurement fault" 152 = "AUE8 high frequency injection measurement fault" 157 = "dEv pump PID feedback error" # Pr.00-00 AC Motor Drive Identity Code, read-only (p. 202): an enumerated # voltage-class/kW code (e.g. 304 = 230 V single-phase, 0.75 kW), so it is a # real drive identity rather than a motor-nameplate guard. Raw code, no scale. [rating] register = 0x0000 words = 1 scale = 1.0 label = "Drive identity code (00-00)" # Group 01 (basic: frequencies, accel/decel, V/F) and group 02 (digital I/O), # in Delta's GGnnH layout. Bounded by the highest index that actually exists # in each group in the chapter 11 summary: 01-00…01-52 -> 0100h-0134h, # 02-00…02-83 -> 0200h-0253h. # Group 09 (communications) 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 group 02 sweep is SPLIT around 0232h-0236h. Pr.02-50, 02-51 and 02-54 are # marked "Read only" in the chapter 11 summary (p. 170): they display the live # multi-function input status, the live output status, and the frequency # command currently coming from the external terminals. Those are machine # state, not configuration, so a donor and a target essentially never read the # same value — the restore planner would queue a write for each one on every # clone, the drive would answer with CE4 "data written to read-only address" # (fault 57, p. 403), and an otherwise-perfect restore would report failure. # 02-52/02-53 do not exist on the ME300, so the hole costs nothing real. # Group 01 was swept for the same marking and has none. [parameters] ranges = [[0x0100, 0x0134], [0x0200, 0x0231], [0x0237, 0x0253]]