Configuring PLC TCP/IP Communication on Industrial Ethernet LANs

David Krause16 min read
Industrial NetworkingSiemensTechnical Reference
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

1. Overview: Industrial Ethernet Protocols for PLC LAN Communication

Programmable Logic Controllers exchange I/O, peer data, and diagnostics over Local Area Networks using TCP/IP as the transport layer, with vendor-defined application protocols riding on top of User Datagram Protocol (UDP) and Transmission Control Protocol (TCP). Three protocol families dominate the installed base across Siemens, Allen-Bradley, and Schneider Electric platforms: PROFINET (PROFIBUS Nutzerorganisation, PI), EtherNet/IP (ODVA), and Modbus TCP (Modbus Organization). All three share the same physical layer (IEEE 802.3 100BASE-TX / 1000BASE-T over UTP/STP copper, or 100BASE-FX/1000BASE-LX fiber), but they diverge sharply in how they map data, schedule deterministic traffic, and expose diagnostics.

Table 1. Industrial Ethernet Protocol Comparison for PLC LANs
Protocol Governing Body Typical Transport Default Port Determinism Primary Vendors
PROFINET RT / IRT PI (PROFIBUS Nutzerorganisation) UDP/RTP + TCP UDP 34962/34963, TCP 34964 Class 1 RT (1 ms) / Class 3 IRT (≤ 1 ms, isochronous) Siemens, Phoenix Contact, Beckhoff, ABB
EtherNet/IP ODVA TCP + UDP TCP 44818 (CIP Messaging), UDP 2222 (I/O) CIP Sync (PTP IEEE 1588) for motion Rockwell, Schneider (M580 eIP), Omron, Mitsubishi (built-in)
Modbus TCP Modbus Organization TCP 502 Non-deterministic (request/response) Schneider Modicon, AutomationDirect, generic I/O

References: PROFINET specification and white papers, ODVA EtherNet/IP Technology, Modbus Messaging on TCP/IP Implementation Guide v1.0b, and the IEEE 802.3 Ethernet working group documentation.

PROFINET, EtherNet/IP, and Modbus TCP can share the same switch fabric. In practice, however, segregate them by VLAN so a broadcast storm from one protocol does not delay traffic from another. Drive traffic (PROFIdrive, CiA 402 over EtherNet/IP) is especially sensitive to jitter.

2. Physical Layer, Cabling, and Topology

Industrial Ethernet over copper and fiber follows IEEE 802.3. Choose cabling based on segment length, EMI environment, and required bandwidth. PROFINET installation guide "PROFINET Cabling and Interconnection Technology" (PNO Order No. 8.072) and the ODVA EtherNet/IP Media Planning Guide both specify Cat 5e or better for new installations.

Table 2. Cabling and Segment Length Limits
Media Standard Max Segment Typical Use
10BASE-T (Cat 3+) IEEE 802.3i 100 m Legacy 10 Mbit/s links
100BASE-TX (Cat 5e) IEEE 802.3u 100 m Most PROFINET / EtherNet/IP copper drops
1000BASE-T (Cat 5e / Cat 6) IEEE 802.3ab 100 m Backbone and gigabit uplinks
1000BASE-LX (fiber) IEEE 802.3z 550 m MMF / 10 km SMF Plant backbone, EMI-heavy areas
100BASE-FX (fiber) IEEE 802.3u 2 km MMF Bridge between buildings or cabinets
Use shielded twisted pair (SF/UTP or S/FTP) with grounded M12 / RJ45 connectors in panels with VFDs, welders, or servo drives. Maintain a 25 mm bend radius and segregate Ethernet from 480 V power by at least 150 mm (parallel run) per TIA-568-C and IEC 61918. Bond both ends of the shield to a clean ground; floating shields cause common-mode noise that PROFINET "port data" LEDs report as a channel fault.

3. IP Address Planning and Subnet Design

Every PLC and field device on the LAN needs a unique IPv4 address and matching subnet mask. Industrial networks commonly use an RFC 1918 private range such as 10.0.0.0/8 or 192.168.1.0/24. Avoid DHCP on the control network; static addressing makes diagnosis predictable and removes a single point of failure during controller warm restarts.

