S7-300 PUT/GET Block Not Found: Resolve SFB14/SFB15 Error

David Krause13 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

Problem Overview

When programming a Siemens CPU 319-3 in SIMATIC Manager STEP 7 (Classic), engineers routinely encounter the compiler message "element not found" the moment they attempt to drop an SFB14 (GET) or SFB15 (PUT) symbol into a network. The message appears regardless of whether the block is dragged from the Standard Library, called from the Program Element catalog, or typed by hand as a name. STEP 7 does not generate a syntax error in the offline view; the "element not found" message is raised the first time the block is opened, the program is saved, or a consistency check is run.

This symptom is almost always the result of inserting the wrong block number for the target platform. S7-300 CPUs do not contain SFB14 and SFB15 as resident system function blocks. The operating system of every CPU 31x-… ships only the FB variants of GET and PUT, which live in the Standard Library and must be instantiated with a dedicated Instance DB. The SFB versions of the same name exist only in S7-400 firmware and in S7-1500 firmware.

Critical distinction: In STEP 7 (Classic), an S7-300 station always uses FB14 / FB15. SFB14 / SFB15 are reserved for the S7-400 / S7-1500 CPU firmware. Inserting SFB14 into an S7-300 block folder always fails with "element not found" because the symbol does not exist in the S7-300 system data.

Affected Hardware and Software

Component Catalog / Order Number Notes
CPU 319-3 PN/DP 6ES7319-3EL01-0AB0 / 6ES7319-3FL01-0AB0 / 6ES7319-3FP00-0AB0 Firmware V3.x supports S7 communication natively on the PN interface
CPU 319-3 DP 6ES7319-3BF00-0AB0 / 6ES7319-3BG00-0AB0 No PN interface; S7 communication routed via CP343-1 or CP342-5
CPU 319-3 PN/DP (early) 6ES7319-3EL00-0AB0 / 6ES7319-3FL00-0AB0 Firmware V2.x; PUT/GET permission still configurable
STEP 7 V5.4 SP5 or higher, V5.5, V5.6, V5.7 SIMATIC Manager (Classic); the issue does not occur in TIA Portal block search
Library Standard Library > Communication Blocks FB14 GET, FB15 PUT, FB8 USEND, FB9 URCV, FB12 BSEND, FB13 BRCV
S7-1500 counterpart PUT / GET instructions in TIA Portal See Siemens manual collection for S7-1200/1500

If the station type is a third-party clone (for example, VIPA, IBH Softec, or any non-Siemens S7-300-compatible CPU), the S7-300 firmware image may still be present, but the system blocks can be missing or relocated. Confirm the vendor and order number in the hardware catalog before continuing.

Root Cause Analysis

Three underlying conditions can produce the "element not found" message for SFB14 / SFB15 in an S7-300 project:

  1. Wrong block family for the platform. SFB14 / SFB15 are not embedded in S7-300 firmware. They are part of the S7-400 system software and are catalogued in the Standard Library only under the S7-400 program container. STEP 7's symbol resolver tries to bind the inserted symbol to the offline program; when no system block matches, the compiler raises "element not found".
  2. Incomplete project container. If the offline S7 program was generated from a project that originally targeted an S7-400 and was later reassigned to an S7-300 CPU, the S7-300 system data does not contain entries for SFB14 / SFB15, even though the source symbols still appear in the program. Reassigning the station does not automatically re-wire block references.
  3. Third-party or clone CPU. Non-Siemens S7-300-compatible controllers sometimes ship without the full Siemens system block image. In that case the offline symbols may be present but the online firmware does not recognize the call. STEP 7 cannot compile the call to a known block and reports "element not found" at download time.

