Configuring Unspecified S7 Connection: S7-1500 GET/PUT to S7-300

David Krause12 min read
S7-300SiemensTroubleshooting
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

Configuring an Unspecified S7 Connection: S7-1515 GET/PUT to a SIMATIC S7-300

An unspecified S7 connection is the only path to GET or PUT data into an S7-300 CPU whose project you cannot modify, when the calling controller is an S7-1500 (for example, an S7-1515 / S7-1515-2 PN). The configuration lives entirely in the S7-1500 project; the S7-300 side stays untouched. This article documents the exact TIA Portal procedure, the TSAP pairing rules, the 160-byte PUT/GET ceiling on the S7-300 side, and the field-proven workaround that turns a single failed 544-byte transfer into a working multi-block GET burst.

Scope: This reference covers an ISO-on-TCP-based unspecified S7 connection from an S7-1500 (firmware V2.5 and later, TIA Portal V15.1 and later) to a SIMATIC S7-300 CPU with an integrated PROFINET interface or a CP343-1. The same procedure applies to S7-400 and to ET 200SP / ET 200MP stations that emulate S7-1500 behavior.

1. Why an "Unspecified" Connection Is Required

When the partner PLC is outside the TIA Portal project — physically remote, third-party, or sealed — the connection cannot be resolved by reference to the partner's interface description in the Devices & Networks editor. Instead, you create the connection on the S7-1500 side and leave the partner field blank (or marked as "Unspecified"). The local CPU opens the ISO-on-TCP transport and uses the configured TSAPs to find the partner CPU's communication resource on the wire.

According to the TIA Portal help for Unspecified connections (S7-300, S7-400, S7-1500), the unspecified connection can ride on ISO-on-TCP, ISO transport, or TCP. ISO-on-TCP (RFC 1006) is the default for S7 communication and the only transport supported by the GET/PUT blocks. The transport is selected per-connection in the inspector under "Connection mechanisms."

2. Prerequisites

  1. Engineering tool: TIA Portal V15.1 or later (V16, V17, or V18 strongly recommended). Earlier versions lack the modern block interface for GET/PUT on S7-1500.
  2. S7-1500 firmware: V2.0 minimum for GET/PUT, V2.5+ recommended. Check in Online & Diagnostics > CPU Information.
  3. S7-300 CPU: Any PN-enabled CPU (CPU 315-2 PN/DP, CPU 317-2 PN/DP, CPU 319-3 PN/DP, or older CPU 31x with CP343-1).
  4. Network: Both controllers must share an IP subnet reachable without NAT. The integrated PROFINET interface X1 of the S7-1515 must be in the same subnet as the S7-300's PROFINET interface (or its CP).
  5. S7 connection resource count: S7-300 CPUs have a hard cap on simultaneous S7 connections. CPU 315-2 PN/DP provides 16 resources, CPU 317-2 PN/DP provides 32, and CPU 319-3 PN/DP provides 32. Older CPU 312/314 variants support only 4–8. Verify headroom before commissioning.
  6. Access rights: No PUT/GET security is enabled on the S7-300 (or it has been disabled in the CPU properties under Protection & Security > Connection mechanisms > Permit access with PUT/GET communication from remote partner).
  7. Target DB must exist and be non-optimized (or be optimized and known to the remote partner) on the S7-300. Optimized blocks cannot be addressed by absolute address from outside.

3. S7 Communication Data Length Limits — The 160-Byte Ceiling

This is the single most common reason a 544-byte GET fails with a status like 0x0002 / W#16#0002 or W#16#8082. The maximum user-data payload of a PUT or GET block depends on the partner CPU, not the calling CPU, because the partner's communication resource imposes the fragmentation rule.

Partner CPU BSEND / BRCV max USEND / URCV max PUT / GET max (user data)
S7-300 (any CPU 31x) 32 KB / 64 KB 160 bytes / 440 bytes 160 bytes / 400 bytes
S7-400 (CPU 41x / 416 / 417) 64 KB / 64 KB 160 bytes / 440 bytes 160 bytes / 400 bytes
S7-1200 (from FW 4.x) 32 KB / 64 KB — (USEND unsupported) 160 bytes (V4.0–V4.1); up to 462 bytes on FW 4.2+
S7-1500 (any FW) 64 KB / 64 KB — (USEND not needed) 462 bytes (FW 2.0+), 64 KB (FW 2.5+)
Source of truth: Siemens FAQ entry "What properties, advantages and special features does the S7 protocol offer?" (entry ID 26171811 in the Siemens Industry Online Support) is the canonical reference. When the partner is an S7-300, treat 160 bytes as the hard ceiling for any single PUT/GET call. Field testing shows transfers up to ~170 bytes occasionally negotiate a slightly extended buffer on newer 319-3 CPUs, but the conservative limit for a generic 31x is 160.

