Map CLICK PLC addresses to Modbus for an HMI panel

9 min read · Published November 11, 2026

A CLICK PLC and a Modbus HMI panel name the same memory two ways. DS words land in the 4xxxx holding-register area with DS0 at 40001, Y bits are coils, X inputs are read-only discrete inputs and DF floats take two registers. Translate area and offset, check one read and one write on spare registers, then enter the rest.

You have a CLICK PLC on the bench, an HMI panel that talks Modbus, and a screen full of objects that read zero. The fix is a one-page translation, and it starts here: DS0 is holding register 40001, so DS100 is 40100, Y0 is coil 00001 and X0 is discrete input 10001. Each CLICK data area maps to one Modbus area, each CLICK address becomes a register number with two lines of arithmetic, and one object gets checked against a known value before you enter the rest. The CLICK program shows live values, the link comes up, and nothing on the panel moves because the panel's Modbus driver and the CLICK program name the same memory in two different languages, and the address you typed was written for the wrong one. This article gives you the map, the arithmetic, the checks and the order to work in.

Why do none of the CLICK addresses work in the panel?

The mismatch is in the naming, not the wiring: a CLICK address such as DS100 names a word in PLC memory, a Modbus driver asks for a numbered register in a named area, so DS100 has to become holding register 40100 before an object finds it.

Modbus keeps four data areas: coils, for bits a master can read and write; discrete inputs, for bits it can only read; and input registers and holding registers, for words. The CLICK names its memory with letters: X for input bits, Y for output bits, DS for words, DF for floats. Panel software that ships a native CLICK driver accepts those letter names and does the translation for you. A generic Modbus driver does none of that: it hands you a register-number field and expects the right number for the right area. That is why nearby numbers fail too: a wrong number inside the correct area returns the wrong register's data, and a number past the block's end returns a Modbus exception. The CLICK PLC user manual (C0-USER-M) prints the area-by-area Modbus table in its serial communications chapter, and every number in this article traces back to it.

What does each symptom point to?

Each symptom names its own cause: a dead link points to port settings, wrong-but-stable numbers point to the area or offset, junk where a float belongs points to word order, and a failed write points to a read-only area.

Symptom What it points to First check
No object answers, the link errors out Port or driver mismatch, not addresses CLICK port on Modbus RTU slave, panel driver a Modbus RTU master, station and baud matching
Link up, every number wrong Wrong area or offset convention Enter DS0 and see where it lands: 40001, offset 0, or 400001
Integers right, floats junk Word order, or a one-register entry for a two-register float Set the object to 32-bit float, count 2, flip the word order; 37.5 stored as 0x421C0000 reads 16924 and 0 in the wrong order
A value reads but a write fails or does nothing Object aimed at a read-only area Move the object to a coil or a holding register
One screen right, the next wrong Hand-typed notations mixed into the project Re-enter the failing objects straight from the map table

How do CLICK data areas map to Modbus areas?

The CLICK user manual's Modbus table maps each data area to a Modbus area: DS0 to DS4999 on a standard CPU become 4xxxx holding registers, DF floats take two consecutive holding registers each, Y outputs become 0xxxx coils, and X inputs become read-only 1xxxx discrete inputs.

Read the ranges from the table printed for the connected CPU, then count each CLICK address from its row's start reference:

CLICK area What it holds Modbus area Per point
X input bit, read only 1xxxx discrete inputs 1 bit
Y output bit 0xxxx coils 1 bit
DS 16-bit signed word 4xxxx holding registers 1 register
DF 32-bit float 4xxxx holding registers 2 registers

DD, DH and the timer, counter and system-data words carry their own rows in the same table, each with its own start reference. A DF float spans two consecutive 16-bit registers, and which word leads depends on the panel's float word-order setting, the first thing to flip when a float shows two odd integers. If you want a finished map to compare yours against, the worked CLICK Modbus register map page lays the conversion out area by area.

How do you turn a DS address into the number the panel asks for?

Add the CLICK address to the area's starting number: DS25 sits at offset 25 in the holding-register row, which reads 40026 in 5-digit notation, 400026 in 6-digit notation, or plain offset 25 in a panel that counts from zero.

The DS row starts at holding register 1: DS0 is 40001, DS25 is 40026, DS4999 is 45000. In 6-digit software the same three read 400001, 400026 and 405000. Software that asks for an offset wants the CLICK address unchanged, DS25 at offset 25, because an offset counts from zero and points straight at the memory location while a Modbus reference starts counting at 1. Bits follow the same rule from their own rows: Y0 is coil 00001 or 000001, and X0 is discrete input 10001 or 100001.

The 4 in 4xxxx names the area, and the function code in the request does the reading; why a 4xxxx register is not Modbus function code 04 pulls that pair apart. The offset-versus-reference gap shows up across PLC families, and why HMI tag address formats change between PLC protocols follows it through other protocols. When a read faults instead of returning a wrong number, the 4xxxx prefix and read-fault fixes page lists the usual causes.

What does a full scenario look like, from DS100 to a working object?