Diagnostic Steps

  1. Open HW Config and confirm the CPU order number and version. Cross-check the order number against the Siemens catalog; for example, the 6ES7319-3EL01-0AB0 entry in the SIMATIC hardware catalog lists firmware V3.2.
  2. Right-click the S7 program in the project tree and select Object Properties. Inspect the System Data (SDB) container for the offline program; it should reference FB14 and FB15, not SFB14 and SFB15.
  3. Open the Standard Library > Communication Blocks container and verify the presence of FB14 GET and FB15 PUT. If only SFB14 / SFB15 are visible, the project is bound to an S7-400 master project and the S7-300 library is missing.
  4. From the menu PLC > Download only after the offline program compiles cleanly. STEP 7 will report "element not found" again at download time if the wrong block number is referenced.

Solution: Use FB14 / FB15 Instead of SFB14 / SFB15

For S7-300 stations the supported S7 communication blocks for read and write access to a remote CPU are FB14 (GET) and FB15 (PUT). Both are unsynchronized, unidirectional blocks that require a configured S7 connection in NetPro and a dedicated Instance DB for each call.

Step-by-Step: Insert FB14 (GET) and FB15 (PUT) in an S7-300 Station

  1. Open the S7 program for the CPU 319-3 in SIMATIC Manager. Confirm the offline block container lists FB0 through FB255 as user-definable blocks and that the System Data is consistent.
  2. Open the Standard Library from the library bar. Drill down to Standard Library > Communication Blocks. The container should expose FB14 GET, FB15 PUT, FB8 USEND, FB9 URCV, FB12 BSEND, FB13 BRCV, and the legacy FB2 GET / FB7 PUT pair.
  3. Drag FB14 (GET) into a network of OB1 or your preferred cyclic OB. STEP 7 prompts for an Instance DB number. Accept the proposed DB or assign a free number (e.g., DB201). Each call requires its own Instance DB; do not reuse Instance DBs across blocks.
  4. Repeat the drag operation for FB15 (PUT) and assign a second Instance DB (e.g., DB202).
  5. Open the Instance DB for FB14. STEP 7 generates the variable table automatically. Verify that the Instance DB contains the input structure REQ, ID, ADDR_1, ADDR_2, RD_1, RD_2, and the output structure NDR, ERROR, STATUS, SSTATUS.
  6. Wire the inputs in OB1:
// FB14 GET - sample call
CALL  "GET" , DB201
 REQ   :=TRUE                  // start signal (rising edge)
 ID    :=1                     // local ID from NetPro connection
 ADDR_1:=P#DB100.DBX0.0 BYTE 20 // remote source area (20 bytes)
 RD_1  :=P#M100.0 BYTE 20      // local destination (Merker area)

// FB15 PUT - sample call
CALL  "PUT" , DB202
 REQ   :=TRUE                  // start signal (rising edge)
 ID    :=1                     // local ID from NetPro connection
 ADDR_1:=P#DB200.DBX0.0 BYTE 20 // remote destination
 SD_1  :=P#M200.0 BYTE 20      // local source
  1. Compile and save the program. STEP 7 resolves FB14 and FB15 against the library entries and the "element not found" message disappears.
Do not type the block number manually in the instruction selector. When the symbol table is updated, manually typed references can drift back to SFB14 / SFB15. Always drag FB14 / FB15 from the Standard Library so that STEP 7 binds the absolute block number and the correct version stamp.

NetPro Connection Configuration

FB14 / FB15 require a configured and downloaded S7 connection. The local ID referenced at the ID parameter is the connection identifier from NetPro. Without a connection, the block reports STATUS = W#16#0001 (communication in progress) and never completes.

  1. Open NetPro from SIMATIC Manager (menu Options > NetPro) or click the NetPro icon in the toolbar.
  2. Select the CPU 319-3 station. Right-click and choose Insert New Connection.
  3. In the connection wizard, set the partner to Unspecified / S7 connection for the first iteration; refine once the partner CPU has been added to the project. STEP 7 allocates a local ID automatically. Note the local ID (default = 1 for the first connection).
  4. Open the connection properties and verify the following:
  • Connection type: S7 connection
  • Active connection establishment: yes (the CPU 319-3 should actively establish the S7 connection)
  • One-way / two-way: select the appropriate mode. PUT requires write access; GET requires read access.
  1. Save and compile NetPro. Download the connection configuration (System Data) to the CPU.

