# Property of PMA Electrical Solutions, LLC. # # Benshaw H2 Series low-voltage VFD and packages whose Benshaw primary # documentation explicitly identifies an H2 drive: H2P, H2X, H2E, H2 519, # and H2 519P. # # Primary sources: # * Benshaw 890053-00-02, "H2 Series VFD Instruction Manual": built-in RTU # setup pp. 299-309, worked address example p. 310, common area pp. 311-314, # H2 expansion registers pp. 315-323. # * Benshaw 890053-02-00, "H2P Series VFD with VSPP Firmware": pp. 1 and 5 # explicitly identify an H2 drive with pump software and direct ordinary # wiring/setup to the standard H2 manual. # * Benshaw Low Voltage Products Catalog (2025), printed pp. 105-114: H2X # says "packaged H2 Series drive"; H2E's assembler says "H2 = Multi-Purpose # Drive"; 519 and 519P each say the package combines an H2 Series drive # with the documented input hardware. Package bypass/interlocks remain # outside this drive-level process image. # # The H2 worked example sends manual address 0h1103 as PDU address 0x1102: # protocol address = manual hexadecimal communication address - 1. Addresses # below are converted. Drive setup: COM02=0 Modbus, COM03=3 9600, COM04=0 8N1, # DRV06=3 Int485 and DRV07=6 Int485. The manual conflicts on PRT12: its # parameter description (p. 195) shows default 1 Free-Run, while the comm table # (p. 303) shows 0 None. Set it explicitly to Free-Run or Dec, retain # PRT13=1.0 s, and verify the behavior before serial control. name = "Benshaw H2 / H2P / H2X / H2E / H2 519 / 519P" vendor = "Benshaw" device_type = "vfd" verified = false probe_register = 0x02FF # manual 0h0300, model code 0x000F [connection] summary = "The H2 family uses its built-in isolated two-wire Modbus RTU terminals; no option card is required for this profile." warnings = [] [[connection.methods]] id = "built_in_rs485" title = "Built-in RS-485 terminals" transport = "serial" hardware = "built_in" port = "Control terminals S+, S-, and SG" connector = "Three control-terminal positions" adapter = "Isolated USB-to-RS-485 adapter, 2-wire half-duplex" cable = "18 AWG shielded twisted-pair RS-485 cable" parts = ["Isolated two-wire RS-485 adapter", "18 AWG shielded twisted-pair RS-485 cable"] 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 COM02=0 Modbus, COM03=3 for 9600, COM04=0 for 8N1, DRV06=3, DRV07=6, and explicitly set PRT12/PRT13 communication-loss behavior."] 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 H2 package variants may add bypass and interlock wiring; those circuits are outside this drive-level communications connection."] source = "Benshaw 890053-00-02 H2 Instruction Manual, printed pp. 14 and 40-41 (18 AWG shielded twisted-pair on S+/S-/SG), pp. 299-310 (RS-485 setup)" [[connection.methods.wiring]] adapter = "Adapter D+ / +" device = "S+" signal = "RS-485 data positive" required = true [[connection.methods.wiring]] adapter = "Adapter D- / -" device = "S-" signal = "RS-485 data negative" required = true [[connection.methods.wiring]] adapter = "Adapter signal ground / shield" device = "SG" signal = "Signal reference or shield drain" required = false [serial] baudrate = 9600 parity = "N" stopbits = 1 [monitor] status_word = { address = 0x000D, bits = { 0 = "STOPPED", 1 = "RUNNING_FWD", 2 = "RUNNING_REV", 3 = "FAULT_TRIP", 4 = "ACCELERATING", 5 = "DECELERATING", 6 = "SPEED_REACHED", 7 = "DC_BRAKING", 8 = "STOPPING", 9 = "JOG_MODE", 10 = "BRAKE_RELEASE", 11 = "FWD_CMD", 12 = "REV_CMD", 13 = "CMD_SOURCE_IS_COMMS", 14 = "FREQ_SOURCE_IS_COMMS", 15 = "HAND_AUTO" } } motor_current = { address = 0x030F, scale = 0.1, unit = "A" } output_frequency = { address = 0x0310, scale = 0.01, unit = "Hz" } output_rpm = { address = 0x0311, unit = "rpm" } output_voltage = { address = 0x0313, unit = "V" } dc_voltage = { address = 0x0314, unit = "V" } output_power = { address = 0x0315, scale = 0.1, unit = "kW" } pid_reference = { address = 0x0317, scale = 0.1, unit = "%" } heatsink_temperature = { address = 0x035C, unit = "degC" } power_factor = { address = 0x035D, scale = 0.1 } latch_trip_2 = { address = 0x0330, bits = { 1 = "LEVEL_DETECT", 2 = "THERMAL_TRIP", 3 = "FAN_TRIP", 4 = "TB_TRIP", 5 = "PARAMETER_WRITE_ERROR", 6 = "BROKEN_BELT", 7 = "IO_BOARD", 9 = "NO_MOTOR", 10 = "OPTION_TRIP_1", 14 = "MMC_INTERLOCK" } } level_trip = { address = 0x0331, bits = { 0 = "BX", 1 = "LOW_VOLTAGE", 2 = "LOST_COMMAND", 3 = "LOST_KEYPAD" } } hardware_trip = { address = 0x0332, bits = { 0 = "ADC_ERROR", 1 = "EEPROM_ERROR", 2 = "WATCHDOG_1_ERROR" } } warnings = { address = 0x0333, bits = { 0 = "OVERLOAD", 1 = "UNDERLOAD", 2 = "DRIVE_OVERLOAD", 3 = "LOST_COMMAND", 4 = "FAN_WARNING", 5 = "DB", 6 = "FIRE_MODE", 7 = "PIPE_BREAK", 8 = "LOST_KEYPAD", 10 = "LEVEL_DETECT", 11 = "CAPACITOR_WARNING", 12 = "FAN_EXCHANGE", 13 = "LOAD_TUNE", 14 = "LOW_BATTERY", 15 = "BROKEN_BELT" } } latch_trip_3 = { address = 0x0334, bits = { 0 = "GROUND_FAULT", 1 = "OVERCURRENT_1", 2 = "OVERVOLTAGE", 3 = "OVERCURRENT_2" } } warning_2 = { address = 0x0335, bits = { 0 = "PARAMETER_WRITE_FAIL", 1 = "RS_TUNE", 2 = "LSIG_TUNE", 3 = "KEYPAD_HOA_LOCK" } } [control] command_register = 0x0381 speed_register = 0x037F speed_scale = 0.01 speed_unit = "Hz" max_ref = 400.0 step_delay = 0.05 stop = [0x0000] run_fwd = [0x0003] run_rev = [0x0001] reset = [0x0004, 0x0000] [control.watchdog] backstop_requires_setup = true interval_ms = 500 fault = "Lost Command Trip (requires PRT12 Free-Run or Dec; PRT13 Lost Cmd Time)" [faults] register = 0x032F bitfield = true bits = { 0 = "OVERLOAD_TRIP", 1 = "UNDERLOAD_TRIP", 2 = "DRIVE_OVERLOAD_TRIP", 3 = "E_THERMAL_TRIP", 4 = "LOW_VOLTAGE_2", 5 = "OUTPUT_OPEN_PHASE", 6 = "INPUT_OPEN_PHASE", 9 = "NTC_OPEN", 10 = "PIPE_BREAK", 11 = "DAMPER_ERROR", 12 = "EXTERNAL_TRIP", 14 = "OVERHEAT", 15 = "PC_REPEAT" } [rating] register = 0x0300 label = "drive capacity code" # No [running_check] because forward and reverse have separate status bits. # No [parameters] because a broad group sweep includes live comm settings.