S7-1200 to LOGO! 8 PUT/GET Communication Troubleshooting Guide

David Krause15 min read
S7-1200SiemensTroubleshooting
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

The S7-1200 (firmware V4.x) is configured as a S7 client and attempts to write data into a LOGO! 8 (OBA8 / 0BA8) acting as a S7 server. The reverse direction — LOGO! 8 as server pushing values into the S7-1200 using network output blocks — functions correctly, but the GET/PUT path from the S7-1200 into the LOGO! 8 returns no data, raises status error 0x0001, or the LOGO! 8 variable stays at zero. Operators report that the connection is established (TCON completes), but the PUT instruction never updates the target tag in the LOGO! 8.

This is one of the most reported LOGO! 8 / S7-1200 interoperability issues and is almost always caused by an incorrect active connection establishment flag, missing PUT/GET access rights in the CPU protection settings, or a mismatched DB / memory-area mapping between the two devices. The Siemens application example referenced in the source — S7-1200 and LOGO! communication — only documents the LOGO!-as-server direction. The reverse direction must be configured explicitly and is not covered by the default wizard.

Communication Architecture

The S7-1200 ↔ LOGO! 8 link is a standard ISO-on-TCP S7 communication over Ethernet. The S7-1200 implements the client role; the LOGO! 8 implements the server role. Only one TCP connection is required regardless of how many tags are exchanged, but each GET or PUT block requires a separate IDB instance.

Parameter S7-1200 (Client) LOGO! 8 OBA8 (Server)
Connection type S7 connection (active) S7 connection (passive)
Transport protocol ISO-on-TCP (RFC 1006) ISO-on-TCP (RFC 1006)
Port 102 (local) 102 (local)
TSAP (local) 01.01 00.00 (LOGO! default)
TSAP (remote) 00.00 (LOGO!) 01.01 (S7-1200 slot 1)
Max payload per PUT 160 bytes (user data) 160 bytes (user data)
Max payload per GET 160 bytes 160 bytes
Connection resources Defined by CPU (max 16/32/64 by model) One S7 server + 8 Modbus
Number of S7 connections Configurable per CPU Exactly 1 S7 server

The LOGO! 8 supports only a single S7 server connection. If the S7-1200 tries to open a second connection (e.g. one for GET and one for PUT), the second TCON call will fail with connection error 0x0001. Re-use the same connection ID across both PUT and GET.

Critical constraint: LOGO! 8 OBA8 allows only one S7 server connection. If your S7-1200 program contains both PUT and GET blocks, you must assign both to the same connection ID, or the second block will report ERROR = 1 with STATUS = 0x0001 (connection resource exhausted).

Root Cause Analysis

Five root causes cover ~95% of the cases seen in the field. Each must be verified in sequence.

# Root cause Symptom Confirm with
1 Active connection establishment not set on the S7-1200 TCON connects but PUT returns STATUS 0x0001 / 0x80C4 Inspect S7 connection properties in TIA Portal » Network view » Properties » General » "Establish active connection"
2 PUT/GET access right disabled in CPU security Connection closes immediately; all PUT/GET operations return STATUS 0x80C4 CPU Properties » Protection » "Permit access with PUT/GET communication from remote partner"
3 Data block or memory area not marked as accessible from the S7 partner STATUS 0x80B0 / 0x80B1 (DB access error) on PUT DB Properties » Attributes » "Accessible from S7 communication"
4 LOGO! 8 network input/output block address mapping wrong LOGO! reads 0 or 32767; S7 sees correct value but LOGO! ignores it LOGO! Soft Comfort » Network view » NI/NO block » "Address" = DB1.DBW0..DBWxx
5 Different TSAP slot on the LOGO! 8 TCON status 0x80A1 / 0x80A2 (connection refused) LOGO! Web server / Display » Settings » Ethernet » S7 TSAP

