Configuring PUT/GET Communication Between S7-300 and S7-400
S7 communication using PUT and GET instructions is the most common method for exchanging data between two SIMATIC controllers over Industrial Ethernet. This reference documents the complete configuration path for a mixed-tool setup: an S7-300 CPU programmed in TIA Portal V15 acting as the active partner (client), and an S7-400 CPU programmed in SIMATIC Manager (STEP 7 V5.x) acting as the passive partner (server). The procedures also apply to S7-1500 servers with the firmware and protection caveats noted in the relevant Siemens documentation.
The configuration described here is based on the official Siemens application example "S7 communication with PUT/GET between TIA Portal and SIMATIC Manager" (entry ID 92269951) and the S7-1500 communication manual available from the Siemens Industry Online Support file 82212115.
1. Overview of the S7 Communication Model
S7 communication is a Siemens proprietary protocol that runs on top of ISO-on-TCP (RFC 1006), ISO, TCP, or MPI/PROFIBUS depending on the configured connection type. For Industrial Ethernet between an S7-300 and an S7-400, the standard bearer is ISO-on-TCP (port 102).
The PUT/GET model is a unilateral (client-driven) data exchange. Only one CPU initiates reads and writes; the partner CPU simply makes its data blocks available as a server. The server does not require PUT/GET block code at all. The server CPU is configured once in the hardware/networking tool to allow access; the client CPU does the rest of the work through FB14 (GET) and FB15 (PUT) on S7-300, or SFB14/SFB15 on S7-400 if it is also acting as a client.
| Role | S7-300 | S7-400 | S7-1500 |
|---|---|---|---|
| Client (active) | FB14 (GET), FB15 (PUT) | SFB14 (GET), SFB15 (PUT) | PUT/GET instructions (system instruction set) |
| Server (passive) | No block required; DB accessible | No block required; DB accessible | No block required; DB accessible |
| Connection type | S7 connection, unspecified partner | S7 connection, unspecified partner | S7 connection, unspecified partner |
| Library path (TIA) | Standard Library > Communication Blocks | System Function Blocks (built-in) | Communication > S7 Communication |
2. Prerequisites
Verify the following before you begin configuration:
- CPU firmware – S7-300 CPUs with PROFINET interface (CPU 31x PN/DP) or with a CP 343-1 Lean/Standard/Advanced support S7 communication. Older CPU 31x-2 DP without Ethernet require a CP 343-1.
- S7-400 CPU – All standard S7-400 CPUs (CPU 412, 414, 416, 417) with PN interface or CP 443-1 support S7 communication. Firmware V5.x or V6.x is sufficient; V7+ adds extra diagnostics.
- TIA Portal V15 – S7-300 CPU support in TIA V15 requires the appropriate HSP (Hardware Support Package) if the CPU is older than a 31x PN/DP. Confirm the exact order number appears in the hardware catalog.
- STEP 7 V5.5 SP4+ (or V5.6/V5.7) – required on the SIMATIC Manager side.
-
Ethernet connectivity – managed switches or a direct crossover cable; both CPUs must be reachable via
pingfrom a Windows engineering station before any S7 blocks are placed. - IP addresses – assign a unique IPv4 address to each PROFINET interface or CP. Document the subnet mask and gateway (if any).
3. Hardware Configuration and Network Setup
Open the S7-300 project in TIA Portal V15 and the S7-400 project in SIMATIC Manager. The two projects remain independent – the S7 connection is created in each project separately and uses an unspecified partner.
3.1 Assigning IP addresses
For the S7-300 (TIA Portal):
- Open Devices & Networks and select the PROFINET interface or CP 343-1.
- In Properties > General > Ethernet addresses, assign the IP address, subnet mask, and (optionally) the router address.
- Compile and download the hardware configuration. Perform a CPU restart (STOP → RUN) to activate the new IP stack.
For the S7-400 (SIMATIC Manager):
- In HW Config, open the properties of the CPU or CP 443-1.
- Set the IP address, subnet mask, and MAC address. Enable Use IP parameters directly from the configuration.
- Save, compile, and download the station. Restart the CPU to apply.
Verify connectivity from a Windows command prompt on the engineering station:
ping 192.168.0.10 (S7-300)
ping 192.168.0.20 (S7-400)
Both pings must succeed before continuing. If either ping fails, do not proceed to S7 block configuration – you will waste time chasing status codes that originate from the IP layer.
4. S7 Connection Configuration in TIA Portal V15 (S7-300 Client)
The connection is created on the client side. The S7-300 in this scenario is the client; you do not need to create a matching connection inside the S7-400 project for the S7-400 to act as server. The S7-400 simply needs to be reachable on the network with its PUT/GET access enabled.
- In TIA Portal, switch to Devices & Networks > Network view.
- Click the Connections button at the top of the editor.
- Select S7 connection.
- Click the PROFINET interface of the S7-300 CPU – it is highlighted in color.
- Drag a connection line to the S7-300 CPU itself (self-connection to a partner) and select Unspecified as the partner.
- Open the connection properties and enter:
-
Partner IP address: the S7-400 IP, e.g.
192.168.0.20 -
Partner TSAP: leave at the default
03.01(rack 0, slot 2) or set per the S7-400 configuration. For CP 443-1, the TSAP must match the configured connection endpoint on the CP. -
Local TSAP:
03.01by default for the CPU's integrated PROFINET interface. -
Connection ID: note this value – it must be entered in the PUT/GET block parameter
ID.
-
Partner IP address: the S7-400 IP, e.g.
- Compile and download the connection configuration. The S7-300 is now ready to make S7 calls to the S7-400.
5. S7 Connection Configuration in SIMATIC Manager (S7-400 Server)
For the S7-400 to act as a server, the partner connection must be created in NetPro of the SIMATIC Manager project. The CPU does not execute any PUT/GET blocks – it only holds the connection endpoint and the data block.
- Open the S7-400 project and start NetPro (button in the toolbar or Options > NetPro).
- Right-click the CPU row and select Insert New Connection.
- Choose Unspecified as the partner and S7 connection as the type.
- In the connection properties, enter the partner IP address (the S7-300's IP), set the connection name, and accept the default TSAP unless your CPU is in a different rack/slot.
- Confirm with OK and download the connection to the S7-400 CPU.
The S7-400 is now passively listening on TSAP 03.01 (rack 0, slot 2) for S7 communication calls.
6. Programming PUT/GET on the S7-300 Client
6.1 Inserting the blocks
In TIA Portal V15 the FBs are in the Standard Library > Communication Blocks:
-
FB14 —
GET– reads data from the partner -
FB15 —
PUT– writes data to the partner
Add both FBs to the S7-300 program (typically inside OB1 or a cyclic OB). Create a shared instance DB for each FB so the static parameters (ID, ADDR_1, RD_1/SD_1, etc.) are retained across scans.
6.2 Parameter mapping
| Parameter | Type | Purpose | Typical value |
|---|---|---|---|
REQ |
INPUT BOOL | Job trigger; rising edge starts the job | Edge of a clock bit or HMI flag |
ID |
INPUT WORD | Connection ID from the S7 connection |
W#16#0001 (example) |
NDR |
OUTPUT BOOL | GET: new data received (1 = data valid) | — |
DONE |
OUTPUT BOOL | PUT/GET: job completed without error | — |
ERROR |
OUTPUT BOOL | 1 = error occurred; consult STATUS | — |
STATUS |
OUTPUT WORD | Detailed error/status code | W#16#0000 on success |
ADDR_1 |
INOUT ANY | Pointer to partner area (e.g. P#DB100.DBX0.0 BYTE 100) |
Partner DB layout |
SD_1 / RD_1
|
INOUT ANY | Source (PUT) / destination (GET) area on local CPU | Local DB layout |
LEN |
INOUT WORD | Number of bytes to transfer (max 160 for FB14/15, 462 for SFB14/15) | Length of SD_1 or RD_1
|
Sample call from OB1 of the S7-300 (structured text style — equivalent LAD contact network is shown in the official Siemens application example 92269951):
// Instantiate once as a multi-instance or shared DB
CALL FB15, DB15 // PUT
REQ := M10.0 // rising edge from clock generator
ID := W#16#0001 // connection ID from NetPro
DONE := M20.0
ERROR := M20.1
STATUS := MW22
ADDR_1 := P#DB200.DBX0.0 BYTE 20 // partner (S7-400) target DB200
SD_1 := P#DB100.DBX0.0 BYTE 20 // local source DB100
LEN := 20
Use the same ID value that TIA Portal assigned when you created the S7 connection. If STATUS reports W#16#8090 or W#16#80B0 after a download, the ID almost always does not match what is downloaded in the connection configuration; recompile the project and re-download the connection.
7. Data Block Sizing and Memory Layout
A common failure mode observed in commissioning is STATUS = W#16#1 with ERROR = 1 immediately after the first download. The source thread documents this exact symptom: the issue resolved after the user resized the data blocks on the server side. The same symptom can be reproduced on a fresh project by deliberately mismatching LEN with the partner DB size.
Rules that must be observed:
- The local DB referenced by
SD_1(PUT) orRD_1(GET) must be at leastLENbytes long. - The partner DB referenced by
ADDR_1on the S7-400 must also be at leastLENbytes long. - The partner DB must be not write-protected when used as a PUT target, and must be loaded in work memory (not only in load memory).
- For PUT, do not use a DB that has been generated with the Optimized block access attribute – the S7-400 side of the link is a non-optimized S7 communication, which requires the Standard (non-optimized) access attribute on the partner DB. TIA Portal V15 marks all new DBs as optimized by default; clear the checkbox in DB properties > Attributes on the S7-400 DB, then recompile and re-download.
| Local DB length (S7-300) | Partner DB length (S7-400) | LEN | Result |
|---|---|---|---|
| 20 bytes | 20 bytes | 20 | OK |
| 20 bytes | 10 bytes | 20 | PUT/GET: STATUS = W#16#80D0 / W#16#80D2 |
| 10 bytes | 20 bytes | 20 | GET: STATUS = W#16#80B1 (LEN exceeds RD_1) |
| 20 bytes | 20 bytes (optimized access) | 20 | PUT only: STATUS = W#16#80A0 / W#16#80D0 |
8. REQ Trigger Logic and Edge Detection
The single most frequent cause of silent PUT/GET failure is a level-triggered REQ. The S7 PUT/GET blocks execute exactly once per rising edge of REQ. If REQ is wired to a constant TRUE or to a bit that stays high, the block still only fires once on the first scan, then the next job has no rising edge to start.
Use a periodic clock bit or HMI-triggered pulse. The standard Siemens pattern is:
// Clock generator: 0.5 s on, 0.5 s off
M_clock := T1 (T1 := TRUE, PT := 500 ms) // S7-300/400 timer
M_req_put := M_clock XOR M_clock_old // rising edge detector
Wire M_req_put into the REQ input of the PUT block. Repeat for the GET block using a second clock with a different phase, e.g. M_req_get, to avoid the two blocks contending for the same connection resources.
For the S7-400 SFB14/15, the behavior is identical: REQ requires a rising edge.
9. Protection Settings and Access Permissions
The S7-400 CPU (and any S7-1500 in the loop) must explicitly permit remote PUT/GET access. In SIMATIC Manager, this is in the CPU properties:
- Open HW Config and double-click the CPU.
- Go to the Protection tab.
- Select Operating mode: Process mode (with access authorization via the password) or no password (full access).
- Check the box Permit access with PUT/GET communication from remote partner (PLC, HMI, OPC, …).
- Save, compile, and download the hardware configuration to the CPU.
The same setting in TIA Portal V15 (for an S7-1500 server) is at:
CPU properties > Protection & Security > Connection mechanisms > Permit access with PUT/GET communication from remote partner — see the Siemens PDF application note (file 82212115) for screenshots.
10. Error Codes and STATUS Diagnostics
The ERROR and STATUS outputs of FB14/FB15 (and SFB14/SFB15) follow the standard S7 communication error model. STATUS is meaningful only when ERROR = 1; otherwise it carries transient job state codes (e.g. W#16#7000 idle, W#16#7001 first execution, W#16#7002 consecutive execution).
| STATUS (hex) | Meaning | Likely cause / fix |
|---|---|---|
| 0000 | Job completed without error | Success |
| 7000 | No job active | REQ has not been pulsed – check rising edge |
| 7001 | First job execution | Informational |
| 7002 | Consecutive job execution | Informational |
| 8090 | No connection or connection aborted by CPU | Connection ID mismatch, or S7-400 PUT/GET not permitted |
| 8091 | Partner not reachable on the network | IP/Subnet, physical link, firewall – re-verify with ping |
| 8092 | Partner rejected the connection | TSAP mismatch between client and server |
| 8093 | Partner CPU in STOP / HALT | Switch S7-400 to RUN; check for SF on the partner |
| 80A0 | Negative ack from partner – error in SD_i/ADDi | Any-pointer format or optimized-DB access on partner |
| 80A1 | Negative ack from partner – DB access error | Partner DB does not exist or is wrong type |
| 80B0 | System error / internal error | Recompile the project and re-download both stations |
| 80B1 | LEN does not match the source/destination area | Recompute LEN and re-check DB size |
| 80C0 | Specified DB not found (local side) | DB not downloaded; or wrong number |
| 80C1 | Local DB too short | Increase local DB size or reduce LEN |
| 80C3 | Local DB is write-protected | Remove the read-only attribute |
| 80D0 | Server does not have the partner DB loaded | Download the partner DB on the S7-400 |
| 80D1 | Partner DB is write-protected | For PUT, remove write protection on the partner DB |
| 80D2 | Partner DB too short | Increase partner DB size on the S7-400 |
| 80D3 | Partner DB does not exist on server | Create and download the partner DB on the S7-400 |
| 80E0 | Internal CPU error | Power-cycle the S7-400; check for OB121/OB122 errors |
The thread reported "error and status = 1", which is the classic pattern of either a non-pulsed REQ (status = 0x0001 = first execution in progress) or, more often when the user reports it as a hard error, an ERROR = 1 with the bit-level STATUS = 0x0001 reflecting a partner-cannot-be-reached condition. Treat any persistent STATUS = 1 as a connection-establishment issue before assuming a programming bug.
11. Troubleshooting Matrix
Use this matrix as a commissioning checklist when PUT/GET fails.
| Symptom | First action | Second action | Root cause if both fail |
|---|---|---|---|
| DONE never goes high; ERROR = 0; STATUS = 7000 | Verify REQ has a rising edge | Inspect clock generator | REQ held high continuously |
| ERROR = 1; STATUS = 8090 | Verify connection ID matches | Re-download S7 connection config | Connection config not in CPU |
| ERROR = 1; STATUS = 8091 |
ping the S7-400 |
Check subnet mask and router | Layer 3 routing issue |
| ERROR = 1; STATUS = 8092 | Match TSAPs on both sides | Check rack/slot in TSAP | Wrong partner TSAP on client |
| ERROR = 1; STATUS = 80A0 / 80A1 | Inspect ADDR_1 pointer syntax |
Confirm partner DB is non-optimized | Optimized DB access on S7-400 |
| ERROR = 1; STATUS = 80C0 / 80C1 | Confirm local DB exists | Resize local DB | LEN > DB size |
| ERROR = 1; STATUS = 80D0 / 80D1 / 80D2 / 80D3 | Create the partner DB on S7-400 | Download partner DB to S7-400 | Partner DB missing/too short |
| ERROR = 1; STATUS = 1 (per the source thread) | Resize partner DB | Verify PUT/GET permission checkbox | Protection not enabled on S7-400 |
| No error but data never updates | Watch NDR (GET) or DONE (PUT) in VAT | Check the cycle time of the trigger | REQ never pulses |
12. Verification and Commissioning Procedure
After programming and downloading, walk through the following verification steps in order:
-
Layer 3 reachability:
pingboth CPUs from the engineering station. Both must respond. - Online connection status: In TIA Portal, go online with the S7-300 and open Online & Diagnostics > Communication > S7 connections. The connection should show Established. In SIMATIC Manager, use PLC > Monitor/Modify > Communication (or open NetPro and view the connection state).
-
Force a single job: Set the
REQtrigger bit once and observeERROR/STATUSin a VAT table. - Verify data movement: With the S7-300 in STOP and a known pattern in the local DB, force a PUT. Switch the S7-300 to RUN and confirm the partner DB on the S7-400 has changed. With a GET, read the partner DB and confirm the local DB updates.
-
Sustained operation: Enable the periodic trigger and monitor
DONEandNDRfor at least one full cycle. Verify thatERRORremains0. - Diagnostic buffer: On both CPUs, review the diagnostic buffer for SF entries related to S7 communication. Clear and re-run to confirm clean state.
13. Performance and Timing Considerations
PUT/GET is suitable for cyclic, non-time-critical exchanges. Practical numbers from Siemens documentation and field measurements:
- One PUT/GET cycle: 20 ms to 80 ms on a 100 Mbit/s Industrial Ethernet link, depending on the LEN.
- Maximum payload per call: 160 bytes for FB14/FB15 (S7-300), 462 bytes for SFB14/15 (S7-400), 462 bytes for S7-1500 PUT/GET.
- Connection resources: each configured S7 connection consumes one connection resource on the client CPU. S7-300 has 4–16 connection resources; S7-400 has up to 64; S7-1500 has 64–128 depending on CPU.
For high-frequency, deterministic, or large-payload data, use ISO-on-TCP (T-block version: TCON, TSEND, TRCV) or, on S7-1500, OPC UA published data blocks.
14. Mixed-Tool Field Reference
This reference applies generally to any S7-300 (TIA) ↔ S7-400 (SIMATIC Manager) PUT/GET link. The following substitutions also work:
| Server (passive) | Client (active) – TIA Portal V15 | Notes |
|---|---|---|
| S7-300/400 in SIMATIC Manager | S7-300 in TIA V15 | This article's scenario |
| S7-1500 in TIA V15+ | S7-300 in TIA V15 | PUT/GET permission must be enabled in Protection & Security |
| S7-300/400 in SIMATIC Manager | S7-1500 in TIA V15+ | Use the system PUT/GET instructions from the S7-1500 library |
| S7-1500 in TIA V18+ | S7-300 in TIA V15 | Requires firmware V2.5+ on the S7-1500 for legacy PUT/GET |
For the most current block behavior, error codes, and security notes, always cross-check the version of the TIA Portal help installed locally (Help > Show Help) against the official Siemens TIA Portal v20 documentation on PUT/GET instructions.
Why does my PUT/GET show STATUS = 1 and ERROR = 1?
Status W#16#0001 with ERROR = 1 typically means the connection cannot be established. The most common causes are: a missing rising edge on REQ, the connection ID not matching the downloaded S7 connection configuration, the partner CPU not reachable on the network, or PUT/GET access not enabled in the partner CPU's protection settings. Verify ping, REQ trigger, ID parameter, and the partner's Protection tab in that order.
Do I need to program PUT/GET on the S7-400 too?
No. PUT/GET is a unilateral (client-driven) protocol. The client CPU runs FB14/FB15 (S7-300) or SFB14/SFB15 (S7-400) and initiates the read or write. The server CPU simply makes its data blocks available over the S7 connection; no block code is required on the server. Only one CPU is programmed for these exchanges.
How do I enable PUT/GET on the S7-400 server?
Open HW Config in SIMATIC Manager, double-click the CPU, switch to the Protection tab, and check "Permit access with PUT/GET communication from remote partner." Save, compile, and download the hardware configuration to the CPU, then restart the S7-400. The S7-300 client will then be able to access its data blocks.
What is the maximum amount of data I can transfer with PUT/GET?
FB14/FB15 on the S7-300 supports up to 160 bytes per call. SFB14/SFB15 on the S7-400 supports up to 462 bytes. The S7-1500 PUT/GET system instructions also support 462 bytes. For larger transfers, split the data into multiple jobs and call PUT/GET in sequence, or switch to TCON/TSEND/TRCV.
Why does my data block on the S7-400 reject the write with W#16#80A0?
STATUS W#16#80A0 means a negative acknowledgement from the partner, almost always caused by using an optimized data block on the S7-400. S7 communication from a non-TIA client only works with standard (non-optimized) access. Clear the "Optimized block access" attribute in the S7-400 DB properties, recompile, and re-download the DB.