Cross-Project Connections

If the partner CPU resides in a different STEP 7 project, open the partner project in NetPro, create an S7 connection, and configure the partner's local ID as the remote ID for the CPU 319-3. STEP 7 exchanges the IP address, TSAP, and rack/slot information across the NetPro save operation.

PUT/GET Access Protection

Modern S7-300 firmware (CPU 319-3 PN/DP, V2.x and higher) and all S7-1200 / S7-1500 CPUs gate remote PUT/GET access behind a CPU property. If the partner does not enable this permission, GET / PUT calls complete with STATUS = W#16#0031 (object access error) or STATUS = W#16#8082 (communication fault).

  1. Open HW Config for the partner CPU.
  2. Right-click the CPU and choose Object Properties > Protection.
  3. Under Connection Mechanisms or Access Protection, enable "Permit access with PUT/GET communication from remote partner". On S7-300 firmware V2.x and below the option reads "Allow access by remote partner (PUT/GET)".
  4. Compile HW Config and download to the partner CPU. A cold restart is not required.
S7-1500 specifics. On S7-1500 CPUs the option appears under Properties > Protection > Connection mechanisms > Permit access with PUT/GET communication from remote partner. The option is required even if the partner is in the same TIA Portal project. Reference the PUT and GET instructions in the S7-1200/1500 manual collection for the exact path.

Optimized Block Access and PUT/GET

PUT cannot write data into a data block that is configured with optimized block access. The PUT instruction on the remote S7-1500 side rejects the write with STATUS = W#16#80A4 (aligned access error) or STATUS = W#16#80B1 (DB not loaded) because optimized blocks reorganize the memory layout and hide absolute addresses.

The CPU 319-3 (S7-300) does not support optimized block access at all, so the limitation only matters when the partner is an S7-1200 or S7-1500. If the partner is an S7-1500, open the destination DB on the partner in TIA Portal, disable Optimized block access, recompile, and re-download.

For more information see the Siemens application note S7 Communication with PUT/GET and the PUT and GET instructions in the S7-1200/1500 manual collection.

Verification Procedure

After FB14 / FB15 are inserted and the connection is configured, verify the communication with the following checks:

  1. Compile consistency. Select the S7 program and run PLC > Compile and Check Objects. STEP 7 should not report any "element not found" or "unknown symbol" messages.
  2. Download System Data. From NetPro, select the CPU and click Download to Target System. The S7 connection must be in the SDB before FB14 / FB15 can establish a session.
  3. Online status. Open the Instance DB for FB14 online and monitor REQ, NDR, ERROR, and STATUS. STATUS = W#16#0000 indicates success; NDR is set for one cycle when the read completes.
  4. Read/write test. Toggle the REQ bit on FB14 and inspect the local destination area. Verify that the data matches the remote source. Repeat for FB15 with the SD_1 area.
  5. Diagnostics buffer. If STATUS = W#16#8082 (communication fault) or STATUS = W#16#0001 (job active) persists, open PLC > Diagnostic Buffer. CP or interface errors are logged with the event ID and a timestamp.

STATUS Code Reference for FB14 / FB15

