Overview of the WinCC Modbus TCP/IP Driver
The Siemens WinCC SCADA suite ships with a native Modbus TCP/IP channel driver (Modbus TCPIP.chn) intended primarily for communication with Schneider Electric (formerly Modicon) controllers. The driver presents only three PLC class entries in its connection properties dialog:
- Modicon 984
- Modicon Compact / Quantum / Momentum
- Modicon Premium / Micro
When the target controller is not a Schneider product — for example a Hitachi R-700 series (PLU500), an HMS eWON 2005 RTU, a generic Modbus TCP slave, or a third-party PLC with a Modbus server — the question becomes which class to select, whether communication will work, and how to map tag addresses correctly. Field experience shows that any of the three Modicon classes can be used as a logical "container" for a non-Modicon device, provided the target speaks standard Modbus TCP/IP. The driver itself is intentionally limited: Siemens describes it as a driver "with only very few options for setup" that "offers very little to customize the reply" if protocol deviations occur on the slave side.
When the native driver falls short, a Modbus TCP OPC bridge (such as the Lectus Modbus OPC Server) inserted between the slave and WinCC is the standard fallback. This article documents the full configuration path, the addressing rules, the field-proven trial-and-error workflow, and the OPC alternative.
Prerequisites
| Item | Requirement |
|---|---|
| WinCC version | WinCC V7.x, WinCC Professional (TIA Portal), or WinCC Runtime Advanced/Professional with "Modbus TCP/IP" channel option installed |
| Channel file |
Modbus TCPIP.chn present in \bin\ subdirectory of the WinCC project |
| Network | Ethernet TCP/IP reachability between WinCC station and Modbus slave (port 502 open, firewall rules verified) |
| Slave documentation | Modbus function codes supported (FC03 holding, FC04 input, FC05/06 coils, FC15/16 multiple coils/registers), unit ID (slave address 1-255), register map |
| Test tool | Modbus slave simulator (e.g. modpoll, Modbus Tools, or a software Modbus slave) for address verification before connecting the real PLC |
Strategy for PLC Class Selection with Non-Modicon Devices
The WinCC driver dialog does not refuse non-Modicon devices, but it does not validate them either. The class selection is effectively a protocol variant selector. Use the following decision matrix when the target is not a Schneider PLC:
| Selected Class | Address Space Mapping | Best Fit For |
|---|---|---|
| Modicon 984 | 0x / 1x / 3x / 4x addressing, 6-digit numeric | Older Modbus TCP slaves using the original 984 address conventions; legacy third-party devices emulating 984 |
| Compact / Quantum / Momentum | 0x / 1x / 3x / 4x, 5-digit numeric, native Modbus TCP | Most modern Modbus TCP slaves — recommended default for non-Modicon devices |
| Premium / Micro | Same 5-digit numeric with Unity-style variable handling | Schneider Premium/Micro PLCs; functionally interchangeable with Compact/Quantum for raw register access |
For any non-Schneider PLC, the practical recommendation is to select Modicon Compact, Modicon Quantum, Modicon Momentum. This is the most widely used container in field installations reading from generic Modbus TCP slaves, software simulators, and RTUs. The class name does not have to match the actual vendor — it only selects the address translation and framing rules used by the WinCC channel DLL.
Step-by-Step Configuration of the Modbus TCP/IP Channel
1. Add the Channel
- Open WinCC Explorer.
- Right-click Tag Management and select Add New Driver.
- Choose
Modbus TCPIP.chnfrom the driver list. A new channel nodeModbusTCPIPappears under Tag Management.
2. Create a Connection
- Right-click the
ModbusTCPIPchannel node and select New Connection. - Open the connection Properties dialog.
- Set the parameters:
-
IP Address: target slave IPv4 address (e.g.
192.168.1.50). -
Port:
502unless the slave listens on a non-standard port. - PLC Class: select Modicon Compact / Quantum / Momentum for third-party slaves (see Strategy section).
- Station Address (Unit ID): 1-255, default 0 or 1 depending on firmware revision.
- Cycle / Update time: typical 1000 ms; tune according to scan budget.
-
IP Address: target slave IPv4 address (e.g.
3. Define Tags
Tags are added under the connection node. The address format is what trips up most engineers coming from a non-Modbus background. The WinCC Modbus driver uses a numeric address only — the function code prefix (4x, 3x, 0x, 1x) is implied by the data type / address block of the tag, not entered explicitly.
| WinCC Address Field | Mapping | Modbus Function Code Used |
|---|---|---|
| Holding register (e.g. WORD) | 4xxxxx, offset-only | FC03 (Read Holding Registers) / FC06 / FC16 |
| Input register | 3xxxxx, offset-only | FC04 (Read Input Registers) |
| Output coil (bit) | 0xxxxx, offset-only | FC01 / FC05 / FC15 |
| Input contact (bit) | 1xxxxx, offset-only | FC02 |
40001, 400100, or 410001, the value to enter in the WinCC address field is 0 or 1 — the driver adds the base internally. Submitting the full 5- or 6-digit number is the most common configuration error and produces a "bad address" or timeout response.
4. Verify with a Software Modbus Slave First
Before pointing the channel at the real PLC, install a software Modbus TCP slave on the engineering station. The slave's request log shows exactly which FC and which register the WinCC driver is trying to read. This is the fastest way to debug an address-mapping problem:
- Start a software Modbus slave (e.g.
Modbus Tools,diagslave,Modbus Slaveby WinTech). - Configure it to listen on
0.0.0.0:502. - In WinCC Tag Management, set the connection IP to
127.0.0.1. - Enable the channel and watch the slave's request log. Each WinCC tag generates a request; confirm:
- Function code matches the tag type (FC03 for holding, FC04 for input).
- Register address matches the slave's expected base + offset.
- Unit ID matches.
- Once the round-trip works against the simulator, change the connection IP to the real PLC IP and reload the project.
Tag Addressing Worked Examples
| Slave Documentation Shows | Slave Register Number | WinCC Address to Enter | Notes |
|---|---|---|---|
| 40001 (first holding register) | 0 | 0 | Offset, not the full 5-digit |
| 400100 (six-digit convention) | 99 | 99 | Strip the leading 4 and subtract 1 |
| 410001 (Unity / Premium style) | 10000 | 10000 | 6-digit mode if Premium class selected |
| 30001 (first input register) | 0 | 0 | Select "Input" data type, not Holding |
| 00001 (first coil) | 0 | 0 | Select "Binary Tag" with coil type |
If a tag request is rejected with an "Illegal Data Address" exception (Modbus exception code 02), the offset is wrong. If the channel logs a connection error or timeout, the IP, port, or unit ID is wrong.
Verification and Diagnostics
After the channel is enabled, validate communication using the following checks:
-
WinCC Channel Diagnosis: open the channel's diagnostic dialog and confirm "Connection Established" and "OK" status for each tag. Any tag with a quality of
badoruncertainindicates either a wrong address or a non-responsive slave. - Tag Simulator: in the tag properties, enable the simulator and force a known value. Verify the read-back is correct end-to-end.
-
Channel trace: enable Modbus TCP channel logging (via
ModbusTCPIP.login the WinCC diagnostics directory) to capture raw request/response frames. - Wireshark capture: capture TCP/502 traffic from the WinCC station; confirm MBAP header, function code, and exception codes. This is the definitive way to spot a slave that is silently dropping requests or returning a corrupted payload.
OPC Bridge Alternative for Stubborn Slaves
The native WinCC Modbus driver is intentionally thin. When the target slave:
- Uses a non-standard function code not supported by the driver,
- Requires a custom Unit ID behavior,
- Uses signed/unsigned byte-swapping that the driver cannot reorder,
- Sits behind a gateway that needs a specific handshake,
the field-proven alternative is to insert a Modbus TCP OPC server between the slave and WinCC. WinCC ships with an OPC DA client channel; the OPC server handles the Modbus-side quirks and exposes standard DA items that WinCC consumes without modification.
Workflow:
- Install a third-party Modbus OPC server (commercial options include Kepware, Matrikon, Softing; low-cost options include the Lectus Modbus OPC Server, which is widely used in this role for non-Modicon slaves).
- Configure the OPC server with the slave's IP, port, and unit ID. Map each register to a DA item, applying any byte/word swapping rules.
- In WinCC, add the OPC channel driver (
OPC.chn). - Browse the OPC server's namespace from inside WinCC and bind tags to the DA items.
- Verify the same way as the native driver (diagnostic dialog, tag simulator, channel trace).
This indirection solves a class of problems that the native Modbus TCP driver cannot, because the OPC server can be configured with much more granular control over polling, exception handling, and data type conversion. It also makes future migrations easier: swapping out the physical PLC does not require touching the WinCC side, only the OPC server's device configuration.
Field-Validated Reference Examples
| Target Device | Device Type | WinCC PLC Class Used | Outcome |
|---|---|---|---|
| HMS eWON 2005 RTU | Industrial Modbus TCP gateway/RTU | Modicon Compact / Quantum / Momentum | FC03 reads and FC16 writes succeeded once address was corrected to offset-only |
| Generic Software Modbus Slave | Test/diagnostic | Modicon Compact / Quantum / Momentum | Full read/write capability confirmed; slave log used to identify correct offsets |
| Hitachi R-700 series (PLU500) | Third-party PLC with Modbus TCP server | Modicon Compact / Quantum / Momentum (trial and error) | Direct driver works if Hitachi supports standard FC03/FC16; otherwise OPC bridge is the fallback |
Troubleshooting Matrix
| Symptom | Likely Root Cause | Corrective Action |
|---|---|---|
| Channel stays "Disconnected" | Wrong IP, port 502 blocked, no route, PLC in stop, firewall on engineering station |
ping the PLC IP; telnet <ip> 502 from the WinCC station; check Windows Firewall inbound/outbound rules; verify PLC is in run with Modbus TCP server enabled |
| Connection OK, all tags show "bad quality" | Address entered as full 4xxxxx number instead of offset | Strip the leading 4 and subtract 1; re-enter the offset only |
| Tags flicker or report intermittent timeouts | Network congestion, scan time too aggressive, PLC busy, broadcast storm | Increase update time; check switch port error counters; isolate on a dedicated VLAN; reduce tag count per scan group |
| Modbus exception 02 (Illegal Data Address) | Address out of range on the slave, or wrong data type (e.g. reading input register FC04 from a holding-only device) | Cross-check against the slave's register map; verify the function code implied by the WinCC tag type |
| Modbus exception 03 (Illegal Data Value) | Register count in the request exceeds slave buffer or violates a defined block boundary | Split the tag group or use single-register addresses |
| Values read are swapped or wrong order | Byte order / word order mismatch (Big Endian vs Little Endian, word swap) | Apply byte/word swap in the tag's format adjustment; if driver does not support the required swap, switch to an OPC bridge that does |
| Driver loads but cannot find any tags | Channel added but not enabled; project not yet activated on the runtime | |
| Only one of multiple slaves responds | Unit ID collision or all connections routed to the same IP because of a typo |
Performance and Scan Budget Considerations
Each WinCC Modbus tag configured with a fast update time generates an individual request (or a grouped request if tags are in the same address range and the driver groups them). For a non-Modicon PLC, treat the channel as a "best-effort" master and apply these rules:
- Group tags into logical scan groups with matched update times (e.g. fast 250 ms for alarms, slow 2000 ms for measurements).
- Avoid mixing FC01/FC02/FC03/FC04 in a single tight group — most third-party slaves handle mixed FC traffic more slowly than segregated polling.
- If the slave supports a larger PDU, request blocks of registers rather than single registers to reduce request overhead.
- Use a dedicated NIC on the WinCC station for SCADA traffic if the station is also a workstation.
Limitations of the Native Driver and When to Migrate to OPC
Siemens documentation and field experience converge on a clear set of limits. Migrate from the native WinCC Modbus TCP driver to an OPC bridge when any of the following apply:
- The slave requires a non-standard function code (e.g. FC23 for read/write multiple registers with custom semantics).
- The slave uses a proprietary byte or word order that the driver's "Word Swap" / "Byte Swap" settings cannot accommodate.
- You need redundancy (active/passive or active/active Modbus masters) — the native driver is single-master.
- You need a Modbus serial or Modbus RTU over TCP encapsulation that the native driver does not expose.
- You want to expose the same Modbus data to multiple SCADA clients (WinCC, Historian, MES) without duplicating the driver configuration.
For everything else — a non-Modicon PLC that speaks standard Modbus TCP/FC03 and FC16 — the native driver is sufficient and is the recommended first attempt. Most non-Schneider PLCs in this category connect successfully on the first try once the addressing rule is applied.
Which WinCC PLC class should I select for a non-Schneider PLC like the Hitachi R-700 (PLU500)?
Select Modicon Compact / Quantum / Momentum. The class name is a protocol variant selector, not a vendor lock-in. Most generic Modbus TCP slaves — including the Hitachi R-700 series — will accept standard FC03/FC16 traffic when this class is used, and the addressing follows the 4xxxxx offset-only rule.
Why does my WinCC Modbus tag report an error even though the address looks correct?
The WinCC Modbus driver expects the offset only, not the full 4xxxxx number. If the slave register is documented as 40001, the WinCC address field should be 0 (not 40001 or 40000). Verify the actual request on a software Modbus slave to confirm the offset the driver is generating.
Is there any guarantee that a third-party PLC will communicate with the native WinCC Modbus TCP driver?
No. The native driver is intentionally thin and offers very few setup options. Standard Modbus TCP/FC03 and FC16 traffic will work on most non-Schneider PLCs, but any protocol deviation (non-standard FC, byte/word order mismatch, custom Unit ID behavior) will fail. In those cases, insert a Modbus TCP OPC server between the slave and WinCC.
What port does WinCC Modbus TCP use and is it configurable?
Port 502 is the standard Modbus TCP port and is the default in the driver. If the slave listens on a non-standard port, enter the alternate port in the connection's properties. The driver does not support MBAPS (Modbus Application Protocol Secure / TLS) — for encrypted Modbus traffic, use an OPC bridge with TLS support.
What Modbus function codes does the WinCC Modbus TCP driver support?
The native driver supports the core read/write function codes: 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). Function codes outside this set (e.g. FC23, encapsulated custom FCs) are not supported and require an OPC bridge.