<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Troubleshooting &#8211; QModMaster</title>
	<atom:link href="https://qmodmaster.com/troubleshooting/feed/" rel="self" type="application/rss+xml" />
	<link>https://qmodmaster.com</link>
	<description>A powerful, portable, and cross-platform Modbus master for industrial automation and PLC testing.</description>
	<lastBuildDate>Fri, 16 Oct 2026 03:17:14 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://qmodmaster.com/wp-content/uploads/2026/04/favicon-150x150.png</url>
	<title>Troubleshooting &#8211; QModMaster</title>
	<link>https://qmodmaster.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Home Assistant Modbus &#8216;No Response&#8217; but QModMaster Works</title>
		<link>https://qmodmaster.com/home-assistant-modbus-no-response-fix/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 03:17:14 +0000</pubDate>
				<category><![CDATA[Troubleshooting]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/home-assistant-modbus-no-response-fix/</guid>

					<description><![CDATA[Home Assistant Modbus &#8216;No Response&#8217; but QModMaster Works You wired up a Modbus device — say, an Aqotec controller behind a Waveshare RS485-to-Ethernet gateway — and QModMaster reads its registers without a hitch. Then Home Assistant logs No response received from the remote unit or Unable to decode response, and nothing updates. This exact &#8220;QModMaster...]]></description>
										<content:encoded><![CDATA[<h1 class="wp-block-heading">Home Assistant Modbus &#8216;No Response&#8217; but QModMaster Works</h1>

<p class="wp-block-paragraph">You wired up a Modbus device — say, an Aqotec controller behind a Waveshare RS485-to-Ethernet gateway — and QModMaster reads its registers without a hitch. Then Home Assistant logs <code>No response received from the remote unit</code> or <code>Unable to decode response</code>, and nothing updates. This exact &#8220;QModMaster works, HA doesn&#8217;t&#8221; situation comes up regularly in the <a href="https://community.home-assistant.io/t/modbus-connection-to-aqotec-no-response-received-from-the-remote-unit-unable-to-decode-response/611054" rel="nofollow noopener" target="_blank">Home Assistant community</a>. The good news: QModMaster just proved your hardware chain is fine. The fault is almost certainly in the HA configuration — and there is a systematic way to find it.</p>

<h2 class="wp-block-heading">The bisection rule: if QModMaster reads, the wire is fine</h2>

<p class="wp-block-paragraph">A successful QModMaster read proves, in one shot, that the serial parameters (baud rate, parity, stop bits) or the TCP host and port, the gateway&#8217;s operating mode, the wiring, the slave address, and the device itself all work — with exactly the settings you typed in. So stop re-crimping cables and swapping adapters. From here on, the only remaining suspect is how the Home Assistant modbus integration is configured. Keep the working QModMaster session open next to your HA config; you will compare the two value by value.</p>

<h2 class="wp-block-heading">Step 1 — Write down the four values that worked in QModMaster</h2>

<ul class="wp-block-list">
<li><strong>Connection mode:</strong> RTU on a serial port, or TCP to the gateway&#8217;s IP and port (e.g. <code>192.168.1.100:8899</code> for a transparent bridge, <code>:502</code> for a Modbus-TCP gateway).</li>
<li><strong>Unit identifier / slave address:</strong> the slave ID the read succeeded with.</li>
<li><strong>Function code and start address:</strong> e.g. Read Input Registers (FC04) starting at address 0, or Read Holding Registers (FC03).</li>
<li><strong>Register count and display format:</strong> how many registers you read, and whether the value was 16-bit, 32-bit float, etc.</li>
</ul>

<h2 class="wp-block-heading">Step 2 — Match each value to an HA config key</h2>

<p class="wp-block-paragraph">These five mismatches cause nearly every &#8220;QModMaster works, HA doesn&#8217;t&#8221; case:</p>

<ul class="wp-block-list">
<li><strong>Wrong slave / unit ID → &#8220;No response received from the remote unit&#8221;.</strong> The HA <code>slave:</code> key must equal the Unit Identifier that worked in QModMaster. If a TCP gateway serves several slaves, every sensor entry needs its own <code>slave:</code> — one shared value silently breaks the rest.</li>
<li><strong>Wrong count → &#8220;Unable to decode response&#8221;.</strong> HA&#8217;s <code>count:</code> must equal the number of registers the device actually returns. If QModMaster read 10 registers, the sensor needs <code>count: 10</code>; a 32-bit float needs <code>count: 2</code>.</li>
<li><strong>Wrong data_type → decode errors or garbage values.</strong> Match <code>data_type:</code> (int16, uint16, int32, uint32, float32, string…) to the device manual. If floats come back as astronomical numbers, check the byte order too — see our <a href="/modbus-float-wrong-value-byte-order-fix/">float byte-order fix guide</a>.</li>
<li><strong>Holding vs. input mix-up.</strong> QModMaster&#8217;s &#8220;Read Holding Registers&#8221; (FC03) maps to HA <code>input_type: holding</code>; &#8220;Read Input Registers&#8221; (FC04) maps to <code>input_type: input</code>. Reading the wrong table produces exception responses the decoder cannot handle.</li>
<li><strong>Polling too fast.</strong> Some devices drop off the bus if polled aggressively. Start with <code>scan_interval: 30</code> and only speed up once the device proves it tolerates it.</li>
</ul>

<h2 class="wp-block-heading">Minimal working HA modbus config to compare against</h2>

<p class="wp-block-paragraph">Use this as a reference skeleton, then replace every value with what worked in your QModMaster session and your device&#8217;s manual:</p>

<pre class="wp-block-code"><code>modbus:
  - name: hub1
    type: rtuovertcp   # tcp, rtuovertcp, or serial — must match QModMaster's mode
    host: 192.168.1.100
    port: 8899
    sensors:
      - name: "Voltage"
        slave: 1              # = the Unit Identifier that worked in QModMaster
        address: 0
        input_type: input     # input = FC04, holding = FC03
        data_type: float32
        count: 2
        scan_interval: 30
        unit_of_measurement: "V"</code></pre>

<p class="wp-block-paragraph">Key names follow the Home Assistant modbus integration documentation; always double-check them against the HA version you run, since integration options evolve.</p>

<h2 class="wp-block-heading">If it still fails after the config matches</h2>

<ul class="wp-block-list">
<li>Open <strong>Settings → System → Logs</strong> in HA and read the exact frame-level error — it usually names the register or the slave that failed.</li>
<li>Some gateways need a small <code>delay</code> between requests, and some devices need a longer response timeout than HA&#8217;s default.</li>
<li>Capture both directions: compare a Wireshark capture of QModMaster&#8217;s request frame against HA&#8217;s request frame. The first byte that differs is your bug.</li>
</ul>

<p class="wp-block-paragraph">And if you haven&#8217;t done the probe-first workflow yet, start here: <a href="/test-modbus-with-qmodmaster-before-home-assistant/">test your Modbus link with QModMaster before writing the Home Assistant config</a> — five minutes with the GUI saves hours of YAML guessing.</p>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Why does QModMaster read my device fine but Home Assistant says 'No response received'?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "A working QModMaster read proves the wiring, gateway, baud rate and slave address are all correct, so the problem is in the Home Assistant modbus configuration. The most common cause is a wrong slave/unit ID in the HA config — it must match the Unit Identifier that worked in QModMaster."
      }
    },
    {
      "@type": "Question",
      "name": "What does 'Unable to decode response' mean in Home Assistant Modbus?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "It usually means the device answered, but Home Assistant could not parse the reply: the count, data_type or input_type (holding vs input registers) in the HA config does not match what the device actually returns. Compare each value against a working QModMaster read."
      }
    },
    {
      "@type": "Question",
      "name": "Which settings must match between QModMaster and Home Assistant?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Connection mode (RTU/TCP), host and port, slave/unit ID, function code mapped to input_type (FC03 = holding, FC04 = input), start address, register count, and data type. Write down the four values from the working QModMaster session and mirror them one by one in the HA YAML."
      }
    }
  ]
}
</script>

<h2 class="wp-block-heading">Related Guides</h2>

<ul class="wp-block-list">
<li><a href="/test-modbus-with-qmodmaster-before-home-assistant/">Test Modbus with QModMaster Before Writing Your Home Assistant Config</a></li>
<li><a href="/modbus-float-wrong-value-byte-order-fix/">Modbus Float Shows Wrong Value? Fix the Byte Order</a></li>
<li><a href="/usb-to-rs485-adapter-buying-guide/">USB-to-RS485 Adapter Buying Guide</a></li>
<li><a href="/qmodmaster-tutorial/">QModMaster Tutorial: Your First Modbus Read</a></li>
<li><a href="/download/">Download QModMaster</a></li>
</ul>