Prerequisites

  • S7-1200 CPU 1212C, 1214C, 1215C, or 1217C with firmware V4.2 or later (V4.4 recommended for stability of PUT/GET error reporting).
  • LOGO! 8 OBA8 (6ED1052-xxx08-0BA1 or later BM with Ethernet).
  • LOGO! Soft Comfort V8.3 or later for NI/NO address configuration.
  • TIA Portal V15.1 or later (V17 / V18 recommended for full S7-1200 V4.4 support).
  • Both devices on the same IP subnet. Typical: S7-1200 = 192.168.0.1 / 24, LOGO! 8 = 192.168.0.2 / 24.
  • A free S7 connection resource on the S7-1200. CPU 1212C supports up to 16 S7 connections; CPU 1214C and 1215C support 16; CPU 1217C supports 32.

Configuration — S7-1200 Side (TIA Portal)

  1. Open the project, switch to Devices & Networks, and drag the S7-1200 CPU and the LOGO! 8 from the catalog into the network view.
  2. Right-click the S7-1200 CPU » Properties » General » PROFINET interface » assign the IP address and subnet mask.
  3. Select the LOGO! 8 in the network view » Properties » Ethernet interface » assign IP 192.168.0.2 / 24.
  4. Click the Connections button at the top of the network view. Choose S7 connection.
  5. Drag a connection line from the green S7 port of the S7-1200 to the green S7 port of the LOGO! 8.
  6. Open Properties » General » General on the S7 connection. In Connection mechanisms, check "Establish active connection". This is the single most important flag — without it the S7-1200 will not open the socket as client.
  7. Open Properties » General » Address details. The local TSAP must be 01.01; the remote TSAP is 00.00 for the LOGO! 8 default.
  8. Compile the S7-1200 hardware configuration and download.
Tip: The TSAP 00.00 corresponds to the LOGO! 8 default S7 slot. If the LOGO! 8 has been reconfigured to a custom slot, the TSAP must match. The current TSAP is visible on the LOGO! 8 display under Settings » Ethernet » S7 Connection.

Configuration — CPU Protection (PUT/GET Access)

  1. In the project tree, select the S7-1200 CPU and open Properties » Protection & Security.
  2. Under Connection mechanisms, check "Permit access with PUT/GET communication from remote partner (PLC, HMI, OPC, ...)".
  3. Optionally, configure the access level password. Even with full protection, the PUT/GET checkbox must be enabled.
  4. Compile and download to the CPU.

This setting is independent of the password protection. The CPU will refuse any remote PUT or GET unless this checkbox is set, even if the operator has logged in at the access level that would normally permit online access. Refer to the S7-1200 System Manual, Section 7.4 — Protection for the full permission matrix.

Configuration — Data Block Accessibility

  1. Open the DB you want the LOGO! 8 to access (commonly DB1 "LOGO_Interface").
  2. Right-click the DB » Properties » Attributes.
  3. Check "Accessible from S7 communication". By default, optimized DBs created in TIA Portal V15+ have this attribute disabled.
  4. If the DB is optimized (symbolic only), right-click the DB » Properties » General and uncheck Optimized block access. This converts it to a standard DB with absolute addresses that the LOGO! 8 NI/NO blocks can reach.
  5. Make sure the DB is non-optimized and non-know-how-protected when accessed by the LOGO! 8.

Configuration — LOGO! 8 Side (LOGO! Soft Comfort)

  1. In LOGO! Soft Comfort, open your project and switch to the network view (the editor showing NI = Network Input, NO = Network Output, NAI = Network Analog Input, NAO = Network Analog Output blocks).
  2. Drag a Network Input (NI) block onto the diagram for each bit the LOGO! 8 should read from the S7-1200. For analog values, use Network Analog Input (NAI).
  3. Click the NI block and in the Properties pane, set the address as DB1.DBXx.y for bits, DB1.DBWx for words, or DB1.DBDx for double words. Example: DB1.DBX0.0 for a flag, DB1.DBW2 for a counter preset, DB1.MW100 equivalent in standard memory area.
  4. For a Network Output (NO) — LOGO! 8 → S7-1200 — map the address to the same DB on the S7-1200 side (e.g. DB1.DBW4).
  5. Program the LOGO! 8 logic to consume the NI/NAI value (e.g. use it as a parameter of a UDF or a math instruction, or assign it to a flag for use in BLD logic).
  6. Download the program to the LOGO! 8 via Ethernet.
  7. On the LOGO! 8 display, go to Settings » Ethernet » S7 Connection and confirm the connection state is Connected.

