Overview of Siemens S7 Communication Models
Siemens S7 controllers support several transport mechanisms for exchanging user data between PLCs, between PLCs and HMIs/SCADA, and between PLCs and PCs. In STEP 7 (classic) and TIA Portal, the two transport services an integrator selects when configuring an S7 connection are ISO transport (sometimes labeled "ISO on Industrial Ethernet") and TCP. A third option that often appears alongside them is ISO-on-TCP, which combines the ISO Transport semantics used inside the S7 protocol stack with the routable TCP/IP transport from the Internet suite. Understanding when each option is appropriate, how addressing differs, and what an FB/SFB-based program actually sees at the API level is essential for stable commissioning and predictable SCADA behavior.
The S7 user program does not see the wire-level format. Whether the underlying transport is pure ISO 8073 over Ethernet Type 0x88A2 frames, plain TCP over a stream socket, or ISO Transport encapsulated over a TCP socket per RFC 1006, the application calls the same SEND/RECEIVE or BSEND/BRECV blocks once the connection has been configured in the hardware/net editor. The differences sit below that abstraction in addressing, hardware support, and the path the data takes through the CP, CPU PN interface, and the network.
OSI Layer Mapping
Both ISO and TCP variants of the S7 protocol occupy similar positions in the OSI model but map to different layers and frame formats:
| OSI Layer | ISO Transport | TCP (raw / ISO-on-TCP) |
|---|---|---|
| 7 - Application | S7 Communication (SEND/RECEIVE, PUT/GET) | S7 Communication (SEND/RECEIVE, PUT/GET) |
| 4 - Transport | ISO 8073 (TP4 class 4) — connection oriented, reliable | TCP (RFC 793) — connection oriented, reliable |
| 3 - Network | CLNP / no IP addressing | IP (IPv4 or IPv6) |
| 2 - Data Link | Ethernet, EtherType 0x88A2 (ISO/IEC 8802-3 / Industrial Ethernet) | Ethernet, EtherType 0x0800 (IPv4) or 0x86DD (IPv6) |
| 1 - Physical | Copper, fiber, WLAN via CP | Copper, fiber, WLAN via CP, routable across subnets |
Key practical consequence: ISO Transport frames cannot leave the local Layer 2 broadcast domain intact. They are not routable because they carry no IP header and no TTL field. TCP and ISO-on-TCP, by contrast, ride over IP and can traverse routers, NATs (with care), VPNs, and cellular backhauls. This single observation drives most connection-type decisions.
ISO Transport (ISO 8073) on Industrial Ethernet
ISO Transport, defined in ISO/IEC 8073, is the OSI Transport Class 4 protocol that Siemens originally adopted for the Industrial Ethernet (formerly SINEC H1) environment. In Siemens hardware it is carried directly over Ethernet using EtherType 0x88A2, which identifies an "ISO connectionless or ISO connection-oriented" frame as defined in ISO/IEC 8802-2 / IEEE 802.2.
Connection identifiers used by ISO Transport
An ISO Transport connection is identified to the S7 communication interface by exactly two parameters:
- The MAC address of the partner (CPU or CP) interface.
- A TSAP (Transport Service Access Point) on each end — one local, one remote.
No IP, no port, no subnet, no router. A S7 connection configured as ISO therefore does not care whether the partner has a routable IP address; it cares only that the MAC address is reachable on the local Ethernet segment via the configured CP or PN port.
Hardware support for ISO Transport
Not every Siemens PN interface supports ISO Transport. As a rule of thumb:
- Older CP 343-1 / CP 443-1 modules (firmware classes that supported the SIMATIC NET "ISO" connection type) support ISO and ISO-on-TCP.
- Modern S7-1200 / S7-1500 PN interfaces and the newer CP 1543-1 / CP 1545-1 support ISO-on-TCP and TCP natively; pure ISO is typically disabled or not offered on current-generation PN stacks.
- Check the firmware functional description in Siemens Industry Online Support for each CP before committing to an ISO design.
TCP and RFC 1006 (ISO-on-TCP)
TCP, defined in RFC 793, is the standard Internet stream protocol. Two entities establish a session by a three-way handshake and exchange an unstructured byte stream. Siemens uses TCP two ways on the S7 platform:
- Direct TCP — the S7 Communication layer drives the TSAP-like semantics over a raw TCP socket using port 102 (decimal), the well-known ISO-TSAP/COTP port. This is the most common transport you will see in STEP 7 net dialogs labeled simply "TCP" against an S7-1200 or S7-1500 with security disabled.
- ISO-on-TCP — the same ISO Transport class 4 PDUs are placed inside TCP segments exactly as if ISO were running directly over the wire, but the underlying service is RFC 1006 ("ISO Transport on top of TCP"). RFC 1006 defines the framing rules that allow a stream-oriented protocol like TCP to carry the TPDUs of an OSI transport. Implementations negotiate this mode by default on Siemens CP modules.
Connection identifiers used by TCP / ISO-on-TCP
A TCP-based connection is identified to the S7 communication interface by:
- The remote IPv4 address (and optionally the local interface selector when binding explicitly).
- A port number (default 102).
- A TSAP on each end (same concept as ISO — a logical sub-address beneath the socket).
The TSAP is preserved in TCP variant connections because the S7 protocol stack treats it as the S7 connection-level identifier. Even on a raw TCP session to port 102, the user typically still enters two TSAPs in the net configuration so that the S7 layer on each side can address the right application endpoint.
RFC 1006 Framing in Practice
RFC 1006 is a thin shim placed between an ISO-Transport stack and TCP. The bits on the wire look approximately like this:
+----------------------------------------------+ | IP header | +----------------------------------------------+ | TCP header (src port, dst port, seq, ack...) | +----------------------------------------------+ | 0x03 TPDU length byte (always 0x03 on wire) | +----------------------------------------------+ | TPDU length (1 byte) | +----------------------------------------------+ | ISO 8073 TPDU (DT, CR, CC, AK, DR, DC...) | +----------------------------------------------+
The leading 0x03 0xXX 0xYY triple is the RFC 1006 framing header. The first byte (0x03) is the ISO Transport Protocol Identifier; the next two bytes encode the TPDU length. Everything that follows is a normal ISO Transport TPDU with its embedded TPKT inside — exactly as it would have appeared on an ISO Ethernet frame. This is what allows the same S7 user blocks (SEND, RECEIVE, PUT, GET) to run unchanged when the designer switches the underlying transport from Ethernet-direct ISO to ISO-on-TCP.
TSAP Structure and Addressing
TSAP stands for Transport Service Access Point. In the Siemens S7 environment a TSAP is a two-byte ASCII string that uniquely names an S7 application endpoint below the TCP/ISO socket. Format:
TSAP byte 0 = ASCII character (printable, e.g. '0'..'9', 'A'..'Z') TSAP byte 1 = ASCII character (printable) TSAP value = two-character string, e.g. "01", "0A", "10", "FE"
The TSAP is set on each side of the connection. The two TSAPs do not have to match — they identify the local and remote application endpoints. As long as the partner's TSAP is configured consistently in both stations' net objects, the S7 layer matches the connection.
Standard TSAP conventions
Siemens uses a documented convention for the high byte of the TSAP on many CPU types:
| TSAP byte 0 (local slot) | Typical device |
|---|---|
| '0' (0x30) | CPU slot 0 (lowest CPU position) |
| '1' | Slot 1 (next module) |
| ... | ... |
| 'A'..'F' | Slots 10..15 (hex digit in ASCII) |
The second byte is commonly the connection number or a user-selected site identifier. Examples you will see in many Siemens project templates:
- Local CPU, connection 1: TSAP
01.00or01.01on the CPU side. - Partner CP 343-1 in slot 4 of a remote rack: TSAP
04.01on the partner side. - HMI station with TSAP
10.00for an S7-1500 that uses the "HMI" preset.
Connection Types in STEP 7 and TIA Portal
When you add an S7 connection in either the classic NetPro editor or the TIA Portal "Devices & Networks" editor, you choose one of the following transport options from the drop-down:
| Connection type as shown in STEP 7 / TIA Portal | Wire transport | Address parameters entered | Default CP capability |
|---|---|---|---|
| ISO connection | ISO 8073 over Ethernet 0x88A2 | MAC address + local/remote TSAP | Legacy CP 343-1, CP 443-1 |
| ISO-on-TCP connection | ISO 8073 over RFC 1006 over TCP (port 102) | IP address + TCP port + TSAP | Most modern CP 343-1, CP 443-1, ET 200S PN, S7-1200/1500 CP |
| TCP connection (S7 Comm) | Direct TCP, S7 Communication application layer | IP address + port + TSAP | S7-1200/1500 PN interfaces |
| S7 connection (default) | ISO-on-TCP (TIA Portal default for S7-1200/1500) | IP + TSAP | All current SIMATIC controllers |
In TIA Portal, the dropdown is typically labelled simply "S7 connection", and the underlying transport is fixed to ISO-on-TCP unless you manually choose another type. The classic STEP 7 NetPro UI exposed all three options explicitly. Mis-selecting ISO when both partners are S7-1500 will at minimum require a CP upgrade and at worst fail with a non-specific connection-status error.
SEND/RECEIVE Programming Interface
The S7 user program interacts with these connections through standard blocks. The transport mechanism is opaque inside the FC/FB, but the block ID handle differs per family.
| Function | S7-300/400 (classic) | S7-1200 / S7-1500 (TIA) |
|---|---|---|
| Send data | FC5 AG_SEND / SFB9 BSEND / SFB12 BSEND | "PUT" / "GET" via TCON, TSEND, TRECV, TUSEND / TURCV blocks |
| Receive data | FC6 AG_RECV / SFB10 BRCV / SFB13 BRCV | TRCV / TURCV blocks |
| Unidirectional push | SFB8 / FB8 "USEND" | TSEND |
| Unidirectional pull | SFB9 / FB9 "URCV" | TRCV |
| Bidirectional | SFB12 / FB12 "BSEND" + SFB13 / FB13 "BRCV" | TUSEND / TURCV |
Example: S7-300/400 SEND/RECEIVE call (SCL)
// Local: SEND on connection ID 1, completed immediate CALL FB 12 "BSEND" , %DB10 REQ := TRUE; // Trigger send ID := W#16#1; // Connection ID from NetPro R_ID := DW#16#1; // R_ID for BSEND pairing DONE := DB10.DBX0.0; // Send done ERROR := DB10.DBX0.1; // Send error STATUS := DB10.DBW2; // Block status SD_i1 := P#DB11.DBX0.0 BYTE 200; // Send DB LEN := 200;
Example: TIA Portal TSEND/TRCV (SCL, S7-1500)
// Establish an ISO-on-TCP connection to partner 192.168.0.12, port 102
// Local TSAP: "10.00"; remote TSAP: "03.01"
#Conn := TC_CONNECT(REQ := TRUE,
CONNECT := "TCON_IP_v4",
InterfaceId := "PN-IF-1",
ID := 1,
ConnectionType := 16#0B, // 0x0B = ISO-on-TCP
ActiveEstablished := TRUE,
RemoteAddress := IP_V4(192,168,0,12),
RemotePort := 102,
LocalTSAP := B#16#10,
RemoteTSAP := B#16#03,
SubnetMask := IP_V4(255,255,255,0));
IF #Conn.Status = 0 AND #Conn.Done THEN
// Connection is up; now use TSEND / TRCV with ID := 1
#ts := TSEND(REQ := TRUE,
ID := 1,
LEN := 20,
DATA := P##SendBuf);
END_IF;
Block STATUS codes for SEND/RECEIVE failures
| STATUS (hex) | Typical meaning | Likely cause |
|---|---|---|
| 0x0001 | Communication in progress | Normal on rising edge of REQ |
| 0x8000 | Done without error | — |
| 0x8304 | Connection establishment failed | CP/PN type mismatch, partner unreachable, wrong transport selected |
| 0x8305 | Connection terminated by remote | Remote CPU stopped, CP powered down, partner firewall |
| 0x8380 | Local resource error | No free connection resources on CP, TSAP already in use |
| 0x8381 | Remote resource error | Remote partner out of connections / resources |
| 0x80A1 | Parameter error | LEN exceeds SD size, ID unknown |
| 0x80C3 | Data pointer error | ANY pointer points outside PLC work area |
Refer to the per-block STATUS list in the Siemens "Communication Function Blocks" manual for the complete enumeration; this table lists only the codes most often seen during transport-type troubleshooting.
CP Module Configuration
Connection behavior on a SIMATIC rack is governed by two configuration places: the CP hardware configuration (slot, firmware, IP, subnet) and the S7 connection object in the net editor.
Step-by-step: Configuring a CP 1543-1 as ISO-on-TCP server
- In the TIA Portal project tree, open "Devices & Networks" and place the CP 1543-1 into the station's rack. Wire its PN interface to the same subnet as the partner S7-1500.
- Open the CP "Properties" dialog and assign an IPv4 address plus subnet mask consistent with the partner's subnet. Activate "Use router" only if the partner truly lives behind one.
- In the security settings, verify that the IPv4 access control list permits the partner's IP on TCP/102. If access protection is enabled with no ACL entry, the connection will be silently dropped at the CP firewall even though the S7 net object is correct.
- Open "Devices & Networks > S7 Connections" and create a new "S7 connection" specifying the partner as the active endpoint and the local CP as the local endpoint.
- In the connection properties, expand "Address Details" and confirm: Local TSAP = configured value, Remote TSAP = partner's value, Port = 102, Connection type = ISO-on-TCP. TIA Portal may auto-suggest "TCP" if the partner CPU firmware only advertises that variant — switch the drop-down to ISO-on-TCP explicitly if the partner supports it.
- Compile and download both stations. Watch the CP's "Connection" diagnostics page for STATUS = OK.
Impact on SCADA and OPC Systems
A SCADA system that exchanges tags with an S7 PLC via one of three channels:
- Native S7 driver / LibNoDave / Snap7 / Siemens S7 OLE DCOM OPC Server over a connection that ultimately relies on the same TCP port 102 transport on the wire.
- Siemens OPC UA server on the CPU (S7-1500) or SIMATIC NET OPC Server on the PC side.
- S7 routing through the CP and CPU (used when the SCADA cannot directly address the CPU due to network segmentation, e.g. cellular or site-to-site VPN).
Switching the underlying transport on the PLC side from ISO to ISO-on-TCP, or changing the CP module, affects the SCADA as follows:
| SCADA mechanism | Visibility of transport change | Action required |
|---|---|---|
| S7 OPC Server (COM/DCOM) | Indirectly affected — depends on PC interface IP/port reachability | Update OPC Server CP assignment to new CP IP; rebrowse tag set if the connection object ID changed |
| OPC UA on S7-1500 CPU | Unaffected if only the PLC-to-PLC transport changed | None, unless CP security/firewall settings were also modified |
| Native S7 driver in WinCC / iFIX | Usually transparent | Recompile driver with new device IP if changed; rerun topology scan if WinCC identifies devices by name |
| SCADA point configuration using CPU slot-based naming | Affected | Rename or remap points when the slot number of the CPU/CP in the rack changes, because the rack/slot addressing scheme is often embedded in the SCADA import |
Hardware Migration Considerations
When the PLC fleet moves from S7-300/400 to S7-1200/1500, or swaps a CP 343-1 for a CP 1543-1, the connection objects must be re-created in the new project because:
- The new CP may not support the legacy "pure ISO" transport.
- TSAP conventions can differ by CPU generation; the high-byte slot value rule applies differently on S7-1500 vs S7-300.
- Security features (firewall, ACL, PUT/GET permission) on the new CP default to stricter values, often blocking legacy SCADA traffic until the ACL is opened.
- S7 routing through a CP may no longer be required because the S7-1500 CPU can be addressed directly via its own PN interfaces.
Migration checklist (abbreviated)
- Inventory all S7 connections (active and configured but unused) in the source project.
- For each connection, record: connection ID, partner IP/MAC, port, local TSAP, remote TSAP, transport type, used SEND/RECEIVE blocks.
- Create equivalent connection objects in the new TIA Portal project with matching TSAPs and transport types where supported.
- Update each SCADA / OPC client to point at the new device's IP and to honor new firewall rules.
- Verify every connection with a simple SEND/RECEIVE round-trip before going on-line in production.
Diagnostic and Troubleshooting Matrix
| Symptom | Likely root cause | First checks |
|---|---|---|
| STATUS 0x8304 at startup, no link ever establishes | Transport type mismatch (e.g. ISO selected, partner only does TCP) | Check CP capability list, verify "ISO" checkbox in CP properties |
| Connection establishes then STATUS 0x8305 after a few minutes | Keep-alive timeout, CP watchdog, partner CPU in STOP | Enable CP "Connection diagnostics", verify partner CPU RUN/STOP, check keep-alive timer |
| SCADA reads fail with "Partner unreachable", but PG online from same PC works | CP firewall ACL blocks SCADA IP, allows PG IP | Compare ACL entries, temporarily allow "Access from remote" on the CP |
| PUT/GET work but USER-DATA SEND/RECEIVE does not | PUT/GET permission disabled on S7-1200/1500 CP, security level raised | Open CP properties > Security > "Permit access with PUT/GET from remote partner" |
| Data arrives but is corrupted / interleaved | Multiple partners sharing one R_ID, or LEN > partner SD_i size | Audit R_ID uniqueness, verify SD_i length matches LEN parameter |
| STATUS 0x8381 at the active partner after station restart | Active side comes up before passive side has finished booting | Add startup delay on the active side, verify passiv e endpoint CP is fully operational |
Field-Commissioning Procedure (Summary)
- Confirm both stations are on a common subnet or routed path appropriate to the chosen transport.
- Verify CP module type and firmware in the project match the physically installed part numbers.
- Compile, download, and place both CPUs in RUN.
- From one CPU's online diagnostics, watch the S7 connection status. Expect "Established" within ~10 s after the boot of the passive side.
- Execute a one-shot round-trip test using a small (16-byte) SEND/RECEIVE pair, verifying status, length, and content at both ends.
- Roll forward to production traffic only after the round-trip is stable for several minutes.
- Record connection IDs, TSAPs, IPs, and transport in the as-built documentation so future migrations start from an accurate baseline.
What is a TSAP in Siemens S7 communication?
A TSAP (Transport Service Access Point) is a two-character ASCII identifier (for example "01.00") used by the S7 layer to address a specific communication endpoint below the TCP or ISO socket. The local and remote TSAP do not have to be identical; they identify each side's application endpoint and are configured in the STEP 7 / TIA Portal S7 connection properties dialog.
What is the difference between ISO and TCP connections in SIMATIC S7?
An ISO connection uses ISO 8073 (TP4) frames directly over Industrial Ethernet EtherType 0x88A2 and is identified by MAC address and TSAP. A TCP connection runs the same S7 application layer over TCP/IP (typically port 102), is identified by IP address, port, and TSAP, and is routable across subnets. ISO-on-TCP is the practical hybrid: ISO 8073 TPDUs encapsulated inside TCP segments per RFC 1006.
Why would an ISO connection fail to establish on a modern CP?
Many current-generation S7 CPs (for example, CP 1543-1) no longer support pure ISO Transport and only expose ISO-on-TCP and TCP. Configure the S7 connection as ISO-on-TCP with the partner's IP, port 102, and matching TSAPs, and verify the partner CPU/CP firmware advertises ISO-on-TCP support in its manual.
Do I need to change my S7 user program if I switch from ISO to ISO-on-TCP?
No. SEND/RECEIVE and PUT/GET blocks (SFB/FB 8-13 on classic S7, TSEND/TRCV/TUSEND/TURCV on S7-1200/1500) are transport-agnostic. The connection identifier that the program passes (the ID value from NetPro / TIA connection object) remains valid when you change only the underlying transport and keep the same connection ID.
How does a CP change affect a SCADA or OPC system?
If the SCADA communicates through an OPC Server or WinCC S7 driver pointing at the old CP's IP, the OPC point configuration must be re-pointed to the new CP IP and the OPC Server's CP module assignment updated. If the SCADA uses OPC UA on the S7-1500 CPU directly, only CP security/firewall settings need re-verification. Always re-export the tag list from the new project and rerun a round-trip test after a CP migration.