# Property of PMA Electrical Solutions, LLC. # # Benshaw GM2 Series low-voltage VFD, built-in RS-485 Modbus RTU. # # Primary source: Benshaw publication 890054-00-00, "GM2 Series VFD # Instruction Manual" (282 PDF pp.): communications setup printed pp. 179-187, # RTU worked example p. 188, compatible common area pp. 192-194, and GM2 # expansion area pp. 195-200. The example writes manual address 0h1246 with # PDU starting address 0x1245, proving: # # protocol address = manual hexadecimal communication address - 1 # # Every address below is already converted. This profile claims only GM2. # # Drive setup: CM01 station, CM02=0 Modbus, CM03=3 9600 baud, CM04=0 8N1; # drv=3 Int485 command source and Frq=6 Int485 frequency source. The manual # conflicts on Pr12: its parameter list says default 0 None, its protection # table shows 1 Free-Run, and a later note says reference-loss protection can # operate regardless of Pr12. Set Pr12 explicitly to Free-Run or Dec, retain # Pr13=1.0 s, and verify the behavior before serial control. name = "Benshaw GM2" vendor = "Benshaw" device_type = "vfd" verified = false probe_register = 0x02FF # manual 0h0300, model code 0x0010 [connection] summary = "The GM2 supports two access points to its built-in Modbus RTU channel and an optional PC-100093-00 Modbus TCP/EtherNet-IP board." warnings = [] [[connection.methods]] id = "control_terminals_rs485" title = "Built-in RS-485 terminals" transport = "serial" hardware = "built_in" port = "Control terminals S+, S-, and CM" connector = "Three control-terminal positions" 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 = ["Set CM01=node, CM02=0 Modbus, CM03=3 for 9600, CM04=0 for 8N1, drv=3, Frq=6, and explicitly configure Pr12/Pr13 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."] source = "Benshaw 890054-00-00 GM2 Instruction Manual, printed pp. 179-181 (S+/S-/CM and RJ45 pins 1/8), pp. 183-188 (setup); 890054-02-00 GM2 Ethernet manual, printed pp. 1-7 (PC-100093-00 installation and Ethernet wiring)" [[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 = "CM" signal = "Signal reference or shield drain" required = false [[connection.methods]] id = "rj45_rs485" title = "Built-in RS-485 RJ45 jack" transport = "serial" hardware = "built_in" port = "I/O board RJ45 communications jack" connector = "RJ45 wired as RS-485, not Ethernet" adapter = "Isolated USB-to-RS-485 adapter, 2-wire half-duplex" cable = "CAT5/CAT5e/CAT6 shielded twisted-pair cable using the pin-1/pin-8 pair" parts = ["Isolated two-wire RS-485 adapter", "CAT5/CAT5e/CAT6 shielded twisted-pair cable using the pin-1/pin-8 pair", "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 CM01=node, CM02=0 Modbus, CM03=3 for 9600, CM04=0 for 8N1, drv=3, Frq=6, and explicitly configure Pr12/Pr13 communication-loss behavior."] 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.", "The manual calls this an Ethernet cable because of the connector and cable construction; the built-in jack carries RS-485, not Ethernet."] source = "Benshaw 890054-00-00 GM2 Instruction Manual, printed pp. 179-181 (S+/S-/CM and RJ45 pins 1/8), pp. 183-188 (setup); 890054-02-00 GM2 Ethernet manual, printed pp. 1-7 (PC-100093-00 installation and Ethernet wiring)" [[connection.methods.wiring]] adapter = "Adapter D+ / +" device = "RJ45 pin 1 (S+)" signal = "RS-485 data positive" required = true [[connection.methods.wiring]] adapter = "Adapter D- / -" device = "RJ45 pin 8 (S-)" signal = "RS-485 data negative" required = true [[connection.methods]] id = "pc_100093_modbus_tcp" title = "Optional PC-100093-00 Modbus TCP board" transport = "tcp" hardware = "option" port = "RJ45 Ethernet network port on option board" connector = "RJ45 100BASE-TX Ethernet" adapter = "Computer Ethernet interface or Ethernet switch" cable = "Category 5 or better Ethernet cable" parts = ["Benshaw PC-100093-00 communication board", "Included internal RJ45 lead", "Category 5 or better Ethernet patch cable"] steps = ["Lock out and isolate the equipment before fitting an option module or opening the enclosure.", "Install and fully seat the specified communications module according to its installation instructions.", "Connect the computer or switch with the specified Ethernet cable; keep it separated from motor and mains wiring.", "Restore control power, assign an IP address on the same subnet, discover the device, and verify read-only data before enabling network control."] setup = ["Requires GM2 OS V1.22 or newer (dr.97). Install the board and included internal RJ45 lead with power removed, configure IP parameters, select Modbus TCP, and configure the Ethernet lost-command action."] warnings = ["An Ethernet link does not make remote motor control safe. Verify the drive-side communication-loss action and the independent hardwired stop circuit before commanding run.", "The included short RJ45 lead is internal between the GM2 and option board; the external network cable goes to the option board network port.", "Do not install or remove the board until the DC bus is fully discharged."] source = "Benshaw 890054-00-00 GM2 Instruction Manual, printed pp. 179-181 (S+/S-/CM and RJ45 pins 1/8), pp. 183-188 (setup); 890054-02-00 GM2 Ethernet manual, printed pp. 1-7 (PC-100093-00 installation and Ethernet wiring)" [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" } } motor_current = { address = 0x030F, scale = 0.1, unit = "A" } output_frequency = { address = 0x0310, scale = 0.01, unit = "Hz" } output_rpm = { address = 0x0311, unit = "rpm" } motor_speed_feedback = { address = 0x0312, signed = true, unit = "rpm" } output_voltage = { address = 0x0313, unit = "V" } dc_voltage = { address = 0x0314, unit = "V" } output_power = { address = 0x0315, scale = 0.1, unit = "kW" } output_torque = { address = 0x0316, scale = 0.1, unit = "%" } heatsink_temperature = { address = 0x032C, unit = "degC" } latch_trip_2 = { address = 0x0330, bits = { 3 = "FAN_TRIP", 6 = "PRE_PID_FAIL", 7 = "BAD_CONTACT_IO_BOARD", 8 = "EXTERNAL_BRAKE_TRIP", 9 = "NO_MOTOR_TRIP", 10 = "BAD_OPTION_CARD", 14 = "PRE_OVER_HEAT_TRIP" } } level_trip = { address = 0x0331, bits = { 0 = "BX", 1 = "LOW_VOLTAGE_TRIP", 2 = "LOST_COMMAND", 3 = "KEYPAD_LOST_COMMAND" } } hardware_trip = { address = 0x0332, bits = { 0 = "ADC_ERROR", 1 = "EEPROM_ERROR", 2 = "WATCHDOG_1_ERROR", 3 = "WATCHDOG_2_ERROR", 5 = "QUEUE_FULL" } } warnings = { address = 0x0333, bits = { 0 = "OVERLOAD", 1 = "UNDERLOAD", 2 = "DRIVE_OVERLOAD", 3 = "LOST_COMMAND", 4 = "FAN_RUNNING", 5 = "DB", 6 = "ENCODER_INSTALL", 7 = "ENCODER_DISCONNECT", 8 = "KEYPAD_LOST", 9 = "AUTO_TUNING_FAILED" } } latch_trip_3 = { address = 0x0334, bits = { 0 = "OVER_TORQUE_1", 1 = "UNDER_TORQUE_1", 2 = "OVER_TORQUE_2", 3 = "UNDER_TORQUE_2" } } [control] command_register = 0x0381 # manual 0h0382 speed_register = 0x037F # manual 0h0380 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 Pr12 Free-Run or Dec; Pr13 Lost Cmd Time)" # There is no single bidirectional running bit; bits 1 and 2 split direction. [faults] register = 0x032F # manual 0h0330, Latch type trip information 1 bitfield = true bits = { 0 = "OVERLOAD_TRIP", 1 = "UNDERLOAD_TRIP", 2 = "DRIVE_OVERLOAD_TRIP", 3 = "E_THERMAL_TRIP", 4 = "GROUND_FAULT_TRIP", 5 = "OUTPUT_OPEN_PHASE_TRIP", 6 = "INPUT_OPEN_PHASE_TRIP", 9 = "NTC_TRIP", 10 = "OVERCURRENT_TRIP", 11 = "OVERVOLTAGE_TRIP", 12 = "EXTERNAL_TRIP", 13 = "ARM_SHORT", 14 = "OVER_HEAT_TRIP", 15 = "FUSE_OPEN_TRIP" } [rating] register = 0x0300 # manual 0h0301 label = "drive capacity code" # No [parameters]: the complete map includes the CM group, so a broad restore # could rewrite station/baud and sever its own bus.