AutomationDirect SureServo SVA-2040 Modbus RTU Control with Click PLC: Complete Setup Guide
This guide covers commissioning and controlling an AutomationDirect SureServo SVA-2040 servo drive from a Click C0-00AR-D PLC using RS-232 Modbus RTU. It is based on a working installation automating the crossfeed of an Elgin surface grinder — incrementing the grinding wheel a precise amount on each table stroke.
If you are using any SureServo drive (SVA or SV2A variants differ — this guide is specifically for the SVA-2040 in Pr internal indexer mode), this covers every Modbus address, parameter setting, DI configuration, math formula, and ladder sequence you need.
---
Hardware
- Servo drive: AutomationDirect SureServo SVA-2040
- PLC: Click C0-00AR-D
- Communication port: CPU Port 2 (RS-232)
- HMI: AutomationDirect C-more (optional, for operator input)
Physical Wiring
Connect the Click CPU Port 2 RS-232 to the SureServo CN3 communication port. The SVA-2040 uses a standard DB9 RS-232 pinout — refer to the SureServo user manual Chapter 3 for the exact pin assignments. A null modem cable is NOT needed; use a straight-through RS-232 cable.
---
Mechanical Setup (Application-Specific — Scale for Yours)
This installation uses:
- Acme screw: 1-5 (5 TPI, 0.200 inch per revolution)
- Gearbox: 5:1
- Belt/pulley: 2:1
- Total ratio at screw: 10:1
- Total ratio overall: 50:1
- Encoder resolution: 10,000 counts per servo revolution
Counts Per Unit of Travel
| Travel | Formula | This Application |
|---|---|---|
| Counts per inch | 10,000 × TPI × ratio | 10,000 × 5 × 10 = 500,000 |
| Counts per 0.001" (1 thou) | Counts/inch ÷ 1000 | 500,000 ÷ 1000 = 500 |
| Counts per 0.005" | Counts/thou × 5 | 500 × 5 = 2,500 |
| Counts per 0.010" | Counts/thou × 10 | 500 × 10 = 5,000 |
General formula: Counts = (thousandths entered by operator) × 500
For your own drivetrain: Counts per thou = 10,000 ÷ (TPI × (1 ÷ total_ratio))
---
Drive Parameter Settings
Set these parameters on the drive keypad before attempting Modbus control.
Communication Parameters
| Parameter | Address (Hex) | 984 Modbus Address | Value | Description |
|---|---|---|---|---|
| P3-00 | 0300h | 400769 | 2 | Modbus slave address |
| P3-01 | 0301h | 400770 | 2 | Baud rate (2 = 19200) |
| P3-02 | 0302h | 400771 | 6 | Protocol: 8N2 RTU |
| P3-05 | 0305h | 400774 | 0 | Port type: RS-232 |
Note: The Click PLC Modbus master must match — 19200 baud, 8 data bits, no parity, 2 stop bits.
Control Mode
| Parameter | Address (Hex) | 984 Address | Value | Description |
|---|---|---|---|---|
| P1-01 | 0101h | 400258 | 1 | Pr mode (internal indexer) |
| P1-33 | 0121h | 400290 | 1 | Incremental positioning |
| P2-30 | 021Eh | 400543 | 5 | Limit flash writes (set during commissioning) |
Direction Control
Negative position values cannot be entered into Click DS registers (limited to 0–32,767) and cannot be entered on the drive keypad (stops at 0). Do not attempt two's complement workarounds — the DS register type will not accept them.
Use P1-03 to flip output polarity on the fly:
| Parameter | 984 Address | Value | Result |
|---|---|---|---|
| P1-03 | 400260 | 0 | Forward (default direction) |
| P1-03 | 400260 | 1 | Reverse (polarity flipped) |
No power cycle required. Write this before each move to set direction.
---
Digital Input (DI) Configuration
These settings control which functions are assigned to each DI terminal on the drive.
| DI | Parameter | 984 Address | Setting | Function | Contact | P4-07 Bit | Decimal Value |
|---|---|---|---|---|---|---|---|
| DI1 | P2-10 | 400523 | 111 | Position Command Select 0 (PCS0) | NO | Bit 0 | 1 |
| DI2 | P2-11 | 400524 | 112 | Position Command Select 1 (PCS1) | NO | Bit 1 | 2 |
| DI3 | P2-12 | 400525 | 113 | Position Command Select 2 (PCS2) | NO | Bit 2 | 4 |
| DI4 | P2-13 | 400526 | 108 | Command Trigger | NO | Bit 3 | 8 |
| DI5 | P2-14 | 400527 | 124 | Home Sensor | NC | Bit 4 | 16 |
| DI6 | P2-15 | 400528 | 101 | Servo Enable | NO | Bit 5 | 32 |
| DI7 | P2-16 | 400529 | 107 | Position Command Pause | NO | Bit 6 | 64 |
| DI8 | P2-17 | 400530 | 127 | Start Home Move Trigger | NO | Bit 7 | 128 |
DI4 must be set to 108 (Command Trigger, NO contact) — the default value of 8 is active-low and will not work correctly with Modbus virtual DI control.
---
Modbus Control Registers
P3-08 — Modbus DI Mask (Write Once at Startup)
P3-08 enables Modbus control of specific DIs. DIs not included in this mask remain under hardware terminal control.
| 984 Address | 400777 |
|---|---|
| Write once | Yes — survives power cycle |
Add the decimal values of each DI you want Modbus to control:
| DI | Bit | Decimal | Include? |
|---|---|---|---|
| DI1 (PCS0) | Bit 0 | 1 | YES — Modbus position select |
| DI2 (PCS1) | Bit 1 | 2 | YES — Modbus position select |
| DI3 (PCS2) | Bit 2 | 4 | YES — Modbus position select |
| DI4 (Trigger) | Bit 3 | 8 | YES — always |
| DI5 (Home Sensor) | Bit 4 | 16 | NO — physical sensor wired to terminal |
| DI6 (Servo Enable) | Bit 5 | 32 | YES — always |
| DI7 (Pause) | Bit 6 | 64 | Optional |
| DI8 (Home Trigger) | Bit 7 | 128 | YES — if homing via Modbus |
This installation: Write 47 to P3-08 (DI1+DI2+DI3+DI4+DI6 = 1+2+4+8+32 = 47)
Common values:
| Configuration | Value |
|---|---|
| Servo Enable + Trigger only | 40 |
| Servo Enable + Trigger + Home | 168 |
| Full Modbus (all DIs) | 255 |
| This installation (DI1–DI4 + DI6) | 47 |
P4-07 — Virtual DI Control (Write Per Command)
P4-07 sets the active state of each virtual DI in real time. Only DIs enabled in P3-08 respond.
| 984 Address | 401032 |
|---|
| Value | Binary | DIs Active | Effect |
|---|---|---|---|
| 0 | 00000000 | None | Servo disabled, no trigger |
| 32 | 00100000 | DI6 | Servo enabled, trigger inactive |
| 40 | 00101000 | DI6 + DI4 | Servo enabled, trigger HIGH |
| 8 | 00001000 | DI4 only | Trigger without servo (do not use alone) |
The Command Trigger is edge-sensitive — the drive responds to the 0→1 rising edge on DI4 (Bit 3). You must pulse it: write 40, short delay, write 32.
Position Registers
| Parameter | 984 Address | Description |
|---|---|---|
| P1-15 | 400272 | Position — full revolutions |
| P1-16 | 400273 | Position — encoder counts (fractional rev) |
| P1-03 | 400260 | Direction polarity (0=forward, 1=reverse) |
For incremental moves less than one revolution, write 0 to P1-15 and the count value to P1-16. For longer moves, write whole revolutions to P1-15 and remaining counts to P1-16.
Status and Diagnostic Registers
| Parameter | 984 Address | Description |
|---|---|---|
| P0-01 | 400002 | Fault code (0 = no fault) |
| P0-02 | 400003 | Position feedback (counts) |
| P0-17 | 400018 | Output status (bit field — see below) |
| P4-05 | 401030 | Jog control register |
P0-17 Status Bit Decoding
P0-17 returns a decimal value. Convert to binary to read each bit:
| Bit | Decimal | Meaning when SET |
|---|---|---|
| Bit 0 | 1 | Servo Ready |
| Bit 1 | 2 | Servo Enabled |
| Bit 2 | 4 | At Zero Velocity |
| Bit 3 | 8 | At Target Velocity |
| Bit 4 | 16 | At Position (move complete) |
| Bit 5 | 32 | At Torque Limit |
| Bit 6 | 64 | Overload Warning |
| Bit 7 | 128 | Brake Released |
| Bit 8 | 256 | Servo On (confirmed) |
To decode any P0-17 value: subtract the largest bit value that fits, check that bit, repeat with the remainder.
Example — P0-17 returns 279:
- 279 − 256 = 23 → Bit 8 set (Servo On confirmed)
- 23 − 16 = 7 → Bit 4 set (At Position)
- 7 − 4 = 3 → Bit 2 set (At Zero Velocity)
- 3 − 2 = 1 → Bit 1 set (Servo Enabled)
- 1 − 1 = 0 → Bit 0 set (Servo Ready)
Result: Servo on, enabled, at position, at zero velocity, ready. This is the normal idle state after a completed move.
Example — P0-17 returns 21:
- 21 − 16 = 5 → Bit 4 set (At Position)
- 5 − 4 = 1 → Bit 2 set (At Zero Velocity)
- 1 − 1 = 0 → Bit 0 set (Servo Ready)
Result: Servo disabled, brake engaged. Normal state after servo disable command.
---
Complete Move Sequence (Pr Incremental Mode)
This is the full ladder sequence for one incremental move. Write each Modbus value in order; wait for the success bit between writes if your MBUS blocks use one.
| Step | Action | Write To (984 Addr) | Value | Wait For |
|---|---|---|---|---|
| 1 | Initialize Modbus mask | 400777 (P3-08) | 47 | Success bit |
| 2 | Set incremental mode | 400290 (P1-33) | 1 | Success bit |
| 3 | Set direction | 400260 (P1-03) | 0 or 1 | Success bit |
| 4 | Write move counts | 400273 (P1-16) | Calculated value | Success bit |
| 5 | Enable servo | 401032 (P4-07) | 32 | P0-17 bit 1 = set |
| 6 | Fire command trigger | 401032 (P4-07) | 40 | 200ms timer |
| 7 | Drop trigger | 401032 (P4-07) | 32 | P0-17 bit 4 = set |
| 8 | Move complete | — | — | Next action |
Steps 1–2 only need to run once at PLC startup, not before every move.
Ladder Notes
- Steps 1 and 2 are initialization — run them on first scan only, not in the move routine
- Step 3 (direction) must be written before step 4 (counts) every cycle
- The trigger pulse in steps 6–7 is edge-sensitive; the delay between them can be as short as one PLC scan but 200ms is reliable
- Monitor P0-17 bit 4 (At Position) to confirm move complete before triggering the next move or signaling external equipment
---
Servo Enable and Disable
| Action | Write To | Value |
|---|---|---|
| Enable servo | 401032 (P4-07) | 32 |
| Disable servo | 401032 (P4-07) | 0 |
Confirm enable by reading P0-17 — bit 1 (decimal 2) should be set. A value of 279 is the typical confirmed-enabled-at-rest reading.
---
Jog via Modbus (Testing / Commissioning)
Jog is useful for verifying Modbus motion commands before building the full position sequence.
| Step | Write To | Value |
|---|---|---|
| Set jog speed (RPM) | 401030 (P4-05) | e.g. 100 |
| Jog CW | 401030 (P4-05) | 4999 |
| Stop | 401030 (P4-05) | 5000 |
---
Troubleshooting
Servo enable write appears successful but motor shaft does not lock: Read P3-08 (400777). If it returns 0, the Modbus DI mask was never written or did not persist. Write 47 to P3-08 and retry.
Command trigger fires but motor does not move:
- Read P0-01 (400002) — if non-zero, clear the fault first
- Confirm P1-33 = 1 (incremental mode)
- Confirm P1-16 (400273) has a non-zero value written
- Confirm P4-07 shows 40 during the trigger pulse (read it back)
- Check that DI4 (P2-13) is set to 108, not the default 8
Motor moves in the wrong direction: Write 1 to P1-03 (400260) to flip polarity. Do not attempt negative values in Click DS registers — they are unsigned and will not accept them.
P0-17 reads lower than expected after enable: Bit 8 (256) indicates servo on confirmed. If bit 1 (2) is set but bit 8 (256) is not, the drive has received the enable command but internal conditions (e.g. motor not connected, resolver fault) are preventing full servo-on.
MBUS block returns SC43 (Out of Range) error: The 984 address you are writing to is outside the range the Click considers valid for that function code, or the data value exceeds the parameter's range. Double-check the 984 address calculation: 984 address = (hex address converted to decimal) + 400001.
---
Quick Reference — All Addresses
| Parameter | Hex Addr | 984 Address | Notes |
|---|---|---|---|
| P0-01 | 0001h | 400002 | Fault code |
| P0-02 | 0002h | 400003 | Position feedback |
| P0-17 | 0011h | 400018 | Status bits |
| P1-01 | 0101h | 400258 | Control mode |
| P1-03 | 0103h | 400260 | Direction polarity |
| P1-15 | 010Fh | 400272 | Position revolutions |
| P1-16 | 0110h | 400273 | Position counts |
| P1-33 | 0121h | 400290 | Incremental mode |
| P2-10 | 020Ah | 400523 | DI1 function |
| P2-11 | 020Bh | 400524 | DI2 function |
| P2-12 | 020Ch | 400525 | DI3 function |
| P2-13 | 020Dh | 400526 | DI4 function |
| P2-14 | 020Eh | 400527 | DI5 function |
| P2-15 | 020Fh | 400528 | DI6 function |
| P2-16 | 0210h | 400529 | DI7 function |
| P2-17 | 0211h | 400530 | DI8 function |
| P2-30 | 021Eh | 400543 | Flash write limit |
| P3-00 | 0300h | 400769 | Slave address |
| P3-01 | 0301h | 400770 | Baud rate |
| P3-02 | 0302h | 400771 | Protocol |
| P3-05 | 0305h | 400774 | Port type |
| P3-08 | 0308h | 400777 | Modbus DI mask |
| P4-05 | 0405h | 401030 | Jog control |
| P4-07 | 0407h | 401032 | Virtual DI outputs |