Reading DSE8610 Modbus Registers in WinCC Flexible 2008 SP3

David Krause12 min read
HMI / SCADASiemensTutorial / How-to
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

Engineers integrating a Deep Sea Electronics DSE8610 generator controller with a Siemens WinCC Flexible 2008 SP3 runtime commonly hit a wall: the DSE8610 is not present in the WinCC Flexible PLC device list. The HMI software ships with a curated catalog of Siemens SIMATIC PLCs and a handful of third-party drivers, but DSE controllers are not included as native entries. This means that the standard "Add PLC" wizard cannot auto-create the correct communication channel, and the engineer must configure the Modbus TCP link manually.

The DSE8610 supports both Modbus RTU over RS-485 and Modbus TCP over Ethernet. The Modbus TCP path is the practical choice for remote panel HMI integration because it allows the WinCC Flexible runtime on a PC or Panel to poll the controller's holding registers directly over the plant LAN. Once the channel is built manually, any register documented in the DSE Modbus register map (generator voltage, current, frequency, engine RPM, oil pressure, coolant temperature, breaker state, alarm flags, and so on) can be exposed as an HMI tag.

Prerequisites

  1. WinCC Flexible 2008 SP3 (32-bit or 64-bit) installed and licensed, with the ES (Engineering System) and RT (Runtime) components.
  2. WinCC Flexible 2008 SP3 update package installed (HF releases above SP3 are recommended for stability on x64 hosts).
  3. DSE8610 controller with Ethernet port enabled and a configured static IP address on the same subnet as the HMI.
  4. TCP port 502 reachable (default Modbus TCP port on DSE86xx series).
  5. Current DSE8610 Modbus register map PDF supplied by DSE or the generator OEM. Do not rely on a register address posted on a forum - the OEM-supplied map is the only authoritative source, and addresses can change between firmware revisions of the DSE8610 (firmware revisions 5.x, 6.x, and 7.x have shipped with different mappings).
  6. PC with Ethernet adapter on the same subnet for the engineering PC and the target runtime.
Critical: Always request the latest register map directly from DSE or the generator OEM. Register offsets, scaling factors, and signed/unsigned interpretation have changed between firmware versions of the DSE8610. A value that reads correctly on one site may return garbage on another site with a different firmware load.

Modbus TCP Communication Fundamentals

Modbus TCP is an open, application-layer protocol that wraps the classic Modbus PDU inside a TCP segment. The connection is established by a Modbus client (the HMI / WinCC Flexible runtime) to a Modbus server (the DSE8610) on TCP port 502. Once the socket is open, the client issues a request and the server responds with the same function code and a data payload.

For the DSE8610 generator controller the relevant Modbus function codes are:

Function Code Name Used For DSE86xx Typical Registers
01 Read Coils Discrete outputs / breaker state 0 - 63 (coil map)
02 Read Discrete Inputs Digital alarm flags 0 - 127 (input map)
03 Read Holding Registers Setpoints, configuration, derived measurements 0 - 4095 (depending on firmware)
04 Read Input Registers Live measurements (voltage, current, frequency, oil pressure, coolant temp, fuel level, etc.) 0 - 4095 (depending on firmware)
05 Write Single Coil Remote start/stop commands on supported DSE models Specific coil per command
06 Write Single Register Configuration writes (use with caution) OEM-defined

Each Modbus TCP request is framed as a 7-byte MBAP header followed by the standard Modbus PDU. The MBAP header carries the Transaction ID, the Protocol Identifier (0x0000 for Modbus), the Length field, and the Unit Identifier. The DSE8610 uses the Unit Identifier as its Modbus slave address (default 1). Refer to the Siemens TIA Portal Modbus TCP and Modbus RTU overview for the client/server model that WinCC Flexible follows.

WinCC Flexible Communication Driver Selection

WinCC Flexible 2008 SP3 ships with a generic Modicon Modbus TCP driver under the "Modicon" family. This driver is not Modicon-specific at the wire level - it implements the standard Modbus TCP client and can be pointed at any Modbus TCP server, including the DSE8610. Two driver entries are typically present:

  • Modicon Modbus TCP/IP - direct Ethernet, point-to-point or multipoint via a Modbus TCP gateway.
  • Modicon Modbus (RTU over serial) - used when the HMI is talking RS-485 to a DSE8610 serial port.

For the DSE8610 over Ethernet, select Modicon Modbus TCP/IP. Even though the device list inside this driver is populated with Schneider Electric / Modicon PLCs, the driver itself accepts any Modbus TCP server; the device list is purely cosmetic. The polling engine inside WinCC Flexible RT uses the function code, starting address, and length you bind to each tag - it never validates the remote vendor.

Step-by-Step Configuration in WinCC Flexible ES

Step 1 - Create a new Connection

  1. Open the WinCC Flexible project in the Engineering System.
  2. In the project tree, expand Communication > Connections.
  3. Double-click Connections to open the connection editor.
  4. Click the empty row to create a new connection, then set:
      Communication driver: Modicon Modbus TCP/IP
      Station: descriptive name, e.g. DSE8610_Genset_1
  5. Leave the HMI device as the local endpoint (it is implied by the driver selection).