Say a batch counter lives in DS100 and a machine-running bit in Y2; DS100 becomes holding register 40100, Y2 becomes coil 00003, and both numbers take two short sums from the map.

  1. DS100 sits at offset 100 in the DS row: 40001 + 100 = 40100, or 400001 + 100 = 400101 in 6-digit software.
  2. Build one display object at holding register 40100, data type 16-bit signed, one register wide.
  3. Enter 1234 into DS100 from the PLC software's watch window and check the object shows 1234.
  4. Enter -45 next. A panel showing 65491 has the object type set to unsigned, because -45 in a 16-bit signed word reads 65491 unsigned; switch the type to signed and -45 appears.
  5. Y2 is the third coil: 1 + 2 = 3, entered as 00003 or 000003. Put it on a status object first; a pushbutton that writes Y2 uses the same reference for the write.
  6. Toggle Y2 in the PLC and check the bit follows on the panel.
  7. A DF float follows the same pattern from the DF row's own start reference: DF10 sits 2 × 10 = 20 registers into that row, so its object takes the pair at start + 20 and start + 21, typed 32-bit float.

How do you check the first object before mapping the rest?

Check the map on one object before you touch the other twenty: put a known value in the register from the PLC software, map a single panel object, watch the value follow an edit, and write the pair down before moving on.

  1. Save a copy of the panel project before any edit.
  2. Pick a spare DS word the program ignores, such as DS400, and write a known value into it from the PLC software.
  3. Map one object to that register: 40001 + 400 = 40401, 16-bit signed, and check the panel shows the PLC's value.
  4. Change the PLC value and check the panel follows; that closes the read direction.
  5. If the object must write, run the write on a second spare register: enter a test value from the panel and read it back in the PLC software.
  6. Never write-test into a word the program uses for a setpoint, a step index or an output command; spare words only, so a mis-keyed number cannot move a machine.
  7. Record PLC address, Modbus reference, data type and direction in a table saved with the project, then batch the remaining objects from it.

Why does a value read correctly but refuse to write?

A failed write usually means the object points into a read-only area: Modbus discrete inputs accept reads only, so a panel object that must write has to target a coil, for a Y output bit, or a holding register, for a DS word.

Modbus fixes the direction per area: coils and holding registers read and write; discrete inputs and input registers read only. A write aimed at an X point lands in a read-only area, and most drivers reject it or ignore it. Aim writes where the CLICK expects them: Y bits for outputs the program acts on, DS words for setpoints the program reads. Check the object itself too, because panel objects carry a read-only flag of their own next to the register number.

What do you check when the panel will not communicate at all?

When no object answers at all, the two ends disagree about the link, not the addresses: the CLICK serial port must be set to Modbus RTU slave, the panel driver must be a Modbus RTU master, and station number, baud, parity and stop bits must match.

  • Set the CLICK serial port to Modbus RTU slave. The port's protocol, baud, parity and stop-bit settings live in the controller configuration of the CLICK programming software.
  • Use station 1 on a point-to-point link; Modbus station numbers run 1 to 247 and both ends must agree.
  • Match baud, parity and stop bits at both ends; a mismatch returns silence or repeated exceptions.
  • Point the panel at a generic Modbus RTU master driver. If the panel software also ships a native CLICK driver, that one takes X, Y, DS and DF names directly and skips the translation.
  • Run the RS485 twisted pair to the terminals shown in the manual's wiring figure for the port.
  • On a CLICK with an Ethernet port, the panel's Modbus TCP driver uses the same register references with the PLC's IP address in place of the serial settings.

If the driver list offers more than one candidate, check the PLC serial protocol before replacing a legacy HMI before trusting a driver name.

What is the order to work in?

Work in a fixed order: set the link, translate one DS address, check one read and one write on spare registers, then batch the rest from the manual's table.

  1. Link: CLICK port on Modbus RTU slave, settings matched, station agreed.
  2. One read: DS100 to its holding-register reference as a signed object, the value following the PLC.
  3. One write: a spare register, the panel writes, the PLC reads the value back.
  4. The rest: every object entered from the written table, X from the discrete-input row, Y from the coil row, DS and DF from the holding-register row.

Recommendation: For one HMI panel on a serial link, set the CLICK serial port to Modbus RTU slave at station 1, translate every DS point into the holding-register row with the arithmetic above, check one read and one write on spare registers, and enter the remaining objects only from a written map table saved with the project. Larger CLICK CPUs change the ranges in the manual's table, never the arithmetic.

Questions

Does the CLICK to Modbus map change between CLICK models?

The translation rule never changes; the ranges do. The manual's Modbus table is printed per CPU, a standard CPU lists DS0 to DS4999, and larger CPUs list a longer DS range in the same one-to-one order into the 4xxxx area. Take the ranges from the table for the connected CPU: a reference past the listed range comes back as a Modbus exception, not a value.

What changes on an RS485 link with more than one device?

Each device needs its own station number in the 1 to 247 range, the panel stores one station per device, and baud, parity and stop bits must match across the whole link. The register map itself does not change: the second device's DS0 is still its first holding register, reached by that station number plus the same reference arithmetic.

How do you keep the map from breaking during later edits?

Keep the written table with the project: PLC address, Modbus reference, data type, and read or write direction. Enter new objects only from the table, and give a reused register a new row before a second object points at it. A register serving two objects with different meanings can pass a single-object check and still feed one of them the wrong value.

Planning information, not legal or engineering advice. Rules differ by place: check codes and permits with your local authority and your licensed trades.

Keep reading

Build your signAsk for a quote