Siemens LOGO! Modbus Master Write: Troubleshooting Guide

David Krause13 min read
ModbusSiemensTroubleshooting
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

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.

Scope: This guide covers LOGO! 8 (FS:04 and later, including FS:06 / LOGO! 8.3) configured as a Modbus TCP master/client. The same root causes apply to LOGO! as a Modbus RTU master when using a CMK2000 (6BK1700-0BA20-0AA0) or CMK2000-compatible module, but the slave addressing details and timing constraints differ. Verify your LOGO! firmware with LOGO!Soft Comfort > Online > Identify LOGO! before applying any procedure.

2. Prerequisites

Before any write attempt, confirm the following baseline. Each item is independently capable of preventing a Modbus write from succeeding.

  1. 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.
  2. 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.
  3. The slave device is reachable on the network: ping <slave_ip> from the engineering PC must succeed before any Modbus test.
  4. 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.
  5. LOGO! is in RUN mode (green LED steady). Writes are suspended in STOP.
  6. 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.

Direction matters: Reads and writes on the same slave require two separate network blocks. A single NI block does not mirror back to the slave. Configure one NI block for the register to be read, and one NA or ND block for the register to be written.

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:

  1. Delete the NI block tied to the target slave register.
  2. Drag an NA block (analog) or ND block (digital) onto the schematic from the network library.
  3. Double-click and set the connection target to the same slave IP used by the NI block.
  4. Set the Read/Write direction to Write.
  5. Set the register address to the slave's holding register number.
  6. 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:

  1. Insert a ND (Network Digital Output) block.
  2. Configure: Partner IP = slave, Slave Address = 1, Register = coil number (e.g. 1 → coil address 0 in zero-based Modbus), Direction = Write.
  3. Bind the ND input to a constant 1 for a steady-on test, or to a digital tag such as M1.
  4. 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:

  1. Insert a NA (Network Analog Output) block.
  2. Configure: Partner IP = slave, Slave Address = 1, Register = holding register number, Direction = Write.
  3. Bind the NA input to 1 (constant) for the test, or to a marker such as MW2.

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.

Back to blog