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.
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)
- Open the project, switch to Devices & Networks, and drag the S7-1200 CPU and the LOGO! 8 from the catalog into the network view.
- Right-click the S7-1200 CPU » Properties » General » PROFINET interface » assign the IP address and subnet mask.
- Select the LOGO! 8 in the network view » Properties » Ethernet interface » assign IP 192.168.0.2 / 24.
- Click the Connections button at the top of the network view. Choose S7 connection.
- Drag a connection line from the green S7 port of the S7-1200 to the green S7 port of the LOGO! 8.
- 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.
- Open Properties » General » Address details. The local TSAP must be
01.01; the remote TSAP is00.00for the LOGO! 8 default. - Compile the S7-1200 hardware configuration and download.
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)
- In the project tree, select the S7-1200 CPU and open Properties » Protection & Security.
- Under Connection mechanisms, check "Permit access with PUT/GET communication from remote partner (PLC, HMI, OPC, ...)".
- Optionally, configure the access level password. Even with full protection, the PUT/GET checkbox must be enabled.
- 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
- Open the DB you want the LOGO! 8 to access (commonly
DB1 "LOGO_Interface"). - Right-click the DB » Properties » Attributes.
- Check "Accessible from S7 communication". By default, optimized DBs created in TIA Portal V15+ have this attribute disabled.
- 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.
- 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)
- 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).
- 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).
- Click the NI block and in the Properties pane, set the address as
DB1.DBXx.yfor bits,DB1.DBWxfor words, orDB1.DBDxfor double words. Example:DB1.DBX0.0for a flag,DB1.DBW2for a counter preset,DB1.MW100equivalent in standard memory area. - 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). - 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).
- Download the program to the LOGO! 8 via Ethernet.
- 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:
- On the S7-1200, set
configPending = TRUEwhen the operator changes a configuration value. - Edge-trigger a single PUT cycle; set
configPending := FALSEonPUT_DB.DONE. - 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
TDISCONafterPUT_DB.DONE = TRUEand a short confirmation delay (e.g. 500 ms). - Use a hand-shaking bit pattern:
DBX0.0= "config request",DBX0.1= "config applied". The S7-1200 setsDBX0.0 := 1, the LOGO! 8 program writes the value into its variable space and setsDBX0.1 := 1as confirmation. The S7-1200 readsDBX0.1via GET, then clearsDBX0.0and 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
- Open the S7-1200's Online & Diagnostics view. In the project tree, right-click the S7 connection » Online » Status. The connection must show Established.
- Force the value of the source tag in the S7-1200 (e.g.
"cfg".gain := 5via the watch table). TriggerPUT_DB.REQ := TRUEfor one scan. - On the LOGO! 8 display, go to the variable assigned to the NI block and verify the value matches.
- In LOGO! Soft Comfort, connect online and use the Online » Watch function to monitor the NI block's live value.
- 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.
- 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.
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:
- 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.
- 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.