# Property of PMA Electrical Solutions, LLC. # # Benshaw MVH2 medium-voltage VFD with built-in RS-485 Modbus RTU. Primary # source: Benshaw publication 890057-00-02, "MVH2 Series VFD User Manual", # DCS control/set modes printed pp. 77-79, Modbus node/baud settings pp. 82-83, # and complete protocol/register map printed pp. 119-129. # # ADDRESSING: the manual prints conventional 40001..40099 holding-register # references. Addresses below are 0-based protocol addresses: 40001 -> 0. # # The documented defaults are 9600 baud, 8N1, address 1. Configure the control # and set modes for DCS control/set before remote operation. SAFETY LIMITATION: # this manual publishes no master timeout or communication-loss action. Thus # this profile has no [control.watchdog]; loss of the host has no documented # drive-side stop backstop. Commission only where an independent hardwired # safety chain provides the required stop behavior. name = "Benshaw MVH2" vendor = "Benshaw" device_type = "vfd" verified = false probe_register = 15 # 40016 VFD status [connection] summary = "The MVH2 has a built-in isolated Modbus RTU interface on lower-interface terminal block XS17T." warnings = [] [[connection.methods]] id = "xs17t_rs485" title = "Built-in XS17T RS-485" transport = "serial" hardware = "built_in" port = "Lower interface board terminal block XS17T" connector = "Three-position terminal block" 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 = ["Use the touchscreen to select DCS control and DCS set modes; set the Modbus node and baud. Defaults are address 1, 9600, 8N1."] 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.", "Medium-voltage equipment must be accessed only by qualified personnel under the site arc-flash and lockout procedure.", "The manual publishes no communication-loss stop action; provide an independent hardwired safety chain."] source = "Benshaw 890057-00-02 MVH2 User Manual, printed p. 33 (XS17T RS-485 pinout), pp. 77-79 and 82-83 (DCS source and serial setup), pp. 119-129 (map)" [[connection.methods.wiring]] adapter = "Adapter D+ / +" device = "XS17T pin 3, left as mounted (B+)" signal = "RS-485 data positive" required = true [[connection.methods.wiring]] adapter = "Adapter D- / -" device = "XS17T pin 2, center (A-)" signal = "RS-485 data negative" required = true [[connection.methods.wiring]] adapter = "Adapter signal ground / shield" device = "XS17T pin 1, right as mounted (Com)" signal = "Signal reference or shield drain" required = false [serial] baudrate = 9600 parity = "N" stopbits = 1 [monitor] feedback = { address = 3, scale = 0.01, unit = "%" } output_frequency = { address = 4, scale = 0.01, unit = "Hz" } input_voltage = { address = 5, unit = "V" } input_current = { address = 6, scale = 0.1, unit = "A" } input_power = { address = 7, unit = "kW" } input_power_factor = { address = 8, scale = 0.01 } output_voltage = { address = 9, unit = "V" } motor_current = { address = 10, scale = 0.1, unit = "A" } output_power = { address = 11, unit = "kW" } output_power_factor = { address = 12, scale = 0.01 } output_rpm = { address = 13, unit = "rpm" } power_cell_temperature = { address = 14, scale = 0.1, unit = "degC" } # 40016 packs a high-byte running-state ENUM and low-byte status flags; do not # mislabel the enum as bits. Low-byte bits are independently useful. status_word = { address = 15, bits = { 0 = "HIGH_VOLTAGE_NOT_READY", 1 = "POWER_CELL_FAULT", 2 = "VFD_OVERCURRENT", 3 = "SYSTEM_OVERSPEED", 4 = "IO_BOARD_NOT_READY", 5 = "PARAMETER_SETTING_ERROR", 6 = "PHASE_LOCK_FAILURE", 7 = "MAIN_CONTROL_BOARD_NORMAL" } } warnings = { address = 17, bits = { 0 = "FAN_ALARM", 1 = "TRANSFORMER_OVERHEAT_ALARM", 2 = "POWER_CELL_CABINET_OVERHEAT_ALARM", 3 = "POWER_CELL_DOOR_ALARM", 4 = "TRANSFORMER_DOOR_ALARM", 5 = "MOTOR_OVERLOAD", 6 = "ANALOG_SET_LOSS", 7 = "ANALOG_FEEDBACK_LOSS", 8 = "POWER_CELL_BYPASS", 9 = "TOUCHSCREEN_COMM_FAULT", 10 = "WATER_COOLING" } } # 40002 is 0..100% reference. 40003 uses the manual's exact command constants. [control] command_register = 2 speed_register = 1 speed_scale = 1.0 speed_signed = true speed_unit = "%" max_ref = 100.0 step_delay = 0.05 stop = [0x0F00] run_fwd = [0x00FF] reset = [] # no Modbus fault-reset command is published # No run_rev word is published. DCS reverse is commanded with a negative # reference (manual p. 87), which speed_signed permits through `set_reference`. # No [running_check]: the run indication is an enum in the high byte, not a # stable single bit. Unknown therefore blocks restore instead of guessing. [faults] register = 16 bitfield = true bits = { 0 = "EXTERNAL_FAULT", 1 = "TRANSFORMER_OVERTEMPERATURE", 2 = "OVERTEMPERATURE", 3 = "VFD_OVERCURRENT", 4 = "MOTOR_OVERCURRENT", 5 = "HIGH_VOLTAGE_POWER_LOSS", 7 = "POWER_CELL_FAULT", 10 = "DEBUG_MODE_HV_ON_FORBIDDEN", 11 = "CONTROLLER_NOT_ENABLED", 12 = "POWER_CELL_DOOR_HEAVY_FAULT", 13 = "TRANSFORMER_DOOR_HEAVY_FAULT" } # No [rating]: rated motor/system registers are configurable values rather than # an immutable frame identity. No [parameters]: system writes require standby.