STATUS (W#16#…) Meaning Remedy
0000 Job completed without error None
0001 Job active Wait for completion; check connection
0030 Partner not reachable Check IP address, subnet, physical link
0031 Partner denied access (PUT/GET disabled) Enable PUT/GET on partner CPU
0082 Communication fault / resource Check connection configuration, CP diagnostic buffer
80A4 Aligned access error Disable optimized block access on partner DB
80B1 Block not loaded on partner Download the destination DB to partner CPU
80D0 / 80D1 AR_SEND / AR_RECV abort Re-establish connection; check TSAP

Common Pitfalls

After the block selection is fixed, several recurring issues prevent FB14 / FB15 from working in production:

  • Reused Instance DBs. Each FB14 or FB15 call must own a dedicated Instance DB. Sharing an Instance DB between two GET calls (or between a GET and a PUT) corrupts the internal state and produces STATUS = W#16#0030 or STATUS = W#16#0082.
  • Active vs. passive connection establishment. If the CPU 319-3 is set up as the passive partner, REQ is ignored until the remote CPU opens the connection. STEP 7 displays a small red X on the connection in NetPro when one side is misconfigured.
  • TSAP mismatch. The TSAP (Transport Service Access Point) encodes rack and slot of the partner CPU. If the rack/slot changed after commissioning, NetPro compiles without an error but the S7 connection fails at runtime with STATUS = W#16#0030.
  • Block size exceeded. PUT and GET support a maximum user data area of 160 bytes per call on S7-300. For larger transfers, use FB12 BSEND / FB13 BRCV, which stream arbitrary amounts of data over the same connection.
  • Routing through a CP. If the CPU 319-3 DP variant (no PN interface) is used, the S7 connection must terminate on a CP343-1 (PN) or CP342-5 (PROFIBUS). The ID parameter of FB14 / FB15 must match the connection ID of the CP, not the CPU's internal PG connection.
  • Block-length mismatch on Instance DB. If the user modifies the Instance DB after STEP 7 generated it (for example, deleting a structural element), FB14 / FB15 cannot initialize the runtime data and STATUS = W#16#0082 is returned. Re-create the Instance DB from the FB type.

Migration Note: STEP 7 Classic → TIA Portal

When migrating a STEP 7 Classic project to TIA Portal, FB14 / FB15 from the Standard Library are not migrated automatically. TIA Portal exposes PUT and GET as native instructions in the Communication > S7 Communication palette. Drop the PUT or GET instruction into the program, assign the connection from the project tree, and TIA Portal generates the Instance DB. The runtime behaviour is identical to the Classic blocks. For an S7-1500 partner, see the PUT and GET instructions in the S7-1200/1500 manual collection.

FAQ

Why does STEP 7 report "element not found" when I insert SFB14 / SFB15 in an S7-300 program?

SFB14 and SFB15 are not part of the S7-300 firmware image; they are integrated only into S7-400 and S7-1500 CPUs. The S7-300 CPU uses FB14 (GET) and FB15 (PUT) from the Standard Library, which must be instantiated with a dedicated Instance DB. Drag FB14 / FB15 from Standard Library > Communication Blocks to resolve the error.

What is the difference between FB14/FB15 and SFB14/SFB15?

FB14 / FB15 are library blocks that require an Instance DB; they work on S7-300 and on S7-400 (the S7-400 firmware also supports them). SFB14 / SFB15 are system function blocks embedded in S7-400 and S7-1500 firmware and do not need an Instance DB; they are not callable on S7-300.

Do I have to configure an S7 connection in NetPro before FB14/FB15 work?

Yes. Both blocks reference a local connection ID (ID parameter) that must exist in the downloaded System Data. Open NetPro, create an S7 connection between the CPU 319-3 and the partner CPU, compile, and download the System Data. The ID parameter of FB14 / FB15 must match the local ID assigned by NetPro (default 1).

How do I enable PUT/GET access from a remote partner on an S7-1500?

In TIA Portal, open the partner CPU's Properties > Protection > Connection Mechanisms and enable "Permit access with PUT/GET communication from remote partner". Compile and download the hardware configuration. Without this flag, GET/PUT returns STATUS = W#16#0031.

Why does my S7-300 PUT call fail when writing to an S7-1500 data block?

The most common cause is optimized block access on the partner DB. PUT cannot resolve symbolic or non-aligned addresses inside optimized blocks. Open the destination DB on the S7-1500, disable Optimized block access, recompile, and re-download. The Siemens application note S7 Communication with PUT/GET documents this restriction.

Can PUT/GET on the CPU 319-3 exceed 160 bytes per call?

No. The unsynchronized FB14 / FB15 blocks on S7-300 are limited to 160 bytes of user data per call. For larger transfers use the synchronized FB12 BSEND / FB13 BRCV pair, which streams arbitrary payload sizes over the same S7 connection.

Back to blog