PUT/GET Block Programming — S7-1200 (SCL)

Below is a minimal SCL snippet for the S7-1200 that writes a configuration word (e.g. amplifier gain) to LOGO! 8 DB1.DBW0 once, then reads back the result for verification. Both blocks use the same connection ID.

// --- One-time PUT: S7-1200 → LOGO! 8 ---
IF "FirstScan" THEN
    "TCON_DB".REQ := TRUE;                  // request connection
    // Connection ID 1, see S7 connection configured in TIA
    "PUT_DB".REQ      := TRUE;
    "PUT_DB".ID       := 1;                 // connection ID (W#16#1)
    "PUT_DB".ADDR[1]  := P#DB1.DBX0.0 WORD 2; // LOGO! 8 DB1, 2 words
    "PUT_DB".SD[1]    := "cfg".gain;        // local source from "cfg" DB
END_IF;

IF "PUT_DB".DONE THEN
    "PUT_DB".REQ  := FALSE;
    "cfg".sent    := TRUE;
END_IF;
IF "PUT_DB".ERROR THEN
    "diag".put_status := "PUT_DB".STATUS;
    "PUT_DB".REQ := FALSE;
END_IF;

// --- One-time GET: S7-1200 ← LOGO! 8 ---
IF "cfg".sent AND NOT "cfg".ack_received THEN
    "GET_DB".REQ      := TRUE;
    "GET_DB".ID       := 1;                  // same connection
    "GET_DB".ADDR[1]  := P#DB1.DBX10.0 WORD 2;
    "GET_DB".RD[1]    := "verify".value;     // local destination
END_IF;
IF "GET_DB".DONE THEN
    "GET_DB".REQ := FALSE;
    "cfg".ack_received := TRUE;
END_IF;

The PUT_DB and GET_DB are instance DBs automatically generated by TIA Portal when the PUT / GET instructions are dragged into an OB/FB. The TCON_DB instance DB is created when the connection is generated from the network view; in most cases TIA auto-generates the TCON call and you only handle PUT/GET.

One-Time Transfer Strategy (No Continuous Polling)

The source describes a use case where the S7-1200 must write configuration values to the LOGO! 8 exactly once, then release the network. Sustained polling is not required. Implement a flag-based handshake:

  1. On the S7-1200, set configPending = TRUE when the operator changes a configuration value.
  2. Edge-trigger a single PUT cycle; set configPending := FALSE on PUT_DB.DONE.
  3. On the LOGO! 8, mirror the received word into a flag block. Compare against a checksum or "config valid" bit. The LOGO! 8 itself can perform a TDISCON-equivalent by powering down the S7 connection from its side, but in practice the TCP socket is held open until the S7-1200 closes it. To release the S7-1200 resources, call TDISCON after PUT_DB.DONE = TRUE and a short confirmation delay (e.g. 500 ms).
  4. Use a hand-shaking bit pattern: DBX0.0 = "config request", DBX0.1 = "config applied". The S7-1200 sets DBX0.0 := 1, the LOGO! 8 program writes the value into its variable space and sets DBX0.1 := 1 as confirmation. The S7-1200 reads DBX0.1 via GET, then clears DBX0.0 and calls TDISCON.

This pattern avoids the typical problem where, on connection drop, the LOGO! 8 reads its local variable as zero and resets any analog scaling derived from the configured value.

Status Word and Error Code Reference