Table 3. Common Industrial Subnet Templates
Network Subnet Mask Usable Hosts Typical Assignment
10.10.10.0/24 255.255.255.0 254 Single-cell control network
10.20.0.0/16 255.255.0.0 65 534 Plant-wide process network
192.168.100.0/24 255.255.255.0 254 OEM machine subnet

Reserve a documented address range for PLCs (e.g., 10.10.10.10–10.10.10.99), HMI/SCADA (10.10.10.100–10.10.10.149), drives (10.10.10.150–10.10.10.199), and distributed I/O blocks (10.10.10.200–10.10.10.250). Reserve .1 as the gateway and .254 as engineering access.

Table 4. Reserved Multicast and Discovery Addresses
Address Function
224.0.0.1 All hosts (IGMPv2)
224.0.0.251 mDNS (multicast DNS discovery)
01-0E-CF-00-00-00 / FF-04-00-00 EtherNet/IP I/O multicast base
01-0E-CF-00-00-00 PROFINET LLDP / DCP multicast base
PROFINET devices configured with a station name (e.g., "et200sp-line1") have their IP assigned by the IO Controller during startup via Discovery and Configuration Protocol (DCP). If you re-IP an ET200SP from TIA Portal, change the station name only after the controller has assigned the IP, or use Siemens PRONETA to align name and IP in one step.

4. PROFINET (Siemens) Configuration

PROFINET is engineered by PI and supported by Siemens, Phoenix Contact, Beckhoff, and most European PLC vendors. It runs on standard TCP/IP plus the RT (Real-Time) and IRT (Isochronous Real-Time) channels that bypass the OS for deterministic traffic. PROFINET classes (CC-A, CC-B, CC-C) define switch and topology behavior.

4.1 Device Roles

  • IO Controller: the PLC (S7-1200, S7-1500, ET200S CPU, SINUMERIK) that runs the application program and configures the IO.
  • IO Device: distributed field device (ET200SP, ET200MP, SINAMICS drive, Festo valve island).
  • IO Supervisor: engineering or HMI tool (TIA Portal, PRONETA, SIMATIC Automation Tool).

4.2 TIA Portal Configuration Steps (S7-1500 ↔ ET200SP)

  1. In Devices & Networks, add the S7-1500 CPU (e.g., 6ES7515-2AM02-0AB0, FW V2.9) and the ET200SP IM155-6 PN ST (6ES7155-6AU02-0BN0).
  2. Connect their PROFINET ports with a drag from one port's green dot to the other; the topology editor will accept the connection.
  3. On the ET200SP, set IP 10.10.10.20, subnet 255.255.255.0, and PROFINET device name et200sp-line1.
  4. Drag slot modules from the catalog (DI 16×24VDC, DQ 16×24VDC/0.5A, AI 4×U/I/RTD) into the device view.
  5. Compile HW Config and download to the CPU. The CPU assigns the IP via DCP during startup; the IM's "BF" LED should be off within a few seconds.

4.3 Port LEDs and Their Meaning (ET200SP IM155-6 PN)

Table 5. ET200SP PROFINET Port LED States
LED State Meaning
LK1 / LK2 Green, steady Link at 100 Mbit/s
LK1 / LK2 Green, flashing Activity (frame received or sent)
LK1 / LK2 Off No link
BF (bus fault) Off Configuration OK, cyclic data exchange running
BF Red, flashing No PROFINET IO Controller reachable / no name assigned
BF Red, steady Configuration mismatch (slot, GSD version, watchdog timeout)

Reference: Siemens SiePortal: PROFINET Configuration with TIA Portal and the Siemens Industry Online Support portal for S7-1500 manuals (entry ID 86140384) and ET200SP system manual (entry ID 58649293).

5. EtherNet/IP (Rockwell/ODVA) Configuration

EtherNet/IP is the ODVA-maintained CIP-on-Ethernet protocol. It is dominant in North American plants and supported by Allen-Bradley ControlLogix, CompactLogix, MicroLogix (with 1761-NET-ENI or 1761-NET-ENIW), and a large installed base of third-party I/O.

