The iSentrol Mod X0 pulse counter

- tsp
Last update 21 May 2025
Reading time 5 mins

Introduction

In this article, we explore the iSentrol Mod X0, a versatile and compact flow sensor module designed to read and interpret pulses from standard flow transducers. Acting as a digital water flow meter, the Mod X0 supports ModBus communication, allowing for seamless integration into a variety of data logging and automation setups.

I’ve tested the module in two real-world scenarios:

This post includes:

Default settings

Β  Β 
Baud rate 9600
ModBus address 1
Flowmeter constant 500

ModBus Registers

Supported commands are:

Unfortunately the documentation supplied by many merchants is not correct. I’ve found one in a YouTube video by the manufacturer though that seems to fit when applied to my sensor:

Address Name Description Unit Scaling / Notes
0x0000 Baud Rate Communication baud rate setting - Value is 0: 2400, 1: 4800, 2: 9600, 3: 19200. Reverts to 9600 on invalid values.
0x0001 Device Address ModBus device ID - Range: 1–247 (0x0001–0x00F7).
0x0002 Decimal places Number of decimal places, defaults to 2 - Not sure of effect, default 2
0x0003 Sensor Pulse K Factor Number of pulses per liter pulses/L Stored as 100x the actual value (50000 is 500.00 pulses/L)
0x0004 Permanent Cumulative Flow – High Register High 16 bits of permanently stored accumulated volume Liters Combine with 0x0004: Total_Liters = High * 65536 + Low.
0x0005 Permanent Cumulative Flow – Low Register Low 16 bits of permanently stored accumulated volume Liters See above. Rolls into 0x0003 when reaching 65535.
0x0006 Permanent Cumulative Flow – Decimal Decimal portion of cumulative volume Liters Stored as 100Γ— actual decimal value. E.g., 25 β†’ 0.25 L.
0x0007 Permanent Accumulated Pulse Counter Pulse counter until 1L is reached pulses Resets to 0 after 1L worth of pulses is accumulated (based on K factor).
0x0008 ? ? - Reserved
0x0009 ? ? L/min Reserved (default 100)
0x000A ? ? L/min Reserved (default 1500)
0x000B ? ? - Reserved (default 4000)
0x000C ? ? - Reserved (default 50)
0x000D Temporary Cumulative Flow – High Register High 16 bits of temporarily stored accumulated volume (cleared on power loss) Liters Same format as 0x0003/0x0004, resets on power loss.
0x000E Temporary Cumulative Flow – Low Register Low 16 bits of temporarily stored accumulated volume Liters See above.
0x000F Temporary Cumulative Flow – Decimal Decimal portion of temporary cumulative volume Liters Stored as 100Γ— actual decimal value. Resets on power loss.
0x0010 Temporary Accumulated Pulse Counter Pulse counter toward 1L for temporary total pulses Same as 0x0006, but for temporary flow.
0x0011 Real-Time Flow Rate Instantaneous flow rate L/min Stored as 100Γ— actual value. E.g., 315 β†’ 3.15 L/min.
0x0012 Real-Time Pulse Rate Current sensor pulse frequency Hz Useful for debugging and calibration.
0x0013 ? ? - Reserved
0x0014 ? ? - Reserved

Encoding and decoding registers

K factor

The K factor represents the number of pulses generated per liter of flow. Since the Mod X0 stores only integer values, the K factor is scaled by a factor of 100 to retain two decimal places of precision, enabling a resolution down to 0.01 pulses per liter. The stored value in the register can thus be calculated as:

$ \begin{aligned} K_{reg} &= 100 * \frac{f}{Q}
&= 100 * \frac{\frac{pulses}{s}}{\frac{l}{s}} = 100 * \frac{pulses}{liters} \end{aligned} $

Permanent cumulative flow

The total accumulated flow volume (in liters) is stored across three 16-bit registers:

The total value can be reconstructed as:

$ \begin{aligned} F_{total} = F_{high} * 65536 + F_{low} + \frac{F_{frac}}{100} \end{aligned} $

Temporary cumulative flow

This register group behaves identically to the permanent cumulative flow, representing a resettable volume counter (in liters). It is stored in:

The value is calculated using the same formula:

$ \begin{aligned} F_{total} = F_{high} * 65536 + F_{low} + \frac{F_{frac}}{100} \end{aligned} $

Pulse counters

Registers 0x0007 and 0x0010 store the raw pulse counts for the permanent and temporary flow measurements, respectively. These counters increment with each detected pulse and can be used for low-level diagnostics or debugging. Once the count reaches the stored $K$ value, it indicates that one liter of fluid has passed and they wrap to zero again.

Real-Time flow rate

The real-time flow rate is stored in register 0x0011, expressed in liters per minute, scaled by a factor of 100 for precision. The actual flow rate is obtained as:

$ \begin{aligned} Q &= \frac{F_{flow}}{100} \end{aligned} $

This article is tagged: Sensor, RS485, ModBus


Data protection policy

Dipl.-Ing. Thomas Spielauer, Wien (webcomplains389t48957@tspi.at)

This webpage is also available via TOR at http://rh6v563nt2dnxd5h2vhhqkudmyvjaevgiv77c62xflas52d5omtkxuid.onion/

Valid HTML 4.01 Strict Powered by FreeBSD IPv6 support