STATUS (hex) Meaning Action
0x0000 No error
0x0001 Connection resource exhausted or communication job already active Re-use existing connection ID; wait for DONE before next REQ
0x7000 Job not yet started No action
0x7001 Job running (first call) No action
0x7002 Job running (subsequent call) No action
0x80A1 Connection establishment error: TSAP / IP mismatch Verify remote IP and TSAP in connection properties
0x80A2 Connection refused by partner Check LOGO! 8 S7 server is enabled and not already in use
0x80B0 DB does not exist on partner Verify DB number and length; ensure partner is S7-1200/300/400 compatible
0x80B1 DB exists but area access error (e.g. length / type mismatch) Match length and data type; check optimized vs. non-optimized
0x80C3 Temporary resource error on partner Retry; reduce polling rate
0x80C4 PUT/GET disabled in CPU protection Enable the checkbox in CPU » Protection
0x80D0 / 0x80D1 / 0x80D2 Partner CPU in STOP / not reachable / connection aborted Verify partner CPU is in RUN and the network is reachable

Verification

  1. Open the S7-1200's Online & Diagnostics view. In the project tree, right-click the S7 connection » Online » Status. The connection must show Established.
  2. Force the value of the source tag in the S7-1200 (e.g. "cfg".gain := 5 via the watch table). Trigger PUT_DB.REQ := TRUE for one scan.
  3. On the LOGO! 8 display, go to the variable assigned to the NI block and verify the value matches.
  4. In LOGO! Soft Comfort, connect online and use the Online » Watch function to monitor the NI block's live value.
  5. Disable the network cable. Within 30 s the LOGO! 8 display should report S7: not connected — this confirms the LOGO! 8 is actively listening as a server and not just displaying cached values.
  6. Reconnect. The handshake flag pattern should restore the configuration value automatically if the S7-1200 has it persisted (e.g. in a retain DB).

Troubleshooting Matrix

Observed symptom First check Second check Third check
LOGO! 8 always reads 0 Active connection on S7-1200 side DB1 is non-optimized and accessible from S7 NI/NAI block address is correct (DB1.DBWx)
Connection never establishes IP / subnet / gateway of both devices LOGO! 8 S7 server enabled (default on OBA8) Firewall or managed switch blocking TCP 102
PUT returns 0x80C4 PUT/GET checkbox in CPU protection Password / access level not blocking remote access DB attributes allow S7 access
PUT returns 0x80B1 Length of source and target match Source data type = target data type DB not optimized (only for legacy targets)
LOGO! 8 receives the value but logic ignores it NI block connected to the function block input Correct use of NAI for analog, NI for digital Value is used in current program path (not in unused branch)
LOGO! 8 variable resets to 0 on cable disconnect Use retentive flag on the LOGO! 8 (M, or /_ retain marker) Implement handshake to re-send on reconnect Persist value in a LOGO! 8 data log or use VM mapping for retain
PUT and GET on separate connections fail LOGO! 8 supports only one S7 server Re-use connection ID across PUT and GET Combine multiple reads into a single GET block by widening the length parameter
PUT works but data appears one cycle late Increase scan cycle or use OB35 cyclic interrupt Check DB consistency (large DB > 1 KB may fragment PUT) Use DONE edge to latch the value, not the REQ edge

Data Logging and Performance Notes

On the S7-1200, if you also write the received configuration to a Data Log on the SIMATIC memory card, observe the Siemens guidance on write frequency. Per the S7-1200 Manual Collection » Working with Data Logs, a high frequency of write operations can affect the S7-1200 system negatively. For the LOGO! 8 configuration use case described here, write the value to the data log only on PUT_DB.DONE rising edge, not cyclically. This keeps memory card wear and CPU load within limits.

Wear-leveling: SIMATIC S7-1200 memory cards (SMC) have a finite write endurance. A cyclic data log of 100 ms can wear a card in months. Trigger the data log write on a state change, not on a time base.

Alternative: Modbus TCP