5.1 CIP Connection Types

  • CIP Class 3 (Explicit Messaging): request/response used for configuration, MSG instructions in ladder or structured text.
  • CIP Class 1 (I/O Messaging): scheduled cyclic I/O produced/consumed tags or rack-optimized connections.
  • CIP Class 0 / UDP Implicit: broadcast for I/O discovery (used by AOI I/O assemblies).

5.2 Studio 5000 / Logix Designer Connection Setup

  1. Add an Ethernet Module under the backplane: 1756-EN4TR (ControlLogix, 5069-AENTR (CompactLogix 5380), or 1734-AENTR (POINT I/O).
  2. Open Module Properties, set IP address 10.10.10.30, subnet 255.255.255.0, gateway 10.10.10.1.
  3. On another controller's Ethernet module, create a Produced Tag of datatype DINT[100] with scope Controller, set the connection RPI to 10 ms.
  4. On the consumer controller, add a Consumed Tag, browse to 2_1756_15:Lincoln/ProducedTag, and accept the proposed RPI.
  5. Verify the Connection tab status reads Running; otherwise the value of ProducedTag.ConnectionFaulted will be 1.

5.3 Connection Fault Codes (1756-EN4TR / 5069-AENTR)

Table 6. Logix Module Connection Fault Codes
Code (hex) Meaning
0x0008 Connection request size mismatch
0x0010 Connection timeout (no I/O received within RPI × 4)
0x0020 RPI out-of-range for the module
0x0100 Electronic key mismatch (vendor / product / revision)
0x0110 Connection type not supported
0x0204 Module in fault or unconfigured

Reference: ODVA EtherNet/IP Specification (PUB00048) and the Rockwell Automation EtherNet/IP Documentation Center.

6. Modbus TCP Configuration

Modbus TCP is the lightest of the three protocols: an MBAP header (7 bytes) wraps the familiar Modbus PDU. It is widely deployed on Schneider Modicon M340/M580, Modicon Momentum, AutomationDirect BRX/CLICK, and embedded SCADA I/O. The Modbus Organization publishes the protocol openly.

6.1 MBAP Header Layout

Table 7. Modbus Application Protocol (MBAP) Header
Field Bytes Description
Transaction ID 2 Echoed by server; client uses it to pair requests/responses
Protocol ID 2 Always 0x0000 for Modbus
Length 2 Number of bytes following (Unit ID + PDU)
Unit ID 1 0xFF for plain TCP, 1–247 for serial gateway

6.2 Common Function Codes

Table 8. Modbus TCP Function Codes
Code (hex) Name Address Range PDU Size
0x01 Read Coils 0xxxx 1–2000 coils
0x02 Read Discrete Inputs 1xxxx 1–2000 inputs
0x03 Read Holding Registers 4xxxx 1–125 registers
0x04 Read Input Registers 3xxxx 1–125 registers
0x05 Write Single Coil 0xxxx 1 coil
0x06 Write Single Register 4xxxx 1 register
0x0F Write Multiple Coils 0xxxx 1–1968 coils
0x10 Write Multiple Registers 4xxxx 1–123 registers

6.3 Exception Codes

Table 9. Modbus TCP Exception Codes
Code Meaning
0x01 Illegal function (device does not support FC)
0x02 Illegal data address
0x03 Illegal data value
0x04 Slave device failure
0x05 Acknowledge (long-duration command in progress)
0x06 Slave device busy
0x0A Gateway path unavailable
0x0B Gateway target device failed to respond

6.4 Modbus TCP Code Skeleton (Structured Text)

// Poll Holding Registers 40001..40010 (UINT16) from Modbus TCP server 10.10.10.50
IF mb_tcp_connect(socket_id := s, server_ip := '10.10.10.50', port := 502) THEN
    mb_tcp_read(s := s, unit_id := 1, fc := 16#03, start_addr := 0, quantity := 10, dst := HR_buf);
ELSE
    mb_error_cnt := mb_error_cnt + 1;
END_IF;

Reference: Modbus Messaging on TCP/IP Implementation Guide v1.0b and the Modbus Application Protocol Specification V1.1b3.

7. Siemens S7 PUT/GET Communication (S7-1200/1500 ↔ S7-1500)

The PUT/GET instructions (part of the S7 communication package) allow two S7 CPUs to exchange a data block over ISO-on-TCP (port 102) or TCP. Enable the partner on each side first.

  1. Open Properties → Communication on the S7-1500 CPU and tick "Permit access with PUT/GET from remote partner (PLC, HMI, OPC, ...)". This setting is disabled by default in firmware V2.6 and later for security reasons.
  2. Insert a TSEND_C/TRCV_C pair or use PUT/GET from the Instructions → Communication → S7 Communication palette.
  3. Define the connection in Connections → S7 Connection, set partner IP to 10.10.10.40, leave TSAP as 10.01 (rack 0, slot 1).
  4. Download both CPUs; verify the connection status word STATUS is 0x0000 (idle) before triggering the read.
// SCL on the client CPU, triggered by a 200 ms cyclic OB
IF "send_clock".Q THEN
    "put_id".REQ := TRUE;
    "put_id".ID  := W#16#0001;
    "put_id".ADDR := P#DB100.DBX0.0 BYTE 200;   // local source 200 bytes
    // partner: DB200, starting at byte 0
    "put_id".RD_1 := P#DB200.DBX0.0 BYTE 200;
END_IF;

Reference: Siemens SiePortal: S7-1200/1500 Communication — Program Examples.

8. Allen-Bradley Produced/Consumed Tags

Logix Designer produced/consumed tags are the simplest cross-controller data exchange over EtherNet/IP; no MSG instruction needed, the engine handles the cyclic UDP connection at the requested RPI.

  1. Create a User-Defined tag, e.g., Line1_Recipe[0..49], datatype SINT, scope Controller.
  2. Open the tag, set Produce checkbox. Set the connection RPI to 10 ms (minimum for 5069-AENTR over copper).
  3. On the consumer controller, add the same tag name and set Consume. Browse to the producer's path: 2_1756_85:Process/Line1_Recipe.
  4. Download both controllers; the consumer tag populates within one RPI after connection is up. If the connection does not establish, the I.ConnectionFaulted bit goes true and the controller logs event 941.
Produced/Consumed tags are limited to 480 bytes per connection on EtherNet/IP. For larger payloads use a CIP MSG instruction with assembly objects (Class ID 0x04), or split into multiple produced tags. The 5069-AENTR supports up to 32 simultaneous produced connections.

9. Network Switches and Topology for Industrial Use

Managed industrial Ethernet switches provide port-level diagnostics, IGMP snooping, and VLAN segmentation; unmanaged switches work for simple star topologies. PROFINET Conformance Classes (CC-A, CC-B, CC-C) define minimum switch behavior for PROFINET networks.

Table 10. PROFINET Conformance Classes
Class Topology Switch Features Required
CC-A Star / tree Unmanaged OK
CC-B Star / tree, MRP redundancy optional Managed, MRP-capable, port diagnostics
CC-C Line with cut-through (< 1 ms) Managed, cut-through forwarding, MRP / MRPD

Recommended managed switches: Siemens SCALANCE XC-200 / XC-300 / XR-500, Phoenix Contact FL SWITCH 2300 / 3300, Cisco IE-3300 / IE-3400, Hirschmann RSP / RSPE, Stratix 5700/5400 (Rockwell). Avoid consumer-grade switches in cabinets near drives; they lose packets during broadcast storms and lack the cut-through forwarding that CC-C requires.

9.1 Media Redundancy Protocols

Table 11. Media Redundancy Protocols
Protocol Recovery Time Scope
MRP (IEC 62439-2) ≤ 200 ms PROFINET, single ring
MRPD (MRP with DLR-style cut-through) 0 ms (bumpless) PROFINET IRT only
PRP (IEC 62439-3) 0 ms (duplicate path) Substation / power
DLR (Device-Level Ring, ODVA) ≤ 3 ms for 50 nodes EtherNet/IP ring

10. Diagnostics, Status Words, and Error Codes

10.1 PROFINET Diagnostics Sources

  • Port LED behavior: green steady = link, flashing green = activity, off = no link, red = port error or chassis fault.
  • Web server of ET200SP: shows device name, IP, slot diagnostics, channel diagnostics, maintenance events, and PROFIenergy profile.
  • TIA Portal → Online → Diagnostics: lists the IO Device status as OK, Maintenance required, Maintenance demanded, or Fault, with a hyperlinked diagnostic buffer entry.
  • PRONETA: free-of-charge tool for network analysis, topology discovery, and signal-quality assessment on PROFINET nodes.

10.2 EtherNet/IP Diagnostics

  • RSWho / RSLinx Classic / FactoryTalk Linx: browse the network; a yellow triangle = no connection, red X = connection fault.
  • Module-fault AOI: exposes codes in ModuleFault (see Table 6) and counters in ModuleCIPErrors / ModuleMissedPackets.
  • Embedded EDS / AOP files: publish per-channel fault data via the standard CIP "Alarm" object.

10.3 Modbus TCP Diagnostics

  • Watch the MBAP exception codes from Table 9 in the response frame.
  • Use Wireshark on TCP port 502 to confirm PDU size and timing; filter by tcp.port == 502 && modbus.
  • Industrial Ethernet switches with port mirroring (e.g., SCALANCE SP mirroring) allow in-line capture without breaking the line.

11. Performance, Cycle Times, and Update Rates

Table 12. Typical Update Times by Protocol
Mechanism Minimum Update Jitter Payload (typical)
PROFINET IRT 250 µs – 1 ms < 1 µs ≤ 1440 bytes/slot
PROFINET RT 1 ms ≤ 100 µs ≤ 1440 bytes/slot
EtherNet/IP RPI 2 ms ≤ 1 ms ≤ 480 bytes (prod/cons)
Modbus TCP poll 10 ms (cycle) application-bound 125 registers typical
S7 PUT/GET 10 ms application-bound ≤ 400 bytes per call
S7 BSEND/BRCV 10 ms application-bound up to 64 KB

11.1 Application Cycle Calculation

For an OB1 with a network latency of 5 ms and 32 bytes of process data, the total round-trip is:

T_total = T_cycle + T_profinet_RT + T_switch_latency
T_total = 1 ms   + 1 ms           + 0.1 ms
T_total = 2.1 ms

For tight motion loops (less than 1 ms), switch to PROFINET IRT with cut-through switches (Siemens SCALANCE XC-200 with IRT "high-performance" mode) and configure the send clock to 250 µs.

12. Security and Field Tips

  • Disable unused ports on managed switches and use 802.1X where supported by the controller.
  • VLAN-separate control (VLAN 10), SCADA/HMI (VLAN 20), and plant IT (VLAN 30). Trunk the uplink with dot1Q tags.
  • Cell Protection with ACLs: only allow Modbus 502 between known peers; deny everything else by default.
  • Disable router advertisements and unused services (SMTP, FTP, web, Telnet) on the PLC unless needed for diagnostics.
  • Maintain firmware: keep PROFINET device firmware and CPU firmware matched to the GSD version to avoid slot-mismatch faults after device replacement.
  • Lock the PROFINET name: in TIA Portal set the port assignment to "permanent" so a replaced spare device does not automatically get the old IP/role.
Back up the project AND the device configuration (CPU ↔ station name mapping) before any IP change. After a PROFINET device name change, power-cycle the device to force DCP re-assignment from the IO Controller. For EtherNet/IP, an EDS-imported replacement module must have a matching "Electronic Key" or the controller will reject it.

12.1 IEC 62443 Zones and Conduits

Segment the plant into zones (e.g., "Boiler Control", "Packaging Line") with defined conduits (single routing point) at every zone boundary. The PLC LAN belongs to a Security Level 1 (SL1) zone; the corporate intranet is SL2; the public internet is SL3. Apply the SL-T (target security level) from IEC 62443-3-3 to each conduit, not to the devices.

13. Practical Selection Guide

Table 13. Protocol Selection by Application
Application Recommended Protocol Reason
Servo motion < 1 ms update PROFINET IRT or CIP Motion Isochronous data with < 1 µs jitter
High-speed I/O at 250 µs PROFINET IRT Isochronous, deterministic
Standard discrete I/O at 1–10 ms PROFINET RT or EtherNet/IP RPI Sufficient determinism, broad device support
Process / SCADA polling Modbus TCP or OPC UA Simple, open, widely understood
Cross-vendor integration OPC UA Pub/Sub over UDP or Modbus TCP Open specification, no licensing
Safety-rated I/O PROFIsafe over PROFINET or CIP Safety over EtherNet/IP Black-channel safety with one Ethernet

14. Troubleshooting Matrix

Table 14. Common Symptoms, Root Causes, and Resolutions
Symptom Likely Root Cause Resolution
ET200SP BF LED red, flashing No PROFINET name assigned Assign name with TIA Portal or PRONETA
ET200SP BF LED red, steady Slot/GSD mismatch Reinstall the matching GSD file in TIA Portal
EtherNet/IP module yellow triangle in RSWho IP or gateway wrong on module or PC Set static IP matching subnet; ping from workstation
EtherNet/IP connection 0x0010 timeout RPI too aggressive for the switch fabric Raise RPI to 20 ms minimum; check multicast filtering
Modbus TCP exception 0x02 Start address out of range Subtract 1 from holding-register offset; Modbus is 0-based in PDU but 1-based for documentation
S7 PUT returns STATUS 0x80E1 PUT/GET not enabled on partner CPU Tick "Permit access with PUT/GET from remote partner" in partner CPU properties
Intermittent timeouts on PROFINET Broadcast storm from PC on same VLAN Move engineering PC to a separate VLAN; enable storm control on switch

15. Reference Documentation

What is the default TCP port for Modbus TCP?

Port 502. Modern firewalls and IEC 62443 zone policies require explicit rules for 502 since it is widely scanned. Modbus TCP Security (Modbus Organization, MBAPS) uses port 802 with TLS.

Which UDP/TCP ports does PROFINET use?

PROFINET uses UDP 34962 and 34963 for RT/IRT cyclic data, and TCP 34964 for the Context Manager (PROFINET CBA). The IO Controller opens these automatically; firewall rules must allow them bidirectionally.

Can PROFINET and EtherNet/IP share the same switch?

Yes. Both run over 100 Mbit/s Ethernet and use different multicast MAC ranges. In practice, deploy a managed switch with VLAN separation (VLAN 10 PROFINET, VLAN 20 EtherNet/IP) and IGMP snooping to prevent broadcast overlap. Disable QoS priority 6 on one protocol if it is starving the other.

How do I find the IP of an unknown PROFINET device?

Use Siemens PRONETA (free) to scan the network. The tool reports the device's MAC, current IP, PROFINET name, and signal quality. Assign a fresh IP and name without launching TIA Portal.

What is the maximum payload for an S7 PUT/GET call?

Up to 400 bytes per PUT/GET instruction on S7-1200 and S7-1500. For larger blocks use BSEND/BRCV (up to 64 KB) or split the payload into multiple PUT calls and verify STATUS=0x0000 between calls.

Why does my EtherNet/IP produced tag show ConnectionFaulted=1 after a controller restart?

The consumer detects the loss within RPI × 4. After the producer CPU completes its restart, it re-opens the multicast UDP connection; the consumer re-establishes within one RPI. If the fault persists, check ModuleFault (Table 6) for 0x0020 (RPI out-of-range) or 0x0100 (electronic-key mismatch).

Do I need an industrial switch for PROFINET IRT?

Yes. PROFINET IRT requires cut-through forwarding to meet the isochronous timing budget. Certified SCALANCE XC-200, Phoenix Contact FL 3300, or Hirschmann RSP switches are commonly used. Unmanaged switches cannot be configured for IRT and will force the controller to fall back to RT (1 ms update instead of 250 µs).

Back to blog