Overview
Connecting Rapid SCADA to a Schneider Electric PLC requires a precise understanding of Modbus addressing conventions. A frequently encountered configuration error stems from misinterpreting a Modbus address such as 400001 — users type the full five-digit identifier into a field that expects only the offset, or vice versa. The result is a polling failure that presents as no response from device or illegal data address.
This reference consolidates the addressing logic, the Schneider PLC Modbus server model, and the Rapid SCADA 6 driver configuration parameters into a single procedure. Engineers deploying M340, M580, Modicon Momentum, or any Modbus TCP/RTU-compatible Schneider controller against a Rapid SCADA front end should be able to bring the link online in under an hour by following the steps and verification checks below.
Modbus Addressing Fundamentals
The Modbus application protocol defines four primary data tables. Each table uses a five-digit reference where the leading digit identifies the table and the remaining four digits specify the element offset.
| Reference Prefix | Data Table | Modbus Function Codes | Access |
|---|---|---|---|
| 0xxxxx | Discrete Outputs / Coils | 01 (read), 05/15 (write) | Read/Write bit |
| 1xxxxx | Discrete Inputs | 02 (read) | Read-only bit |
| 3xxxxx | Input Registers | 04 (read) | Read-only 16-bit |
| 4xxxxx | Holding Registers | 03 (read), 06/16 (write) | Read/Write 16-bit |
The classic Modicon convention (still used by Schneider controllers) numbers elements starting at 1. A holding register reference of 400001 therefore means holding register table, element #1, which maps to a zero-based offset of 0 on the wire. Element 400010 corresponds to offset 9.
Schneider PLC Modbus Server Model
Schneider Electric Modicon controllers expose Modbus data through the following server modes:
- Modbus TCP server — default port 502, configurable to any unused port.
- Modbus RTU over RS-485 — slave mode on a multi-drop serial bus.
- Modbus RTU over TCP — RTU framing tunneled inside a TCP connection.
- Modbus ASCII — legacy mode, rarely used in new deployments.
The native Modbus address space on a Schneider PLC is the same regardless of transport. On Modicon M340 and M580 controllers, the legacy Modbus request addresses map onto the %MW (memory word) area according to a fixed mapping table defined in the controller's programming help. For EcoStruxure Control Expert (Unity Pro) and EcoStruxure Process Expert, this mapping is configurable per project.
For Modicon M340 specifically, holding register 400001 typically resolves to %MW0. Holding register 400100 resolves to %MW99. The mapping remains one-to-one (Modicon index = offset + 1) so the offset arithmetic in the SCADA always matches the controller's %MW layout.
Rapid SCADA 6 Architecture
Rapid SCADA 6 is the open-source SCADA platform hosted at github.com/RapidScada/scada-v6. The platform targets large distributed industrial automation systems and runs on Windows or Linux servers, embedded computers, and cloud instances.
The logical structure is hierarchical:
A channel represents a physical/logical communication line and groups devices sharing that line. A device is one addressable PLC on the channel. Tags are the individual data points polled from or written to a device. Channels and devices are configured in ScadaComm/config/ as XML files; the web-based Administrator application generates the XML from a guided form.
Prerequisites
- Rapid SCADA 6 server installed and licensed (community edition is free for non-commercial use).
- Schneider PLC with a known IP address (Modbus TCP) or COM port settings (Modbus RTU):
- IP, subnet mask, gateway configured in Control Expert / Unity Pro.
- Modbus TCP server enabled on port 502 (default).
- Read/Write access enabled in the controller's Modbus server configuration.
- Ethernet connectivity verified from the SCADA host —
pingand a Modbus TCP probe (e.g.,mbpoll -m tcp -t 4 -r 1 -c 1 10.0.0.10on Linux) both succeed. - Project variable list (PVL) exported from Control Expert showing the
%MWaddress of each tag to be polled.
Installing the Modbus Driver in Rapid SCADA
Rapid SCADA 6 ships Modbus drivers as separate modules. For Schneider PLCs, the Modbus TCP driver or the Modbus RTU driver is required depending on transport.
- Open the Rapid SCADA Administrator web interface (default:
https://localhost/scada). - Navigate to Modules and confirm the driver is listed. If absent, download the appropriate package from the official repository at github.com/RapidScada and copy the
.dllinto theScadaComm/Modfolder. - Restart the
ScadaCommservice so the new module is loaded. Verify the service log shows the driver initialized without errors.
Configuring the Communication Channel
- In the Administrator interface, select Configuration → Communication Lines.
- Click New Communication Line. Assign a descriptive name (e.g.,
Schneider_ModbusTCP_Line1). - Choose the driver — Modbus TCP for Ethernet, Modbus RTU for serial.
- For TCP, leave Port at
502and set Connection Timeout to3000 ms, Polling Period to1000 ms as a safe starting point. - For RTU, configure COM port, Baud (typically 19200 for Schneider), Parity (Even), Data bits (8), and Stop bits (1).
- Save the configuration. The line must be enabled before devices can poll.
Configuring the Device
- Select Configuration → Devices and add a new device under the channel.
- Set the device name (e.g.,
M340_Unit1), identifier, and Modbus address: for Modbus TCP this is the Unit ID / Slave ID. Schneider controllers typically default to1when no bridging is configured. - Enter the device address. For Modbus TCP:
10.0.0.10:502. For Modbus RTU: the COM port defined on the channel. - Set Request Timeout to
1000 ms and Time Before Retry to5000 ms. - Save and apply configuration.
Address Mapping: Schneider PLC to Rapid SCADA Tag
This is the section that resolves the original question. A Schneider %MW address translates to a Modbus holding register reference and finally to a Rapid SCADA tag entry.
| Schneider Variable | Modicon Reference | Modbus Offset | Rapid SCADA Tag → Address | Function Code |
|---|---|---|---|---|
| %MW0 | 400001 | 0 | Tag addr = 0 (offset) |
FC03 / FC06 / FC16 |
| %MW100 | 400101 | 100 | Tag addr = 100
|
FC03 / FC06 / FC16 |
| %MW4999 | 405000 | 4999 | Tag addr = 4999
|
FC03 / FC06 / FC16 |
| %M100 (bit 5) | 000101 | 100, bit 5 | Coil addr = 100, bit = 5
|
FC01 / FC05 / FC15 |
The Rapid SCADA Modbus driver typically accepts either the raw Modicon reference (e.g., 400001) or the zero-based offset. In the tag editor, the convention is documented in the driver's help text. When the field is labeled Address and the column header is Offset, enter only the numeric offset (e.g., 0 for %MW0). When the field is labeled Modbus Address, you may enter the full reference.
%M booleans, the Modbus coil reference uses the byte index of the %MW that contains the bit, plus the bit number (0–15). Engineers frequently confuse this — always verify on a single bit before scaling.
Step-by-Step Tag Configuration
- Open Configuration → Inputs (or Outputs for control tags).
- Click New Input. Set the device to
M340_Unit1. - Choose the signal type: Analog for register values, Discrete for coils.
- Enter the Modbus offset. For
%MW0as a 16-bit unsigned integer, offset =0. - Set Quantity =
1for a single tag, or use group tags to read consecutive registers in one request. - Configure engineering units, scaling, deadband, and archiving.
- Save. The tag becomes active on the next poll cycle.
For batch reads of contiguous %MW registers, configure a group tag with the start offset and quantity equal to the number of words. This reduces Modbus request count and improves throughput on slow serial links.
Verification
- Open the Rapid SCADA web interface and navigate to Data → Real-time Data.
- Confirm the new tag shows a value consistent with the controller (cross-check with Control Expert online watch table).
- Inspect Communication → Device Status — the device should display Online with zero CRC or timeout errors.
- Force a value in the controller and verify it appears in the SCADA within one polling period.
- From the SCADA, write a value (write tag) and verify the controller accepts it (Control Expert live values update).
- Check Server → Log for any
ExceptionCodeentries. Common exceptions and their meaning:
| Exception Code | Name | Cause | Remediation |
|---|---|---|---|
| 0x01 | Illegal Function | FC not supported by server | Verify controller permits FC03/06/16 |
| 0x02 | Illegal Data Address | Offset outside PLC memory map | Reduce offset or split request |
| 0x03 | Illegal Data Value | Quantity or value out of range | Reduce quantity, check scaling |
| 0x04 | Slave Device Failure | Controller fault or busy | Check PLC diagnostics, restart server |
| 0x0A / 0x0B | Gateway Path | Bridging misconfiguration | Disable gateway path on direct TCP |
Troubleshooting Matrix
| Symptom | Likely Cause | Diagnostic | Fix |
|---|---|---|---|
| Device offline immediately after configuration | Wrong IP, port blocked, firewall |
telnet 10.0.0.10 502 from SCADA host |
Open firewall, verify PLC IP |
Device online but all tags show NULL
|
Off-by-one offset; tag address entered as Modicon reference in offset field | Compare %MW in PLC with offset in tag |
Subtract 1 from Modicon reference |
| Tags return 0 or static value | PLC not updating %MW; wrong memory area |
Watch table in Control Expert | Verify program writes to the polled address |
| Intermittent timeouts | Polling too aggressive; TCP keepalive not set | Check log for repeated timeouts | Raise poll period to 2000–5000 ms |
| Illegal Data Address on large quantity | Request crosses a memory boundary | Reduce quantity and retest | Split into multiple tags |
| RTU: garbled responses | Baud/parity mismatch or A/B swap | Oscilloscope on RS-485 lines | Match settings to controller |
Performance Tuning
For a Schneider Modicon M340 polled at 1000 ms with 200 tags spread across two Modicon references, plan for approximately 4–8 Modbus TCP requests per second. Optimization levers include:
- Group tags — read up to 125 holding registers per FC03 request (Modbus spec limit).
- Stagger polls — split devices across channels with offset poll times to balance load.
- Deadband filtering — suppress archival of values that have not changed by more than the engineering-unit deadband.
- Redundancy — Rapid SCADA 6 supports a redundant Communicator; pair two SCADA hosts with a virtual IP failover for the Schneider PLC connection.
Security Considerations
Modbus TCP has no built-in authentication or encryption. On plant networks, isolate the SCADA-to-PLC link on a dedicated VLAN and apply ingress ACLs at the managed switch. For new deployments, evaluate M580 controllers with Modbus/TCP security extensions or migrate to OPC UA over a Schneider M580 CPU with the appropriate firmware module.
What does a Modbus address like 400001 actually mean in a Schneider PLC?
The prefix 4 identifies the holding register table. The trailing 00001 is the one-based Modicon element index, so 400001 refers to the first holding register. On a Modicon M340 this maps to %MW0, which is zero-based offset 0 on the Modbus wire.
Why does my Rapid SCADA tag stay NULL even though the device shows online?
The most common cause is an off-by-one addressing mistake: the tag's offset field was filled with the full Modicon reference (e.g., 400001) instead of the zero-based offset (0). The PLC responds without error, but the data the SCADA reads is from a different register than expected. Subtract 1 from the Modicon index and retest.
Which Modbus function codes should I enable on a Schneider M340 server?
For typical SCADA use, enable FC01 (read coils), FC02 (read discrete inputs), FC03 (read holding registers), FC04 (read input registers), FC05 (write single coil), FC06 (write single register), FC15 (write multiple coils), and FC16 (write multiple registers). These are the standard subset supported by the Modicon Modbus server.
How do I poll more than 125 registers at once from Rapid SCADA?
Modbus limits each holding register request to 125 registers per transaction. Configure multiple group tags, each pointing at a different Modicon offset range, and Rapid SCADA will issue them as parallel requests within the same poll cycle. Avoid splitting a logical group across two tags unless necessary.
Can Rapid SCADA talk to a Schneider PLC over Modbus RTU as well as TCP?
Yes. Rapid SCADA 6 supports Modbus RTU on RS-232/RS-485 COM ports and Modbus RTU over TCP (RTU framing inside a TCP connection). Select the matching driver when creating the communication line, then set baud rate, parity, data bits, and stop bits to match the controller's serial configuration.