<style>.content-container.site-container{max-width:var(--global-content-narrow-width,842px)!important;margin:0 auto!important;padding:56px 24px 72px!important}</style>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Modbus Values Off by 10x? Scale Factor &#038; Offset</title>
		<link>https://qmodmaster.com/modbus-scale-factor-offset-values/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 03:16:07 +0000</pubDate>
				<category><![CDATA[Troubleshooting]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/modbus-scale-factor-offset-values/</guid>

					<description><![CDATA[Modbus Values Off by 10x? Scale Factor &#38; Offset QModMaster shows 2355 but your inverter&#8217;s display says 235.5 V. Or a temperature reads 1025 when the room is clearly 25 °C. Before you blame the wiring, the address, or the byte order — check the two most boring explanations in Modbus: scale factors and offsets....]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">Modbus Values Off by 10x? Scale Factor &amp; Offset</h1>



<p class="wp-block-paragraph">QModMaster shows <strong>2355</strong> but your inverter&#8217;s display says <strong>235.5 V</strong>. Or a temperature reads <strong>1025</strong> when the room is clearly 25 °C. Before you blame the wiring, the address, or the byte order — check the two most boring explanations in Modbus: <strong>scale factors</strong> and <strong>offsets</strong>. They account for a huge share of &#8220;wrong value&#8221; reports, and they are verified with mental math in under a minute.</p>



<h2 class="wp-block-heading">Scale factor: the register holds an integer, the value has decimals</h2>



<p class="wp-block-paragraph">Modbus registers are 16-bit integers — they cannot store a decimal point. So device makers store <strong>235.5 V as the integer 2355</strong> and document a <strong>scale factor of 0.1</strong> (or &#8220;divide by 10&#8221;). Common variants:</p>



<ul class="wp-block-list">

<li><strong>÷ 10</strong> — voltages, currents with one decimal (2355 → 235.5 V).</li>



<li><strong>÷ 100</strong> — two decimals (23550 → 235.50 V).</li>



<li><strong>÷ 1000</strong> — power/energy with three decimals, or millivolt-native sensors.</li>



<li><strong>× 10 / × 100</strong> — the reverse: some devices store a multiplied value (rare, but documented in a few meter maps).</li>

</ul>



<p class="wp-block-paragraph">The scale factor is always in the device&#8217;s <strong>register map / protocol document</strong> — look for columns labeled &#8220;scale,&#8221; &#8220;factor,&#8221; &#8220;multiplier,&#8221; &#8220;gain,&#8221; or a unit like &#8220;0.1 V&#8221;. If your reading is off by <em>exactly</em> 10×, 100×, or 1000×, scaling is guilty until proven innocent.</p>



<h2 class="wp-block-heading">Offset: the register value is shifted by a constant</h2>



<p class="wp-block-paragraph">Some devices add a fixed offset so that an unsigned register can represent a signed quantity. The documented real-world example is <strong>Deye inverters</strong>: certain temperature registers carry an <strong>offset of 1000</strong>, i.e.</p>



<p class="wp-block-paragraph"><code>actual temperature = raw register value − 1000</code></p>



<p class="wp-block-paragraph">So a raw reading of <strong>1025</strong> means <strong>25 °C</strong>, and a raw reading of <strong>985</strong> means <strong>−15 °C</strong> — the offset lets the unsigned register express temperatures below zero. If your temperature is off by a suspiciously round constant (not a round <em>multiple</em>), look for an &#8220;offset&#8221; column in the register map.</p>



<h2 class="wp-block-heading">The 60-second verification in QModMaster</h2>



<ul class="wp-block-list">

<li><strong>Step 1 — read raw.</strong> In QModMaster, read the register with a plain integer View format (no float interpretation yet). Write down the raw integer.</li>



<li><strong>Step 2 — divide first.</strong> Divide the raw value by 10, 100, and 1000 in your head. Does one of the results exactly match the device&#8217;s own display? Then you have found the scale factor.</li>



<li><strong>Step 3 — subtract second.</strong> If division does not fit but the value is off by a round <em>constant</em>, subtract candidate offsets (1000 is the classic for temperatures). A raw 1025 → 25 °C after −1000 confirms the offset.</li>



<li><strong>Step 4 — confirm in the manual.</strong> Find the scale/offset columns in the official register map and note them next to the address in your own notes. <strong>Always let the device manual win</strong> over any rule of thumb on this page.</li>

</ul>



<h2 class="wp-block-heading">Telling scaling apart from byte-order problems</h2>



<ul class="wp-block-list">

<li>Off by <strong>10× / 100× / 1000×</strong> → scale factor (this page).</li>



<li>Off by a round <strong>constant</strong> (e.g. always 1000 too high) → offset (this page).</li>



<li>Off by <strong>65,536×</strong> → word swap: <a href="/modbus-32bit-integer-word-swap/">Modbus 32-bit Integer Wrong? Word Swap (CDAB) Fix</a>.</li>



<li>Float showing <strong>astronomical garbage</strong> → byte order: <a href="/modbus-float-wrong-value-byte-order-fix/">Modbus Float Shows a Wrong Value? Byte-Order Fix</a>.</li>



<li>Reading a <strong>completely different register&#8217;s</strong> value → address off-by-one: check your device&#8217;s 0-based vs 1-based addressing.</li>

</ul>



<h2 class="wp-block-heading">FAQ</h2>



<h3 class="wp-block-heading">Why does my Modbus reading show 2355 instead of 235.5?</h3>



<p class="wp-block-paragraph">Modbus registers hold integers only, so the device stores 235.5 V as 2355 with a documented scale factor of 0.1. Divide the raw value by 10. The scale factor is listed in the device&#8217;s register map.</p>



<h3 class="wp-block-heading">What is the Deye temperature offset of 1000?</h3>



<p class="wp-block-paragraph">Certain Deye inverter temperature registers add an offset of 1000 so an unsigned register can represent negative temperatures: actual °C = raw value − 1000. A raw reading of 1025 means 25 °C.</p>



<h3 class="wp-block-heading">How do I know whether it&#8217;s scale, offset, or byte order?</h3>



<p class="wp-block-paragraph">Divide the raw value by 10/100/1000 — an exact match means scaling. If it is off by a round constant, suspect an offset. If it is off by 65,536× or shows garbage floats, it is a word/byte-order problem instead.</p>


<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[
{"@type":"Question","name":"Why does my Modbus reading show 2355 instead of 235.5?","acceptedAnswer":{"@type":"Answer","text":"Modbus registers hold integers only, so the device stores 235.5 V as 2355 with a documented scale factor of 0.1. Divide the raw value by 10; the scale factor is listed in the device's register map."}},
{"@type":"Question","name":"What is the Deye inverter temperature offset of 1000?","acceptedAnswer":{"@type":"Answer","text":"Certain Deye inverter temperature registers add an offset of 1000 so an unsigned register can represent negative temperatures: actual temperature in °C equals the raw value minus 1000."}},
{"@type":"Question","name":"How do I tell scaling apart from byte-order problems in Modbus?","acceptedAnswer":{"@type":"Answer","text":"Off by 10x/100x/1000x means a scale factor; off by a round constant means an offset; off by 65536x means word swap; garbage float values mean byte-order problems."}}
]}
</script>


<h2 class="wp-block-heading">Related Guides</h2>



<ul class="wp-block-list">

<li><a href="/modbus-32bit-integer-word-swap/">Modbus 32-bit Integer Wrong? Word Swap (CDAB) Fix</a> — when the error is 65,536×, not 10×.</li>



<li><a href="/modbus-float-wrong-value-byte-order-fix/">Modbus Float Shows a Wrong Value? Byte-Order Fix</a> — garbage floats, four byte orders.</li>



<li><a href="/qmodmaster-view-menu-data-format-guide/">QModMaster View Menu: Float/Int/Hex/Binary Explained</a> — pick the right display format first.</li>



<li><a href="/download/">Download QModMaster</a> — free, open-source (LGPLv3) Modbus master.</li>

</ul>



<p class="wp-block-paragraph"><em>Want the full encoding story? The <a href="/go/modbus-book" rel="nofollow">Modbus protocol book</a> covers scaling, offsets, and data representation in one place.</em></p>


<style>
.content-container.site-container{max-width:var(--global-content-narrow-width,842px)!important;margin:0 auto!important;padding:56px 24px 72px!important}
.related-guides{margin-top:2.5em;border-top:1px solid #e5e5e5;padding-top:1.5em}
</style>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Arduino + MAX485 Timeout? DE/RE Control Fix</title>
		<link>https://qmodmaster.com/arduino-max485-modbus-timeout-fix/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 03:16:03 +0000</pubDate>
				<category><![CDATA[Troubleshooting]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/arduino-max485-modbus-timeout-fix/</guid>

					<description><![CDATA[Arduino + MAX485 Timeout? DE/RE Control Fix Here&#8217;s the classic maker trap: your Arduino Modbus slave sketch answers perfectly when the PC talks to it over a USB-to-TTL cable — every read in QModMaster succeeds. Then you swap in a MAX485 module for real RS485, and QModMaster just says timeout, no response. The sketch didn&#8217;t...]]></description>
										<content:encoded><![CDATA[<h1 class="wp-block-heading">Arduino + MAX485 Timeout? DE/RE Control Fix</h1>

<p class="wp-block-paragraph">Here&#8217;s the classic maker trap: your Arduino Modbus slave sketch answers perfectly when the PC talks to it over a USB-to-TTL cable — every read in QModMaster succeeds. Then you swap in a MAX485 module for real RS485, and QModMaster just says <strong>timeout, no response</strong>. The sketch didn&#8217;t change. The slave ID didn&#8217;t change. What changed is the physics of the bus — and the fix is two wires. This exact failure was reported on the <a href="https://forum.arduino.cc/t/modbus-slaves-with-arduino/146650" rel="nofollow noopener" target="_blank">Arduino Forum</a> (a user&#8217;s slave worked via USB but timed out over a MAX485 module), and the diagnosis there is still the right one: <strong>it&#8217;s the MAX485 transceiver direction control — the DE/RE pins</strong>.</p>

<h2 class="wp-block-heading">Why USB works and MAX485 doesn&#8217;t</h2>

<p class="wp-block-paragraph">A USB-to-TTL cable is full-duplex: transmit and receive have their own wires, so the Arduino can listen and talk at the same time. RS485 is <strong>half-duplex</strong>: the A/B pair is shared, and the MAX485 chip needs to be told which direction it&#8217;s going. That&#8217;s what the <strong>DE</strong> (Driver Enable, transmit) and <strong>RE</strong> (Receiver Enable, receive) pins do:</p>

<ul class="wp-block-list"><li><strong>DE = HIGH:</strong> the MAX485 drives the bus — the Arduino is <em>transmitting</em>.</li><li><strong>DE = LOW (RE = LOW):</strong> the MAX485 listens — the Arduino is <em>receiving</em>.</li></ul>

<p class="wp-block-paragraph">If DE/RE are left floating, tied to the wrong level, or toggled by a library that doesn&#8217;t wait for transmission to finish, the Arduino&#8217;s reply never actually makes it onto the bus — and QModMaster sees a timeout. Per the forum diagnosis, the library must hold the MAX485 in transmit mode <em>for the whole time the reply is being sent</em>; simply pushing bytes into the serial buffer and flipping back to receive too early is enough to break it.</p>

<h2 class="wp-block-heading">The wiring (text diagram)</h2>

<p class="wp-block-paragraph">Wire DE and RE <strong>together</strong> to one Arduino digital pin (D2 is the common choice). One pin then controls the direction: HIGH = transmit, LOW = receive.</p>

<pre class="wp-block-code"><code>MAX485 module          Arduino
-----------          -------
  VCC        ----    5V
  GND        ----    GND
  DI         ----    TX  (Arduino transmit → MAX485 data in)
  RO         ----    RX  (MAX485 data out → Arduino receive)
  DE + RE    ----    D2  (tied together; direction control pin)
  A          ----    RS485 bus A
  B          ----    RS485 bus B

  120 Ω resistor across A–B at EACH END of the bus (termination)</code></pre>

<p class="wp-block-paragraph">Two practical notes: on an Arduino Uno the hardware serial port is shared with USB, so use a software serial port for the MAX485 side and keep hardware serial free for USB debugging. And A/B are differential — if everything is wired right but you still get timeouts, try swapping A and B once (a reversed pair fails silently).</p>

<h2 class="wp-block-heading">The code fix: drive the direction pin properly</h2>

<p class="wp-block-paragraph">Your Modbus library must know about the direction pin and hold it HIGH for the <em>entire</em> reply transmission — including waiting for the last byte to physically leave the UART — before dropping back to receive. Libraries built for RS485 expose this as a &#8220;TX enable pin&#8221; setting or pre/post-transmission callbacks. If your current library has no direction-pin support at all, that&#8217;s your answer: switch to one that does, set the TX enable pin to D2 (or whichever pin you wired), and retest. Don&#8217;t try to toggle the pin manually around library calls — the timing (waiting for the transmit buffer to fully drain) is exactly what goes wrong.</p>

<h2 class="wp-block-heading">QModMaster-side checklist</h2>

<p class="wp-block-paragraph">Once DE/RE is wired and the library handles it, verify from the PC side:</p>

<ul class="wp-block-list"><li><strong>Slave ID</strong> in QModMaster must match the ID in the sketch.</li><li><strong>9600 8N1 on both ends</strong> — QModMaster&#8217;s serial options and the sketch&#8217;s baud rate must agree.</li><li><strong>Read one register first.</strong> A single-register read is the smallest possible transaction; get that working before scanning ranges.</li><li><strong>No duplicate slave IDs</strong> on the bus — two devices answering the same ID produces intermittent garbage, not clean timeouts, but rule it out anyway.</li><li><strong>Termination:</strong> 120 Ω across A–B at both bus ends. Missing termination mostly bites on longer runs.</li></ul>

<h2 class="wp-block-heading">The adapter for the PC side</h2>

<p class="wp-block-paragraph"><a href="https://qmodmaster.com/go/usb-rs485" rel="nofollow sponsored">USB-to-RS485 adapter (Amazon)</a> — your PC needs one to join the RS485 bus at all. Pick an FTDI-based adapter; this is the page where a flaky adapter will waste the most of your time, because its symptoms look exactly like the DE/RE problem above.</p>

<h2 class="wp-block-heading">FAQ</h2>

<p class="wp-block-paragraph"><strong>My Arduino Modbus slave works over USB-to-TTL but times out with MAX485. What&#8217;s wrong?</strong><br>The DE/RE direction pins. USB-to-TTL is full-duplex and needs no direction control; RS485 is half-duplex, and if the MAX485 isn&#8217;t held in transmit mode for the whole reply, the response never reaches the bus.</p>

<p class="wp-block-paragraph"><strong>Can I just tie DE high and RE low permanently?</strong><br>No — then the module transmits constantly and can never receive the master&#8217;s request. DE and RE must be tied together to a GPIO and driven HIGH only while transmitting, LOW while receiving.</p>

<p class="wp-block-paragraph"><strong>I fixed DE/RE and still get timeouts. What next?</strong><br>Verify the slave ID matches the sketch, 9600 8N1 on both sides, try swapping A/B once, and confirm the library waits for the UART transmit buffer to drain before dropping DE back to receive. Then try a single-register read in QModMaster.</p>

<h2 class="wp-block-heading">Related Guides</h2>

<ul class="wp-block-list"><li><a href="https://qmodmaster.com/qmodmaster-tutorial/">QModMaster tutorial: your first register read</a></li><li><a href="https://qmodmaster.com/usb-to-rs485-adapter-buying-guide/">USB-to-RS485 adapter buying guide</a></li></ul>

<p class="wp-block-paragraph"><em>The USB-works/MAX485-times-out symptom and the transceiver-control diagnosis come from a real Arduino Forum thread (&#8220;MODBUS Slaves with Arduino&#8221;). Pin choices (D2) and wiring conventions are standard maker practice — adapt to your board and library. qmodmaster.com is an independent community resource for the upstream QModMaster project (LGPLv3) and is not affiliated with Arduino.</em></p>

<script type="application/ld+json">{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"My Arduino Modbus slave works over USB-to-TTL but times out with MAX485. What is wrong?","acceptedAnswer":{"@type":"Answer","text":"The DE/RE direction pins. USB-to-TTL is full-duplex and needs no direction control; RS485 is half-duplex, and if the MAX485 is not held in transmit mode for the whole reply, the response never reaches the bus and QModMaster times out."}},{"@type":"Question","name":"Can I just tie MAX485 DE high and RE low permanently?","acceptedAnswer":{"@type":"Answer","text":"No. Then the module transmits constantly and can never receive the master's request. Tie DE and RE together to a GPIO pin and drive it HIGH only while transmitting, LOW while receiving."}},{"@type":"Question","name":"I fixed DE/RE on my Arduino MAX485 setup and still get timeouts. What next?","acceptedAnswer":{"@type":"Answer","text":"Verify the slave ID matches the sketch, 9600 8N1 on both sides, try swapping A and B once, and confirm the library waits for the UART transmit buffer to drain before dropping DE back to receive. Then try a single-register read in QModMaster."}}]}</script>

<style>.content-container.site-container{max-width:var(--global-content-narrow-width,842px)!important;margin:0 auto!important;padding:56px 24px 72px!important}</style>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Modbus 32-bit Integer Wrong? Word Swap (CDAB) Fix</title>
		<link>https://qmodmaster.com/modbus-32bit-integer-word-swap/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 03:15:59 +0000</pubDate>
				<category><![CDATA[Troubleshooting]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/modbus-32bit-integer-word-swap/</guid>

					<description><![CDATA[Modbus 32-bit Integer Wrong? Word Swap (CDAB) Fix Your energy meter says it exported 1,234 kWh, but QModMaster shows 80,889,344. Or a counter reads fine until it crosses 32,767 and suddenly goes negative. If the raw registers look plausible but the 32-bit value is exactly 65,536× too big (or the sign flips), you are looking...]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">Modbus 32-bit Integer Wrong? Word Swap (CDAB) Fix</h1>



<p class="wp-block-paragraph">Your energy meter says it exported <strong>1,234 kWh</strong>, but QModMaster shows <strong>80,889,344</strong>. Or a counter reads fine until it crosses 32,767 and suddenly goes negative. If the raw registers look plausible but the 32-bit value is exactly <strong>65,536× too big</strong> (or the sign flips), you are looking at a <strong>word-swap</strong> problem: your device sends the two 16-bit words in the opposite order from what your display format expects.</p>



<h2 class="wp-block-heading">ABCD vs CDAB: what &#8220;word order&#8221; means</h2>



<p class="wp-block-paragraph">A 32-bit integer occupies two consecutive 16-bit Modbus registers. Call the register at the lower address the <strong>high word (AB)</strong> and the next one the <strong>low word (CD)</strong>. Two conventions exist:</p>



<ul class="wp-block-list">

<li><strong>Big-endian words (ABCD):</strong> high word first, then low word. This is the Modbus &#8220;default&#8221; most devices and software assume. Value = <code>high × 65536 + low</code>.</li>



<li><strong>Little-endian words (CDAB):</strong> low word first, then high word. Some devices — the Carlo Gavazzi EM24 energy meter is a well-documented example — transmit multi-register values this way.</li>

</ul>



<p class="wp-block-paragraph"><strong>Worked example.</strong> Suppose the true value is <strong>1,234</strong>, stored as high word = 0, low word = 1234:</p>



<ul class="wp-block-list">

<li>Read as ABCD (correct): 0 × 65536 + 1234 = <strong>1,234</strong> ✓</li>



<li>Read as CDAB-interpreted-as-ABCD (wrong): 1234 × 65536 + 0 = <strong>80,889,344</strong> ✗ — exactly 65,536× too large.</li>

</ul>



<p class="wp-block-paragraph">That 65,536× signature is the giveaway. (And if the value only goes wrong past 32,767 — flipping negative — you are likely reading an unsigned 32-bit value as <em>signed</em> INT32, which is the signed/unsigned half of the same family of problems.)</p>



<h2 class="wp-block-heading">Diagnose it in QModMaster (2 minutes)</h2>



<ul class="wp-block-list">

<li><strong>Step 1 — read the raw words.</strong> Set QModMaster&#8217;s View menu to a plain 16-bit format (Hex or INT16) and read the two registers. Write down both words, e.g. <code>0x0000</code> and <code>0x04D2</code>.</li>



<li><strong>Step 2 — switch to 32-bit.</strong> Change the View menu format to <strong>INT32 / unsigned 32-bit</strong> and read the same pair. If the displayed value is ~65,536× your expected value, the words are swapped relative to what the format expects.</li>



<li><strong>Step 3 — verify by swapping.</strong> Reconstruct it by hand: treat the <em>second</em> word as the high word. In the example: high = 0x0000, low = 0x04D2 → 0 × 65536 + 1234 = <strong>1234</strong>. If the hand-swapped value matches your meter&#8217;s display, you have confirmed CDAB word order.</li>



<li><strong>Step 4 — check the manual.</strong> Look for &#8220;word order,&#8221; &#8220;byte order,&#8221; &#8220;little-endian,&#8221; or &#8220;low word first&#8221; in your device&#8217;s Modbus register map. EM24 documentation, for instance, explicitly states little-endian word order for multi-register values.</li>

</ul>



<h2 class="wp-block-heading">The EM24 counter-example (little-endian in the wild)</h2>



<p class="wp-block-paragraph">The Carlo Gavazzi EM24 is the classic trap: most of the Modbus world defaults to big-endian words, but the EM24 transmits multi-register values <strong>low word first</strong>. Community integrations (e.g. ESPHome-based EM24 grid-meter projects) document this explicitly — you must swap the words before interpreting. If your EM24 energy totals are exactly 65,536× off in QModMaster, do not touch your wiring: it is the word order, and the device manual agrees with the &#8220;wrong&#8221; reading.</p>



<h2 class="wp-block-heading">Word swap vs byte swap vs float problems</h2>



<ul class="wp-block-list">

<li><strong>Word swap (this page):</strong> 32-bit <em>integers</em> off by exactly 65,536×, or sign flips. Fix = swap the two 16-bit words.</li>



<li><strong>Byte swap:</strong> 16-bit values that look like garbage (e.g. 0x1234 read as 0x3412). Fix = swap bytes within each word. Different problem, different fix.</li>



<li><strong>Float byte order:</strong> 32-bit <em>floats</em> showing astronomical or garbage values. Same family, but floats have four possible byte orders (ABCD, BADC, CDAB, DCBA) — covered in <a href="/modbus-float-wrong-value-byte-order-fix/">Modbus Float Shows a Wrong Value? Byte-Order Fix</a>.</li>

</ul>



<h2 class="wp-block-heading">FAQ</h2>



<h3 class="wp-block-heading">Why is my Modbus 32-bit value exactly 65536 times too big?</h3>



<p class="wp-block-paragraph">Because the device sends the two 16-bit words low-word-first (CDAB) while your software interprets them high-word-first (ABCD). The low word gets multiplied by 65,536 instead of the high word. Swap the words and the value will be correct.</p>



<h3 class="wp-block-heading">How do I swap words in QModMaster?</h3>



<p class="wp-block-paragraph">Read the two registers in a 16-bit View format (Hex), note both words, then reconstruct the value treating the second word as the high word. Alternatively switch the View format between 32-bit variants and compare against the device&#8217;s own display to identify which interpretation matches.</p>



<h3 class="wp-block-heading">Is the EM24 really little-endian?</h3>



<p class="wp-block-paragraph">Yes — the Carlo Gavazzi EM24 transmits multi-register values low word first, contrary to the Modbus big-endian default. This is documented in the EM24 register documentation and in community integration projects. A 65,536× error on an EM24 is expected behavior, not a fault.</p>


<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[
{"@type":"Question","name":"Why is my Modbus 32-bit integer exactly 65536 times too big?","acceptedAnswer":{"@type":"Answer","text":"The device sends the two 16-bit words low-word-first (CDAB) while the software interprets them high-word-first (ABCD), so the low word is multiplied by 65536. Swapping the words fixes the value."}},
{"@type":"Question","name":"What is CDAB vs ABCD word order in Modbus?","acceptedAnswer":{"@type":"Answer","text":"ABCD (big-endian words) puts the high 16-bit word at the lower register address; CDAB (little-endian words) puts the low word first. The Modbus default is ABCD, but devices like the Carlo Gavazzi EM24 use CDAB."}},
{"@type":"Question","name":"How do I check word order in QModMaster?","acceptedAnswer":{"@type":"Answer","text":"Read the register pair in a 16-bit View format (Hex), note both words, then reconstruct the 32-bit value treating the second word as the high word. If it matches the device display, the device uses CDAB word order."}}
]}
</script>


<h2 class="wp-block-heading">Related Guides</h2>



<ul class="wp-block-list">

<li><a href="/modbus-float-wrong-value-byte-order-fix/">Modbus Float Shows a Wrong Value? Byte-Order Fix</a> — the floating-point sibling of this problem (four byte orders, not two).</li>



<li><a href="/qmodmaster-view-menu-data-format-guide/">QModMaster View Menu: Float/Int/Hex/Binary Explained</a> — which display format to use when.</li>



<li><a href="/modbus-scale-factor-offset-values/">Modbus Values Off by 10x? Scale Factor &amp; Offset</a> — when the value is wrong by 10× instead of 65,536×.</li>



<li><a href="/download/">Download QModMaster</a> — free, open-source (LGPLv3) Modbus master.</li>

</ul>



<p class="wp-block-paragraph"><em>Debugging a meter or inverter? A protocol reference helps: <a href="/go/modbus-book" rel="nofollow">Modbus protocol book</a> covers data encoding in depth.</em></p>


<style>
.content-container.site-container{max-width:var(--global-content-narrow-width,842px)!important;margin:0 auto!important;padding:56px 24px 72px!important}
.related-guides{margin-top:2.5em;border-top:1px solid #e5e5e5;padding-top:1.5em}
</style>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Modbus Polling Too Fast? Slow Slave Overload Fix</title>
		<link>https://qmodmaster.com/modbus-polling-too-fast-slave-overload/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 03:15:58 +0000</pubDate>
				<category><![CDATA[Troubleshooting]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/modbus-polling-too-fast-slave-overload/</guid>

					<description><![CDATA[Modbus Polling Too Fast? Slow Slave Overload Fix Everything works for a while — then the device stops answering, the link drops, and only a restart brings it back. If that pattern sounds familiar, you may not have a wiring problem at all. You may be polling a slow device faster than it can cope...]]></description>
										<content:encoded><![CDATA[<h1 class="wp-block-heading">Modbus Polling Too Fast? Slow Slave Overload Fix</h1>

<p class="wp-block-paragraph">Everything works for a while — then the device stops answering, the link drops, and only a restart brings it back. If that pattern sounds familiar, you may not have a wiring problem at all. You may be <strong>polling a slow device faster than it can cope with</strong>, and it&#8217;s collapsing under the load. This page explains why it happens and how to fix it at the system level.</p>

<p class="wp-block-paragraph">This is the <strong>theory companion</strong> to <a href="/qmodmaster-scan-rate-slow-device/">QModMaster Scan Rate: Fix Timeouts on Slow Devices</a>, which covers the hands-on QModMaster settings (scan control, bus-load estimates, chunking your reads). Read that one to tune the client; read this one to understand the failure — and to fix it permanently.</p>

<h2 class="wp-block-heading">A real case: the Sungrow inverter that dropped its link</h2>

<p class="wp-block-paragraph">This isn&#8217;t hypothetical. The <a href="https://github.com/mkaiser/sungrow-shx-inverter-modbus-home-assistant/blob/HEAD/doc/faq.md" rel="nofollow noopener" target="_blank">Sungrow SHX inverter Home Assistant FAQ</a> documents exactly this failure: the Modbus connection works, then drops after running for a while. The documented fixes are <strong>adding a Modbus proxy</strong> and <strong>reducing the poll frequency</strong> — in other words, the inverter&#8217;s Modbus stack couldn&#8217;t sustain the request rate, and slowing down the interrogation fixed it. The same thread is why a SourceForge user asked QModMaster for a <em>&#8220;Changeable scan rate from 10ms up to minutes&#8221;</em>: aggressive polling is a known device-killer across vendors.</p>

<h2 class="wp-block-heading">Why slow slaves collapse under fast polling</h2>

<ul class="wp-block-list"><li><strong>Modbus is a background task.</strong> On an inverter, meter, or PLC-adjacent controller, the CPU&#8217;s real job is power conversion or metering. The Modbus server gets leftover cycles. Hammer it and responses get slower — which makes the master retry sooner — which makes it worse. It&#8217;s a feedback loop.</li><li><strong>Tiny buffers overflow.</strong> Cheap slaves have small UART buffers. A new request arriving before the old reply finished transmitting overwrites or interleaves data — the device locks up or starts answering with garbage until rebooted.</li><li><strong>Watchdogs bite.</strong> Some devices run a communication watchdog: sustained abnormal traffic patterns trigger a protective reset of the comms stack, which looks exactly like a &#8220;link drop&#8221;.</li><li><strong>Half-duplex collisions.</strong> On RS-485, if the master transmits while the slave is still answering, both frames are destroyed. Faster polling shrinks the safety margin to zero.</li></ul>

<h2 class="wp-block-heading">The fixes, from easiest to most robust</h2>

<p class="wp-block-paragraph"><strong>1. Lower the poll rate.</strong> The obvious one, and the Sungrow FAQ&#8217;s first recommendation. Poll every few seconds instead of several times per second — most process values (temperature, power, energy totals) don&#8217;t change fast enough to justify aggressive polling anyway.</p>

<p class="wp-block-paragraph"><strong>2. Stagger polling across devices.</strong> Don&#8217;t poll all slaves in a tight burst. Spread requests evenly across the cycle so each device gets idle recovery time between its turns.</p>

<p class="wp-block-paragraph"><strong>3. Poll fewer registers.</strong> A 100-register block read keeps a slow slave busy far longer than the wire time suggests — it has to gather every value. Split big blocks; skip registers you don&#8217;t actually use.</p>

<p class="wp-block-paragraph"><strong>4. Add a Modbus proxy.</strong> The Sungrow FAQ&#8217;s structural fix: one proxy polls the fragile device at a gentle, fixed rate and caches the results; QModMaster, Home Assistant, and your SCADA all read from the proxy&#8217;s cache as fast as they like. The slow device sees exactly one polite client. This is the correct architecture once more than one master needs the same data.</p>

<p class="wp-block-paragraph"><strong>5. Separate fast and slow devices.</strong> If one sluggish inverter shares a bus with snappy sensors, give the slow device its own poll loop (or its own bus segment) so it never holds up — or gets trampled by — the fast traffic.</p>

<div class="rm-faq">
<h2 class="wp-block-heading">Frequently asked questions</h2>

<h3 class="wp-block-heading">How do I know polling is too fast versus a wiring problem?</h3>
<p class="wp-block-paragraph">Wiring problems usually fail immediately and consistently. Polling overload fails <em>after running fine for a while</em>, gets worse the more clients poll, and disappears when you slow down or poll a single device. That &#8220;works, then drops&#8221; signature is the giveaway.</p>

<h3 class="wp-block-heading">What is a Modbus proxy and when do I need one?</h3>
<p class="wp-block-paragraph">A proxy is a single Modbus client that polls the fragile device at a gentle fixed rate and serves cached values to everyone else. You need one when multiple masters (QModMaster + Home Assistant + logging) poll the same slow device, or when no single poll rate satisfies both the device and your dashboards.</p>

<h3 class="wp-block-heading">Will lowering the baud rate help?</h3>
<p class="wp-block-paragraph">Sometimes, indirectly: slower wire speed spaces requests out, giving the slave more breathing room. But it also lengthens each transaction. The reliable fix is fewer requests per second (and a proxy for multi-client setups), not just slower bits.</p>
</div>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"How do I know polling is too fast versus a wiring problem?","acceptedAnswer":{"@type":"Answer","text":"Wiring problems usually fail immediately and consistently. Polling overload fails after running fine for a while, gets worse the more clients poll, and disappears when you slow down or poll a single device. That 'works, then drops' signature is the giveaway."}},{"@type":"Question","name":"What is a Modbus proxy and when do I need one?","acceptedAnswer":{"@type":"Answer","text":"A proxy is a single Modbus client that polls the fragile device at a gentle fixed rate and serves cached values to everyone else. You need one when multiple masters (QModMaster + Home Assistant + logging) poll the same slow device, or when no single poll rate satisfies both the device and your dashboards."}},{"@type":"Question","name":"Will lowering the baud rate help?","acceptedAnswer":{"@type":"Answer","text":"Sometimes, indirectly: slower wire speed spaces requests out, giving the slave more breathing room. But it also lengthens each transaction. The reliable fix is fewer requests per second (and a proxy for multi-client setups), not just slower bits."}}]}
</script>

<div class="related-guides">
<h2 class="wp-block-heading">Related guides</h2>
<ul class="wp-block-list"><li><a href="/qmodmaster-scan-rate-slow-device/">QModMaster Scan Rate: Fix Timeouts on Slow Devices</a> (the hands-on companion)</li><li><a href="/qmodmaster-tutorial/">QModMaster Tutorial: First Read in 10 Minutes</a></li><li><a href="/qmodmaster-rtu-over-tcp-explained/">QModMaster RTU-over-TCP Explained</a></li><li><a href="/download/">Download QModMaster (LGPLv3, free)</a></li></ul>
</div>

<style>
.content-container.site-container{max-width:var(--global-content-narrow-width,842px)!important;margin:0 auto!important;padding:56px 24px 72px!important}
.rm-cta{background:#f6f8fb;border:1px solid #e2e8f0;border-left:4px solid #1a73e8;border-radius:8px;padding:18px 22px;margin:28px 0}
.rm-faq{margin:36px 0}
.rm-faq h3{font-size:1.05rem;margin:18px 0 6px}
.related-guides{background:#fafbfc;border:1px solid #e2e8f0;border-radius:8px;padding:20px 24px;margin:36px 0}
.related-guides ul{margin:8px 0 0 20px}
</style>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Duplicate Modbus Slave IDs: Find Bus Collisions</title>
		<link>https://qmodmaster.com/modbus-duplicate-slave-id-collision/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 03:15:50 +0000</pubDate>
				<category><![CDATA[Troubleshooting]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/modbus-duplicate-slave-id-collision/</guid>

					<description><![CDATA[Duplicate Modbus Slave IDs: Find Bus Collisions Your bus works fine most of the time — then readings jump, CRC errors appear out of nowhere, and one device only misbehaves when another is powered on. Before you blame the cable, check the simplest cause with the weirdest symptoms: two devices on the same bus configured...]]></description>
										<content:encoded><![CDATA[<h1 class="wp-block-heading">Duplicate Modbus Slave IDs: Find Bus Collisions</h1>

<p class="wp-block-paragraph">Your bus works fine most of the time — then readings jump, CRC errors appear out of nowhere, and one device only misbehaves when another is powered on. Before you blame the cable, check the simplest cause with the weirdest symptoms: <strong>two devices on the same bus configured with the same slave ID</strong>. Both answer the same request, their replies collide on the wire, and you get garbage that looks like everything except an addressing mistake.</p>

<h2 class="wp-block-heading">Symptoms of a slave ID collision</h2>

<ul class="wp-block-list"><li><strong>Intermittent CRC errors</strong> — sometimes the read is clean, sometimes it fails, with no pattern. Two overlapping replies corrupt each other&#8217;s frames.</li><li><strong>Readings that jump between two values</strong> — whichever device&#8217;s reply wins the collision this time decides what you see.</li><li><strong>Works with one device disconnected.</strong> The single most diagnostic symptom: unplug device B and device A is suddenly rock solid.</li><li><strong>Wrong device responds.</strong> You poll ID 5 expecting the energy meter and get the temperature sensor&#8217;s registers — because both are ID 5.</li></ul>

<p class="wp-block-paragraph">Duplicate responses causing bus collisions are a documented classic in Modbus troubleshooting write-ups (e.g. IoTStudioz&#8217;s 2025 field notes list duplicate IDs among the top causes of &#8220;mystery&#8221; CRC errors). The insidious part is that a single-device test always passes — the collision only exists when both twins are on the bus.</p>

<h2 class="wp-block-heading">How to find the duplicate</h2>

<p class="wp-block-paragraph"><strong>Method 1 — disconnect one by one (small buses).</strong> Power down everything. Bring devices up one at a time, polling each from QModMaster as you go. The moment the errors start, the last device you added shares its ID with one already on the bus.</p>

<p class="wp-block-paragraph"><strong>Method 2 — binary search (large buses).</strong> Split the bus in half (disconnect the middle). If the errors persist, the duplicate pair is in the connected half; if they stop, it&#8217;s in the disconnected half. Repeat until two devices remain.</p>

<p class="wp-block-paragraph"><strong>Method 3 — watch the bus monitor.</strong> QModMaster&#8217;s <strong>Bus Monitor</strong> shows raw traffic. Poll the suspect ID once: if you see two replies (or one reply with doubled/corrupted bytes), you&#8217;ve caught the twins red-handed.</p>

<p class="wp-block-paragraph">Once found, change one device&#8217;s address — via DIP switches, its configuration menu, or vendor software — then <strong>power-cycle it</strong> (many devices only read their address at boot). Re-poll from QModMaster to confirm each ID now answers exactly once.</p>

<h2 class="wp-block-heading">Prevent it: plan the ID table before power-up</h2>

<ul class="wp-block-list"><li>Write down every device and its slave ID <strong>before</strong> wiring — a simple table on paper beats debugging later.</li><li>Don&#8217;t trust factory defaults: many devices ship as <strong>ID 1</strong>. Two &#8220;fresh out of the box&#8221; devices on one bus are already a collision.</li><li>Label each device with its ID (tape + marker is fine).</li><li>Reserve a block per device type (e.g. meters 1–9, inverters 11–19) so future additions don&#8217;t collide.</li><li>After any change, do a full-bus poll from QModMaster and confirm every ID responds exactly once.</li></ul>

<div class="rm-faq">
<h2 class="wp-block-heading">Frequently asked questions</h2>

<h3 class="wp-block-heading">Can two Modbus devices share one slave ID?</h3>
<p class="wp-block-paragraph">No — never intentionally. Both devices answer the same request, their replies collide on the RS-485 bus, and the master receives corrupted frames: intermittent CRC errors and jumping readings.</p>

<h3 class="wp-block-heading">Why do the errors come and go instead of failing constantly?</h3>
<p class="wp-block-paragraph">Because it&#8217;s a race: the two replies overlap differently each time depending on tiny timing differences. Sometimes one reply wins cleanly (read looks fine), sometimes they garble each other (CRC error).</p>

<h3 class="wp-block-heading">How do I change a duplicate slave ID?</h3>
<p class="wp-block-paragraph">Via the device&#8217;s DIP switches, onboard menu, or vendor configuration software — then power-cycle the device, since most only read their address at boot. Verify from QModMaster that the old ID is silent and the new ID answers.</p>
</div>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Can two Modbus devices share one slave ID?","acceptedAnswer":{"@type":"Answer","text":"No — never intentionally. Both devices answer the same request, their replies collide on the RS-485 bus, and the master receives corrupted frames: intermittent CRC errors and jumping readings."}},{"@type":"Question","name":"Why do the errors come and go instead of failing constantly?","acceptedAnswer":{"@type":"Answer","text":"Because it's a race: the two replies overlap differently each time depending on tiny timing differences. Sometimes one reply wins cleanly (read looks fine), sometimes they garble each other (CRC error)."}},{"@type":"Question","name":"How do I change a duplicate slave ID?","acceptedAnswer":{"@type":"Answer","text":"Via the device's DIP switches, onboard menu, or vendor configuration software — then power-cycle the device, since most only read their address at boot. Verify from QModMaster that the old ID is silent and the new ID answers."}}]}
</script>

<div class="related-guides">
<h2 class="wp-block-heading">Related guides</h2>
<ul class="wp-block-list"><li><a href="/qmodmaster-tutorial/">QModMaster Tutorial: First Read in 10 Minutes</a></li><li><a href="/qmodmaster-scan-rate-slow-device/">QModMaster Scan Rate: Fix Timeouts on Slow Devices</a></li><li><a href="/download/">Download QModMaster (LGPLv3, free)</a></li></ul>
</div>

<style>
.content-container.site-container{max-width:var(--global-content-narrow-width,842px)!important;margin:0 auto!important;padding:56px 24px 72px!important}
.rm-cta{background:#f6f8fb;border:1px solid #e2e8f0;border-left:4px solid #1a73e8;border-radius:8px;padding:18px 22px;margin:28px 0}
.rm-faq{margin:36px 0}
.rm-faq h3{font-size:1.05rem;margin:18px 0 6px}
.related-guides{background:#fafbfc;border:1px solid #e2e8f0;border-radius:8px;padding:20px 24px;margin:36px 0}
.related-guides ul{margin:8px 0 0 20px}
</style>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>QModMaster Blurry on High-DPI Displays? Fixes</title>
		<link>https://qmodmaster.com/qmodmaster-high-dpi-blurry/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 03:15:42 +0000</pubDate>
				<category><![CDATA[Troubleshooting]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/qmodmaster-high-dpi-blurry/</guid>

					<description><![CDATA[QModMaster Blurry on High-DPI Displays? Fixes If QModMaster looks fine on an old 1080p monitor but turns into a blurry, cramped mess on your 4K laptop screen, you are not alone. A SourceForge reviewer put it bluntly: &#8220;Windows GUI is unusable on a high-dpi display… controls are scaled properly but positioned with hardcoded pixel counts.&#8221;...]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">QModMaster Blurry on High-DPI Displays? Fixes</h1>



<p class="wp-block-paragraph">If QModMaster looks fine on an old 1080p monitor but turns into a blurry, cramped mess on your 4K laptop screen, you are not alone. A SourceForge reviewer put it bluntly: <em>&#8220;Windows GUI is unusable on a high-dpi display… controls are scaled properly but positioned with hardcoded pixel counts.&#8221;</em> QModMaster is built on the older Qt5 toolkit, and this class of high-DPI problem is common to Qt5-era desktop apps. The good news: Windows gives you several per-app levers that usually make it usable again.</p>



<p class="wp-block-paragraph"><strong>Honest expectation up front:</strong> the fixes below <em>mitigate</em> the problem — they do not guarantee a pixel-perfect UI. QModMaster is a community-maintained open-source project (LGPLv3, built on libmodbus and Qt), and as far as publicly documented releases go, no version has been announced with a rewritten high-DPI layout. If you came here hoping for an &#8220;official fix in version X,&#8221; that does not exist — what exists are workarounds, ranked below from most to least effective.</p>



<h2 class="wp-block-heading">Why it happens</h2>



<p class="wp-block-paragraph">Qt5 applications ask Windows how much to scale text and controls, but some dialog layouts inside QModMaster position widgets with fixed pixel coordinates. When Windows applies 150% or 200% display scaling, the text grows but the boxes it sits in do not — labels overlap buttons, the register table squeezes into a corner, and everything renders through a blurry bitmap-scale fallback. The ugliness is worst when:</p>



<ul class="wp-block-list">

<li>Windows display scaling is set above 100% (125%, 150%, 175%, 200%).</li>



<li>You use <strong>multiple monitors with different scaling</strong> (e.g. a 4K laptop at 200% plus an external 1080p monitor at 100%). Dragging the window across screens can re-trigger the bad layout.</li>



<li>You run QModMaster over <strong>Remote Desktop</strong>, where the remote session&#8217;s DPI rarely matches your local screen.</li>

</ul>



<h2 class="wp-block-heading">Fix 1: Override the high-DPI scaling behavior (most reliable)</h2>



<p class="wp-block-paragraph">This is the single most effective workaround, and it works per-application so it will not change how the rest of your system looks:</p>



<ul class="wp-block-list">

<li>Find <code>QModMaster.exe</code> in File Explorer, right-click it, and choose <strong>Properties</strong>.</li>



<li>Open the <strong>Compatibility</strong> tab and click <strong>Change high DPI settings</strong>.</li>



<li>Check <strong>&#8220;Override high DPI scaling behavior&#8221;</strong> and try the two modes in order:
<ul>
<li><strong>System (Enhanced)</strong> — Windows scales the app&#8217;s text crisply using its own renderer. This usually gives the sharpest result for Qt5 apps.</li>
<li><strong>System</strong> — Windows bitmap-scales the whole window. It may look slightly soft, but layouts stop overlapping.</li>
</ul>
</li>



<li>Click OK, restart QModMaster, and re-check the dialogs that were broken (Modbus settings, register table, Bus Monitor).</li>

</ul>



<p class="wp-block-paragraph">There is no universally &#8220;best&#8221; choice between the two — it depends on your GPU driver and Windows build. Try <em>System (Enhanced)</em> first; if dialogs still misbehave, fall back to <em>System</em>.</p>



<h2 class="wp-block-heading">Fix 2: Match the monitor setup</h2>



<p class="wp-block-paragraph">If you run a mixed-DPI desk (e.g. laptop 200% + external monitor 100%):</p>



<ul class="wp-block-list">

<li>Keep QModMaster on <strong>one</strong> monitor and do not drag it across screens mid-session. The bad layout is typically re-triggered on monitor switches.</li>



<li>As a test, temporarily set the monitor you work on to <strong>100% scaling</strong> (Settings → System → Display). If QModMaster snaps back to normal, you have confirmed this is purely a scaling issue and not a corrupted install.</li>



<li>On Remote Desktop, set the remote session to the same scaling as your local display before connecting.</li>

</ul>



<h2 class="wp-block-heading">Fix 3: Lower the resolution you ask of the app</h2>



<p class="wp-block-paragraph">If the override in Fix 1 does not help on your machine, a blunt but effective option is to run your display at its <strong>native 100% scaling with a lower resolution</strong> while debugging Modbus (you can switch back afterwards). QModMaster is a troubleshooting tool you open for minutes at a time — a slightly chunkier desktop for one session is a fair trade for readable registers.</p>



<h2 class="wp-block-heading">What NOT to expect</h2>



<ul class="wp-block-list">

<li>No registry hack or manifest edit is required — the Compatibility-tab override is the supported path.</li>



<li>Do not expect font-size settings inside QModMaster to fix layout overlaps; the app has no built-in DPI controls.</li>



<li>If someone on a forum claims &#8220;version X fixed high-DPI,&#8221; treat it as unverified unless the <a href="https://sourceforge.net/projects/qmodmaster/" rel="nofollow noopener" target="_blank">upstream project&#8217;s SourceForge page</a> release notes say so.</li>

</ul>



<h2 class="wp-block-heading">FAQ</h2>



<h3 class="wp-block-heading">Why is QModMaster blurry only on my 4K monitor?</h3>



<p class="wp-block-paragraph">Because Windows applies display scaling (150–200%) on high-resolution screens, and QModMaster&#8217;s Qt5-era layouts position some controls with fixed pixel coordinates. Text scales, boxes don&#8217;t — the result is overlapping, blurry widgets.</p>



<h3 class="wp-block-heading">Which &#8220;Override high DPI scaling&#8221; mode should I pick?</h3>



<p class="wp-block-paragraph">Start with <strong>System (Enhanced)</strong> for the sharpest text. If dialogs still overlap or crash into each other, switch to <strong>System</strong>, which bitmap-scales the whole window and is the most layout-safe option.</p>



<h3 class="wp-block-heading">Does this affect my Modbus data or readings?</h3>



<p class="wp-block-paragraph">No. High-DPI scaling is purely cosmetic — it changes how the window is drawn, never the bytes on the wire. Your register values, timeouts, and bus traffic are unaffected.</p>



<h3 class="wp-block-heading">Is there an official fixed version?</h3>



<p class="wp-block-paragraph">Not that has been publicly announced. QModMaster is community-maintained open source (LGPLv3); the workarounds on this page are the current practical answer.</p>


<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[
{"@type":"Question","name":"Why is QModMaster blurry on a high-DPI display?","acceptedAnswer":{"@type":"Answer","text":"QModMaster is built on the older Qt5 toolkit. When Windows applies display scaling (125-200%) on high-resolution screens, text scales but some dialog controls are positioned with fixed pixel coordinates, causing overlapping and blurry widgets."}},
{"@type":"Question","name":"How do I fix QModMaster blurry text on Windows?","acceptedAnswer":{"@type":"Answer","text":"Right-click QModMaster.exe, open Properties > Compatibility > Change high DPI settings, check 'Override high DPI scaling behavior', and try 'System (Enhanced)' first, then 'System' if layouts still overlap."}},
{"@type":"Question","name":"Does high-DPI scaling affect Modbus readings in QModMaster?","acceptedAnswer":{"@type":"Answer","text":"No. Display scaling is purely cosmetic and never changes the bytes on the wire, register values, timeouts, or bus traffic."}}
]}
</script>


<h2 class="wp-block-heading">Related Guides</h2>



<ul class="wp-block-list">

<li><a href="/download/">Download QModMaster</a> — get the latest Windows build.</li>



<li><a href="/qmodmaster-view-menu-data-format-guide/">QModMaster View Menu: Float/Int/Hex/Binary Explained</a> — once the UI is readable, make sure your values are too.</li>



<li><a href="/modbus-float-wrong-value-byte-order-fix/">Modbus Float Shows a Wrong Value? Byte-Order Fix</a> — the other classic &#8220;the numbers look broken&#8221; problem.</li>

</ul>


<style>
.content-container.site-container{max-width:var(--global-content-narrow-width,842px)!important;margin:0 auto!important;padding:56px 24px 72px!important}
.faq-qa h3{margin-top:1.6em}
.related-guides{margin-top:2.5em;border-top:1px solid #e5e5e5;padding-top:1.5em}
</style>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>QModMaster Scan Rate: Fix Timeouts on Slow Devices</title>
		<link>https://qmodmaster.com/qmodmaster-scan-rate-slow-device/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 03:15:34 +0000</pubDate>
				<category><![CDATA[Troubleshooting]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/qmodmaster-scan-rate-slow-device/</guid>

					<description><![CDATA[QModMaster Scan Rate: Fix Timeouts on Slow Devices Your device answers every manual read in QModMaster, but the moment you enable Scan mode — continuous polling — it starts timing out, drops off the bus, or needs a power cycle to come back. The device isn&#8217;t broken. You&#8217;re just asking it questions faster than it...]]></description>
										<content:encoded><![CDATA[<h1 class="wp-block-heading">QModMaster Scan Rate: Fix Timeouts on Slow Devices</h1>

<p class="wp-block-paragraph">Your device answers every manual read in QModMaster, but the moment you enable <strong>Scan mode</strong> — continuous polling — it starts timing out, drops off the bus, or needs a power cycle to come back. The device isn&#8217;t broken. You&#8217;re just asking it questions faster than it can answer. This guide covers where the scan control lives in QModMaster, what &#8220;slave response time&#8221; actually means, and how to estimate whether your RS-485 bus is overloaded.</p>

<p class="wp-block-paragraph">This is the <strong>practical, QModMaster-settings companion</strong> to our deeper dive <a href="/modbus-polling-too-fast-slave-overload/">Modbus Polling Too Fast? Slow Slave Overload Fix</a>, which explains the physics of why slow devices collapse under fast polling (with a real Sungrow inverter case).</p>

<h2 class="wp-block-heading">Where the scan control lives in QModMaster</h2>

<p class="wp-block-paragraph">In the QModMaster main window, the <strong>Scan</strong> checkbox (near the read controls) switches from single-shot reads to continuous polling — QModMaster re-issues your read request over and over, updating the values live. That&#8217;s the feature timing out your slow device.</p>

<p class="wp-block-paragraph">An honest caveat before you go hunting for a dial: QModMaster&#8217;s built-in scan control is basic, and users have been asking for more. A SourceForge feature request literally asks for a <em>&#8220;Changeable scan rate from 10ms up to minutes&#8221;</em> — because the stock behavior can be too aggressive for slow hardware. If you can&#8217;t slow the scan enough inside QModMaster, the workarounds below are the real fix, not a different checkbox.</p>

<h2 class="wp-block-heading">Understand slave response time</h2>

<p class="wp-block-paragraph">Every Modbus slave needs a moment between receiving your request and having an answer ready. Cheap microcontrollers, solar inverters, and energy meters often need <strong>tens to hundreds of milliseconds</strong> to service a Modbus request — they&#8217;re busy running their actual job (inverting power, metering energy) and Modbus is a background task.</p>

<p class="wp-block-paragraph">If QModMaster fires the next request before the slave finished the previous one, three bad things happen: the slave <strong>ignores the new request</strong> (timeout on your side), it <strong>answers late</strong> and the reply collides with your next request (CRC errors), or its tiny receive buffer <strong>overflows</strong> and the device locks up until rebooted. All three look like &#8220;the device is flaky&#8221; when the real problem is your poll rate.</p>

<h2 class="wp-block-heading">Rough RS-485 bus load estimate</h2>

<p class="wp-block-paragraph">You don&#8217;t need lab equipment to sanity-check your bus — a back-of-the-envelope estimate is enough to see if you&#8217;re asking the impossible. The rough math:</p>

<ul class="wp-block-list"><li>Every serial byte costs <strong>10 bits on the wire</strong> (8 data bits + start + stop, at 8N1).</li><li>A Modbus RTU request for N registers is about <strong>8 bytes</strong>; the response is about <strong>5 + 2×N bytes</strong>.</li><li>Wire time per poll ≈ <strong>(request bytes + response bytes) × 10 ÷ baud rate</strong>, plus the slave&#8217;s response time, plus the mandatory 3.5-character silent gap between frames.</li><li>Multiply by your <strong>number of slaves</strong> to get the minimum time for one full scan cycle.</li></ul>

<p class="wp-block-paragraph">Example of the shape of the problem (do your own numbers for your setup): five slaves, 20 registers each, at 9600 baud, with each slave taking 100 ms to respond — the wire time alone is well over half a second per cycle, and with response times it&#8217;s closer to a full second. If your scan is set (or defaults) to something much faster than that, you&#8217;re permanently behind: requests pile up, collide, and time out. <strong>Rule of thumb: your scan interval must be longer than one full cycle through every slave, with margin.</strong></p>

<h2 class="wp-block-heading">Practical fixes in QModMaster</h2>

<ul class="wp-block-list"><li><strong>Turn Scan mode off</strong> and poll manually while debugging — confirm the device is healthy before blaming the poll rate.</li><li><strong>Read fewer registers per poll.</strong> Two small reads that succeed beat one big read that times out. Split a 50-register block into chunks.</li><li><strong>Poll fewer slaves per cycle</strong>, or poll the slow device less often than the fast ones (stagger them).</li><li><strong>Slow the baud rate down</strong> if the line is long or noisy — counterintuitively, a slower, clean bus beats a fast, error-prone one.</li><li><strong>Check the hardware first.</strong> Timeouts that look like &#8220;slow device&#8221; are often a marginal RS-485 adapter. Rule out the cable before redesigning your poll strategy — see our <a href="/go/usb-rs485/" rel="nofollow sponsored">USB-to-RS485 adapter notes</a>.</li><li>For a permanent multi-client setup, put a <strong>Modbus proxy</strong> between QModMaster and the bus (covered in the <a href="/modbus-polling-too-fast-slave-overload/">companion theory page</a>).</li></ul>

<div class="rm-faq">
<h2 class="wp-block-heading">Frequently asked questions</h2>

<h3 class="wp-block-heading">Why does my device work with manual reads but fail in Scan mode?</h3>
<p class="wp-block-paragraph">Manual reads give the slave unlimited idle time between requests. Scan mode polls back-to-back; if the device&#8217;s response time is longer than the gap between polls, requests collide or get ignored, producing timeouts.</p>

<h3 class="wp-block-heading">Can I change the scan rate in QModMaster?</h3>
<p class="wp-block-paragraph">QModMaster&#8217;s built-in scan control is limited — users have requested a configurable range (10 ms to minutes) on SourceForge. If the stock scan is too fast for your device, use the workarounds above: fewer registers, staggered polling, or a Modbus proxy.</p>

<h3 class="wp-block-heading">How do I know if my bus is overloaded?</h3>
<p class="wp-block-paragraph">Estimate one full poll cycle (wire time + slave response time × number of slaves). If your scan interval is shorter than that cycle, the bus is overloaded. Symptoms: timeouts that vanish when you poll a single slave or read fewer registers.</p>
</div>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Why does my device work with manual reads but fail in Scan mode?","acceptedAnswer":{"@type":"Answer","text":"Manual reads give the slave unlimited idle time between requests. Scan mode polls back-to-back; if the device's response time is longer than the gap between polls, requests collide or get ignored, producing timeouts."}},{"@type":"Question","name":"Can I change the scan rate in QModMaster?","acceptedAnswer":{"@type":"Answer","text":"QModMaster's built-in scan control is limited — users have requested a configurable range (10 ms to minutes) on SourceForge. If the stock scan is too fast for your device, use fewer registers, staggered polling, or a Modbus proxy."}},{"@type":"Question","name":"How do I know if my bus is overloaded?","acceptedAnswer":{"@type":"Answer","text":"Estimate one full poll cycle (wire time + slave response time × number of slaves). If your scan interval is shorter than that cycle, the bus is overloaded. Symptoms: timeouts that vanish when you poll a single slave or read fewer registers."}}]}
</script>

<div class="related-guides">
<h2 class="wp-block-heading">Related guides</h2>
<ul class="wp-block-list"><li><a href="/modbus-polling-too-fast-slave-overload/">Modbus Polling Too Fast? Slow Slave Overload Fix</a> (the theory version)</li><li><a href="/qmodmaster-tutorial/">QModMaster Tutorial: First Read in 10 Minutes</a></li><li><a href="/qmodmaster-rtu-over-tcp-explained/">QModMaster RTU-over-TCP Explained</a></li><li><a href="/download/">Download QModMaster (LGPLv3, free)</a></li></ul>
</div>

<style>
.content-container.site-container{max-width:var(--global-content-narrow-width,842px)!important;margin:0 auto!important;padding:56px 24px 72px!important}
.rm-cta{background:#f6f8fb;border:1px solid #e2e8f0;border-left:4px solid #1a73e8;border-radius:8px;padding:18px 22px;margin:28px 0}
.rm-faq{margin:36px 0}
.rm-faq h3{font-size:1.05rem;margin:18px 0 6px}
.related-guides{background:#fafbfc;border:1px solid #e2e8f0;border-radius:8px;padding:20px 24px;margin:36px 0}
.related-guides ul{margin:8px 0 0 20px}
</style>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>QModMaster via Modbus TCP Gateway: Multiple Slaves Unit ID Guide</title>
		<link>https://qmodmaster.com/qmodmaster-tcp-gateway-multiple-slaves/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 03:15:26 +0000</pubDate>
				<category><![CDATA[Troubleshooting]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/qmodmaster-tcp-gateway-multiple-slaves/</guid>

					<description><![CDATA[QModMaster via Modbus TCP Gateway: Multiple Slaves Unit ID Guide Your Modbus TCP gateway answers on its IP address, QModMaster reads slave 1 just fine, but slaves 2, 3 and 4 all time out. Or worse — every slave you query returns slave 1&#8217;s data. This is the single most common gateway problem in the...]]></description>
										<content:encoded><![CDATA[<h1 class="wp-block-heading">QModMaster via Modbus TCP Gateway: Multiple Slaves Unit ID Guide</h1>

<p class="wp-block-paragraph">Your Modbus TCP gateway answers on its IP address, QModMaster reads slave 1 just fine, but slaves 2, 3 and 4 all time out. Or worse — every slave you query returns slave 1&#8217;s data. This is the single most common gateway problem in the Modbus world, and it comes down to one byte in the TCP frame: the <strong>Unit ID</strong>.</p>

<p class="wp-block-paragraph">Real-world evidence this is a live problem: a SourceForge review of QModMaster states it plainly — <em>&#8220;TCP messages do not include the slave address, so this cannot work with modbus TCP gateway that had several slaves attached.&#8221;</em> The review is half right: Modbus TCP frames do carry a slave address, but in a different place than RTU users expect. Once you know where it lives, the fix is usually a one-field change in QModMaster.</p>

<h2 class="wp-block-heading">Where the slave address hides in Modbus TCP: the MBAP Unit ID</h2>

<p class="wp-block-paragraph">In Modbus RTU, the slave address is the <strong>first byte of the serial frame</strong> — every device on the RS-485 bus sees every frame and only the addressed one answers. In Modbus TCP, the serial frame is wrapped in a 7-byte <strong>MBAP header</strong> (Modbus Application Protocol header):</p>

<p class="wp-block-paragraph"><code>Transaction ID (2 bytes) | Protocol ID (2 bytes) | Length (2 bytes) | Unit ID (1 byte)</code></p>

<p class="wp-block-paragraph">That final <strong>Unit ID byte is the Modbus TCP equivalent of the RTU slave address</strong>. A gateway sitting between your Ethernet network and the RS-485 bus reads the Unit ID from each incoming TCP request, rebuilds an RTU frame addressed to that slave number, waits for the reply, wraps it back in an MBAP header, and sends it to you. The whole multi-slave trick lives or dies on this one byte.</p>

<h2 class="wp-block-heading">Setting the Slave ID in QModMaster (TCP mode)</h2>

<p class="wp-block-paragraph">QModMaster&#8217;s TCP connection mode has a <strong>Slave ID</strong> field in the connection dialog. In TCP mode this field is written into the MBAP Unit ID byte — it is the exact same setting RTU users know, just transported differently. To poll several slaves through one gateway:</p>

<ul class="wp-block-list"><li>Connect QModMaster in <strong>TCP mode</strong> to the gateway&#8217;s IP address and port (usually 502).</li><li>Set <strong>Slave ID = 1</strong> and read your registers. Confirm the first slave responds.</li><li>Duplicate your register list (or your QModMaster session setup) with <strong>Slave ID = 2, 3, 4…</strong> — one Unit ID per physical slave on the RS-485 side.</li><li>Make sure the Unit IDs match the <strong>slave addresses configured on the devices themselves</strong> (DIP switches, device menus, or vendor software), not the order you plugged them in.</li></ul>

<p class="wp-block-paragraph">If slave 1 reads and the others time out even though you&#8217;re sure the Unit IDs are right, the gateway — not QModMaster — is almost always the culprit. Read on.</p>

<h2 class="wp-block-heading">The common pitfall: gateways that only forward Unit ID 1</h2>

<p class="wp-block-paragraph">Not all gateways forward the Unit ID faithfully. The most reported failure mode:</p>

<ul class="wp-block-list"><li><strong>The gateway ignores the MBAP Unit ID</strong> and always talks to the RTU slave wired as address 1 (or to a fixed, pre-configured address). Result: Unit ID 2/3/4 time out, or — sneakier — every Unit ID returns slave 1&#8217;s data.</li><li><strong>The gateway has a &#8220;unit ID mapping&#8221; table</strong> in its web interface that must be filled in: which incoming TCP Unit ID maps to which RTU slave address. If the table is empty or only has row 1, the other slaves are unreachable no matter what QModMaster sends.</li><li><strong>The gateway is in transparent/bridge mode</strong> instead of protocol-conversion mode. In transparent mode the gateway is a dumb pipe — there is no MBAP parsing at all. (See our <a href="/waveshare-gateway-tcp-vs-transparent-mode/">Waveshare gateway modes guide</a> for how the two modes differ and what QModMaster supports.)</li></ul>

<p class="wp-block-paragraph">Fix order: (1) open the gateway&#8217;s web UI and look for &#8220;Modbus gateway&#8221;, &#8220;unit mapping&#8221;, &#8220;slave mapping&#8221; or &#8220;protocol conversion&#8221; settings; (2) confirm the gateway is in <strong>Modbus TCP ↔ RTU conversion mode</strong> (not transparent); (3) verify each Unit ID maps to the correct RTU slave address; (4) re-test from QModMaster with Slave ID set per device. Also confirm all slaves share the same serial settings (baud rate, parity, data bits) — the gateway talks to every one of them on the same RS-485 line.</p>

<div class="rm-cta">
<p class="wp-block-paragraph"><strong>Shopping for a gateway?</strong> If your current box can&#8217;t do per-Unit-ID forwarding, a proper Modbus TCP ↔ RTU gateway with a mapping table is the fix — see current options via our <a href="/go/rs485-gateway/" rel="nofollow sponsored">RS-485 gateway picks</a>.</p>
</div>

<h2 class="wp-block-heading">Quick troubleshooting checklist</h2>

<ul class="wp-block-list"><li>Ping the gateway IP — is the Ethernet side even reachable?</li><li>Slave ID 1 reads OK? Then QModMaster&#8217;s TCP setup is fine; the problem is Unit ID forwarding.</li><li>All Unit IDs return <em>the same</em> data? The gateway is pinning everything to one RTU address.</li><li>Some slaves read, others time out? Check DIP-switch addresses on the silent devices, and the gateway&#8217;s mapping table.</li><li>Nothing reads? Verify the gateway&#8217;s serial settings match the slaves (one mismatched baud rate silences the whole bus), and check A/B wiring.</li></ul>

<div class="rm-faq">
<h2 class="wp-block-heading">Frequently asked questions</h2>

<h3 class="wp-block-heading">Why does QModMaster only reach slave 1 through my gateway?</h3>
<p class="wp-block-paragraph">Because the gateway isn&#8217;t forwarding the MBAP Unit ID byte to the RS-485 side. QModMaster sends the right Unit ID, but the gateway talks to a fixed RTU address (often 1) regardless. Check the gateway&#8217;s unit-ID/slave mapping settings.</p>

<h3 class="wp-block-heading">Does Modbus TCP even have slave addresses?</h3>
<p class="wp-block-paragraph">Yes — the last byte of the 7-byte MBAP header is the Unit Identifier, the TCP equivalent of the RTU slave address. Gateways use it to route requests to the right device on the serial bus.</p>

<h3 class="wp-block-heading">How do I know which Unit ID maps to which device?</h3>
<p class="wp-block-paragraph">Match the Unit ID to the slave address set on each physical device (DIP switches or device config). If the gateway has a mapping table, each row should pair one incoming Unit ID with one RTU slave address.</p>
</div>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Why does QModMaster only reach slave 1 through my gateway?","acceptedAnswer":{"@type":"Answer","text":"Because the gateway isn't forwarding the MBAP Unit ID byte to the RS-485 side. QModMaster sends the right Unit ID, but the gateway talks to a fixed RTU address (often 1) regardless. Check the gateway's unit-ID/slave mapping settings."}},{"@type":"Question","name":"Does Modbus TCP even have slave addresses?","acceptedAnswer":{"@type":"Answer","text":"Yes — the last byte of the 7-byte MBAP header is the Unit Identifier, the TCP equivalent of the RTU slave address. Gateways use it to route requests to the right device on the serial bus."}},{"@type":"Question","name":"How do I know which Unit ID maps to which device?","acceptedAnswer":{"@type":"Answer","text":"Match the Unit ID to the slave address set on each physical device (DIP switches or device config). If the gateway has a mapping table, each row should pair one incoming Unit ID with one RTU slave address."}}]}
</script>

<div class="related-guides">
<h2 class="wp-block-heading">Related guides</h2>
<ul class="wp-block-list"><li><a href="/waveshare-gateway-tcp-vs-transparent-mode/">Waveshare Gateway: ModbusTCP Mode vs Transparent Mode (8899)</a></li><li><a href="/qmodmaster-rtu-over-tcp-explained/">QModMaster RTU-over-TCP Explained</a></li><li><a href="/qmodmaster-tutorial/">QModMaster Tutorial: First Read in 10 Minutes</a></li><li><a href="/download/">Download QModMaster (LGPLv3, free)</a></li></ul>
</div>

<style>
.content-container.site-container{max-width:var(--global-content-narrow-width,842px)!important;margin:0 auto!important;padding:56px 24px 72px!important}
.rm-cta{background:#f6f8fb;border:1px solid #e2e8f0;border-left:4px solid #1a73e8;border-radius:8px;padding:18px 22px;margin:28px 0}
.rm-faq{margin:36px 0}
.rm-faq h3{font-size:1.05rem;margin:18px 0 6px}
.related-guides{background:#fafbfc;border:1px solid #e2e8f0;border-radius:8px;padding:20px 24px;margin:36px 0}
.related-guides ul{margin:8px 0 0 20px}
</style>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Modbus Float Shows the Wrong Value? Fix the Byte Order</title>
		<link>https://qmodmaster.com/modbus-float-wrong-value-byte-order-fix/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 03:02:13 +0000</pubDate>
				<category><![CDATA[Troubleshooting]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/modbus-float-wrong-value-byte-order-fix/</guid>

					<description><![CDATA[Modbus Float Shows the Wrong Value? Fix the Byte Order You read a floating-point value from your device and get 2.40e-41 instead of 123.0. Or a negative number with 33 digits. The connection is fine, the registers respond — the value is just garbage. Nine times out of ten, this is a byte order problem,...]]></description>
										<content:encoded><![CDATA[<h1 class="wp-block-heading">Modbus Float Shows the Wrong Value? Fix the Byte Order</h1>

<p class="wp-block-paragraph">You read a floating-point value from your device and get <code>2.40e-41</code> instead of <code>123.0</code>. Or a negative number with 33 digits. The connection is fine, the registers respond — the value is just garbage. Nine times out of ten, this is a <strong>byte order</strong> problem, and it takes two minutes to diagnose once you know where to look.</p>

<p class="wp-block-paragraph">Modbus registers are 16 bits wide, but a 32-bit float needs <em>two</em> registers. The Modbus specification never dictated which register comes first — so device vendors picked all four possible orders. Pick the wrong one in your software and the same raw bytes decode to a completely different number.</p>

<h2 class="wp-block-heading">The Four Byte Orders, With Real Numbers</h2>

<p class="wp-block-paragraph">Take a concrete example. A device holds <strong>123.0</strong> in two consecutive registers. In hex, the raw register contents are <code>0x42F6</code> and <code>0x0000</code> (four bytes: <code>42 F6 00 00</code>). Watch what each byte order makes of the identical raw bytes:</p>

<div style="overflow-x:auto;margin:24px 0;">
<table style="width:100%;border-collapse:collapse;font-size:15px;line-height:1.6;">
<thead>
<tr style="background:#f2f5f9;">
<th style="border:1px solid #d7dee8;padding:10px 12px;text-align:left;">Byte order</th>
<th style="border:1px solid #d7dee8;padding:10px 12px;text-align:left;">Byte sequence</th>
<th style="border:1px solid #d7dee8;padding:10px 12px;text-align:left;">Decoded float</th>
<th style="border:1px solid #d7dee8;padding:10px 12px;text-align:left;">Also called</th>
</tr>
</thead>
<tbody>
<tr style="background:#f6fbf6;">
<td style="border:1px solid #d7dee8;padding:10px 12px;"><strong>ABCD</strong></td>
<td style="border:1px solid #d7dee8;padding:10px 12px;"><code>42 F6 00 00</code></td>
<td style="border:1px solid #d7dee8;padding:10px 12px;"><strong>123.0 ✓</strong></td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">Big-endian, standard</td>
</tr>
<tr>
<td style="border:1px solid #d7dee8;padding:10px 12px;"><strong>BADC</strong></td>
<td style="border:1px solid #d7dee8;padding:10px 12px;"><code>F6 42 00 00</code></td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">−9.84 × 10³² (garbage)</td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">Byte-swapped</td>
</tr>
<tr>
<td style="border:1px solid #d7dee8;padding:10px 12px;"><strong>CDAB</strong></td>
<td style="border:1px solid #d7dee8;padding:10px 12px;"><code>00 00 42 F6</code></td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">2.40 × 10⁻⁴¹ (garbage)</td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">Word-swapped</td>
</tr>
<tr>
<td style="border:1px solid #d7dee8;padding:10px 12px;"><strong>DCBA</strong></td>
<td style="border:1px solid #d7dee8;padding:10px 12px;"><code>00 00 F6 42</code></td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">8.83 × 10⁻⁴¹ (garbage)</td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">Little-endian, reversed</td>
</tr>
</tbody>
</table>
</div>

<p class="wp-block-paragraph">The values in the &#8220;garbage&#8221; rows are computed, not guessed — feed the byte sequences above into any IEEE-754 decoder and you will get exactly these numbers. The pattern is worth memorizing: a word-swapped device (CDAB/DCBA) gives you absurdly <em>tiny</em> values near zero, while a byte-swapped one (BADC) tends to give absurdly <em>large</em> ones. That signature tells you which direction to swap.</p>

<h2 class="wp-block-heading">What the Vendors Say: The &#8220;Swapped Float&#8221; Rule</h2>

<p class="wp-block-paragraph">This is not a fringe problem — major vendors document it. Schneider Electric&#8217;s official FAQ on reading swapped floating-point values states the rule plainly: <strong>swapped floating-point registers are read the same as regular floating-point registers, except the most significant word and least significant word are switched</strong>. In their worked example, a device holding the known value 230.1 was read with the registers in the order they appeared, produced the wrong result, and swapping Register 1 and Register 2 gave the correct floating-point value (<a href="https://www.se.com/ca/en/faqs/FA401500/" target="_blank" rel="noopener nofollow">Schneider Electric FAQ FA401500</a>).</p>

<p class="wp-block-paragraph">That is the CDAB case in our table: the register <em>order</em> is flipped while the bytes inside each register stay put. It is the single most common variant you will meet in the field.</p>

<h2 class="wp-block-heading">Diagnose It in QModMaster</h2>

<p class="wp-block-paragraph">QModMaster (free, open-source LGPLv3 Modbus master simulator from the upstream project) gives you everything you need to confirm a byte-order problem without leaving the app:</p>

<h2 class="wp-block-heading">Step 1: Look at the Raw Hex</h2>

<p class="wp-block-paragraph">Use the <strong>View</strong> menu to switch the register display between <strong>Hex</strong>, <strong>Int</strong>, and <strong>Float</strong>. In Hex view you see the actual bytes the device sent — no interpretation. If Hex shows <code>42F6 0000</code> but Float shows garbage, your connection is healthy and the interpretation is wrong. That is a byte-order problem, full stop.</p>

<h2 class="wp-block-heading">Step 2: The Register-Swap Test</h2>

<p class="wp-block-paragraph">Suspect CDAB/word-swap? Mentally (or on paper) exchange the two registers and re-read:</p>

<ul class="wp-block-list">
<li>Registers read as <code>[0x0000, 0x42F6]</code> decode to garbage → swap to <code>[0x42F6, 0x0000]</code> → 123.0. Word-swap confirmed.</li>
<li>If swapping does not fix it, the device may use BADC or DCBA — try those permutations against the raw hex from Step 1.</li>
</ul>

<p class="wp-block-paragraph">Many Modbus client libraries and SCADA packages let you set the float byte order per device once you know it. QModMaster itself displays values with its built-in interpretation, so the practical workflow is: read raw hex in QModMaster, confirm the correct permutation here, then configure the matching byte order in your production software.</p>

<h2 class="wp-block-heading">The Two Usual Suspects: Wrong Address or Wrong Byte Order?</h2>

<p class="wp-block-paragraph">When a reading is wrong, there are exactly two common causes — and they look different:</p>

<ul class="wp-block-list">
<li><strong>Wrong address / off-by-one:</strong> you get a <em>plausible but wrong</em> value (e.g. 124.7 instead of 123.0, or a value that changes when it should not). See our <a href="https://qmodmaster.com/modbus-register-address-offset-guide/">register address offset guide</a>.</li>
<li><strong>Wrong byte order:</strong> you get <em>absurd</em> values — near-zero like 2.4e-41, or astronomically large like −9.8e+32. That is this page.</li>
</ul>

<p class="wp-block-paragraph">Check the address first (it is the cheaper mistake to rule out), then the byte order. Together they cover nearly every &#8220;my Modbus reading is wrong&#8221; support ticket.</p>

<h2 class="wp-block-heading">Related Guides</h2>

<ul class="wp-block-list">
<li><a href="https://qmodmaster.com/modbus-register-address-offset-guide/">Modbus Register Address Offset Guide</a></li>
<li><a href="https://qmodmaster.com/read-holding-registers-step-by-step/">Read Holding Registers, Step by Step</a></li>
<li><a href="https://qmodmaster.com/qmodmaster-user-manual/">QModMaster User Manual</a></li>
</ul>

<div style="background:#f2f7ff;border:1px solid #c9dcf5;border-radius:8px;padding:20px 22px;margin:28px 0;text-align:center;">
<p style="margin:0 0 12px;font-size:16px;"><strong>Want to truly understand Modbus — not just click through it?</strong><br><span style="font-size:14px;color:#555;">Byte order, framing, function codes: a good protocol book pays for itself on the first commissioning job.</span></p>
<p style="margin:0;"><a href="https://qmodmaster.com/go/modbus-book" target="_blank" rel="noopener nofollow sponsored" style="display:inline-block;background:#1f6feb;color:#fff;text-decoration:none;padding:12px 28px;border-radius:6px;font-weight:600;">See Recommended Modbus Books</a></p>
</div>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Why does my Modbus float read as a garbage value like 2.4e-41?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Almost always a byte-order mismatch. A 32-bit float spans two 16-bit Modbus registers, and vendors use four different orders (ABCD, BADC, CDAB, DCBA). Reading word-swapped registers [0x0000, 0x42F6] as ABCD decodes to 2.40e-41 instead of the correct 123.0. Switch to Hex view in QModMaster to see the raw bytes, then try the register-swap test."
      }
    },
    {
      "@type": "Question",
      "name": "What are the four Modbus float byte orders?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "ABCD (big-endian, standard), BADC (bytes swapped within each word), CDAB (the two words swapped), and DCBA (fully reversed, little-endian). For raw registers 0x42F6, 0x0000 they decode to 123.0, -9.84e+32, 2.40e-41, and 8.83e-41 respectively."
      }
    },
    {
      "@type": "Question",
      "name": "How do I fix byte order in QModMaster?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Use the View menu to compare Hex, Int, and Float displays of the same registers. If Hex looks right but Float is garbage, note the raw hex, try swapping the two registers, and re-decode. Once you identify the correct order, configure it in your production Modbus software — QModMaster is the diagnostic tool that reveals the raw bytes."
      }
    },
    {
      "@type": "Question",
      "name": "Is my reading wrong because of the address or the byte order?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "A wrong address or off-by-one gives a plausible-but-wrong value; a wrong byte order gives an absurd one — near zero (like 2.4e-41) or astronomically large. Check the address offset first, then the byte order."
      }
    }
  ]
}
</script>

<style>
.content-container.site-container{max-width:var(--global-content-narrow-width,842px)!important;margin:0 auto!important;padding:56px 24px 72px!important}
</style>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