Step 2 - Configure the Slave (DSE8610) Endpoint

  1. In the connection parameters table, set the Partner (PLC) IP address to the static address configured on the DSE8610 (for example, 192.168.1.50).
  2. Set the Partner port to 502 (DSE default Modbus TCP port).
  3. Set the Modbus Station Address to 1 (DSE default Modbus unit ID; verify against the controller's configured Modbus ID in DSE Configuration Suite).
  4. Set the Cycle time for the connection. For generator telemetry a cycle of 1000 ms is a good starting point. Faster polling (e.g. 250 ms) can saturate the DSE8610 Modbus buffer on a busy multi-master segment.

Step 3 - Define Tags Bound to DSE Holding and Input Registers

  1. Open Communication > Tags.
  2. Create a new tag, for example Gen_L1L2_Voltage.
  3. Set the Connection to the new Modbus TCP connection from Step 1.
  4. Set the Address format. For the Modicon Modbus TCP driver in WinCC Flexible, the addressing syntax is:
    DB<area>.<register-type><address> or directly a numeric MW-style word address mapped to a Modbus register, depending on the driver build. The driver build shipped with SP3 accepts a numeric Modbus register directly in the address field; check the driver help under Addressing.
  5. Map the tag to the correct Modbus function code by setting the data type and the access mode (read / write). For a DSE input measurement (e.g. generator line voltage) use function code 04 (Read Input Registers); for a DSE setpoint or configuration value use function code 03 (Read Holding Registers).

Step 4 - Address Mapping for Common DSE8610 Registers

The exact register map varies by DSE8610 firmware. The following table shows a representative example. Always confirm with the OEM-supplied map for your specific firmware revision.

HMI Tag (suggested) DSE Description Modbus FC Register Data Type Scaling
Gen_L1L2_Voltage Generator L1-L2 voltage 04 0 UINT16 ÷ 10 (e.g. 2300 = 230.0 V)
Gen_L2L3_Voltage Generator L2-L3 voltage 04 1 UINT16 ÷ 10
Gen_L3L1_Voltage Generator L3-L1 voltage 04 2 UINT16 ÷ 10
Gen_Frequency Generator frequency 04 3 UINT16 ÷ 10 (e.g. 500 = 50.0 Hz)
Gen_Total_kW Generator total kW 04 8 (low) / 9 (high) INT32 (2 regs) ÷ 1 (engineering unit)
Engine_Speed Engine RPM 04 14 UINT16 ÷ 1 RPM
Engine_Oil_Pressure Engine oil pressure 04 15 UINT16 ÷ 10 (bar or psi per DSE config)
Engine_Coolant_Temp Engine coolant temperature 04 16 UINT16 ÷ 1 °C (signed in some firmware)
Engine_Fuel_Level Fuel level 04 18 UINT16 ÷ 10 %
Mains_L1L2_Voltage Mains L1-L2 voltage 04 20 UINT16 ÷ 10
Breaker_Status Generator breaker closed 02 0 (input) or 0 (coil) BOOL 0 = open, 1 = closed
Common_Alarm Common alarm flag 02 16 BOOL 1 = active alarm
Note on scaling: The DSE Modbus register map states the engineering unit and the scaling factor in the column header. A value of 2301 read from the voltage register typically means 230.1 V. Misinterpreting scaling is the single most common cause of "wrong reading" support tickets.

Step 5 - Configure the Connection on the HMI Device

  1. Open Device Settings on the HMI panel (or PC runtime target).
  2. Set the HMI's own IP address, subnet mask, and default gateway so it can reach the DSE8610 subnet.
  3. Confirm the panel's transfer and runtime ports are not conflicting with the Modbus TCP port 502.
  4. Compile the project and transfer to the runtime target.

Compiling and Verifying the Runtime

  1. Select Project > Compiler > All in WinCC Flexible ES. The compile must complete with zero errors and zero warnings about the Modbus connection.
  2. Start Runtime on the target or perform a transfer and then start runtime locally on the engineering PC.
  3. Open an I/O Field or Bar element on a test screen bound to one of the new tags, for example Gen_L1L2_Voltage.
  4. Observe the value. If it tracks the value shown on the DSE8610 front panel within the configured scaling, the channel is live.
  5. Watch the connection status indicator in the runtime. A green / "connected" icon confirms the MBAP handshake succeeded.

Verification Checklist

  • ping <DSE8610_IP> from the engineering PC returns replies with TTL near 64 or 128.
  • WinCC Flexible Runtime shows connection OK for the DSE8610 partner.
  • A 16-bit input tag returns a plausible unsigned integer; the value changes when the generator state changes.
  • A 32-bit measurement (e.g. total kW) returns a plausible value, with the high and low words correctly ordered. If the reading is wildly wrong, swap the word order in the tag definition - some Modbus masters expect big-endian (high-word-first) while the DSE8610 may publish little-endian depending on firmware.
  • Alarm flags from the DSE8610 map to discrete inputs and surface correctly on a WinCC alarm view.

Troubleshooting Matrix

Symptom Likely Cause Diagnostic Fix
Runtime shows Connection failed / no communication IP address or subnet mismatch, port blocked, or DSE Modbus TCP not enabled ping, telnet <ip> 502 from engineering PC Fix static IP on the DSE8610 in DSE Configuration Suite; enable Modbus TCP in the controller's comms settings; allow TCP/502 in any firewall on the HMI host
Connection OK but all values return 0 Unit ID mismatch, or function code 03 used where 04 is required Try reading the same register with a generic Modbus scanner (e.g. mbpoll) at function code 04 Set the Modbus station address in the WinCC connection to match the controller; switch the tag to the correct function code
Values off by 10x or 100x Scaling factor ignored Cross-check with a known reference (e.g. mains voltage from a multimeter) Apply the scaling factor in the HMI tag's linear scaling, or display the raw register value and scale on the HMI screen via a script
32-bit value scrambled (high/low words swapped) Byte order difference between the master and the DSE firmware Read with two known-word values and compare Adjust the tag definition to the correct word order, or write a small VBScript in WinCC Flexible to swap words after read
Reading works, writing a coil returns illegal function DSE8610 in that firmware does not support the write function code over TCP, or the coil is read-only Consult the OEM Modbus map for the supported write codes Use the supported function code; never write to undocumented registers
Occasional timeouts under load Poll cycle too short, or multiple masters contending for the DSE8610 Modbus buffer Increase the WinCC cycle time; count requests per second on the network Raise the connection cycle to 1000 ms or 2000 ms; aggregate multiple tags into one request block

Performance and Polling Strategy

The DSE8610 has a single Modbus TCP server process. Polling the full register map at 100 ms will starve the controller. Group related tags into a contiguous register block and let the WinCC Flexible driver request the block in one PDU. For generator telemetry:

  • Fast (250 - 500 ms): Generator voltage, current, frequency, power, breaker state. These are the values an operator watches in real time.
  • Medium (1000 ms): Engine RPM, oil pressure, coolant temperature, fuel level.
  • Slow (5 - 10 s): Energy counters, hours-run counters, event log reads, configuration setpoints that rarely change.

Split the tags across multiple WinCC Flexible connections with different cycle times if your driver build supports it, or use one connection and adjust the per-tag acquisition cycle where the runtime allows.

Safety and Operational Notes

Caution on remote start / stop: Some DSE controllers allow remote engine start and breaker close / trip via Modbus. Never enable write access from the HMI on a live generator unless the site safety procedure covers remote commands, the breaker is interlocked, and the operator at the panel has a clear view of the engine room. A miswritten coil on a live generator can close a breaker out of sync with the mains, causing a dangerous out-of-phase parallel.

When the HMI runtime crashes or the network drops, the DSE8610 will continue operating on its internal logic; remote commands queued by the HMI do not survive a runtime restart. For critical control paths, always keep the DSE8610's local pushbuttons as the primary control surface and use the HMI as a supervisory view.

Alternate Path - Modbus RTU over RS-485

If the DSE8610 variant on site has only an RS-485 port and no Ethernet, the same WinCC Flexible Modicon Modbus (RTU) driver is used. The wiring, addressing, and tag setup are identical, except:

  • Use a serial cable from the HMI's COM port to the DSE8610 RS-485 A / B terminals.
  • Set baud rate, parity, and stop bits to match the DSE configuration (typical: 19200, 8, N, 1).
  • Set the Modbus station address to the unit ID of the DSE8610.
  • Add a 120 Ω termination resistor at each end of the RS-485 trunk.

FAQ

Why is the DSE8610 not in the WinCC Flexible PLC device list?

The DSE8610 is a third-party controller that does not ship in the WinCC Flexible catalog. Use the generic "Modicon Modbus TCP/IP" driver, set the partner IP and Modbus station address, and map your tags to the DSE-supplied Modbus register addresses. The driver does not validate the remote vendor.

What TCP port does the DSE8610 Modbus TCP server listen on?

Port 502 is the default. Confirm in the DSE Configuration Suite under the controller's communication settings, and allow the port through any host-based firewall on the HMI PC.

Which Modbus function codes should I use to read generator measurements?

Use function code 04 (Read Input Registers) for live measurements such as voltage, current, frequency, oil pressure, coolant temperature, and fuel level. Use function code 03 (Read Holding Registers) for setpoints and configuration values. Consult the OEM-supplied register map for the exact function code per register.

My values are off by a factor of 10 - what is wrong?

You are ignoring the DSE scaling factor. Most DSE8610 measurement registers are published as integers with a 0.1 or 0.01 scaling. For example, register 0 returns 2301 for 230.1 V. Apply the scaling either in the HMI tag's linear conversion or in a screen-level script.

Can I send a remote start command from the WinCC Flexible runtime to the DSE8610?

Yes, on DSE firmware builds that support Modbus control, by writing a single coil (function code 05) or a holding register (function code 06) to the documented address. Use this only when the site has an interlock and a procedure for remote commands, and keep the local DSE front panel as the primary control.

Back to blog