If the S7-1200 → LOGO! 8 S7 path continues to be unstable in your environment, Modbus TCP is supported on both devices. The LOGO! 8 OBA8 exposes its variable memory (VM) as Modbus holding registers from address 0. The S7-1200 uses the MB_CLIENT instruction. The trade-offs are:

Aspect S7 (PUT/GET) Modbus TCP
Setup effort Moderate (network view + DB) Low (one MB_CLIENT block)
Data typing Structured DB, native types Word-oriented, manual scaling
Security CPU access level + PUT/GET flag No authentication
Throughput 160 bytes per call 125 registers per call
Diagnostics STATUS word with detail Modbus exception codes
Recommended for Structured configuration data High-frequency analog polling

Notes for the Field Engineer

Two practical caveats that the Siemens documentation does not always highlight:

  1. The LOGO! 8 NI/NAI block dialog in LOGO! Soft Comfort does not warn you if the address is not yet present in the partner's DB. Download the S7-1200 DB first, then refresh the LOGO! 8 project, to ensure the address ranges are visible.
  2. If the S7-1200 program uses a retain DB to hold the configuration, the value survives a power cycle on the S7-1200 side, but the LOGO! 8 side does not retain NI/NAI values. The handshake pattern (re-send on reconnect) is therefore mandatory unless the LOGO! 8 program copies the received NI/NAI into a retentive flag (M or VM marker) on the LOGO! 8.

FAQ

Why does my S7-1200 PUT instruction return STATUS 0x80C4 to a LOGO! 8?

STATUS 0x80C4 means the S7-1200 is rejecting remote PUT/GET access. Open CPU » Properties » Protection » Connection mechanisms, and enable "Permit access with PUT/GET communication from remote partner". Download to the CPU and retry.

The LOGO! 8 S7 connection is shown as "Connected" on its display, but the S7-1200 PUT does not update any value. What is wrong?

The "Connected" indicator on the LOGO! 8 only confirms the TCP socket is up. The PUT/GET payload still requires (a) an active connection established by the S7-1200, (b) a non-optimized DB marked accessible from S7 communication, and (c) a matching NI/NAI address on the LOGO! 8. Verify all three.

Can I run PUT and GET at the same time on a single S7 connection between S7-1200 and LOGO! 8?

Yes, as long as both PUT and GET blocks reference the same connection ID and you wait for DONE or ERROR on one before triggering the next. The LOGO! 8 supports exactly one S7 server connection; using two IDs will fail with 0x0001.

How do I write a value exactly once from the S7-1200 to the LOGO! 8 and then release the network?

Set PUT_DB.REQ := TRUE on a rising edge of your "config changed" flag. When PUT_DB.DONE goes high, clear REQ and call TDISCON to release the connection. Implement a handshake bit (e.g. DB1.DBX0.0 = request, DB1.DBX0.1 = applied) to confirm receipt before disconnecting.

My LOGO! 8 reads the value as 0 every time the S7-1200 is restarted. How do I make the LOGO! 8 retain the configuration?

On the LOGO! 8, route the received NI/NAI into a retentive flag or VM marker. Retentive variables (M, AM) survive a power cycle. The S7-1200 must then re-send the value on startup using the handshake pattern so the LOGO! 8 can re-apply it.

What is the correct TSAP for the LOGO! 8 S7 server?

The default LOGO! 8 S7 server TSAP is 00.00. If the LOGO! 8 has been assigned a custom slot, read the current TSAP from the LOGO! 8 display under Settings » Ethernet » S7 Connection and set the same value as the remote TSAP in the S7-1200 connection properties.

Does the S7-1200 PUT/GET path to LOGO! 8 work with optimized DBs?

No. The LOGO! 8 NI/NAI blocks address the partner by absolute byte/bit offset (e.g. DB1.DBW0). Optimized DBs hide absolute addresses. Right-click the DB in TIA Portal » Properties » General and uncheck "Optimized block access", then check "Accessible from S7 communication" in the DB attributes.

Back to blog