# Property of PMA Electrical Solutions, LLC. # # AutomationDirect DURApulse GS3 (GS3-2xxx 230 V, GS3-4xxx 460 V, 1-100 hp), # sensorless-vector V/Hz drive with built-in RS-485 Modbus RTU on the RJ-12 # serial comm port. Discontinued/superseded but common in installed plant. # # Source: "DURApulse GS3 AC Drives User Manual", 2nd Edition (302 pp), # https://cdn.automationdirect.com/static/manuals/gs3m/gs3m.pdf # pp. 5-2 to 5-3 communications parameters P9.00-P9.42 and defaults # pp. 5-4 to 5-8 parameter memory addresses (hex / Modbus decimal / octal) # p. 5-9 Status Monitor 1 error codes # pp. 5-9 to 5-11 status addresses h2100-h2110 and Status Monitor 2 bits # p. 4-25, 4-36 P3.00 / P4.00 command and frequency source # p. 4-58 P6.31-P6.36 fault-record code list # pp. 4-65 to 4-66 P9.01-P9.05 serial settings and time-out behaviour # p. 3-4 keypad display resolutions # # ADDRESSING (proved on p. 5-4: P0.00 -> hex 0000, "Modbus Decimal" 40001). # 0-based protocol address = (parameter group << 8) | parameter index # P9.27 Serial Comm RUN Command -> 0x091B = 2331 # The manual's "Modbus Decimal" column is 40001 + that value (1-based 4xxxx) # and its "Octal" column is the DirectLOGIC V-memory form. Neither is a # protocol address. Everything below is the hex/0-based form. # # Drive-side setup: P3.00 = 03 (comm interface, keypad STOP enabled) or 04 # (keypad STOP disabled) points the RUN command at the serial port; P4.00 = 05 # points the frequency command at it. Without both the drive ACKs the writes # and ignores them. P9.00 node address, P9.01 baud, P9.02 protocol. # # P9.02 FACTORY DEFAULT IS 00 = MODBUS **ASCII** 7N2, which this tool does not # speak. Set P9.02 = 03 (RTU 8N2, matched below), 04 (RTU 8E1) or 05 (RTU 8O1). # # NO CONTROL-WORD REGISTER ON THIS GENERATION. The GS3 has no packed command # word: run, direction, external fault, reset and jog are five separate # parameters, P9.27-P9.31. The 2000H/2001H addresses that appear on p. 5-34 of # this manual are inside a generic Modbus frame example and are NOT in the GS3 # address tables — do not use them. # # NO [control.watchdog] AND NO KEEPALIVE, DELIBERATELY. The manual names no # comm-loss fault code, and at factory defaults P9.04 Time Out Detection = 00 # (disabled) with P9.03 Transmission Fault Treatment = 00 (display fault and # CONTINUE OPERATING): SILENCE LEAVES THE MOTOR RUNNING. A drive-side backstop # needs P9.04 = 01, a P9.05 duration, and P9.03 = 01 (ramp) or 02 (coast) set # on the unit. A keepalive is also actively unsafe here: the GS1 manual of this # same family (p. 5-17) warns that re-writing the RUN command overrides an # operator's keypad STOP when P3.00 = 03. name = "AutomationDirect DURApulse GS3" vendor = "AutomationDirect" device_type = "vfd" verified = false probe_register = 0x2100 # Status Monitor 1, readable whenever the port is alive [connection] summary = "The GS3 has built-in two-wire Modbus RTU and supports the external GS-EDRV gateway for Modbus TCP." warnings = [] [[connection.methods]] id = "rj12_rs485" title = "Built-in RJ12 Modbus RTU" transport = "serial" hardware = "built_in" port = "GS3 RJ12 Serial Comm Port" connector = "RJ12 6P4C wired as RS-485" adapter = "Isolated USB-to-RS-485 adapter, 2-wire half-duplex" cable = "Shielded twisted-pair RS-485 cable terminated to RJ12 6P4C" parts = ["Isolated two-wire RS-485 adapter", "Shielded twisted-pair RS-485 cable terminated to RJ12 6P4C", "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 P3.00=03 or 04, P4.00=05, P9.00=node, P9.01=baud, and P9.02=03 for RTU 8N2; configure P9.03-P9.05 for communication loss."] 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.", "RJ12 pin 1 carries +15 V; pins 5 and 6 are not used for Modbus."] source = "AutomationDirect DURApulse GS3 User Manual, 2nd Edition, printed pp. 5-14 to 5-18 (RJ12 wiring and GS-EDRV), Appendix A pp. A-58 to A-60 (gateway/cables)" [[connection.methods.wiring]] adapter = "Adapter D+ / +" device = "RJ12 pin 4 (SG+)" signal = "RS-485 data positive" required = true [[connection.methods.wiring]] adapter = "Adapter D- / -" device = "RJ12 pin 3 (SG-)" signal = "RS-485 data negative" required = true [[connection.methods.wiring]] adapter = "Adapter signal ground / shield" device = "RJ12 pin 2 (GND)" signal = "Signal reference or shield drain" required = false [[connection.methods]] id = "gs_edrv_gateway" title = "GS-EDRV / GS-EDRV100 Modbus TCP gateway" transport = "tcp" hardware = "gateway" port = "Ethernet port on DIN-rail GS-EDRV gateway; serial side connects to the drive communications jack" connector = "RJ45 Ethernet on network side; GS3 RJ12 serial cable on drive side" adapter = "Computer Ethernet interface or Ethernet switch" cable = "Ethernet patch cable plus the AutomationDirect drive-interface cable for the selected GS model" parts = ["GS-EDRV or GS-EDRV100 DIN-rail gateway", "External 24 VDC power supply", "Model-correct drive-interface cable", "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 = ["Match the GS3 serial setup and select RS-485 for run and frequency sources.", "Power the GS-EDRV from a separate 10-33 VDC supply (GS-EDRV100: 10-36 VDC) and configure its IP address and serial settings to match the drive."] 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 gateway serial cable is model-specific. Do not plug a normal Ethernet patch cable from a LAN directly into the drive modular jack."] source = "AutomationDirect DURApulse GS3 User Manual, 2nd Edition, printed pp. 5-14 to 5-18 (RJ12 wiring and GS-EDRV), Appendix A pp. A-58 to A-60 (gateway/cables)" # P9.01 default 01 = 9600 baud; 8N2 corresponds to P9.02 = 03. [serial] baudrate = 9600 parity = "N" stopbits = 2 # Status addresses, manual pp. 5-9 to 5-11. Read-only. [monitor] # Bits 1-0 are a two-bit state field, not flags: 00 stopped (no output), # 01 stopping/ramping (HAS output), 10 standby (no output), 11 running (has # output). Bits 4-3 are likewise a two-bit direction field: 00 FWD, 01 REV->FWD, # 10 FWD->REV, 11 REV. status_word = { address = 0x2101, bits = { 0 = "STATE_LSB", 1 = "STATE_MSB", 2 = "JOG", 3 = "DIR_LSB", 4 = "DIR_MSB", 8 = "FREQ_SRC_SERIAL", 9 = "FREQ_SRC_ANALOG", 10 = "CMD_SRC_SERIAL", 11 = "PARAMS_LOCKED", 12 = "COPY_ENABLED" } } frequency_command = { address = 0x2102, scale = 0.1, unit = "Hz" } # (XXX.X) output_frequency = { address = 0x2103, scale = 0.1, unit = "Hz" } # (XXX.X) # h2104 is the one status word the manual does not annotate with (XXX.X). The # keypad shows output current as "0.9 Amp" (p. 3-4), so 0.1 A per count is the # reading here. CONFIRM ON HARDWARE before trusting the magnitude. motor_current = { address = 0x2104, scale = 0.1, unit = "A" } dc_bus_voltage = { address = 0x2105, scale = 0.1, unit = "V" } # (XXX.X) output_voltage = { address = 0x2106, scale = 0.1, unit = "V" } # (XXX.X) motor_speed = { address = 0x2107, unit = "RPM" } power_factor_angle = { address = 0x210A } # manual states no unit or scale motor_load = { address = 0x210B, unit = "%" } # output current / drive rated current pid_setpoint = { address = 0x210C } pid_feedback = { address = 0x210D } firmware_version = { address = 0x2110 } # Manual pp. 5-2 and 5-8. Five discrete command parameters, no packed word. [control] command_register = 0x091B # P9.27 Serial Comm RUN Command: 00 Stop, 01 Run stop = [0] run_fwd = [1] # run_rev is deliberately absent. Direction is NOT a bit of the run register # and NOT the sign of the reference: it is its own parameter, P9.28 Serial Comm # Direction Command at 0x091C (00 forward, 01 reverse). This profile commands # forward only rather than pretend a reverse sequence exists on 0x091B. # # Reset is P9.30 at 0x091E, a DIFFERENT register from run, so the reset value # cannot be a run command. Written 01 (Fault Reset) then back to 00 (No action) # so the parameter does not stay latched. reset_register = 0x091E reset = [1, 0] speed_register = 0x091A # P9.26 Serial Comm (RS-485) Speed Reference speed_scale = 0.1 # 0.0-400.0 Hz in 0.1 Hz counts; 60.0 Hz -> 600 speed_unit = "Hz" max_ref = 400.0 step_delay = 0.05 [running_check] register = 0x2101 # Bit 0 is set in exactly the two states the manual describes as "drive has an # output" (01 stopping, 11 running). Bit 1 alone would also match standby, # where there is no output. bit = 0 # Active fault code in Status Monitor 1; stored history in P6.31-P6.36. [faults] register = 0x2100 history = [0x061F, 0x0620, 0x0621, 0x0622, 0x0623, 0x0624] # Manual p. 5-9 (Status Monitor 1). The P6.31-P6.36 record list on p. 4-58 # uses the same numbering but disagrees on two entries — it calls 19 "Auto Ramp # Fault" and 20 "Parameters Locked", and omits 16 and 18. The names below are # the h2100 list, which is what [faults].register reads. [faults.codes] 0 = "No fault occurred" 1 = "Over-current (oc)" 2 = "Over-voltage (ov)" 3 = "Overheat (oH)" 4 = "Overload (oL)" 5 = "Thermal Overload 1 (oL1)" 6 = "Over-torque (oL2)" 7 = "External Fault (EF)" 8 = "CPU Failure 1 (cF1)" 9 = "CPU Failure 2 (cF2)" 10 = "CPU Failure 3 (cF3)" 11 = "Hardware Protection Failure (HPF)" 12 = "Over-current during accel (ocA)" 13 = "Over-current during decel (ocd)" 14 = "Over-current during steady state (ocn)" 15 = "Ground Fault or Fuse Failure (GFF)" 16 = "Low Voltage (Lv)" 17 = "Input Power 3-phase Loss (PHL)" 18 = "External Base-Block (bb)" 19 = "Auto Adjust accel/decel Failure (cFA)" 20 = "Software Protection Code (codE)" 21 = "PID Feedback Loss (FbE)" 22 = "Encoder Feedback Loss" 23 = "Output Shorted (occ)" 24 = "Momentary Power Loss" [rating] register = 0x092A # P9.42 Manufacturer Model Information, 00-26 = voltage/hp label = "GS3 model code (P9.42)" # Cloneable configuration, manual pp. 5-4 to 5-8. Group 9 is EXCLUDED on # purpose: it holds the node address, baud rate and protocol, and restoring it # onto a replacement drive takes that drive off the bus. P6.31-P6.36 (fault # history) and the h2xxx status space are excluded as read-only. Sparse gaps # inside these ranges are expected and are reported as unreadable by the dump. [parameters] ranges = [ [0x0000, 0x0007], # P0.00-P0.07 motor [0x0100, 0x0116], # P1.00-P1.22 ramp [0x0200, 0x020A], # P2.00-P2.10 volts/hertz [0x0300, 0x031F], # P3.00-P3.31 digital [0x0400, 0x0412], # P4.00-P4.18 analog [0x0500, 0x050F], # P5.00-P5.15 presets [0x0600, 0x061E], # P6.00-P6.30 protection (stops before the fault records) [0x0625, 0x0625], # P6.37 hunting gain [0x0700, 0x071C], # P7.00-P7.28 PID [0x0800, 0x0802], # P8.00-P8.02 display [0x0A00, 0x0A05], # P10.00-P10.05 encoder feedback ]