When you request 544 bytes, the S7-300 returns NAK and the GET status on the S7-1515 reflects "connection not established" or "resource unavailable" because the partner cannot honor the requested length. Breaking the same range into 160-byte chunks (or smaller) restores reliable operation.

4. Step-by-Step: Configuring the Unspecified Connection in TIA Portal

4.1 Insert the Connection

  1. Open the S7-1500 station in Devices & Networks.
  2. Click the Connections button in the toolbar.
  3. Choose S7 Connection as the type.
  4. Click the S7-1500 CPU's PROFINET interface; drag a connection line out and drop it on the same interface (or any blank area) — selecting the same interface on both ends produces an "unspecified" partner.

4.2 Set the Local Interface and Address

In the connection's Properties > General tab, confirm the Local endpoint points to the S7-1500's PROFINET interface X1. The IP and subnet mask are inherited from the device configuration.

4.3 Set the Partner Endpoint

Under Partner, leave the partner station empty. Configure the partner IP address directly:

  • Address: e.g., 192.168.0.42 (the S7-300's PN interface or CP343-1 IP).
  • Connection mechanism: ISO-on-TCP (default).
  • Port: leave blank (S7 selects 102 automatically).

4.4 Configure the TSAP Pair

TSAPs are the single largest source of failed connections. The format for an S7 endpoint is two bytes — typically 03.xx where the high byte encodes the connection resource class and the low byte encodes the rack/slot of the partner's communication interface.

Partner Hardware Local TSAP (S7-1500 sends) Partner TSAP (S7-300 receives)
S7-300 CPU 31x-2 PN/DP (integrated PN port X1) 03.00 or 03.01 03.01 (rack 0, slot 1 — built-in PN) or 03.02 (rack 0, slot 2 — X2 if present)
S7-300 + CP343-1 (slot 4–11) 03.00 03.rack_slot, e.g., slot 6 → 03.06
S7-300 rack 1 (e.g., IM360/361 expansion) 03.00 03.1_s, e.g., rack 1, slot 3 → 03.13
S7-1200 (V4.x) integrated PN 03.00 03.01 (slot 1 = built-in PROFINET)
S7-1500 integrated PN port X1 03.00 03.00 (slot 0 = X1) or 03.01 for X2

A mismatched or omitted partner TSAP produces STATUS = W#16#8082 ("connection not established") on the GET, even though the IP is reachable. Siemens's application note "S7 Communication between SIMATIC S7-1500 and SIMATIC S7-300" walks through this TSAP dialog in detail.

4.5 Compile and Download

Compile the S7-1500 station (Hardware + Software) and download the connection configuration. The connection does not establish until a PUT, GET, USEND, BSEND, or a configured Establish connection actively attribute triggers it. TIA Portal's Online & Diagnostics > Connections table on the S7-1500 then shows the live state.

5. GET Instruction Configuration on the S7-1500

Open the S7-1500 program and drop an instance of the GET block (path: Instructions > Communication > S7 Communication > GET). In TIA Portal V15.1+, the block has the following inputs:

Input Type Value for S7-300 partner
REQ BOOL Rising edge triggers a single GET
ID WORD Connection ID from the connection properties (e.g., W#16#0001)
ADDR_1 VARIANT / REMOTE P#DB246.DBX318.0 BYTE 160 (split payload into ≤160-byte ranges)
RD_1 VARIANT Pointer to the local DB buffer, e.g., P#DB200.DBX0.0 BYTE 160
CONT BOOL TRUE = keep connection after job finishes; FALSE = tear down
DONE, BUSY, ERROR, STATUS BOOL / WORD Standard job-status outputs

5.1 Minimal Sample ST Snippet

// Trigger GET on rising edge of a boolean tag
IF "Trigger_GET" AND NOT "Trigger_GET_Old" THEN
    "GET_DB246_318" (REQ := TRUE,
                     ID  := 16#0001,                    // connection ID from inspector
                     ADDR_1 := P#DB246.DBX318.0 BYTE 160, // partner pointer
                     RD_1   := P#DB200.DBX0.0  BYTE 160, // local receive buffer
                     CONT   := TRUE);                   // keep connection alive
END_IF;
"Trigger_GET_Old" := "Trigger_GET";

// Evaluate the job
IF "GET_DB246_318".DONE THEN
    "Get_Ok" := TRUE;
    "Get_Busy" := FALSE;
ELSIF "GET_DB246_318".ERROR THEN
    "Get_Error_Code" := "GET_DB246_318".STATUS;
    "Get_Ok" := FALSE;
ELSE
    "Get_Busy" := TRUE;
END_IF;

6. Handling the 160-Byte Limit: Multi-Block GET Strategy

When the data exceeds 160 bytes, segment the read into contiguous ranges and chain the calls. The pattern below covers the original 544-byte payload (16 strings × 32 bytes starting at DB246.DBX318.0) using four GET calls of 136 bytes each.

// Index 0..3 maps to offsets 0, 136, 272, 408
CASE "i_Segment" OF
    0: "GET_1" (REQ := "Trigger_GET", ID := 16#0001,
                ADDR_1 := P#DB246.DBX318.0  BYTE 136,
                RD_1   := P#DB200.DBX0.0    BYTE 136,
                CONT   := TRUE);
    1: "GET_2" (REQ := "Trigger_GET", ID := 16#0001,
                ADDR_1 := P#DB246.DBX454.0  BYTE 136,
                RD_1   := P#DB200.DBX136.0  BYTE 136,
                CONT   := TRUE);
    2: "GET_3" (REQ := "Trigger_GET", ID := 16#0001,
                ADDR_1 := P#DB246.DBX590.0  BYTE 136,
                RD_1   := P#DB200.DBX272.0  BYTE 136,
                CONT   := TRUE);
    3: "GET_4" (REQ := "Trigger_GET", ID := 16#0001,
                ADDR_1 := P#DB246.DBX726.0  BYTE 136,
                RD_1   := P#DB200.DBX408.0  BYTE 136,
                CONT   := TRUE);
END_CASE;

Step the i_Segment variable when each DONE arrives. With a typical round-trip of 30–80 ms per call, 544 bytes complete in roughly 150–350 ms — fast enough for any non-motion control loop.

7. Common Status Codes and Their Meanings

STATUS (hex) Meaning Likely Cause
0000 Job complete, no error Successful GET
0001 Job in progress Normal; wait on BUSY
7000 No job active REQ not yet pulsed
7001 First call, establishing connection First time block executes
7002 Intermediate call, connection up Repeated REQ while BUSY
8082 Connection not established TSAP mismatch, partner unreachable, PUT/GET disabled on S7-300, connection resource exhausted
8085 Partner CPU in STOP / no resource Partner in STOP, restart, or faulted DB access
8090 ADDR_1 invalid DB number wrong, range out of partner's DB, or optimized access mismatch
80A0 Negative acknowledgement from partner Address range exceeds 160 bytes, DB not loaded, or protection level rejects read
80B0 Resource exhausted More concurrent S7 connections than partner supports (CPU 312/314 max 4–8)
80F0 Internal error Internal software error; reset CPU

8. Verifying the Connection

  1. From TIA Portal, connect Online to the S7-1515.
  2. Open Online & Diagnostics > Connections. The newly created connection must show state Established.
  3. Trigger a GET and watch the STATUS output. A successful call shows 0000 on DONE.
  4. Open the local DB200 in the watch table; verify the bytes match the S7-300 source bytes (use the S7-300's Monitor & Force on DB246 to confirm the source data).
  5. Repeat for each segment in the chained GET strategy.

9. Troubleshooting Matrix

Symptom Probable Root Cause Fix
STATUS 8082 on first call TSAP mismatch Verify partner TSAP matches 03.rack.slot; try 03.01 for built-in PN on CPU 31x-2 PN/DP
STATUS 8082 after working previously S7-300 in STOP Check partner CPU mode; restart only after both CPUs are in RUN
STATUS 80A0 for >160-byte GET Partner fragmentation limit Split into ≤160-byte chunks; re-verify
STATUS 8090 ADDR_1 outside partner DB Confirm DB246 size; confirm start offset + length
STATUS 80B0 with many concurrent jobs Partner connection limit reached Reduce parallel connections; close HMI/OPC UA sessions not in use
STATUS 8085 with online partner PUT/GET protection enabled on S7-300 In STEP 7 (or TIA), set protection level to "No protection" or enable "Permit access with PUT/GET from remote partner"
Connection establishes but data is wrong Byte order / DBX vs DBW access Confirm ADDR_1 and RD_1 use the same access type (BYTE vs WORD vs DWORD)
TIA Portal cannot go online with S7-300 Subnet / routing / firewall Confirm same subnet, no managed switch blocking port 102, no Windows firewall blocking ISO-on-TCP
Connects once then drops CONT flag toggling Hold CONT = TRUE; only tear down on shutdown

10. Edge Cases and Field-Proven Caveats

  • Optimized DBs on the S7-300 side reject absolute-byte addressing. If the S7-300 project cannot be modified, ask the partner whether DB246 is non-optimized (standard access). If they cannot confirm, the GET will fail with 8090.
  • Concurrent connections on the S7-300: CPU 312 IFM supports 4 S7 connections total. PG, HMI, and OPC UA traffic may exhaust the pool before the S7-1500 GET ever opens. Check PLC > Operating Mode > Rack Status > Communication Resources in STEP 7 V5.x or equivalent in TIA.
  • CP343-1 vs integrated PN: With a CP343-1, the integrated PN port is not usable for S7 connections — the TSAP must target the CP's slot, not the CPU slot. Slot is configured in the CP's hardware properties.
  • Firewall/NAT: ISO-on-TCP cannot traverse NAT. If the two controllers are on different subnets joined by a routed path, a CP343-1 Lean with routing or a S7 router is required.
  • Firmware drift: S7-300 firmware V2.x behaves identically for PUT/GET, but V3.x CPUs add an access-protection bit that defaults to "deny remote PUT/GET" in some images. Always verify on a fresh install.
  • S7-1500 firmware V2.5+ on the local side lifts the local PUT/GET ceiling to 64 KB, but the partner's 160-byte ceiling remains. The local relaxation does not change how much data the S7-300 will fragment.

11. FAQ

Why does my S7-1515 GET fail with "connection not established" (STATUS 8082) on the first call?

STATUS 0x8082 on the first GET almost always indicates a TSAP mismatch. Verify the partner TSAP against the partner's hardware: for an S7-300 CPU 31x-2 PN/DP, the integrated PROFINET interface occupies slot 1, so the partner TSAP is 03.01. For a CP343-1, set the partner TSAP to 03.xx where xx is the slot number of the CP. See the official Siemens application note on S7 communication between S7-1500 and S7-300 for the full TSAP dialog.

What is the maximum GET payload from an S7-300 to an S7-1500?

160 bytes of user data per GET call. The S7-300's communication resource limits PUT/GET to a 160-byte payload (per the Siemens FAQ "What properties, advantages and special features does the S7 protocol offer?"). For larger ranges, split the transfer into multiple consecutive GETs of ≤160 bytes each and stitch the results in a local DB.

Can the partner S7-300 project stay untouched for an unspecified connection?

Yes. The unspecified connection is fully described on the S7-1500 side. The S7-300 only needs to (1) have PUT/GET access enabled in the CPU protection settings, (2) own the requested DB as a non-optimized block, and (3) have a free S7-connection resource. No S7-300 program changes are required.

How many S7 connections can an S7-300 host simultaneously?

Between 4 and 32 depending on CPU: CPU 312 / 312C supports 4, CPU 313/314 supports 8, CPU 315-2 PN/DP supports 16, CPU 317-2 PN/DP and CPU 319-3 PN/DP support 32. Confirm free resources via the rack-status communication-resource view if a status of 80B0 appears.

Can I use TCP instead of ISO-on-TCP for S7 communication?

Yes, TIA Portal lets you select TCP for an unspecified S7 connection, but you must use the "BSEND/BRCV" block family instead of GET/PUT. GET/PUT require ISO-on-TCP (RFC 1006) because the S7 protocol's connection establishment relies on TPDU routing. If you must use TCP and PUT/GET semantics are not required, switch to BSEND/BRCV and lift the partner ceiling to 32 KB on the S7-300 side.

Back to blog