1. Problem Overview
Field engineers integrating a Siemens LOGO! 8 (6ED1052-1xx08-0BAx series) as a Modbus master frequently report a specific failure pattern: read transactions succeed but write transactions to the slave (e.g. a Powercenter1000, VFD, energy meter, or third-party controller) fail silently or return exception responses. The communication link is healthy, the slave answers Function Code 03 (Read Holding Registers) or Function Code 04 (Read Input Registers) without error, yet any attempt by the LOGO! to write a single coil (FC 05), write a single holding register (FC 06), write multiple coils (FC 15), or write multiple holding registers (FC 16) is rejected or has no effect at the slave end.
This article isolates the seven most common root causes of that failure mode and walks the engineer through a deterministic diagnostic sequence that resolves the issue in a typical commissioning window of 15-30 minutes.
2. Prerequisites
Before any write attempt, confirm the following baseline. Each item is independently capable of preventing a Modbus write from succeeding.
- LOGO!Soft Comfort V8.0 or later (V8.3 recommended) installed on the engineering station. Download the latest LOGO!Soft Comfort from Siemens Industry Online Support.
- LOGO! 8 base module with firmware FS:04 (V1.16.x) or newer. FS:06 (V1.18.x / LOGO! 8.3) is recommended for stable Modbus TCP master behavior. Check the LOGO! 8 firmware release notes (entry ID 109751634) for resolved Modbus issues per version.
- The slave device is reachable on the network:
ping <slave_ip>from the engineering PC must succeed before any Modbus test. - The slave's Modbus map (PDF or HTML from the device manufacturer) clearly identifies which registers are read-only, read/write, or write-only, and the data type, scaling, and access function expected for each.
- LOGO! is in RUN mode (green LED steady). Writes are suspended in STOP.
- Network switches, routers, and any industrial firewall permit TCP port 502 bidirectionally between LOGO! IP and slave IP.
3. Modbus Write Function Codes Reference
A Modbus master must issue a specific function code to write. The LOGO! 8's Network Master function block selects the function code implicitly based on the LOGO! tag type and the slave register type. Engineers must therefore know exactly which FC the LOGO! will issue, because the slave's exception response (0x01, 0x02, 0x03, 0x04) is meaningful only in the context of the FC sent.
| Function Code | Name | PDU Size | Data Type on Slave | LOGO! Source Tag |
|---|---|---|---|---|
| 05 (0x05) | Write Single Coil | 1 bit | Coil (0x) | Network Digital Output (ND), Boolean M, Q |
| 06 (0x06) | Write Single Holding Register | 16 bits | Holding Register (4x) | Network Analog Output (NA), Integer/Word |
| 15 (0x0F) | Write Multiple Coils | 1-1968 bits | Coil block (0x) | ND block (multi-bit) |
| 16 (0x10) | Write Multiple Holding Registers | 1-123 registers | Holding Register block (4x) | NA block (multi-word) |
Reference the Modbus Organization "Introduction to Modbus" specification for the wire-level PDU format. A holding register write with FC 06 is one of the most common causes of "write does nothing": many slave devices do not accept FC 06 and require FC 16 even for a single register, or vice versa.
4. LOGO! 8 Modbus Architecture
The LOGO! 8 base module implements Modbus TCP natively on the integrated Ethernet interface. It supports up to 8 concurrent S7/Modbus TCP connections, of which one is reserved for the engineering (LOGO!Soft Comfort) link, leaving 7 usable for runtime Modbus traffic. Each Network Master function block occupies one connection slot.
The relevant function blocks in LOGO!Soft Comfort's network library are:
- NI / NAI — Network Input (read from slave into LOGO!).
- NA / NAO — Network Analog Output (write from LOGO! to slave register).
- ND / NDO — Network Digital Output (write from LOGO! to slave coil).
- Modbus Master (Client) connection configuration — accessed via Tools > Ethernet Connections or the schematic context menu.
Critical detail: the LOGO! only writes to the slave when a network output block is configured and the LOGO! is in RUN. A network input block (NI/NAI) configures a read; it will never produce a write transaction. This is the most common configuration error: the engineer places an NI block, sets the slave register, types a value into the LOGO!Soft Comfort online monitor expecting the slave to change, and nothing happens because the LOGO! has no write path at all.
5. Root Cause Matrix
| # | Root Cause | Symptom | Quick Diagnostic |
|---|---|---|---|
| 1 | Read block (NI) used where a write block (NA/ND) is required | No write transaction appears on the wire | Inspect the network block; replace NI with NA or ND |
| 2 | Wrong function code for the slave's supported FC set | Slave replies with exception 0x01 (Illegal Function) | Read slave manual; force FC 16 with a single register if FC 06 is rejected |
| 3 | Register/coil address is read-only in the slave map | Slave replies with exception 0x02 (Illegal Data Address) | Cross-check against the device's register map; pick an R/W register |
| 4 | Off-by-one in Modbus address (0-based vs 1-based) | Exception 0x02 or silent no-op | Subtract 1 from the human-readable register number, or check the slave's "address base" spec |
| 5 | Connection direction or local/remote storage mis-configured on the slave | Exception 0x04 (Slave Device Failure) or no reply | Switch the slave to "remote" (master-driven) writes; disable local-only setpoints |
| 6 | LOGO! variable bound to a read-only source (e.g. I, AI, NI) | Write fires but value reverts or is suppressed | Bind the NA/ND block to M (marker), Q (output), AQ, or a calculated value, never to a network input |
| 7 | Port 502 blocked, slave Unit ID mismatch, or different VLAN/subnet | No response, TCP RST, or timeout | Wireshark on the slave side; verify slave Unit/Slave ID matches LOGO! config |
6. Step-by-Step Diagnostic Procedure
Apply the following sequence in order. Steps 1-3 are non-invasive and reversible; steps 4-6 modify the running program.
Step 1 — Capture the wire traffic
Install Wireshark on a mirrored port or a tap between the LOGO! and the slave. Apply the display filter modbus. Trigger a write from the LOGO! (force the NA block to a non-zero value via online monitor) and capture the request/response:
- If no Modbus TCP frame appears at all, the LOGO! is not issuing a write — the issue is configuration (Root Cause 1 or 6).
- If a frame appears and the slave returns
0x90 0x01(FC 06 echo with exception 0x01), the slave does not support that FC (Root Cause 2). - If the slave returns
0x90 0x02, the address is illegal or read-only (Root Cause 3 or 4). - If the slave returns
0x90 0x04, the slave is in a state that prevents writes — e.g. local control active, safety lock, or parameter write-protect (Root Cause 5).
Step 2 — Verify the LOGO! is configured as a master (client) and not a server
In LOGO!Soft Comfort, open Tools > Ethernet Connections. The connection toward the slave must be defined as "LOGO! → Partner (Client/Master)". A server connection will accept incoming reads but never initiate a write. The Powercenter1000 in field reports had to be set to remote (master-driven) control rather than local storage (device-internal setpoint) before the LOGO! writes were accepted.
Step 3 — Confirm the slave's Unit ID (Slave Address)
Modbus TCP carries a Unit Identifier (also called Slave ID) in the MBAP header. On the LOGO! this is configured in the network block's Slave Address field. The default is 1, but many devices (especially behind Modbus TCP/RTU gateways) use 255 for the gateway itself. Mismatch produces exception 0x0A on the gateway or no response. The Modbus Application Protocol V1.1b3 specification defines the MBAP header field exactly.
Step 4 — Replace an NI block with an NA or ND block
If the LOGO! program only contains a Network Input block, the LOGO! can only read. Replace it:
- Delete the NI block tied to the target slave register.
- Drag an NA block (analog) or ND block (digital) onto the schematic from the network library.
- Double-click and set the connection target to the same slave IP used by the NI block.
- Set the Read/Write direction to Write.
- Set the register address to the slave's holding register number.
- Bind the block's input pin to a writable source:
M1,Q1, an arithmetic block output, or a constant for testing.
Step 5 — Test with a Modbus simulator
Before assuming the LOGO! is at fault, validate end-to-end with a known-good slave simulator such as Modbus Slave (WinTech). Configure Modbus Slave to listen on TCP 502 of a PC, define a holding register at address 0, set it as read/write, and point the LOGO! to that PC's IP. A successful write confirms the LOGO! is correct; a failure localizes the problem to either the LOGO! or the slave depending on where it fails.
Step 6 — Address scaling and endianness
If the value arrives at the slave but is wrong, the problem is encoding. For a 16-bit value in a single holding register, confirm the slave expects Big-Endian (network byte order), which is the Modbus standard. The LOGO! NA block writes in big-endian by default. If the slave is a 32-bit device (e.g. energy meter, VFD), you may need FC 16 writing two consecutive registers; LOGO! provides this when the source is a 32-bit tag, but verify the byte order with the slave manual.
7. Worked Example: Writing a Boolean (1/0) to a Single Coil
field reports asked to send the value 1 to a specific register on a Powercenter1000. If the target is a single coil (digital point), the procedure is:
- Insert a ND (Network Digital Output) block.
- Configure: Partner IP = slave, Slave Address = 1, Register = coil number (e.g. 1 → coil address 0 in zero-based Modbus), Direction = Write.
- Bind the ND input to a constant
1for a steady-on test, or to a digital tag such asM1. - Download to LOGO!, switch to RUN, and observe Modbus Slave or the Powercenter1000 register view.
If the target is a holding register and the user wants to write the integer 1:
- Insert a NA (Network Analog Output) block.
- Configure: Partner IP = slave, Slave Address = 1, Register = holding register number, Direction = Write.
- Bind the NA input to
1(constant) for the test, or to a marker such asMW2.
8. Verification
After each configuration change, run the following verification checklist:
| Check | Method | Pass Criterion |
|---|---|---|
| Write transaction is on the wire | Wireshark, display filter modbus
|
Modbus TCP frame with FC 05, 06, 15, or 16 visible |
| Slave returns a normal response, not an exception | Wireshark response panel | Response byte = FC value (0x05, 0x06, 0x0F, 0x10) with no high bit set |
| Slave's internal register changes | Slave's HMI/web UI or Modbus Slave tool | Register value matches the value sent |
| LOGO! connection status is OK | LOGO!Soft Comfort online monitor → connection status | Green status, no error code |
| Sustained cyclic writes | Leave program running for 10 minutes, observe continuous traffic | Periodic Modbus TCP write frames with no timeouts |
LOGO! 8 status LEDs also indicate Modbus TCP master health: a steady green Ethernet LED with no red fault LED on the base module confirms the network link layer. A flashing or red Ethernet LED points to a physical layer problem rather than a Modbus protocol problem.
9. Common Slave-Side Lockouts
Many industrial slaves — VFDs, soft starters, energy meters, and Powercenter-class devices — gate Modbus writes behind a local interlock. Verify these before suspecting the LOGO!:
- Local/Remote switch: the device is set to Local and ignores master writes. Set to Remote or Modbus.
- Parameter write-protect: a register (often 0x00 or a security register) locks the configuration against remote writes until cleared.
- Run/Stop state: some VFDs only accept control writes (start/stop/frequency) when in the Ready state, not in Fault.
- Keypad priority: the device prioritizes the local HMI keypad and rejects Modbus writes while the keypad is being used.
- Authentication: newer slaves require a login session (Modbus security / FC 0x5A extensions) before allowing writes.
The Powercenter1000 case described in the original report — where the user tried both "remote" and "local storage" paths — is a textbook example of this slave-side gating. The device must be put into the mode in which the master's write will actually mutate the controlled quantity.
10. Logo! Firmware Caveats
| FS / Firmware | Modbus TCP Master Capability | Known Write-Related Issues |
|---|---|---|
| FS:01 / V1.00 | Not supported | Upgrade required for any Modbus TCP |
| FS:02 / V1.04 | Limited, read-only on most models | Writes unreliable; upgrade to FS:04+ |
| FS:03 / V1.10 | Read/write supported, no S7 protection | Connection count limited to 4 |
| FS:04 / V1.16 | Read/write stable, 7 runtime connections | NA/ND bind to read-only sources silently no-ops |
| FS:05 / V1.17 | Same as FS:04, security improvements | Minor; recommend FS:06 |
| FS:06 / V1.18 (LOGO! 8.3) | Full read/write, improved diagnostics | Default behavior; recommended baseline |
Check Siemens entry ID 109751634 and the LOGO! product support page for the latest firmware and any Modbus-specific advisories before commissioning.
11. Frequently Asked Questions
Why can my LOGO! read from the Modbus slave but cannot write to it?
The most common cause is that only a Network Input (NI) block is configured, which performs reads only. To write, you must use a Network Analog Output (NA) block for a holding register or a Network Digital Output (ND) block for a coil. Without an NA or ND block, the LOGO! never issues a Modbus write function code (05, 06, 15, or 16).
Which Modbus function code does the LOGO! 8 use for a single holding register write?
The LOGO! 8 issues Function Code 06 (Write Single Holding Register) when the NA block is bound to a single 16-bit value. If the slave rejects FC 06, the only path from a LOGO! is to use a multi-register NA block (FC 16) with a one-word payload, or to map the value into a coil (FC 05) if the slave supports it.
The slave accepts the LOGO!'s write but the value reverts immediately. What is wrong?
The NA/ND block is almost certainly bound to a read-only source such as another network input (NI), a digital input (I), or an analog input (AI). Bind the source to a writable memory area — a marker (M, MW), a digital output (Q), or an arithmetic block output — and the write will stick.
How many Modbus TCP master connections can a LOGO! 8 support simultaneously?
LOGO! 8 base modules support up to 8 S7/Modbus TCP connections in total. One is reserved for the engineering link (LOGO!Soft Comfort online), leaving up to 7 for runtime Modbus traffic. Each Network Master block consumes one connection slot. Firmware FS:03 limited this to 4; FS:04 and later supports 7 runtime connections.
How do I verify on the wire that the LOGO! is actually sending a Modbus write?
Capture traffic with Wireshark on a mirrored switch port using the display filter modbus. A write transaction appears as a Modbus TCP frame with function code 0x05, 0x06, 0x0F, or 0x10. A normal (non-exception) response echoes the function code without the high bit set. An exception response (high bit set, e.g. 0x86) tells you exactly which Modbus error the slave is raising, which maps directly to the root cause matrix in section 5.