Overview
PUT/GET is the Siemens designation for the S7 communication services used to read (GET) and write (PUT) data areas on a remote SIMATIC CPU over Industrial Ethernet. Both the S7-300 and S7-1500 CPU families implement these services, but their default state, activation procedure, and system block interface differ significantly. The S7-300 CPU — for example, the widely deployed 6ES7317-2EK14-0AB0 (CPU 317-2 PN/DP) — accepts PUT/GET traffic without any project-level enablement. The S7-1500 CPU, by contrast, blocks PUT/GET by default starting with firmware V3.1 and requires explicit opt-in via TIA Portal. This reference walks through both platforms, the FB14/FB15 programming interface on S7-300, the TIA Portal enablement procedure on S7-1500, NetPro S7 connection configuration, payload limits, security posture, and the migration path between the two families.
PUT/GET Communication Model: S7-300 vs S7-1500
| Attribute | S7-300 (e.g. CPU 317-2 PN/DP) | S7-1500 CPU | S7-1200 CPU |
|---|---|---|---|
| PUT/GET default state | Always permitted | Blocked by default | Blocked by default |
| Firmware version introducing toggle | Not applicable | V3.1 and later | V4.7 and later |
| Configuration location | Implicit in firmware | Device configuration > Protection & Security > Connection mechanisms | Device configuration > Protection & Security > Connection mechanisms |
| Programming block | FB14 (GET), FB15 (PUT) | "GET" / "PUT" extended instructions in TIA Portal | "GET" / "PUT" extended instructions in TIA Portal |
| Addressing mode | Absolute only (DB, M, I, Q, P, T, C) | Absolute or symbolic | Absolute or symbolic |
| Connection configuration tool | SIMATIC Manager > NetPro | TIA Portal > Devices & Networks | TIA Portal > Devices & Networks |
| Default payload cap | 160 bytes per call | Up to 64 KB depending on CPU type | Up to 64 KB depending on CPU type |
| Authentication | None | None (still unauthenticated; toggle is only a permission flag) | None |
S7-300 PUT/GET: Always-On Architectural Model
The S7-300 architecture predates the granular access-control model introduced with the S7-1500 generation. Every S7-300 CPU that exposes an industrial Ethernet interface — whether through an onboard PROFINET port (CPU 315-2 PN/DP, 317-2 PN/DP, 319-3 PN/DP) or via the CP 343-1 family — accepts incoming S7 communication frames targeting PUT/GET services without any project-level enablement. There is no property sheet, no bit in the CPU properties, and no NetPRO checkbox to flip. From a security perspective this is an always-on, always-permitted model.
Supported S7-300 CPUs
- CPU 312C, 312, 314, 314C, 315, 315-2 PN/DP, 317-2 PN/DP, 319-3 PN/DP
- All S7-300 CPUs paired with CP 343-1 Lean / CP 343-1 / CP 343-1 Advanced / CP 343-1 ERPC
- CPU 31x PN/DP variants with at least firmware V2.x (older firmware requires CP 343-1)
Why the S7-300 Cannot Behave Like an S7-1500 Toggle
The "Permit access with PUT/GET communication from remote partner" checkbox does not exist on S7-300. The CPU's firmware simply has no facility to reject a PUT or GET request. The only way to restrict PUT/GET on a live S7-300 system is network-level filtering — for example, an industrial firewall (SCALANCE S, mGuard, or Cisco IE) configured to drop TCP/102 S7 traffic from unauthorized source IPs. Application-level restrictions via know-how protection do not apply to PUT/GET; they only protect S7 program blocks from upload.
S7-1500 PUT/GET: Explicit Access Control
Starting with S7-1500 CPU firmware V3.1 and S7-1200 CPU firmware V4.7, Siemens introduced an explicit permission flag for legacy PUT/GET communication. The default state is disabled — meaning a TIA Portal project shipped without explicitly enabling the option will reject any PUT/GET request from a remote partner, regardless of whether the request originates from an S7 client, an OPC server, or an HMI panel.
Per the official Siemens Knowledge Base entry 109925755 — How do you activate PUT/GET access on an S7-1500 CPU from FW V3.1 or S7-1200 CPU from FW V4.7?, the activation path is:
- Open the device configuration of the S7-1500 / S7-1200 CPU in the TIA Portal project.
- In the inspector window, navigate to
Properties > Protection & Security. - In the section navigation on the left, select Connection mechanisms.
- Activate the option "Permit access with PUT/GET communication from remote partner".
- Compile the hardware configuration (Compile > Hardware (rebuild all)) and download it to the CPU.
The TIA Portal reference manual (PUT/GET: Restrictions in the CPU) documents that even with the option enabled, the partner must still be reachable at TCP/102 and the CPU must have free connection resources. Disabling the option does not block HMI communication via S7 connections explicitly configured in TIA Portal — only the legacy unconfigured PUT/GET requests.
Programming FB14 (GET) and FB15 (PUT) on S7-300
The S7-300 PUT/GET services are exposed through two communication function blocks that ship in every S7-300 CPU's system data. The reference sample program is published by Siemens as entry 18924842 — S7 Communication with blocks FB14 (GET) and FB15 (PUT) of the CPU 317-2 PN/DP.
FB14 GET — Interface Definition
| Parameter | Direction | Data Type | Description |
|---|---|---|---|
| REQ | INPUT | BOOL | Rising edge initiates the read operation. |
| ID | INPUT | WORD | S7 connection identifier from NetPro (Block ID, hex). |
| ADDR_1 | INPUT | ANY | Pointer to memory area on the partner CPU to be read. |
| RD_1 | OUTPUT | ANY | Pointer to local memory area where received data is stored. |
| NDR | OUTPUT | BOOL | New data received (one-shot pulse on success). |
| ERROR | OUTPUT | BOOL | Set if an error occurred during execution. |
| STATUS | OUTPUT | WORD | Status / error code. See S7-300 Communication manual. |
FB15 PUT — Interface Definition
| Parameter | Direction | Data Type | Description |
|---|---|---|---|
| REQ | INPUT | BOOL | Rising edge initiates the write operation. |
| ID | INPUT | WORD | S7 connection identifier from NetPro (Block ID, hex). |
| SD_1 | INPUT | ANY | Pointer to local memory area whose contents will be sent. |
| ADDR_1 | INPUT | ANY | Pointer to target memory area on the partner CPU. |
| DONE | OUTPUT | BOOL | Write completed (one-shot pulse on success). |
| ERROR | OUTPUT | BOOL | Set if an error occurred during execution. |
| STATUS | OUTPUT | WORD | Status / error code. |
Structured Text Sample: GET 10 Words from Partner DB200 into Local DB100
// Trigger GET on rising edge of bTrigRead
IF bTrigRead THEN
FB14_GET.REQ := TRUE;
FB14_GET.ID := W#16#1; // connection ID 1 from NetPro
FB14_GET.ADDR_1 := P#DB200.DBX 0.0 WORD 10; // partner: DB200, 10 words
FB14_GET.RD_1 := P#DB100.DBX 0.0 WORD 10; // local : DB100, 10 words
FB14_GET();
IF FB14_GET.NDR THEN
bTrigRead := FALSE; // single-shot complete
bGetNdr := TRUE;
END_IF;
IF FB14_GET.ERROR THEN
wGetStatus := FB14_GET.STATUS; // capture for HMI diagnostics
bGetErr := TRUE;
END_IF;
END_IF;
Ladder Logic Equivalent (FB14 GET)
| bTrigRead FB14 |
|---[P]----------|REQ NDR|----( )--|
| | | |
| W#16#1--------|ID ERROR|----( )--|
| | | |
| P#DB200 |ADDR_1 | |
| DBX0.0 WORD10 | | |
| | | |
| P#DB100 |RD_1 STATUS|--[MW10]|
| DBX0.0 WORD10 | | |
NetPro S7 Connection Configuration
For S7-300 PUT/GET traffic, the S7 connection must be configured in NetPro. Per the Siemens PDF 82212115 — S7 Communication with PUT/GET (S7-300 Sequencer), the procedure is:
- In SIMATIC Manager, open the project containing the S7-300 station.
- Launch NetPro via Options > Configure Network.
- In the S7-300 station's connection table, insert a new S7 connection.
- Set the partner to Unspecified (for partner not in same project) or select a known partner station.
- Confirm the connection type is S7 connection.
- Note the local ID (Block ID) parameter — this is the value passed to FB14/FB15
IDinput. - Compile and download the connection configuration to the CPU.
PC and HMI Client Integration
PUT/GET on the S7-300 has been the de facto integration protocol for third-party HMI/SCADA software that speaks the S7 protocol natively. Common clients include:
- LabVIEW DSC / LabVIEW Datalogging via the OPC servers from Siemens or third-party drivers. LabVIEW itself does not speak S7 natively; it relies on an OPC or TCP server that exposes PUT/GET as the lowest-common-denominator transport.
- WinCC flexible / TIA Portal WinCC HMI panels communicating with S7-300 (HMI tags use PUT/GET under the hood).
- Kepware, LibNoDave, Snap7, NodeS7 — third-party drivers that wrap PUT/GET as the transport for read/write requests.
For the LabVIEW integration scenario described in the original project context (traceability PC reading/writing to a PLC), three options are available:
| Option | Protocol | S7-300 compatible | S7-1500 compatible | Bidirectional |
|---|---|---|---|---|
| LabVIEW → OPC DA → Siemens OPC → S7 PUT/GET | OPC DA over DCOM | Yes | Only if PUT/GET enabled | Yes |
| LabVIEW → S7 driver (Snap7 / LibNoDave) | S7 TCP direct | Yes | Only if PUT/GET enabled | Yes |
| LabVIEW → TCP socket → open user comm FB on PLC (JSON) | TCP/IP with TSEND/TRCV or TCON | Yes | Yes (no toggle needed) | Yes |
The third option (TCP socket with JSON payloads) bypasses PUT/GET entirely and is recommended for new S7-1500 projects where PUT/GET must remain disabled for security reasons. S7-300 supports this via the CP 343-1 Lean or higher, using TCON, TSEND, and TRCV (FB186/FB187/FB188) with ISO-on-TCP or TCP protocol.
Security Posture and Hardening
| Threat Vector | S7-300 risk profile | S7-1500 mitigation |
|---|---|---|
| Unauthorized read of process data | High — no toggle, no audit trail | Disabling PUT/GET blocks all legacy reads; layer with know-how protection on blocks |
| Unauthorized write / recipe injection | High — PUT is always accepted from any TCP/102 source | Disable PUT/GET; use only authenticated S7 connections configured in TIA Portal |
| Man-in-the-middle on PROFINET | Medium — no integrity check on S7 frames | Use S7-1500 Security CPUs (e.g., CPU 1518S) or CP 1543-1 with TLS-secured OPC UA |
| Brute force / replay | High — no rate limiting | Industrial firewall (SCALANCE SC622) with deep-packet inspection |
| Insider with engineering station | Medium — STEP 7 + project file grants full access | Sign project files; restrict CPU password and access levels |
Data Payload Limits and Performance
The classic S7-300 PUT/GET payload is capped at 160 bytes per call when using the standard FB14/FB15. To transfer larger datasets, the calling code must either segment into multiple calls or chain the ADDR_1..ADDR_4 / RD_1..RD_4 pointers. Per the Siemens Knowledge Base entry 49450152 — How do you program FB14 (GET) and FB15 (PUT) in S7-300 to transfer more than 160 bytes?, the chained variant allows up to 4 × 160 = 640 bytes per call.
Payload Comparison
| Platform | Default max payload | With chained ADDR_x / SD_x / RD_x | Notes |
|---|---|---|---|
| S7-300 FB14/FB15 | 160 bytes | 640 bytes (4 pointers) | Constrained by FB interface |
| S7-1500 PUT/GET instruction | Up to 64 KB (CPU-dependent) | Single call, no chaining needed | Subject to available connection resources |
| S7-1200 PUT/GET instruction | Up to 64 KB (CPU-dependent) | Single call | Firmware V4.0+ recommended |
Typical PUT/GET Call Cycle Time on S7-300
| Payload size | Cycle time (typical, PN/DP CPU 317) | Cycle time (typical, CP 343-1) |
|---|---|---|
| 10 bytes | 8–15 ms | 20–40 ms |
| 160 bytes | 15–25 ms | 35–60 ms |
| 640 bytes (chained) | 40–70 ms | 90–150 ms |
Values are typical measurements on an isolated PN segment. Real-world figures depend on network load, partner CPU scan time, and any intermediate switches.
Migration Considerations: S7-300 to S7-1500
When migrating a CPU 317-2 PN/DP project to an S7-1500 platform (e.g., CPU 1515-2 PN or CPU 1518-4 PN/DP), the following PUT/GET-related items must be addressed:
- Enable PUT/GET on S7-1500 in the new TIA Portal project. Without this, every LabVIEW / OPC client that previously "just worked" will start receiving STATUS = W#16#0002 errors.
- Replace FB14/FB15 calls with the TIA Portal "GET" and "PUT" extended instructions from the Communication > S7 Communication palette. The instance DB model is different (multi-instance capable on S7-1500).
- Convert ANY pointers from absolute (DB200.DBX0.0) to either absolute or symbolic form. The S7-1500 uses optimized block access by default; any code that referenced %DB200.DBX0.0 must either be switched to symbolic addressing or the block must be configured with the Accessible from S7 communication / PUT-GET access without optimized block access attribute.
- Address the S7-Graph limitation: S7-Graph optimized access is available only on S7-1500. S7-300 supports both optimized and non-optimized, but S7-1500 S7-Graph blocks are optimized by default. If the application uses S7-Graph sequences that interlock with PUT/GET, ensure the referenced data blocks are marked as accessible from S7 communication.
- Verify connection resources. S7-1500 CPUs have a different (typically higher) number of S7 connection resources than the S7-300 they replace. Refer to the CPU-specific datasheet for the exact count.
Troubleshooting Matrix
| Symptom | STATUS (FB14/FB15) | Probable cause | Remedy |
|---|---|---|---|
| FB reports ERROR immediately, STATUS = 1 | W#16#0001 | Communication fault / connection not established | Verify NetPro connection is downloaded; check CP/PN cable; verify partner IP reachable |
| FB reports ERROR, STATUS = 2 | W#16#0002 | Negative acknowledgment from partner | Verify partner CPU is in RUN; verify area length matches ANY pointer; on S7-1500 partner, verify PUT/GET enabled |
| FB reports ERROR, STATUS = 3 | W#16#0003 | No resources available at partner | Reduce concurrent FB calls; check connection resources in CPU datasheet |
| FB reports ERROR, STATUS = 8 | W#16#0008 | Parameter assignment error | Check ANY pointer alignment, length parameters, and that data type matches the partner area |
| NDR/DONE never asserts | n/a | REQ held continuously without polling the FB | REQ must be a one-shot (pulse); FB is edge-triggered |
| Sporadic data corruption | n/a | SD/RD area overlaps with process image or interrupt OB | Use DB areas that are not part of any process image partition |
| Partner is S7-1500 and all calls fail | W#16#0002 | PUT/GET disabled on S7-1500 | Enable option in TIA Portal > Protection & Security > Connection mechanisms |
| Connection establishes but only one direction works | varies | Asymmetric firewall rule or asymmetric routing | Verify both TCP/102 ingress and egress permitted for both endpoints |
Note: STATUS codes follow the convention documented in the S7-300 Communication Function Blocks manual. For S7-1500 PUT/GET extended instructions, the STATUS values are mapped through the standard done, busy, error, and status outputs — refer to the TIA Portal online help for the exact mapping.
Frequently Asked Questions
Does the S7-300 CPU have a checkbox to enable PUT/GET access like the S7-1500?
No. The S7-300 has no project-level toggle for PUT/GET; the service is always enabled on any CPU with an Industrial Ethernet interface. The only way to restrict PUT/GET access to an S7-300 is network-level filtering (firewall / ACL on a SCALANCE or Cisco IE switch).
Which Siemens firmware version introduced the PUT/GET toggle on S7-1500?
The "Permit access with PUT/GET communication from remote partner" option was introduced in S7-1500 firmware V3.1 and S7-1200 firmware V4.7. CPUs running older firmware accept PUT/GET unconditionally — same behavior as S7-300.
What is the maximum payload per PUT/GET call on an S7-300?
The default FB14/FB15 call transfers up to 160 bytes. By chaining the ADDR_1..ADDR_4 and RD_1..RD_4 pointers on FB14, or SD_1..SD_4 and ADDR_1..ADDR_4 on FB15, up to 640 bytes can be transferred in a single call.
Why does my LabVIEW client work with an S7-1500 in one project but not in another?
Most likely the S7-1500 in the failing project has the PUT/GET toggle disabled (the default in TIA Portal projects targeting S7-1500 firmware V3.1+ or S7-1200 firmware V4.7+). Enable it via Device configuration > Protection & Security > Connection mechanisms, then recompile and download the hardware configuration.
Can FB14/FB15 from S7-300 be reused in an S7-1500 project?
No. FB14/FB15 are tied to the S7-300 system resource pool and the S7-300 communication stack. S7-1500 uses the TIA Portal "GET" and "PUT" extended instructions, which generate instance DBs and use the new system clock for cycle monitoring.
Does disabling PUT/GET on S7-1500 also block WinCC HMI communication?
No. Disabling the PUT/GET option blocks only legacy unconfigured PUT/GET requests. HMI connections explicitly configured in TIA Portal (HMI tags, S7 routes) continue to work because they use the configured S7 connection resource, not the legacy PUT/GET service.