S7-1500 I-Device vs PUT/GET: PROFINET Data Transfer Compared
This technical reference compares two PROFINET-based mechanisms for moving data between two S7-1500 controllers: the PUT/GET instruction set and the I-Device (Intelligent IO Device) function. The analysis is grounded in a real engineering scenario where the integrator has programming access to only one of the two S7-1500 CPUs, with the second CPU acting as a "black box" device on the same PROFINET subnet. Under that constraint, the selection between PUT/GET and I-Device is no longer a matter of preference; it is a matter of physical access. This document expands the decision criteria, configuration steps, and field caveats so that any engineer facing the same architecture can move from "is it possible?" to a reproducible commissioning procedure in TIA Portal.
1. Architectural Overview: Two PROFINET Roles for an S7-1500
An S7-1500 CPU on PROFINET can fulfil three primary roles:
- IO Controller — the master that plans and exchanges process data with assigned IO Devices on the subnet. S7-1500 CPUs always function as IO Controllers on their PROFINET interface by default.
- IO Device — a slave that exposes a defined set of process data (inputs/outputs) to an IO Controller. An S7-1500 CPU can be configured as an IO Device.
- I-Device — an S7-1500 that acts simultaneously as an IO Device and as an IO Controller for its own lower-level PROFINET subnet. The "I" prefix indicates the device hosts its own automation logic and exposes a controlled subset of that data upstream.
PUT/GET does not rely on the IO role architecture. PUT/GET operates as an application-layer instruction over an existing S7 connection, traversing PROFINET/Industrial Ethernet at the transport layer. The role of the CPU in PROFINET does not constrain PUT/GET; it only constrains the active/passive connection permission flags. This distinction is the key reason PUT/GET works when an I-Device configuration is not possible.
2. Two Communication Mechanisms in Detail
2.1 PUT/GET — Application-Layer DB Access
PUT/GET are two STEP 7 instructions from the Communication palette in TIA Portal:
- PUT — writes a contiguous block of data from a local DB into a remote DB on the partner CPU.
- GET — reads a contiguous block of data from a remote DB into a local DB on the calling CPU.
Both instructions use the S7 protocol over a configured S7 connection in the project tree (Devices & Networks > Networks > S7 connections). Each instruction is triggered by a one-shot REQ bit, runs asynchronously, and sets a DONE, ERROR, and STATUS word when complete. The maximum payload is 462 bytes for a CPU 1500 in firmware V2.x and later; older firmware V1.x CPUs cap at 222 bytes. The transfer can be performed cyclically by a timer or event-driven by a process signal.
Because PUT/GET is a pure instruction, the CPU hosting the data being read or written needs only one configuration change: the Permit access with PUT/GET communication partner option in the CPU properties (Properties > Protection & Security > Connection mechanisms). No DB, tag, or program code must be added on the partner side.
2.2 I-Device — Cyclic Process-Image Exchange
The I-Device function is described in detail in the Siemens application document "I-Device Function in Standard PN Communication". An I-Device exposes a defined transfer area — a contiguous slice of its process image — to an upper-level IO Controller. The transfer area is mapped to submodules in the device description (GSDML), and the upper controller consumes those submodules as if it were talking to a standard distributed IO device (ET 200, drive, valve island, etc.).
The I-Device is, internally, both a controller for its own PN subnet and a device for an external PN controller. It is the standard Siemens approach for cleanly separating two automation projects: the GSD file is the only contract between the device integrator and the controller integrator, as documented in "Properties and advantages of the I-device" in the SIMATIC S7-1200 G2 manual collection. The characteristics of an I-device, including the IO-controller and IO-device dual role, are summarized in "Characteristics of an I-device" using a print-process example.
For a S7-1500-to-S7-1500 link, the project flow is:
- Engineer A builds the lower-level CPU project and configures the I-Device transfer area in TIA Portal (or exports the GSDML of the I-Device from the project).
- Engineer B imports the GSDML into the upper-level project and drags the I-Device into the device view of the upper CPU.
- Engineer B assigns the I-Device's submodules to the upper CPU's process image. The data appears as IB/QB/ID/QD on the upper CPU.
This contract is rigid: there is no mechanism for the upper CPU to read arbitrary DBs from the I-Device. The I-Device decides which areas are exported, and the upper CPU consumes only those areas at the IO scan rate (typically 1 ms to 4 ms, set in the PROFINET properties of the upper controller).
3. Side-by-Side Comparison
| Criterion | PUT/GET | I-Device |
|---|---|---|
| Programming required on data-source CPU | No (only a CPU property flag) | Yes (transfer area configuration in TIA Portal) |
| Programming required on data-destination CPU | Yes (call PUT/GET FB) | Yes (install GSDML, drag device, map process image) |
| Coupling style | Application-layer, acyclic or triggered by user program | Cyclic IO data exchange at PROFINET update rate |
| Data type passed | Any DB contents (BOOL, INT, REAL, STRING, UDT arrays, DTL) | Only what is mapped to the transfer area (typically I/Q memory, no direct DB unless symbolically projected) |
| Maximum payload per call | 462 bytes (S7-1500 FW V2.0+), 222 bytes (FW V1.x) | Sum of all transfer area submodules; S7-1500 supports up to 1440 bytes input + 1440 bytes output per slot/module, multiple slots allowed |
| Update rate | Event-driven or scan-dependent; typically 10 ms–100 ms in practice | PROFINET update time, typically 1–4 ms |
| Configuration coupling | S7 connection in TIA Portal on the requesting side only | GSDML import on the upper controller side |
| Sub-project separation possible | No — partner must trust the consumer's request | Yes — GSD is the contract, projects are independent |
| Latency determinism | Lower (best-effort, application scan) | Higher (deterministic PROFINET cycle) |
| Required firmware | Any S7-1500 with PN interface | S7-1500 supports I-Device from FW V1.5; GSD export requires V2.0+ |
| Scalability to many consumers | Limited — each consumer needs its own S7 connection or shared DBs | High — additional IO controllers just import the same GSD |
4. The Access Constraint: Why PUT/GET Wins in This Scenario
The decisive question in the originating engineering scenario is not "which is faster?" or "which is more elegant?" but "which one does not require me to modify PLC_1?".
For an I-Device, the source CPU (PLC_1) must be configured with the I-Device role, a transfer area must be defined, and a GSDML file must be exported. None of those steps are possible from the upper CPU's project alone. PUT/GET, by contrast, requires only that the PLC_1 be put into a state where it will accept S7 read/write requests from a partner. That state is enabled by a single CPU property:
- Open PLC_1 in TIA Portal (if read-only access to the project is even available, no code change is needed).
- Navigate to Properties > Protection & Security > Connection mechanisms.
- Enable Permit access with PUT/GET communication partner.
If PLC_1 is a "black box" whose project cannot be opened, the same setting must be changed in the online configuration or by the OEM. Once that flag is set, PLC_2 (the integrator's project) can configure an S7 connection to PLC_1 and call GET to pull DB contents from PLC_1, or PUT to write back into PLC_1. No programming change is required inside PLC_1's user program — the S7-1500 CPU's operating system handles the request natively.
The I-Device path is closed in this scenario for three concrete reasons:
- You cannot make PLC_1 act as an I-Device without configuring it as one in TIA Portal.
- You cannot generate a GSDML of PLC_1 without opening PLC_1's project.
- You cannot import a non-existent GSDML on PLC_2 to consume PLC_1 as an I-Device.
Therefore the original poster's tentative conclusion — "PUT/GET seems like the only option" — is correct. I-Device would be architecturally superior (deterministic, project-separated, multi-consumer), but it is not reachable from the integrator's seat.
5. Step-by-Step: PUT/GET Implementation Between Two S7-1500
5.1 Prerequisites
- Two S7-1500 CPUs with PROFINET interface (any firmware V1.5 or higher; the example uses V2.9 typical in 2024 deployments).
- Both CPUs on the same IP subnet (for example 192.168.0.0/24) with unique IP addresses and identical subnet masks.
- PROFINET cable between the two CPU PROFINET ports (X1 or X2 depending on hardware). For S7-1515/1516, X1 is the default PN interface; X2 is optional on most variants.
- PLC_1 has PUT/GET access enabled in CPU properties (see Section 4).
- PLC_2's TIA Portal project has the S7-1500 CPU added with its PROFINET interface configured with the correct IP address.
5.2 Configure the S7 Connection
- Open PLC_2's project in TIA Portal V17 or later (V19 is current as of the manual baseline; V18 is the LTS release widely deployed).
- In the project tree, expand Devices & Networks and click Networks.
- Drag an S7 connection from PLC_2's PROFINET interface to PLC_1's PROFINET interface. TIA Portal will resolve the partner by browsing the subnet or by manual entry.
- In the connection properties, set the partner IP address (PLC_1's PROFINET IP, e.g. 192.168.0.10).
- Set the local ID (the connection identifier; default 1, can be changed to any unsigned 16-bit integer except 0x0E and 0x0F which are reserved for diagnostic connections).
- Confirm the connection partner's TSAP. For an S7-1500 partner, the default TSAP is
03.01for the first PN interface; the slot-1 rack-0 default. TIA Portal usually fills this in automatically.
5.3 Call GET and PUT in the User Program
From the Instructions task card in TIA Portal, open Communication > S7 Communication and place the GET and PUT blocks into a program block (typically an OB1 cycle or a dedicated FC). The function blocks are PUT (FB 15 under the hood) and GET (FB 14) for S7-1500. The instance DB is created automatically when you drop the block.
Example call for GET (reading 50 bytes from DB100 of PLC_1 starting at byte 0, into DB200 of PLC_2 starting at byte 0):
// GET instance DB: "DB_GET"
"DB_GET"(REQ := bStartTrigger, // BOOL — rising edge initiates the read
ID := 1, // WORD — connection ID from Section 5.2
ADDR_1:= P#DB100.DBX0.0 BYTE 50, // ANY — remote address: DB100, byte 0, 50 bytes
RD_1 := P#DB200.DBX0.0 BYTE 50, // ANY — local target: DB200, byte 0, 50 bytes
DONE => bDone, // BOOL — success flag
BUSY => bBusy, // BOOL — operation in progress
ERROR => bError, // BOOL — error flag
STATUS=> wStatus); // WORD — error/status code
Example call for PUT (writing 20 bytes from DB300 of PLC_2 to DB150 of PLC_1):
// PUT instance DB: "DB_PUT"
"DB_PUT"(REQ := bStartTrigger, // BOOL — rising edge initiates the write
ID := 1, // WORD — connection ID
ADDR_1:= P#DB150.DBX0.0 BYTE 20, // ANY — remote target: DB150, byte 0, 20 bytes
SD_1 := P#DB300.DBX0.0 BYTE 20, // ANY — local source: DB300, byte 0, 20 bytes
DONE => bDone,
BUSY => bBusy,
ERROR => bError,
STATUS=> wStatus);
5.4 Trigger and Verify
- Toggle the
bStartTriggerbit from your HMI, watch table, or a periodic timer (a 100 ms clock is a common choice for non-time-critical data). - Monitor the
DONEbit to confirm success.DONE = TRUEfor one cycle indicates a successful transfer. - If
ERROR = TRUE, read theSTATUSword. Common codes:0x0001(communication problem, e.g. wrong IP or PUT/GET not permitted),0x0005(resource problem, no free connection),0x0007(data length error, exceeds 462 bytes or non-contiguous pointer). - Use Online & Diagnostics > Connections on PLC_2 to confirm the S7 connection is established. The state should be "established" with the partner IP visible.
6. Step-by-Step: I-Device Configuration (Reference Implementation)
Included for completeness so that engineers who do have access to both projects can implement I-Device correctly and migrate from PUT/GET later if PLC_1 becomes accessible.
6.1 Configure PLC_1 as an I-Device
- Open PLC_1's TIA Portal project.
- Select PLC_1 in the device view and open Properties > PROFINET interface [X1] > Operating mode.
- Set PN interface mode to IO Device (which enables the I-Device option) and tick I-Device.
- Under Transfer areas, click Add new and define a transfer area. Specify direction (input or output from the perspective of the upper IO controller), length, and address. For example, an input area of 32 bytes starting at IB 0.
- Compile the project. Right-click PLC_1 and select Export > GSDML file. TIA Portal will generate a GSDML-V<version>-Siemens-<CPU>.xml file.
6.2 Configure PLC_2 to Consume PLC_1 as I-Device
- Open PLC_2's TIA Portal project.
- Install the exported GSDML: Options > Manage general station description files (GSD) > Source path > select the GSDML file.
- Drag the I-Device from the hardware catalog (under PROFINET IO > I-Devices > <your CPU>) into the device view of PLC_2's PROFINET subnet.
- Assign the I-Device to PLC_2 (the IO controller for this subnet).
- Drag the I-Device's submodules into the slots of PLC_2. Each submodule maps to a transfer area; for an input submodule of 32 bytes, the I-Device's input data appears at IB0–IB31 of PLC_2's process image.
- Set the PROFINET update time: Properties > PROFINET interface > Real-time settings > Update time. 1 ms is typical for high-speed motion; 4 ms is the common default for general automation.
- Compile and download to PLC_2.
6.3 Data Access in PLC_2
Once configured, the I-Device data is accessible to PLC_2's user program exactly as if it were a remote rack of digital/analog inputs. Use:
iInputBit := %IB0; // first byte of the I-Device's input transfer area
iWordValue := %IW2; // first 16-bit word
rRealValue := %ID4; // first 32-bit REAL at byte offset 4
No call to GET/PUT is needed; the data is refreshed every PROFINET update cycle. There is also no application latency, no DONE/BUSY handshake, and no STATUS word to interpret.
7. Data Limits, Performance, and Throughput
7.1 PUT/GET Throughput
The S7-1500 PUT/GET instructions are bounded by:
- Maximum payload per call: 462 bytes (firmware V2.0+); 222 bytes (firmware V1.x). For larger transfers, segment into multiple calls or use the Open User Communication blocks (TSEND/TRCV) over ISO-on-TCP or TCP.
- Per-connection parallel calls: PUT/GET operate on a single S7 connection; the connection can service one PUT and one GET in parallel but multiple PUTs to the same connection serialize.
- Throughput limit: A typical S7-1500 PUT/GET call over PROFINET completes in 10–30 ms for a 462-byte payload, dominated by CPU scan and S7 protocol stack processing. Higher rates (sub-10 ms) are achievable but require careful scan time budgeting.
7.2 I-Device Throughput
- Maximum transfer area per I-Device: Up to 1440 bytes input and 1440 bytes output in total across all submodules (S7-1500 limit; CPU-specific limits may apply, e.g. CPU 1511 supports up to 1024 bytes in either direction).
- Submodule granularity: Slots are typically 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 bytes (standard PROFINET submodule sizes).
- Update time: 250 µs to 512 ms; standard values are 1 ms, 2 ms, 4 ms. Faster update times require higher CPU performance and reduce the maximum number of IO devices on the controller.
- Determinism: PROFINET IRT (Isochronous Real-Time) can deliver sub-millisecond bounded latency; S7-1500 supports IRT on X1 from firmware V2.0+.
8. Diagnostic and Error Code Reference
8.1 PUT/GET STATUS Codes
| STATUS (hex) | Meaning | Action |
|---|---|---|
| 0x0000 | Idle / no error | — |
| 0x0001 | Communication problem (no connection, wrong IP, PUT/GET not allowed) | Verify S7 connection; check PUT/GET flag on partner CPU; check cabling |
| 0x0002 | Negative acknowledgment from partner | Check partner CPU's resource state (connection resources, partner's own status) |
| 0x0003 | Partner has rejected the request (e.g. partner in STOP, DB not loaded) | Check partner CPU's operating state; ensure target DB exists and is non-optimized if access from S7-300/400 partner |
| 0x0005 | Resource problem on local CPU | Reduce parallel communication load; check connection resources in CPU properties |
| 0x0007 | Data length or pointer error | Verify ANY pointer syntax; check that total length ≤ 462 bytes and that DB number is valid on the partner |
| 0x000E | Partner CPU is in STOP | Start partner CPU; verify that PUT/GET access is allowed in STOP via CPU properties |
| 0x80C3 | Connection resource exhausted | Reduce number of active S7 connections; check that PG/PC connections are not holding resources |
| 0x80A1 | DB does not exist on partner | Verify DB number is correct; download DB to partner CPU |
| 0x80B1 | Pointer error (ANY malformed) | Recreate the ANY pointer using TIA Portal's any-pointer editor |
8.2 I-Device Diagnostic Indicators
| Symptom | Typical cause | Diagnostic step |
|---|---|---|
| IO fault LED on PLC_2 | I-Device not reachable / GSD mismatch | Online & Diagnostics > PROFINET diagnostics on PLC_2; check I-Device's IP is reachable with ping |
| I-Device slot shows "module not assigned" | Submodule not dragged into PLC_2's slot | Open device view, drag all GSD submodules into the device slots |
| Data is always zero | Transfer area direction reversed (input vs. output) | Verify the transfer area direction in PLC_1 matches the submodule type in PLC_2 |
| Data updates erratically | Update time mismatch with cycle time | Set OB1 cycle to a multiple of the PROFINET update time; consider IRT for deterministic applications |
| Compiling PLC_1 project fails with GSD export error | Transfer area overlaps with local IO | Move the transfer area to an unused address range; addresses must not collide with local IO |
9. Field-Proven Caveats and Engineering Notes
10. Migration Path: PUT/GET Today, I-Device Tomorrow
Many real projects start with PUT/GET for exactly the reason in this scenario: the integrator has access to only one controller. When PLC_1 later becomes accessible (e.g. the OEM provides source files, or the integrator is granted read access to the original project), the architecture can be migrated:
- Configure PLC_1 as an I-Device and define transfer areas that match the data ranges currently moved by GET/PUT.
- Export the GSDML.
- In PLC_2, install the GSDML and add the I-Device to the PROFINET topology.
- Re-route the I/O points in PLC_2's user program to read from the process image (%IB/%IW/%ID) instead of the local DB populated by GET.
- Keep the GET/PUT logic in a "deprecated" state for one or two commissioning cycles, then remove it to free the S7 connection resource.
Migration is essentially a one-time refactor: the data content is the same, only the access mechanism changes. This makes PUT/GET a low-risk starting point for field deployments where PLC_1 ownership is uncertain.
11. Selection Matrix
| Project condition | Recommended mechanism |
|---|---|
| You have full programming access to both PLCs | I-Device (deterministic, clean separation) |
| You have access to only the consumer PLC | PUT/GET (only viable without changes on source) |
| Source PLC is a "black box" (no TIA Portal project) | PUT/GET if the OEM enables the access flag; otherwise OPC UA server on the source |
| Update time must be ≤ 4 ms deterministic | I-Device with PROFINET IRT |
| Data volume > 462 bytes per update | I-Device (up to 1440 bytes/slot) or Open User Communication (TSEND/TRCV) |
| PLC_1 and PLC_2 on different IP subnets | PUT/GET (I-Device requires same subnet) |
| Multiple consumers of the same data from PLC_1 | I-Device (single GSD imported by many controllers) or shared DB replicated via PUT |
| Need to read arbitrary DBs from a S7-300/400 partner | PUT/GET with non-optimized DBs on the S7-1500 side |
| Need sub-millisecond jitter bound | I-Device with IRT and isochronous OB |
12. Verification Checklist
- Confirm the IP addresses of PLC_1 and PLC_2 are in the same subnet (e.g. both 192.168.0.x/24) and the IP on PLC_2 matches the device configuration in TIA Portal.
- Confirm PLC_1's PROFINET interface has Permit access with PUT/GET communication partner enabled.
- Download the S7 connection to PLC_2. Confirm in Online & Diagnostics > Connections that the connection state is established.
- Toggle the REQ bit on the GET/PUT FBs and observe DONE/ERROR.
- Read the STATUS word and cross-reference against the table in Section 8.1.
- For I-Device: confirm in the upper controller's Online & Diagnostics > PROFINET > Topology that the I-Device is reachable and all submodules are assigned.
- Use a watch table in TIA Portal to read the destination DB or input process image to confirm data is updating.
Can I use PUT/GET to read any DB from a S7-1500 without programming that CPU?
Yes, provided the source CPU has the Permit access with PUT/GET communication partner option enabled in its CPU properties. The DB on the source CPU must be non-optimized if it is accessed by absolute address; the S7-1500 default DB is optimized and may need to be un-marked. The maximum payload is 462 bytes per call on S7-1500 firmware V2.0+.
Does the I-Device function require programming on both PLCs?
Yes. The I-Device PLC must be configured with a transfer area in TIA Portal, the project must be compiled, and a GSDML file must be exported. The upper IO controller PLC must install that GSDML and map the I-Device's submodules. If you cannot open the source PLC's project, the I-Device approach is not feasible.
What is the difference in update time between PUT/GET and I-Device?
PUT/GET runs at the application layer and is typically triggered every 10–100 ms in field practice. I-Device runs at the PROFINET update rate, which is configurable from 250 µs to 512 ms; values of 1 ms to 4 ms are common. For sub-millisecond deterministic latency, use I-Device with PROFINET IRT and an isochronous OB.
How large a data area can PUT/GET move in one call?
462 bytes for S7-1500 firmware V2.0 and later; 222 bytes for firmware V1.x. For larger transfers, segment into multiple PUT/GET calls, switch to Open User Communication (TSEND/TRCV), or use OPC UA. The I-Device transfer area can be up to 1440 bytes input plus 1440 bytes output per device, distributed across multiple submodules.
Is PUT/GET more secure than I-Device?
PUT/GET requires the access flag on the partner CPU and uses S7 connection authentication; the S7-1500 supports access protection by password level. I-Device uses PROFINET IO authentication and is also subject to the CPU's protection level. Both can be locked down. There is no inherent security advantage; instead, I-Device has a cleaner project-separation contract because the GSD is the only interface between the two projects, which can simplify version control and supply-chain scenarios.