<?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>Tutorials &#8211; QModMaster</title>
	<atom:link href="https://qmodmaster.com/tutorials/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:16:15 +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>Tutorials &#8211; QModMaster</title>
	<link>https://qmodmaster.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>QModMaster View Menu: Float/Int/Hex/Binary Explained</title>
		<link>https://qmodmaster.com/qmodmaster-view-menu-data-format-guide/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 03:16:15 +0000</pubDate>
				<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/qmodmaster-view-menu-data-format-guide/</guid>

					<description><![CDATA[QModMaster View Menu: Float/Int/Hex/Binary Explained The View menu in QModMaster does not change what your device sends — it changes how the same raw bytes are interpreted and displayed. Pick the wrong format and a perfectly healthy reading looks broken; pick the right one and half of all &#8220;wrong value&#8221; mysteries solve themselves. This page...]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">QModMaster View Menu: Float/Int/Hex/Binary Explained</h1>



<p class="wp-block-paragraph">The <strong>View menu</strong> in QModMaster does not change what your device sends — it changes <em>how the same raw bytes are interpreted and displayed</em>. Pick the wrong format and a perfectly healthy reading looks broken; pick the right one and half of all &#8220;wrong value&#8221; mysteries solve themselves. This page is the hub: what each format means, when to use it, and the exact switching sequence to run when a reading looks wrong.</p>



<h2 class="wp-block-heading">What the formats actually do</h2>



<p class="wp-block-paragraph">Every Modbus register is 16 bits. The View menu decides how those bits (and groups of them) are decoded for display:</p>



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

<li><strong>Hex (16-bit):</strong> shows each register exactly as it arrived, e.g. <code>0x04D2</code>. This is the <strong>ground truth</strong> — no interpretation, no surprises. Always start here when something looks wrong.</li>



<li><strong>Binary (16-bit):</strong> the same bits as 0s and 1s. Useful when you are debugging individual status flags / bit fields packed into one register.</li>



<li><strong>INT16 / signed 16-bit:</strong> interprets one register as −32,768…32,767. Right for counters and small signed quantities — wrong for anything that exceeds 32,767 (it will flip negative).</li>



<li><strong>UINT16 / unsigned 16-bit:</strong> interprets one register as 0…65,535. Right for raw ADC counts, status words, and protocol fields.</li>



<li><strong>INT32 / UINT32 (32-bit):</strong> combines <em>two consecutive registers</em> into one 32-bit integer. Right for energy totals and large counters — but sensitive to <strong>word order</strong> (ABCD vs CDAB).</li>



<li><strong>Float (32-bit):</strong> combines two consecutive registers and decodes them as an IEEE-754 floating-point number. Right for voltages, temperatures, and power with decimals — but sensitive to <strong>byte order</strong> (four possible orders).</li>

</ul>



<h2 class="wp-block-heading">Which format, when: the cheat sheet</h2>



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

<li>Debugging <em>anything</em> and unsure → <strong>Hex</strong>. Read raw first, interpret second.</li>



<li>Status flags, alarms, bit-packed coil images → <strong>Binary</strong> or Hex.</li>



<li>Small counters, setpoints, temperatures as integers → <strong>INT16/UINT16</strong>.</li>



<li>Energy totals (kWh), large counters → <strong>INT32/UINT32</strong>, then check word order.</li>



<li>Voltage, current, power, temperature with decimals → <strong>Float</strong>, then check byte order.</li>

</ul>



<h2 class="wp-block-heading">The &#8220;reading looks wrong&#8221; switching drill</h2>



<p class="wp-block-paragraph">Run this sequence top to bottom. Stop at the first step that explains the value — most cases resolve at step 2 or 3.</p>



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

<li><strong>Step 1 — Hex.</strong> Switch to Hex and read the raw register(s). If the raw words already look wrong (all <code>0xFFFF</code>, all zeros, unchanging), the problem is upstream: wiring, address, or slave — not the format.</li>



<li><strong>Step 2 — match the documented type.</strong> Check the device&#8217;s register map: does it say this address is INT16, UINT32, or Float? Set the View format to match <em>exactly</em>. A UINT32 read as INT32 flips negative past 2,147,483,647; a Float read as INT32 is garbage.</li>



<li><strong>Step 3 — test word/byte order.</strong> If a 32-bit integer is ~65,536× off, the words are swapped → <a href="/modbus-32bit-integer-word-swap/">word-swap fix</a>. If a float shows astronomical values, try the other byte orders → <a href="/modbus-float-wrong-value-byte-order-fix/">float byte-order fix</a>.</li>



<li><strong>Step 4 — apply scale and offset.</strong> If the value is off by 10×/100×/1000× or a round constant, it is scaling or an offset → <a href="/modbus-scale-factor-offset-values/">scale factor &amp; offset guide</a>.</li>



<li><strong>Step 5 — verify the address.</strong> If the value is plausible but belongs to a <em>different</em> measurement, you are reading the wrong register: check 0-based vs 1-based addressing in your device&#8217;s manual.</li>

</ul>



<h2 class="wp-block-heading">Common mistakes</h2>



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

<li>Reading a <strong>Float register as INT32</strong> (or vice versa) — the two decodings of the same bytes look nothing alike, and both look &#8220;broken.&#8221;</li>



<li>Reading an <strong>unsigned</strong> quantity as signed INT16 — values over 32,767 wrap negative.</li>



<li>Forgetting that 32-bit formats consume <strong>two registers</strong> — if you request only one register and display INT32, the second half is missing.</li>



<li>&#8220;Fixing&#8221; the format when the real problem is the <strong>address</strong> — always confirm raw Hex values against the device&#8217;s own display first.</li>

</ul>



<h2 class="wp-block-heading">Deep dives</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> — four byte orders, Schneider&#8217;s official guidance, QModMaster workflow.</li>



<li><a href="/modbus-32bit-integer-word-swap/">Modbus 32-bit Integer Wrong? Word Swap (CDAB) Fix</a> — the 65,536× signature and the EM24 little-endian trap.</li>



<li><a href="/modbus-scale-factor-offset-values/">Modbus Values Off by 10x? Scale Factor &amp; Offset</a> — the Deye temperature offset-1000 example and 60-second mental-math check.</li>

</ul>



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



<h3 class="wp-block-heading">Does changing the View menu change what QModMaster requests from the device?</h3>



<p class="wp-block-paragraph">No. The View menu only changes how received bytes are decoded for display. The Modbus request (function code, address, register count) is unaffected.</p>



<h3 class="wp-block-heading">Which View format should I start with when debugging?</h3>



<p class="wp-block-paragraph">Hex. It shows the raw register contents with zero interpretation, so you can tell whether the problem is the data on the wire or merely how it is decoded.</p>



<h3 class="wp-block-heading">Why does my float show a huge wrong number in QModMaster?</h3>



<p class="wp-block-paragraph">Almost always a byte-order mismatch: the device sends the four bytes in a different order than the Float decoder expects. See the <a href="/modbus-float-wrong-value-byte-order-fix/">float byte-order fix</a> for the four orders and how to identify yours.</p>


<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[
{"@type":"Question","name":"Does changing the QModMaster View menu change the Modbus request?","acceptedAnswer":{"@type":"Answer","text":"No. The View menu only changes how received bytes are decoded for display; the Modbus request itself is unaffected."}},
{"@type":"Question","name":"Which QModMaster View format should I use when debugging?","acceptedAnswer":{"@type":"Answer","text":"Start with Hex, which shows raw register contents with zero interpretation, separating wire problems from decoding problems."}},
{"@type":"Question","name":"Why does my float show a huge wrong number in QModMaster?","acceptedAnswer":{"@type":"Answer","text":"Almost always a byte-order mismatch between the device's byte order and the Float decoder's expectation; testing the four byte orders identifies the correct one."}}
]}
</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></li>



<li><a href="/modbus-32bit-integer-word-swap/">Modbus 32-bit Integer Wrong? Word Swap (CDAB) Fix</a></li>



<li><a href="/modbus-scale-factor-offset-values/">Modbus Values Off by 10x? Scale Factor &amp; Offset</a></li>



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

</ul>



<p class="wp-block-paragraph"><em>Learning Modbus data encoding properly pays off on every device you touch: <a href="/go/modbus-book" rel="nofollow">recommended Modbus protocol book</a>.</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 TCP vs RTU over TCP: What&#8217;s the Difference?</title>
		<link>https://qmodmaster.com/modbus-tcp-vs-rtu-over-tcp-difference/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 03:15:51 +0000</pubDate>
				<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/modbus-tcp-vs-rtu-over-tcp-difference/</guid>

					<description><![CDATA[Modbus TCP vs RTU over TCP: What&#8217;s the Difference? They sound like the same thing — and that is exactly why this confuses everyone. Modbus TCP and RTU over TCP both travel over a TCP/IP network, but the bytes on the wire are different protocols. Mixing them up is one of the most common reasons...]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">Modbus TCP vs RTU over TCP: What&#8217;s the Difference?</h1>



<p class="wp-block-paragraph">They sound like the same thing — and that is exactly why this confuses everyone. <strong>Modbus TCP</strong> and <strong>RTU over TCP</strong> both travel over a TCP/IP network, but the bytes on the wire are different protocols. Mixing them up is one of the most common reasons QModMaster connects to a gateway yet reads nothing but timeouts.</p>



<h2 class="wp-block-heading">The core difference in one paragraph</h2>



<p class="wp-block-paragraph"><strong>Modbus TCP</strong> wraps the request in a 7-byte <strong>MBAP header</strong> (transaction ID, protocol ID, length, unit ID) and drops the RTU CRC, because TCP already guarantees delivery. <strong>RTU over TCP</strong> takes a complete, untouched <strong>RTU frame — address, function, data, plus its 2-byte CRC</strong> — and simply stuffs it inside a TCP connection as the transport pipe. No MBAP header, no transaction ID. Same network cable, different envelope.</p>



<h2 class="wp-block-heading">Side-by-side: what&#8217;s on the wire</h2>



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

<li><strong>Modbus TCP frame:</strong> <code>[MBAP: transaction ID (2B) | protocol ID (2B) | length (2B) | unit ID (1B)]</code> + <code>[function code + data]</code> — <strong>no CRC</strong>.</li>



<li><strong>RTU-over-TCP frame:</strong> <code>[slave address (1B) | function code + data | CRC16 (2B)]</code> inside TCP — <strong>no MBAP</strong>, byte-identical to what would travel over an RS-485 cable.</li>

</ul>



<p class="wp-block-paragraph">Practical consequences:</p>



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

<li>In Modbus TCP, the <strong>transaction ID</strong> lets the master pair each response with its request — responses can even arrive out of order. RTU over TCP has no such mechanism; it behaves like a serial line (one request, one response, in order).</li>



<li>In Modbus TCP, the <strong>unit ID</strong> byte in the MBAP header is what lets a TCP gateway route your request to one of several RTU slaves behind it. In RTU over TCP, the slave address lives in the first byte of the raw RTU frame itself.</li>



<li>A device expecting Modbus TCP that receives a raw RTU frame (or vice versa) will simply <strong>ignore it</strong> — you get timeouts, not error messages. This is the signature symptom of a protocol mismatch.</li>

</ul>



<h2 class="wp-block-heading">When do you actually meet RTU over TCP?</h2>



<p class="wp-block-paragraph">You meet it at <strong>transparent gateways</strong> (also called serial servers or &#8220;transparent transmission&#8221; mode). These devices do not translate protocols at all — they take whatever bytes arrive on the RS-485 side and forward them raw over TCP, and back again. The widely used Waveshare serial gateways, for example, document two modes: a <strong>ModbusTCP conversion mode on port 502</strong> (the gateway translates between Modbus TCP and RTU) and a <strong>transparent mode</strong> (raw RTU frames over TCP, commonly on port 8899). If your gateway is in transparent mode, the master software must speak RTU over TCP — plain Modbus TCP will not work, and vice versa.</p>



<p class="wp-block-paragraph">Other places RTU over TCP shows up: Home Assistant&#8217;s <code>rtuovertcp</code> connection type for transparent bridges, USB-over-network serial servers, and TCP multiplexers that forward a serial port to several clients.</p>



<h2 class="wp-block-heading">Which mode do you pick in QModMaster?</h2>



<p class="wp-block-paragraph">Here is the honest part: <strong>QModMaster only offers two modes — RTU (serial port) and TCP (Modbus TCP)</strong>. There is no dedicated &#8220;RTU over TCP&#8221; option. What to do depends on your gateway:</p>



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

<li><strong>Gateway has a ModbusTCP conversion mode (e.g. Waveshare port 502):</strong> switch the gateway to that mode and use QModMaster&#8217;s <strong>TCP</strong> mode. The gateway translates MBAP ↔ RTU for you. This is the path of least resistance and what we recommend for debugging.</li>



<li><strong>Gateway is locked in transparent mode (raw RTU over TCP):</strong> QModMaster&#8217;s TCP mode will not work — it sends MBAP frames the transparent gateway forwards verbatim to a slave that expects a CRC-terminated RTU frame. Either reconfigure the gateway to conversion mode, or use a tool with explicit RTU-over-TCP support for that hop.</li>



<li><strong>Direct RS-485 via USB adapter:</strong> use QModMaster&#8217;s <strong>RTU</strong> mode — the frames are RTU either way, so there is no mismatch to worry about.</li>

</ul>



<p class="wp-block-paragraph">For the full walkthrough of the transparent-gateway scenario — including why QModMaster&#8217;s TCP mode times out against port 8899-style transparent servers — see <a href="/qmodmaster-rtu-over-tcp-explained/">QModMaster RTU over TCP Explained</a>.</p>



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



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

<li>TCP connects fine, but <strong>every read times out</strong> → suspect a Modbus TCP vs RTU-over-TCP mismatch. Check which mode your gateway port expects.</li>



<li>Reads work through the gateway from one tool but not QModMaster → compare which protocol variant each tool sends (Wireshark with the <code>modbus</code> filter makes this visible in seconds).</li>



<li>Multiple slaves behind one TCP gateway, only the first responds → check the <strong>unit ID</strong> handling; see our gateway guide linked below.</li>

</ul>



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



<h3 class="wp-block-heading">Is RTU over TCP the same as Modbus TCP?</h3>



<p class="wp-block-paragraph">No. Modbus TCP uses a 7-byte MBAP header (with transaction ID and unit ID) and no CRC. RTU over TCP sends a complete RTU frame — including its CRC16 — inside a TCP connection, with no MBAP header. A device expecting one will ignore the other.</p>



<h3 class="wp-block-heading">Does QModMaster support RTU over TCP?</h3>



<p class="wp-block-paragraph">Not as a dedicated mode — QModMaster offers RTU (serial) and TCP (Modbus TCP). If your gateway runs in transparent mode (raw RTU over TCP), switch the gateway to its ModbusTCP conversion mode (often port 502) and use QModMaster&#8217;s TCP mode, or use a tool with explicit RTU-over-TCP support.</p>



<h3 class="wp-block-heading">Why does my transparent gateway time out with QModMaster&#8217;s TCP mode?</h3>



<p class="wp-block-paragraph">Because the gateway forwards QModMaster&#8217;s MBAP frames verbatim to the RS-485 slave, which expects a CRC-terminated RTU frame and silently discards the MBAP bytes. The signature symptom is a clean TCP connection with 100% read timeouts.</p>


<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[
{"@type":"Question","name":"Is RTU over TCP the same as Modbus TCP?","acceptedAnswer":{"@type":"Answer","text":"No. Modbus TCP uses a 7-byte MBAP header with transaction ID and unit ID and carries no CRC. RTU over TCP sends a complete RTU frame including its CRC16 inside a TCP connection, with no MBAP header."}},
{"@type":"Question","name":"Does QModMaster support RTU over TCP?","acceptedAnswer":{"@type":"Answer","text":"Not as a dedicated mode. QModMaster offers RTU (serial) and TCP (Modbus TCP). For transparent gateways, switch the gateway to ModbusTCP conversion mode (often port 502) and use QModMaster TCP mode."}},
{"@type":"Question","name":"Why does QModMaster TCP mode time out against a transparent gateway?","acceptedAnswer":{"@type":"Answer","text":"The transparent gateway forwards QModMaster's MBAP frames verbatim to the RS-485 slave, which expects a CRC-terminated RTU frame and silently discards the MBAP bytes, producing clean TCP connections with 100% read timeouts."}}
]}
</script>


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



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

<li><a href="/qmodmaster-rtu-over-tcp-explained/">QModMaster RTU over TCP Explained</a> — the transparent-gateway scenario in depth.</li>



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



<li><a href="/modbus-tcp-wireshark-capture-analysis/">Modbus TCP Wireshark Capture Analysis</a> — see the MBAP header vs raw RTU bytes for yourself.</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}
.related-guides{margin-top:2.5em;border-top:1px solid #e5e5e5;padding-top:1.5em}
</style>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>QModMaster RTU over TCP Explained: Why There Is No Such Mode</title>
		<link>https://qmodmaster.com/qmodmaster-rtu-over-tcp-explained/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 03:02:06 +0000</pubDate>
				<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/qmodmaster-rtu-over-tcp-explained/</guid>

					<description><![CDATA[QModMaster RTU over TCP Explained: Why There Is No Such Mode You opened QModMaster&#8217;s connection settings, looking for &#8220;RTU over TCP&#8221; — and found only two choices: Modbus RTU and Modbus TCP. It is not a missing feature or a bug. QModMaster simply has no RTU-over-TCP mode, and understanding why will save you a long...]]></description>
										<content:encoded><![CDATA[<h1 class="wp-block-heading">QModMaster RTU over TCP Explained: Why There Is No Such Mode</h1>

<p class="wp-block-paragraph">You opened QModMaster&#8217;s connection settings, looking for &#8220;RTU over TCP&#8221; — and found only two choices: <strong>Modbus RTU</strong> and <strong>Modbus TCP</strong>. It is not a missing feature or a bug. QModMaster simply has no RTU-over-TCP mode, and understanding why will save you a long afternoon of failed connections.</p>

<p class="wp-block-paragraph">The confusion usually starts at the network gateway. Many RS485-to-Ethernet gateways (Waveshare, Elfin, and similar) can move Modbus over the network in two completely different ways — and only one of them is &#8220;Modbus TCP&#8221;. This page maps all three frame formats, shows which QModMaster mode matches each, and gives you honest workarounds for the case QModMaster cannot cover natively.</p>

<h2 class="wp-block-heading">The Three Ways Modbus Frames Travel</h2>

<p class="wp-block-paragraph">Modbus defines the application message (function code + data). <em>How</em> that message is packaged on the wire differs between the three transports you will meet in the field:</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;">Transport</th>
<th style="border:1px solid #d7dee8;padding:10px 12px;text-align:left;">Frame wrapper</th>
<th style="border:1px solid #d7dee8;padding:10px 12px;text-align:left;">Typical port</th>
<th style="border:1px solid #d7dee8;padding:10px 12px;text-align:left;">QModMaster mode</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border:1px solid #d7dee8;padding:10px 12px;"><strong>Modbus TCP</strong></td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">7-byte MBAP header + Modbus PDU (no CRC)</td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">502</td>
<td style="border:1px solid #d7dee8;padding:10px 12px;"><strong>Modbus TCP</strong> ✓</td>
</tr>
<tr>
<td style="border:1px solid #d7dee8;padding:10px 12px;"><strong>RTU over TCP</strong></td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">Raw RTU frame (address + PDU + 2-byte CRC) stuffed into a TCP stream — no MBAP</td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">8899 (common for transparent mode)</td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">None natively ✗</td>
</tr>
<tr>
<td style="border:1px solid #d7dee8;padding:10px 12px;"><strong>Modbus RTU (serial)</strong></td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">RTU frame on the RS485/RS232 wire, silent-interval framing</td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">Serial port (COMx / /dev/ttyUSBx)</td>
<td style="border:1px solid #d7dee8;padding:10px 12px;"><strong>Modbus RTU</strong> ✓</td>
</tr>
</tbody>
</table>
</div>

<p class="wp-block-paragraph">Notice the key difference: Modbus TCP wraps the payload in an <strong>MBAP header</strong> (transaction ID, protocol ID, length, unit ID). RTU-over-TCP keeps the original serial frame — including its 2-byte CRC — and just carries it inside TCP packets. A device expecting one format will not understand the other.</p>

<h2 class="wp-block-heading">What QModMaster Actually Offers</h2>

<p class="wp-block-paragraph">QModMaster — the free, open-source (LGPLv3) Modbus master simulator from the upstream project — ships with exactly two connection types:</p>

<ul class="wp-block-list">
<li><strong>Modbus RTU</strong> — talks to a serial port (real or USB-to-serial).</li>
<li><strong>Modbus TCP</strong> — talks Modbus TCP with an MBAP header, default port 502.</li>
</ul>

<p class="wp-block-paragraph">There is no &#8220;RTU over TCP&#8221; option in the connection dialog, and the upstream project has never added one. This is not unique to QModMaster: the split is a framing choice every Modbus tool makes. For example, open-source Home Assistant integrations commonly expose both options explicitly — one project&#8217;s README notes &#8220;if you instead run the gateway in <em>transparent</em> mode (raw RTU over TCP, usually port 8899), set protocol: <code>rtu_over_tcp</code>&#8220;, while another documents framing as &#8220;<code>rtuovertcp</code> for transparent bridges, <code>tcp</code> for gateways doing MBAP ⇄ RTU conversion&#8221; (<a href="https://github.com/stuartj1-1981/Solis-Local" target="_blank" rel="noopener nofollow">Solis-Local</a>, <a href="https://github.com/jrx-code/ha-toshiba-modbus" target="_blank" rel="noopener nofollow">ha-toshiba-modbus</a>). QModMaster simply only implements the two mainstream choices.</p>

<h2 class="wp-block-heading">The Real Source of Confusion: Your Gateway&#8217;s Two Modes</h2>

<p class="wp-block-paragraph">Serial-to-Ethernet gateways typically run in one of two modes, and the names vary by vendor:</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;">Gateway mode</th>
<th style="border:1px solid #d7dee8;padding:10px 12px;text-align:left;">What it does</th>
<th style="border:1px solid #d7dee8;padding:10px 12px;text-align:left;">Port</th>
<th style="border:1px solid #d7dee8;padding:10px 12px;text-align:left;">Use in QModMaster</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border:1px solid #d7dee8;padding:10px 12px;"><strong>Conversion mode</strong> (e.g. Waveshare &#8220;Modbus TCP ⇔ Modbus RTU&#8221;)</td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">The gateway parses the MBAP header itself and translates between Modbus TCP and serial RTU</td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">502</td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">Connect with <strong>Modbus TCP</strong> — works directly</td>
</tr>
<tr>
<td style="border:1px solid #d7dee8;padding:10px 12px;"><strong>Transparent mode</strong></td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">The gateway passes raw serial bytes through untouched — RTU frames (with CRC) ride inside TCP</td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">8899 (typical)</td>
<td style="border:1px solid #d7dee8;padding:10px 12px;">No native match — see workarounds below</td>
</tr>
</tbody>
</table>
</div>

<p class="wp-block-paragraph">So the fix is usually not in QModMaster at all — it is one checkbox in the gateway&#8217;s web configuration. If your gateway is in conversion mode, just pick <strong>Modbus TCP</strong> in QModMaster and point it at the gateway&#8217;s IP, port 502. If it is stuck in transparent mode on 8899, read on.</p>

<h2 class="wp-block-heading">Workarounds When the Gateway Is in Transparent Mode</h2>

<p class="wp-block-paragraph">QModMaster cannot speak raw RTU-over-TCP, so you have two honest options:</p>

<div style="background:#f6fbf6;border:1px solid #cfe3cf;border-radius:8px;padding:18px 20px;margin:24px 0;">
<p style="margin:0 0 10px;font-size:16px;"><strong>Option A (recommended): switch the gateway to conversion mode.</strong></p>
<p style="margin:0;font-size:15px;line-height:1.7;">Open the gateway&#8217;s web UI, change the work mode from transparent to Modbus TCP ⇔ RTU (on Waveshare units this is often &#8220;Network A = TCP Server, port 502&#8221;), save, and reconnect QModMaster in Modbus TCP mode. No extra software, no extra failure points.</p>
</div>

<div style="background:#fffaf2;border:1px solid #ecd9b0;border-radius:8px;padding:18px 20px;margin:24px 0;">
<p style="margin:0 0 10px;font-size:16px;"><strong>Option B: keep transparent mode and add a virtual serial port.</strong></p>
<p style="margin:0;font-size:15px;line-height:1.7;">Run a TCP-to-serial redirector (e.g. <em>socat</em> on Linux, a virtual COM port driver on Windows) that maps the gateway&#8217;s 8899 stream to a virtual COM port, then point QModMaster&#8217;s <strong>Modbus RTU</strong> mode at that virtual port. It works, but you are adding a moving part that can break timing-sensitive RTU transactions.</p>
</div>

<p class="wp-block-paragraph">Do not try the tempting shortcut of pointing QModMaster&#8217;s Modbus TCP mode at port 8899 in transparent mode: QModMaster will send MBAP-wrapped requests, the device behind the gateway will see garbage, and you will get timeouts — not useful error messages.</p>

<h2 class="wp-block-heading">Spotting the Difference in QModMaster&#8217;s Bus Monitor</h2>

<p class="wp-block-paragraph">If you are unsure which format is on the wire, open QModMaster&#8217;s Bus Monitor and look at the raw bytes:</p>

<ul class="wp-block-list">
<li><strong>Modbus TCP frames</strong> start with a 7-byte MBAP header: 2 bytes transaction ID, 2 bytes protocol ID (always <code>00 00</code>), 2 bytes length, 1 byte unit ID — followed by the function code and data, with <strong>no CRC</strong> at the end.</li>
<li><strong>RTU frames</strong> start with the slave address byte and end with a 2-byte CRC — no MBAP header anywhere.</li>
</ul>

<p class="wp-block-paragraph">A read-holding-registers request to unit 1 for 2 registers starting at 0 shows the contrast clearly: over Modbus TCP you will see something like <code>00 01 00 00 00 06 01 03 00 00 00 02</code> (MBAP + PDU); over RTU-over-TCP the same logical request arrives as <code>01 03 00 00 00 02 C4 0B</code> (address + PDU + CRC). See our <a href="https://qmodmaster.com/qmodmaster-bus-monitor-guide/">Bus Monitor guide</a> for a full walkthrough of reading these captures.</p>

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

<ul class="wp-block-list">
<li><a href="https://qmodmaster.com/modbus-rtu-tcp-gateway-guide/">Modbus RTU/TCP Gateway Setup Guide</a></li>
<li><a href="https://qmodmaster.com/what-is-modbus-master/">What Is a Modbus Master?</a></li>
<li><a href="https://qmodmaster.com/qmodmaster-registers-returned-mismatch/">Registers Returned Don&#8217;t Match? Fix It</a></li>
<li><a href="https://qmodmaster.com/qmodmaster-bus-monitor-guide/">QModMaster Bus Monitor Guide</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>Need a reliable RS485-to-Ethernet gateway?</strong><br><span style="font-size:14px;color:#555;">Transparent vs. conversion mode is the setting that decides everything on this page — pick hardware that supports both.</span></p>
<p style="margin:0;"><a href="https://qmodmaster.com/go/rs485-gateway" 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 RS485 Gateways</a></p>
</div>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Does QModMaster support RTU over TCP?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. QModMaster offers two connection types: Modbus RTU (serial port) and Modbus TCP (MBAP header, port 502). There is no RTU-over-TCP mode. If your gateway runs in transparent mode (raw RTU frames inside TCP, often port 8899), either switch the gateway to Modbus TCP conversion mode or use a virtual serial port with QModMaster's RTU mode."
      }
    },
    {
      "@type": "Question",
      "name": "What is the difference between Modbus TCP and RTU over TCP?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Modbus TCP wraps the Modbus PDU in a 7-byte MBAP header and drops the CRC; it normally uses port 502. RTU over TCP carries the complete serial RTU frame — address byte, PDU, and 2-byte CRC — inside a TCP stream, with no MBAP header; gateways in transparent mode commonly use port 8899. The two formats are not interchangeable."
      }
    },
    {
      "@type": "Question",
      "name": "My gateway is in transparent mode on port 8899. How do I connect QModMaster?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "The simplest fix is to open the gateway's web UI and switch it from transparent mode to Modbus TCP-to-RTU conversion mode (port 502), then use QModMaster's Modbus TCP connection type. Alternatively, map the 8899 stream to a virtual COM port with a tool like socat and use QModMaster's Modbus RTU mode."
      }
    },
    {
      "@type": "Question",
      "name": "Can I point QModMaster's Modbus TCP mode at a transparent gateway's port 8899?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. QModMaster will send MBAP-wrapped requests, which a transparent gateway passes through as-is; the serial device on the other side receives bytes it cannot parse, and you will only get timeouts. Match the mode: conversion mode pairs with Modbus TCP, transparent mode needs a serial-port path."
      }
    },
    {
      "@type": "Question",
      "name": "How can I tell which frame format is on the wire?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Use QModMaster's Bus Monitor. Modbus TCP frames begin with a 7-byte MBAP header (transaction ID, protocol ID 00 00, length, unit ID) and have no CRC. RTU frames begin with the slave address byte and end with a 2-byte CRC, with no MBAP header."
      }
    }
  ]
}
</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>Test Modbus with QModMaster Before Home Assistant</title>
		<link>https://qmodmaster.com/test-modbus-with-qmodmaster-before-home-assistant/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 02:59:56 +0000</pubDate>
				<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/test-modbus-with-qmodmaster-before-home-assistant/</guid>

					<description><![CDATA[Test Modbus with QModMaster Before Home Assistant If your Home Assistant Modbus integration shows &#8220;unavailable&#8221; sensors, stop editing YAML for a minute. Prove the physical link works first with QModMaster — a free, open-source (LGPLv3) Modbus master simulator from the upstream project. This &#8220;verify with QModMaster first&#8221; workflow is exactly what IXON&#8217;s official support documentation...]]></description>
										<content:encoded><![CDATA[<h1 class="wp-block-heading">Test Modbus with QModMaster Before Home Assistant</h1>

<p class="wp-block-paragraph">If your Home Assistant Modbus integration shows &#8220;unavailable&#8221; sensors, stop editing YAML for a minute. Prove the physical link works first with QModMaster — a free, open-source (LGPLv3) Modbus master simulator from the upstream project. This &#8220;verify with QModMaster first&#8221; workflow is exactly what IXON&#8217;s official support documentation recommends before configuring Modbus variables in IXON Cloud, and the same trick shows up in Home Assistant integration troubleshooting guides — for example the Sungrow SHx inverter integration&#8217;s help page tells users to check the connection with QModMaster before touching the integration config.</p>

<div style="background:#f0f7ff;border-left:4px solid #2271b1;padding:16px 20px;margin:24px 0;border-radius:4px"><strong>🧰 Before you start:</strong> you need a way to reach the RS485 bus from your computer. A USB-to-RS485 adapter is the most common missing piece — <a href="https://qmodmaster.com/go/usb-rs485" target="_blank" rel="noopener nofollow sponsored">grab one here</a> if you don&#8217;t have one yet.</div>

<h2 class="wp-block-heading">The Idea in One Paragraph</h2>

<p class="wp-block-paragraph">QModMaster talks to your device directly — no YAML, no integration layers, no polling engines. If QModMaster can read a register, your wiring, serial parameters, and device settings are correct, and whatever is broken lives in your Home Assistant configuration. If QModMaster can&#8217;t read either, the problem is below Home Assistant entirely: wiring, baud rate, parity, termination, or the wrong IP/port on a gateway. One test splits your debugging space in half.</p>

<h2 class="wp-block-heading">Why Vendors Recommend This</h2>

<p class="wp-block-paragraph"><strong>IXON (official support documentation).</strong> Their Modbus troubleshooting article states: &#8220;Before configuring Modbus variables in IXON Cloud, it is best to determine if the variables can be read out by a Modbus master simulator tool.&#8221; It also warns: &#8220;Reading out the addresses should not give an error. If it does, make sure to resolve this before configuring the Modbus variables in IXON Cloud.&#8221; QModMaster is one of the two tools they name, and their walkthrough uses it step by step — Options &gt; Modbus TCP, IP address and port, Unit ID (which IXON calls &#8220;Slave ID&#8221;), Connect, Function Code, Start Address, Scan. <a href="https://support.ixon.cloud/s/article/Troubleshooting-Modbus-by-testing-with-QModMaster" rel="noopener nofollow" target="_blank">Read the IXON article</a>.</p>

<p class="wp-block-paragraph"><strong>Sungrow SHx Home Assistant integration.</strong> Its troubleshooting help page, Check #3: &#8220;If you are using Windows you can check if the Modbus connection generally works using QModMaster&#8221; — mapping Slave IP, TCP port, and Unit ID straight onto the values the integration needs. <a href="https://github.com/mkaiser/sungrow-shx-inverter-modbus-home-assistant/blob/HEAD/doc/help.md" rel="noopener nofollow" target="_blank">Read the help page</a>.</p>

<h2 class="wp-block-heading">The 4-Step Workflow</h2>

<ul class="wp-block-list"><li><strong>1. Connect in QModMaster.</strong> Options → Modbus TCP: enter the device or gateway IP and port (usually 502). For a direct serial adapter, Options → Modbus RTU instead (COM port, baud, parity, stop bits). Set the Unit ID — note that IXON&#8217;s docs call this field &#8220;Slave ID&#8221;; it is the same thing. Press <strong>Connect</strong>.</li>

<li><strong>2. Read one known register.</strong> Set the Function Code (Read Input Registers 0x04 or Read Holding Registers 0x03 — your device manual decides), a Start Address you know exists, and Number of Registers = 1–4 to start. Press <strong>Scan</strong>. Values back = the link is good.</li>

<li><strong>3. Write down the exact working parameters.</strong> Every field that made the read succeed: connection type, IP/port or COM settings, Unit ID, function code, start address, register count. These numbers are now proven facts, not guesses.</li>

<li><strong>4. Carry them into Home Assistant verbatim.</strong> Use the mapping table below — translate each QModMaster field to its HA key and you remove an entire class of config errors.</li></ul>

<h2 class="wp-block-heading">QModMaster Field → Home Assistant Config Mapping</h2>

<div style="overflow-x:auto;margin:24px 0"><table style="width:100%;border-collapse:collapse;font-size:15px"><thead><tr style="background:#f5f5f5"><th style="border:1px solid #ddd;padding:10px 12px;text-align:left">QModMaster field</th><th style="border:1px solid #ddd;padding:10px 12px;text-align:left">Home Assistant <code>modbus</code> key</th><th style="border:1px solid #ddd;padding:10px 12px;text-align:left">Rule</th></tr></thead><tbody><tr><td style="border:1px solid #ddd;padding:10px 12px">Modbus TCP: IP address</td><td style="border:1px solid #ddd;padding:10px 12px"><code>host</code></td><td style="border:1px solid #ddd;padding:10px 12px">Copy exactly (your gateway&#8217;s LAN IP).</td></tr><tr><td style="border:1px solid #ddd;padding:10px 12px">Modbus TCP: port</td><td style="border:1px solid #ddd;padding:10px 12px"><code>port</code></td><td style="border:1px solid #ddd;padding:10px 12px">Usually 502.</td></tr><tr><td style="border:1px solid #ddd;padding:10px 12px">Unit ID</td><td style="border:1px solid #ddd;padding:10px 12px"><code>slave</code></td><td style="border:1px solid #ddd;padding:10px 12px">Same number. Different tools name this differently — IXON calls it &#8220;Slave ID&#8221;.</td></tr><tr><td style="border:1px solid #ddd;padding:10px 12px">Start Address</td><td style="border:1px solid #ddd;padding:10px 12px"><code>address</code></td><td style="border:1px solid #ddd;padding:10px 12px">0-based, like QModMaster. Copy the exact number that returned valid data.</td></tr><tr><td style="border:1px solid #ddd;padding:10px 12px">Function code 04 (Read Input Registers)</td><td style="border:1px solid #ddd;padding:10px 12px"><code>input_type: input</code></td><td style="border:1px solid #ddd;padding:10px 12px">Must match, or you read garbage.</td></tr><tr><td style="border:1px solid #ddd;padding:10px 12px">Function code 03 (Read Holding Registers)</td><td style="border:1px solid #ddd;padding:10px 12px"><code>input_type: holding</code></td><td style="border:1px solid #ddd;padding:10px 12px">Must match, or you read garbage.</td></tr><tr><td style="border:1px solid #ddd;padding:10px 12px">Number of Registers → value width</td><td style="border:1px solid #ddd;padding:10px 12px"><code>data_type</code></td><td style="border:1px solid #ddd;padding:10px 12px">1 register = <code>uint16</code>/<code>int16</code>; 2 registers = <code>uint32</code>/<code>float32</code>.</td></tr></tbody></table></div>

<p class="wp-block-paragraph"><strong>The golden rule:</strong> the Start Address and Function Code that returned real data in QModMaster are the numbers you put in HA. Don&#8217;t &#8220;correct&#8221; for 1-based vs 0-based conventions afterwards — you already resolved that empirically the moment the Scan succeeded. Fill the table from your verified QModMaster values, not from memory.</p>

<h2 class="wp-block-heading">Three Traps When QModMaster Works but HA Doesn&#8217;t</h2>

<ul class="wp-block-list"><li><strong>Slave / Unit ID mismatch.</strong> QModMaster&#8217;s Unit ID field and HA&#8217;s <code>slave:</code> key must hold the same number. It is the single most common YAML mistake, and QModMaster proves the correct value in seconds — check this first.</li>

<li><strong>Wrong <code>input_type</code>.</strong> FC04 reads need <code>input_type: input</code>; FC03 needs <code>input_type: holding</code>. Mix them up and you get errors or nonsense values from a link that is actually fine.</li>

<li><strong>Too-aggressive polling.</strong> HA hammers the bus with retries and tight scan intervals; some inverters and gateways simply stop answering. If QModMaster reads fine but HA logs &#8220;No response received after N retries&#8221;, loosen <code>scan_interval</code>, raise the timeout, and read fewer registers per request.</li></ul>

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

<h3 class="wp-block-heading">Why not debug directly in Home Assistant?</h3>

<p class="wp-block-paragraph">HA&#8217;s Modbus integration gives you one error for ten possible causes. QModMaster isolates the hardware link from the YAML config in minutes — that is the whole point of the workflow vendors recommend.</p>

<h3 class="wp-block-heading">Do I need QModMaster on the same machine as Home Assistant?</h3>

<p class="wp-block-paragraph">No — but test from the same network path. If HA reaches the device through a TCP gateway, point QModMaster at that same gateway IP so you validate the real path, not a different one.</p>

<h3 class="wp-block-heading">Which function code should I use?</h3>

<p class="wp-block-paragraph">Your device manual decides. Most inverters and energy meters expose live values as Input Registers (FC04) and settings as Holding Registers (FC03). When in doubt, try reading both in QModMaster and see which returns sane data.</p>

<h3 class="wp-block-heading">An address worked in QModMaster but HA reads the wrong value.</h3>

<p class="wp-block-paragraph">You almost certainly miscopied something in translation. Re-check the mapping table: same Unit ID, same Start Address number, FC04 → <code>input_type: input</code>, FC03 → <code>input_type: holding</code>, and the right <code>data_type</code> for the value width.</p>

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

<ul class="wp-block-list"><li><a href="https://qmodmaster.com/qmodmaster-tutorial/">QModMaster Tutorial: First Connection Step by Step</a></li>

<li><a href="https://qmodmaster.com/modbus-no-response-timeout-fix/">Modbus No Response / Timeout: Fix Guide</a></li>

<li><a href="https://qmodmaster.com/growatt-inverter-qmodmaster-read/">Read Your Growatt Inverter with QModMaster (First Read)</a></li>

<li><a href="https://qmodmaster.com/usb-to-rs485-adapter-buying-guide/">USB-to-RS485 Adapter Buying Guide</a></li>

<li><a href="https://qmodmaster.com/qmodmaster-bus-monitor-guide/">QModMaster Bus Monitor Guide</a></li></ul>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Why not debug Modbus directly in Home Assistant?","acceptedAnswer":{"@type":"Answer","text":"Home Assistant's Modbus integration gives you one error for ten possible causes. QModMaster isolates the hardware link from the YAML config in minutes, which is why vendors recommend verifying with it first."}},{"@type":"Question","name":"Do I need QModMaster on the same machine as Home Assistant?","acceptedAnswer":{"@type":"Answer","text":"No, but test from the same network path. If Home Assistant reaches the device through a TCP gateway, point QModMaster at that same gateway IP so you validate the real path."}},{"@type":"Question","name":"Which function code should I use in QModMaster?","acceptedAnswer":{"@type":"Answer","text":"Your device manual decides. Most inverters and energy meters expose live values as Input Registers (FC04) and settings as Holding Registers (FC03). Try both in QModMaster and see which returns sane data."}},{"@type":"Question","name":"An address worked in QModMaster but Home Assistant reads the wrong value. Why?","acceptedAnswer":{"@type":"Answer","text":"Something was miscopied in translation. Re-check: same Unit ID, same Start Address number, FC04 maps to input_type input, FC03 maps to input_type holding, and the correct data_type for the value width."}}]}
</script>

<style>
.content-container.site-container{max-width:var(--global-content-narrow-width,842px)!important;margin:0 auto!important;padding:56px 24px 72px!important}
table code{background:#f0f0f0;padding:1px 5px;border-radius:3px;font-size:13px}
</style>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Analyze Modbus TCP with Wireshark: Capture &#038; Troubleshooting Guide</title>
		<link>https://qmodmaster.com/modbus-tcp-wireshark-capture-analysis/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 02:59:39 +0000</pubDate>
				<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/modbus-tcp-wireshark-capture-analysis/</guid>

					<description><![CDATA[Analyze Modbus TCP with Wireshark: Capture &#38; Troubleshooting Guide QModMaster&#8217;s Bus Monitor shows you every frame your PC sends and receives — and that is enough for most day-to-day debugging. But sometimes the problem is not in your PC at all: it is on the wire, in a switch, in a gateway, or in a...]]></description>
										<content:encoded><![CDATA[<h1 class="wp-block-heading">Analyze Modbus TCP with Wireshark: Capture &amp; Troubleshooting Guide</h1>

<p class="wp-block-paragraph">QModMaster&#8217;s <a href="https://qmodmaster.com/qmodmaster-bus-monitor-guide/">Bus Monitor</a> shows you every frame your PC sends and receives — and that is enough for most day-to-day debugging. But sometimes the problem is not in your PC at all: it is on the wire, in a switch, in a gateway, or in a second master fighting you for the same device. That is when you graduate from the Bus Monitor to Wireshark.</p>

<p class="wp-block-paragraph">Think of it this way: the Bus Monitor sees what <em>your machine</em> sent and got back. Wireshark sees <em>everything that crosses the network interface</em> — TCP handshakes, retransmissions, RST packets, and traffic from other masters you did not know were polling. This guide walks you through capturing and reading Modbus TCP in Wireshark, and the exact workflow for pairing it with QModMaster.</p>

<h2 class="wp-block-heading">1. Capture Setup: Grab Modbus TCP Traffic</h2>

<ul class="wp-block-list"><li><strong>Pick the right interface.</strong> Open Wireshark and select the network interface that is actually connected to your Modbus network (the Ethernet NIC facing the plant LAN, not a VPN or loopback adapter). If your PC has several, check which one carries the device&#8217;s subnet.</li><li><strong>Set a capture filter.</strong> In the capture options, enter <code>tcp port 502</code> before you start. This tells Wireshark to record only Modbus TCP traffic, which keeps capture files small and analysis fast on a busy network.</li><li><strong>Capture at the master.</strong> The simplest and most useful capture point is the PC running QModMaster — you get the full picture of what the master sees.</li><li><strong>Let it run a full poll cycle.</strong> Start the capture, run your QModMaster poll for at least one full cycle (typically 5–30 seconds), then stop and save the file.</li><li><strong>Non-standard ports.</strong> Wireshark only auto-decodes Modbus on port 502. If your device uses a custom port (e.g. 1502 or 8502), the packets will show as raw TCP. Fix it with <em>Decode As…</em>: right-click a packet → Decode As → set the TCP port value → choose <strong>MBTCP</strong>. From then on, everything on that port decodes as Modbus.</li></ul>

<h2 class="wp-block-heading">2. The Display Filters You Will Actually Use</h2>

<p class="wp-block-paragraph">Type these into Wireshark&#8217;s display filter bar. They are verified against Wireshark&#8217;s official display filter reference:</p>

<div class="qm-compare" style="overflow-x:auto;margin:1.5em 0;"><table style="width:100%;border-collapse:collapse;font-size:15px;min-width:560px;"><thead><tr style="background:#1a73e8;"><th style="padding:12px 14px;text-align:left;color:#fff;border:1px solid #1a73e8;">Filter</th><th style="padding:12px 14px;text-align:left;color:#fff;border:1px solid #1a73e8;">What it shows</th></tr></thead><tbody><tr><td style="padding:10px 14px;border:1px solid #ddd;"><code>modbus</code></td><td style="padding:10px 14px;border:1px solid #ddd;">All Modbus traffic — requests plus responses</td></tr><tr style="background:#f8fafc;"><td style="padding:10px 14px;border:1px solid #ddd;"><code>tcp.port==502</code></td><td style="padding:10px 14px;border:1px solid #ddd;">Everything on port 502, including the TCP handshake</td></tr><tr><td style="padding:10px 14px;border:1px solid #ddd;"><code>modbus.func_code==3</code></td><td style="padding:10px 14px;border:1px solid #ddd;">Only Read Holding Registers traffic</td></tr><tr style="background:#f8fafc;"><td style="padding:10px 14px;border:1px solid #ddd;"><code>modbus.exception_code</code></td><td style="padding:10px 14px;border:1px solid #ddd;">Packets carrying an exception code (error responses)</td></tr><tr><td style="padding:10px 14px;border:1px solid #ddd;"><code>modbus.func_code&gt;=128</code></td><td style="padding:10px 14px;border:1px solid #ddd;">All exception responses (function code + 0x80)</td></tr><tr style="background:#f8fafc;"><td style="padding:10px 14px;border:1px solid #ddd;"><code>mbtcp.trans_id</code></td><td style="padding:10px 14px;border:1px solid #ddd;">Filter by MBAP transaction identifier</td></tr><tr><td style="padding:10px 14px;border:1px solid #ddd;"><code>mbtcp.unit_id==1</code></td><td style="padding:10px 14px;border:1px solid #ddd;">Only traffic to/from Unit ID 1</td></tr><tr style="background:#f8fafc;"><td style="padding:10px 14px;border:1px solid #ddd;"><code>modbus.reference_num==100</code></td><td style="padding:10px 14px;border:1px solid #ddd;">Requests targeting a specific register address</td></tr></tbody></table></div>

<p class="wp-block-paragraph">Combine them when you need precision: <code>modbus.func_code==3 &amp;&amp; mbtcp.unit_id==5</code> shows only FC03 traffic to unit 5. And <code>modbus &amp;&amp; ip.addr==192.168.1.100</code> isolates one device on a noisy network.</p>

<h2 class="wp-block-heading">3. Pair Requests and Responses by MBAP Transaction ID</h2>

<p class="wp-block-paragraph">Every Modbus TCP frame starts with a 7-byte MBAP header, and its first field is the <strong>Transaction Identifier</strong>. The master assigns a transaction ID to each request; the slave echoes the same ID back in its response. In Wireshark&#8217;s packet list you will see pairs like:</p>

<div class="qm-code" style="background:#0f172a;color:#dbeafe;border-radius:8px;padding:18px 20px;margin:1.5em 0;font-family:Consolas,Menlo,monospace;font-size:14px;line-height:1.7;">Query: Trans: 1; Unit: 1, Func: 3: Read Holding Registers<br>Response: Trans: 1; Unit: 1, Func: 3: Read Holding Registers<br>Query: Trans: 2; Unit: 1, Func: 3: Read Holding Registers<br>Response: Trans: 2; Unit: 1, Func: 3: Read Holding Registers</div>

<p class="wp-block-paragraph">This pairing is your single most powerful diagnostic tool:</p>

<ul class="wp-block-list"><li><strong>A Query with no matching Response</strong> = the request reached the wire but nothing came back. Check the TCP layer: did you get a SYN-ACK? If yes, the device accepted TCP but its Modbus service never answered. If you see a TCP RST instead, the device (or a firewall) actively refused.</li><li><strong>A Response whose transaction ID matches an older Query</strong> = delayed or out-of-order delivery. Sort the packet list by transaction ID and the misalignment jumps out immediately.</li><li><strong>Two Queries in a row before any Response</strong> = the master fired the next request too early (overlapping requests), which can desync response matching.</li><li><strong>Response arrives hundreds of milliseconds late</strong> = the device is slow or overloaded. Add a delta-time column (<em>frame.time_delta</em>) and filter <code>modbus &amp;&amp; frame.time_delta &gt; 0.5</code> to find every slow response in one pass.</li></ul>

<h2 class="wp-block-heading">4. Spot Exception Frames (Function Code + 0x80)</h2>

<p class="wp-block-paragraph">When a slave cannot fulfill a request, it answers with an <strong>exception frame</strong>: the function code comes back with 0x80 added (so FC03 becomes 0x83), followed by a one-byte exception code. In the Wireshark packet list these stand out immediately, and the filter <code>modbus.func_code&gt;=128</code> isolates them. The most common exception you will meet is <strong>code 02 (Illegal Data Address)</strong> — it almost always means the requested register does not exist on the device, typically an off-by-one in your address mapping. For a full breakdown of all exception codes, see our <a href="https://qmodmaster.com/modbus-exception-codes-explained/">exception codes guide</a>.</p>

<h2 class="wp-block-heading">5. The Practical Workflow: QModMaster + Wireshark Together</h2>

<ul class="wp-block-list"><li><strong>Step 1 — Reproduce in QModMaster.</strong> Set up the failing poll exactly as it happens in production: same slave ID, same function code, same registers. Confirm the symptom (timeout, wrong values, exception).</li><li><strong>Step 2 — Capture in Wireshark.</strong> Start a capture with <code>tcp port 502</code> on the right interface, run the failing poll once, stop the capture.</li><li><strong>Step 3 — Cross-check against the Bus Monitor.</strong> Open QModMaster&#8217;s Bus Monitor side by side. Do the raw frames match what Wireshark captured? If the Bus Monitor shows a response that Wireshark does not, something between the socket and the capture layer is off — rare, but this comparison is how you prove it either way.</li><li><strong>Step 4 — Pinpoint with filters.</strong> Now work the capture: pair transaction IDs, hunt exception frames, measure response times, look for retransmissions (<code>tcp.analysis.retransmission &amp;&amp; tcp.port==502</code>) and resets (<code>tcp.flags.reset==1 &amp;&amp; tcp.port==502</code>). Each pattern points at a different cause — network loss, a dead Modbus service, a competing master, or a slow device.</li></ul>

<p class="wp-block-paragraph">One honest boundary: everything above covers <strong>Modbus TCP</strong>, where Wireshark is free and excellent. If your problem is on the <strong>serial RTU</strong> side, Wireshark cannot see it — there are no packets on a serial line. For that, step up to a hardware logic analyzer that captures the actual RS-485 waveforms:</p>

<div class="qm-cta" style="background:#eef4ff;border:2px solid #1a73e8;border-radius:10px;padding:28px;text-align:center;margin:2em 0;"><p style="font-size:18px;font-weight:700;margin:0 0 8px;">Debugging serial RTU? Wireshark can&#8217;t help there.</p><p style="margin:0 0 18px;color:#444;">A logic analyzer captures the real RS-485 traffic. For Modbus TCP, Wireshark (free) is all you need.</p><a href="https://qmodmaster.com/go/logic-analyzer" target="_blank" rel="noopener nofollow sponsored" style="display:inline-block;background:#1a73e8;color:#fff;font-weight:700;font-size:17px;padding:14px 36px;border-radius:8px;text-decoration:none;">See Logic Analyzer Options</a></div>

<h2 class="wp-block-heading">Frequently Asked Questions</h2>

<script type="application/ld+json">{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"What capture filter should I use for Modbus TCP in Wireshark?","acceptedAnswer":{"@type":"Answer","text":"Use the capture filter 'tcp port 502' before starting the capture. It records only Modbus TCP traffic, keeping capture files small and analysis fast."}},{"@type":"Question","name":"Why doesn't Wireshark decode my Modbus traffic?","acceptedAnswer":{"@type":"Answer","text":"Wireshark only auto-decodes Modbus on TCP port 502. If your device uses a custom port, right-click a packet, choose Decode As, and set that TCP port to MBTCP to enable decoding."}},{"@type":"Question","name":"How do I match a Modbus request with its response?","acceptedAnswer":{"@type":"Answer","text":"Pair them by the MBAP Transaction Identifier: the slave echoes the request's transaction ID back in its response. A query with no matching response means nothing came back; a response matched to an older query means delayed or out-of-order delivery."}},{"@type":"Question","name":"What does a function code of 128 or higher mean in Wireshark?","acceptedAnswer":{"@type":"Answer","text":"It is an exception frame: the slave adds 0x80 to the function code to signal an error, followed by a one-byte exception code. Filter with modbus.func_code>=128 to isolate them; exception code 02 (Illegal Data Address) is the most common."}},{"@type":"Question","name":"Can Wireshark capture Modbus RTU serial traffic?","acceptedAnswer":{"@type":"Answer","text":"No. Wireshark captures network packets, and Modbus RTU runs over serial lines with no packets. For RTU debugging you need QModMaster's Bus Monitor plus, for waveform-level capture, a hardware logic analyzer."}}]}</script>

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

<ul class="wp-block-list"><li><a href="https://qmodmaster.com/qmodmaster-bus-monitor-guide/">QModMaster Bus Monitor Guide (start simple, then come back here)</a></li><li><a href="https://qmodmaster.com/modbus-exception-codes-explained/">Modbus Exception Codes Explained</a></li><li><a href="https://qmodmaster.com/modbus-no-response-timeout-fix/">Modbus No Response / Timeout Fix</a></li><li><a href="https://qmodmaster.com/qmodmaster-registers-returned-mismatch/">Registers Returned Don&#8217;t Match the Device Display</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}.qm-cta a:hover{opacity:.92}</style>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Connect a Siemens PLC via Modbus TCP (QModMaster Test)</title>
		<link>https://qmodmaster.com/connect-siemens-plc-via-modbus/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 02:27:49 +0000</pubDate>
				<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/connect-siemens-plc-via-modbus/</guid>

					<description><![CDATA[Connect a Siemens PLC via Modbus TCP (QModMaster Test) When you configure a Siemens S7-1200 or S7-1500 as a Modbus TCP server, QModMaster is a fast way to verify the setup: connect as a Modbus TCP client, read a few holding registers, and confirm the PLC is really serving data. This guide covers the QModMaster...]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">Connect a Siemens PLC via Modbus TCP (QModMaster Test)</h1>



<p class="wp-block-paragraph">When you configure a Siemens S7-1200 or S7-1500 as a Modbus TCP server, QModMaster is a fast way to verify the setup: connect as a Modbus TCP client, read a few holding registers, and confirm the PLC is really serving data. This guide covers the QModMaster side plus the setup pointers and verification steps — for the TIA Portal configuration itself, follow Siemens&#8217; official documentation for your firmware version, since dialog layouts differ between versions.</p>



<h2 class="wp-block-heading">PLC Side: Enable the Modbus TCP Server</h2>



<p class="wp-block-paragraph">S7-1200/1500 PLCs support Modbus TCP server functionality through Siemens&#8217; Modbus instructions in TIA Portal. The general flow is:</p>



<ol class="wp-block-list">
<li>Add the Modbus TCP server instruction to your program per Siemens&#8217; documentation for your firmware version.</li>



<li>Assign it a data block / memory area to serve as the holding-register map.</li>



<li>Download the program to the PLC and put the CPU in RUN.</li>



<li>Note the PLC&#8217;s IP address (e.g. 192.168.1.10) — you&#8217;ll need it below.</li>
</ol>



<p class="wp-block-paragraph">Because Siemens changes instruction parameters and dialog details between TIA Portal versions, we deliberately don&#8217;t reproduce screenshots here — use the current Siemens documentation as the reference, and treat QModMaster as the test client below.</p>



<h2 class="wp-block-heading">QModMaster Side: Connect as Modbus TCP Client</h2>



<ol class="wp-block-list">
<li>In QModMaster, select the <strong>TCP</strong> mode.</li>



<li>Enter the PLC&#8217;s <strong>IP address</strong> and port <strong>502</strong> (the standard Modbus TCP port).</li>



<li>Set Function Code to <strong>03: Read Holding Registers</strong>, Start Address <strong>0</strong>, Number of Points <strong>10</strong>.</li>



<li>Click connect/read — you should see the values of the data block you assigned on the PLC side.</li>



<li>Change a value in the PLC (e.g. in a watch table) and re-read: the QModMaster grid should reflect the change. That confirms the full chain.</li>
</ol>



<h2 class="wp-block-heading">Unit ID (Slave ID) with Siemens</h2>



<p class="wp-block-paragraph">Modbus TCP includes a Unit Identifier field that plays the role of the Slave ID. Most Siemens Modbus TCP server implementations accept Unit ID <strong>1</strong> (or 255 for &#8220;this unit&#8221; in some stacks). If reads fail while the connection itself succeeds, try Unit ID 1 first, then check Siemens&#8217; documentation for your instruction&#8217;s expected unit identifier.</p>



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



<h3 class="wp-block-heading">Connection refused / timeout</h3>



<p class="wp-block-paragraph">Check: is the PLC&#8217;s CPU in RUN? Is your PC on the same subnet as the PLC (e.g. 192.168.1.x)? Is a firewall on your PC blocking outbound TCP 502 or the PLC&#8217;s port? Windows Firewall is a frequent culprit — allow QModMaster through it.</p>



<h3 class="wp-block-heading">Connects but no data / exception 02</h3>



<p class="wp-block-paragraph">The server is running but you asked for registers it doesn&#8217;t serve. Confirm which data block area the Modbus server instruction is mapped to, and that your Start Address falls inside it. See our <a href="https://qmodmaster.com/modbus-register-address-offset-guide/">address offset guide</a> and <a href="https://qmodmaster.com/modbus-exception-codes-explained/">exception codes guide</a>.</p>



<h2 class="wp-block-heading">Frequently Asked Questions</h2>



<h3 class="wp-block-heading">Does QModMaster work as a Modbus TCP client for any PLC brand?</h3>



<p class="wp-block-paragraph">Yes — Modbus TCP is a standard protocol. QModMaster connects to any Modbus TCP server (Siemens, Allen-Bradley, Schneider, etc.) as long as you know the device&#8217;s IP, port 502, and which registers it serves.</p>



<h3 class="wp-block-heading">Which Siemens PLCs support Modbus TCP server mode?</h3>



<p class="wp-block-paragraph">S7-1200 and S7-1500 support it via the Modbus TCP instructions in TIA Portal. Check Siemens&#8217; documentation for your exact CPU and firmware, since instruction availability and parameters vary by version.</p>



<h3 class="wp-block-heading">Do I need to write to the PLC from QModMaster?</h3>



<p class="wp-block-paragraph">For a basic connectivity test, no — an FC03 read proves the server works. If you want to test writes too, use FC06/FC16 against registers your PLC program explicitly exposes for that purpose, and be aware of what the PLC does with those values.</p>



<h3 class="wp-block-heading">Can QModMaster scan the PLC automatically?</h3>



<p class="wp-block-paragraph">Yes — QModMaster&#8217;s Scan feature polls a register range repeatedly, which is handy for watching PLC values change in real time. See the <a href="https://qmodmaster.com/qmodmaster-user-manual/">user manual</a> for scan setup.</p>



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



<ul class="wp-block-list">
<li><a href="https://qmodmaster.com/read-holding-registers-step-by-step/">How to Read Holding Registers (FC03): Step-by-Step</a></li>



<li><a href="https://qmodmaster.com/modbus-function-codes-explained/">Modbus Function Codes Explained</a></li>



<li><a href="https://qmodmaster.com/modbus-no-response-timeout-fix/">Modbus No-Response Timeout Fix</a></li>



<li><a href="https://qmodmaster.com/download/">Download QModMaster</a></li>
</ul>


<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Does QModMaster work as a Modbus TCP client for any PLC brand?","acceptedAnswer":{"@type":"Answer","text":"Yes — Modbus TCP is standard. QModMaster connects to any Modbus TCP server with the device's IP, port 502, and its register map."}},{"@type":"Question","name":"Which Siemens PLCs support Modbus TCP server mode?","acceptedAnswer":{"@type":"Answer","text":"S7-1200 and S7-1500 support it via Modbus TCP instructions in TIA Portal; check Siemens' documentation for your CPU and firmware."}},{"@type":"Question","name":"Do I need to write to the PLC from QModMaster?","acceptedAnswer":{"@type":"Answer","text":"No — an FC03 read proves the server works. Test writes only against registers your PLC program explicitly exposes."}},{"@type":"Question","name":"Can QModMaster scan the PLC automatically?","acceptedAnswer":{"@type":"Answer","text":"Yes — QModMaster's Scan feature polls a register range repeatedly for real-time watching."}}]}
</script>

<style>.content-container.site-container{max-width:var(--global-content-narrow-width,842px)!important;margin:0 auto!important;padding:56px 24px 72px!important}.wp-block-table table{border-collapse:collapse;width:100%;margin:1em 0}.wp-block-table th,.wp-block-table td{border:1px solid #ddd;padding:10px;text-align:left}.wp-block-table th{background:#f5f7fa}.cta-box{background:#f0f6ff;border-left:4px solid #2271b1;padding:16px 20px;margin:1.5em 0;border-radius:4px}.verdict-box{background:#f0faf0;border-left:4px solid #2e7d32;padding:16px 20px;margin:1.5em 0;border-radius:4px}.checklist{background:#fffbe6;border:1px solid #e6d96c;padding:16px 20px;margin:1.5em 0;border-radius:4px}</style>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Test a VFD with QModMaster via Modbus (Guide)</title>
		<link>https://qmodmaster.com/test-vfd-with-qmodmaster/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 02:27:28 +0000</pubDate>
				<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/test-vfd-with-qmodmaster/</guid>

					<description><![CDATA[Test a VFD with QModMaster via Modbus (Guide) A variable frequency drive (VFD) usually speaks Modbus RTU out of the box, which makes it one of the most common devices QModMaster users debug. This guide shows how to connect a VFD to QModMaster, read its status word, and write a frequency reference — the standard...]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">Test a VFD with QModMaster via Modbus (Guide)</h1>



<p class="wp-block-paragraph">A variable frequency drive (VFD) usually speaks Modbus RTU out of the box, which makes it one of the most common devices QModMaster users debug. This guide shows how to connect a VFD to QModMaster, read its status word, and write a frequency reference — the standard first test when commissioning or troubleshooting a drive.</p>



<p class="wp-block-paragraph"><strong>Important:</strong> every VFD brand uses its own Modbus register map. All register addresses below are <strong>examples only — check your drive&#8217;s manual</strong> for the real status-word and frequency-reference registers. Never write to a register unless your manual confirms what it does; writing the wrong address can change drive behavior.</p>



<h2 class="wp-block-heading">Step 1: Configure the Drive as a Modbus Slave</h2>



<p class="wp-block-paragraph">Before QModMaster can talk to the drive, set these parameters on the VFD itself (usually via its keypad or config software):</p>



<ul class="wp-block-list">
<li><strong>Modbus slave address</strong> — pick a free address on the bus (commonly 1) and note it down.</li>



<li><strong>Baud rate</strong> — 9600 is the typical default; confirm against your drive.</li>



<li><strong>Data format</strong> — commonly 8N1 or 8E1; must match on both ends.</li>



<li><strong>Enable Modbus control source</strong> — many drives ignore Modbus commands until you switch the control/reference source to the communication port.</li>
</ul>



<p class="wp-block-paragraph">The exact parameter numbers differ per brand — your drive&#8217;s manual is the only authority here.</p>



<h2 class="wp-block-heading">Step 2: Connect in QModMaster</h2>



<p class="wp-block-paragraph">Wiring: connect your USB-to-RS485 adapter&#8217;s A/B terminals to the drive&#8217;s RS485 terminals (mind polarity). Need an adapter? See our <a href="https://qmodmaster.com/usb-to-rs485-adapter-buying-guide/">USB-to-RS485 adapter buying guide</a> (<a href="https://qmodmaster.com/go/usb-rs485" rel="nofollow">adapter deals</a>).</p>



<ol class="wp-block-list">
<li>In QModMaster, select Serial (RTU) and your adapter&#8217;s COM port.</li>



<li>Set baud rate, parity and stop bits to match the drive (e.g. 9600 / None / 1 — verify against your drive).</li>



<li>Set <strong>Slave ID</strong> to the address you configured on the drive.</li>



<li>If replies are garbled, try toggling RTS control (<a href="https://qmodmaster.com/rs485-rts-control-guide/">RTS control guide</a>).</li>
</ol>



<h2 class="wp-block-heading">Step 3: Read the Status Word (FC03)</h2>



<p class="wp-block-paragraph">Most drives expose a <strong>status word</strong> register (running/stopped, faulted, direction) that you read with function code 03:</p>



<ol class="wp-block-list">
<li>Set Function Code to <strong>03: Read Holding Registers</strong>.</li>



<li>Set Start Address to your drive&#8217;s status-word address <strong>(example only — check your drive&#8217;s manual)</strong> and Number of Points to 1.</li>



<li>Read the value and decode the bits using your drive&#8217;s manual (e.g. bit 0 = ready, bit 2 = running).</li>
</ol>



<p class="wp-block-paragraph">If the read returns exception 02, you&#8217;re asking for an address the drive doesn&#8217;t have — re-check the manual and the <a href="https://qmodmaster.com/modbus-register-address-offset-guide/">address offset guide</a>.</p>



<h2 class="wp-block-heading">Step 4: Write the Frequency Reference (FC06)</h2>



<p class="wp-block-paragraph">Once status reads work, the classic next test is commanding a frequency:</p>



<ol class="wp-block-list">
<li>Set Function Code to <strong>06: Write Single Register</strong>.</li>



<li>Set Start Address to your drive&#8217;s frequency-reference register <strong>(example only — check your drive&#8217;s manual)</strong>.</li>



<li>Enter the value in the drive&#8217;s units (many drives use 0.01 Hz steps, so 2500 = 25.00 Hz — confirm in the manual).</li>



<li>Verify with another FC03 read of the status word or output frequency register.</li>
</ol>



<div class="checklist"><strong>Debugging checklist — VFD won&#8217;t respond:</strong><br>① Drive&#8217;s control source set to Modbus/communication? ② Slave ID matches? ③ Baud/parity/stop bits identical on both ends? ④ A/B wiring not swapped? (Swap once and retry — harmless.) ⑤ Termination resistor needed on long runs? ⑥ Only one master on the bus? ⑦ RTS control toggled? ⑧ Right registers per the manual?</div>



<h2 class="wp-block-heading">Frequently Asked Questions</h2>



<h3 class="wp-block-heading">What register address is the status word on my VFD?</h3>



<p class="wp-block-paragraph">There is no universal answer — every brand and series uses different addresses. This is why the examples above are marked &#8220;example only.&#8221; The status-word address is in your drive&#8217;s Modbus/communication appendix.</p>



<h3 class="wp-block-heading">The drive reads fine but won&#8217;t accept writes — why?</h3>



<p class="wp-block-paragraph">Most drives have a &#8220;control source&#8221; or &#8220;command source&#8221; parameter that defaults to the keypad. Until you switch it to the Modbus/communication port, writes are ignored or rejected. This is the single most common cause.</p>



<h3 class="wp-block-heading">Can I damage the drive by writing wrong registers?</h3>



<p class="wp-block-paragraph">Yes — writing an unknown register can change motor parameters or behavior. Only write to addresses your drive&#8217;s manual documents for the purpose you intend, and keep the motor unloaded during first tests.</p>



<h3 class="wp-block-heading">Do I need a special cable for VFD Modbus?</h3>



<p class="wp-block-paragraph">You need an RS485 interface — a USB-to-RS485 adapter is the standard choice. Cheap unbranded adapters are a common source of flaky VFD connections; our <a href="https://qmodmaster.com/usb-to-rs485-adapter-buying-guide/">buying guide</a> covers what to look for.</p>



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



<ul class="wp-block-list">
<li><a href="https://qmodmaster.com/usb-to-rs485-adapter-buying-guide/">USB-to-RS485 Adapter Buying Guide</a></li>



<li><a href="https://qmodmaster.com/read-holding-registers-step-by-step/">How to Read Holding Registers (FC03): Step-by-Step</a></li>



<li><a href="https://qmodmaster.com/modbus-no-response-timeout-fix/">Modbus No-Response Timeout Fix</a></li>



<li><a href="https://qmodmaster.com/download/">Download QModMaster</a></li>
</ul>


<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"What register address is the status word on my VFD?","acceptedAnswer":{"@type":"Answer","text":"There is no universal address — every brand and series differs. The status-word address is in your drive's Modbus communication appendix."}},{"@type":"Question","name":"The drive reads fine but won't accept writes — why?","acceptedAnswer":{"@type":"Answer","text":"Most drives default the control source to the keypad. Switch it to the Modbus/communication port before writes take effect."}},{"@type":"Question","name":"Can I damage the drive by writing wrong registers?","acceptedAnswer":{"@type":"Answer","text":"Yes — writing unknown registers can change motor parameters. Only write to documented addresses, and keep the motor unloaded during first tests."}},{"@type":"Question","name":"Do I need a special cable for VFD Modbus?","acceptedAnswer":{"@type":"Answer","text":"A USB-to-RS485 adapter is the standard interface. Cheap unbranded adapters are a common source of flaky VFD connections."}}]}
</script>

<style>.content-container.site-container{max-width:var(--global-content-narrow-width,842px)!important;margin:0 auto!important;padding:56px 24px 72px!important}.wp-block-table table{border-collapse:collapse;width:100%;margin:1em 0}.wp-block-table th,.wp-block-table td{border:1px solid #ddd;padding:10px;text-align:left}.wp-block-table th{background:#f5f7fa}.cta-box{background:#f0f6ff;border-left:4px solid #2271b1;padding:16px 20px;margin:1.5em 0;border-radius:4px}.verdict-box{background:#f0faf0;border-left:4px solid #2e7d32;padding:16px 20px;margin:1.5em 0;border-radius:4px}.checklist{background:#fffbe6;border:1px solid #e6d96c;padding:16px 20px;margin:1.5em 0;border-radius:4px}</style>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Modbus Function Codes Explained (01/02/03/04/05/06/15/16)</title>
		<link>https://qmodmaster.com/modbus-function-codes-explained/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 02:27:04 +0000</pubDate>
				<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/modbus-function-codes-explained/</guid>

					<description><![CDATA[Modbus Function Codes Explained (01/02/03/04/05/06/15/16) Function codes are the &#8220;verbs&#8221; of Modbus: they tell the slave what to do. QModMaster supports the eight most-used ones. Here is what each does, when to use it, and where it shows up in QModMaster&#8217;s dialog. Function Codes at a Glance Code Name Description Use case 01 Read Coils...]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">Modbus Function Codes Explained (01/02/03/04/05/06/15/16)</h1>



<p class="wp-block-paragraph">Function codes are the &#8220;verbs&#8221; of Modbus: they tell the slave what to do. QModMaster supports the eight most-used ones. Here is what each does, when to use it, and where it shows up in QModMaster&#8217;s dialog.</p>



<h2 class="wp-block-heading">Function Codes at a Glance</h2>



<figure class="wp-block-table"><table><thead><tr><th>Code</th><th>Name</th><th>Description</th><th>Use case</th></tr></thead><tbody><tr><td>01</td><td>Read Coils</td><td>Reads on/off output states (discrete outputs) from the slave.</td><td>Check relay outputs, digital outputs, running flags on a device.</td></tr><tr><td>02</td><td>Read Discrete Inputs</td><td>Reads on/off input states (read-only digital inputs).</td><td>Read limit switches, pushbuttons, sensor digital inputs.</td></tr><tr><td>03</td><td>Read Holding Registers</td><td>Reads read/write 16-bit registers.</td><td>Read setpoints, configuration values, measured values — the most-used code for reading.</td></tr><tr><td>04</td><td>Read Input Registers</td><td>Reads read-only 16-bit registers.</td><td>Read analog inputs, sensor measurements, status words that you cannot write to.</td></tr><tr><td>05</td><td>Write Single Coil</td><td>Writes one on/off output.</td><td>Turn a relay on/off, start/stop a motor, set a single digital output.</td></tr><tr><td>06</td><td>Write Single Register</td><td>Writes one 16-bit register.</td><td>Write a frequency setpoint, change one configuration parameter.</td></tr><tr><td>15</td><td>Write Multiple Coils</td><td>Writes a block of on/off outputs in one request.</td><td>Set a whole group of digital outputs atomically, e.g. a valve manifold.</td></tr><tr><td>16</td><td>Write Multiple Registers</td><td>Writes a block of registers in one request.</td><td>Write multi-register values (32-bit/float pairs) or update a parameter block at once.</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Where Function Codes Appear in QModMaster</h2>



<p class="wp-block-paragraph">In QModMaster&#8217;s main window, the <strong>Function Code</strong> dropdown lists these codes by number and name. Select the code, then set Slave ID, Start Address, and Number of Points (for reads) or the value to write (for writes). The Bus Monitor shows the function code of every request and response, so you can confirm the device answered the exact code you sent (<a href="https://qmodmaster.com/qmodmaster-bus-monitor-guide/">Bus Monitor guide</a>).</p>



<div class="verdict-box"><strong>Rule of thumb:</strong> the read codes 01/02 are for single-bit I/O, 03/04 are for 16-bit registers; 05/06 write one item, 15/16 write blocks. Coils (01/05/15) are writable bits; discrete inputs (02) and input registers (04) are read-only.</div>



<h2 class="wp-block-heading">Frequently Asked Questions</h2>



<h3 class="wp-block-heading">What is the difference between FC03 and FC04?</h3>



<p class="wp-block-paragraph">FC03 reads holding registers (read/write, e.g. setpoints); FC04 reads input registers (read-only, e.g. sensor measurements). The data may look identical — the difference is whether the slave allows you to write to that address.</p>



<h3 class="wp-block-heading">What is the difference between FC05 and FC15, or FC06 and FC16?</h3>



<p class="wp-block-paragraph">FC05/FC06 write a single coil/register; FC15/FC16 write a block of them in one request. Use the block codes when a value spans multiple registers (32-bit integers, floats) or when several outputs must change at the same time.</p>



<h3 class="wp-block-heading">Does QModMaster support all Modbus function codes?</h3>



<p class="wp-block-paragraph">QModMaster supports the eight common codes: 01, 02, 03, 04, 05, 06, 15 and 16. These cover the vast majority of debugging and testing work with Modbus RTU and TCP slaves.</p>



<h3 class="wp-block-heading">I sent FC03 but got an exception response — what does that mean?</h3>



<p class="wp-block-paragraph">The slave answered with an error code instead of data. The most common is 02 (Illegal Data Address — you asked for registers that don&#8217;t exist). See our <a href="https://qmodmaster.com/modbus-exception-codes-explained/">exception codes guide</a> for the full list and fixes.</p>



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



<ul class="wp-block-list">
<li><a href="https://qmodmaster.com/read-holding-registers-step-by-step/">How to Read Holding Registers (FC03): Step-by-Step</a></li>



<li><a href="https://qmodmaster.com/modbus-exception-codes-explained/">Modbus Exception Codes Explained</a></li>



<li><a href="https://qmodmaster.com/modbus-register-address-offset-guide/">Modbus Register Address Offset Guide</a></li>



<li><a href="https://qmodmaster.com/download/">Download QModMaster</a></li>
</ul>


<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"What is the difference between FC03 and FC04?","acceptedAnswer":{"@type":"Answer","text":"FC03 reads holding registers (read/write, e.g. setpoints); FC04 reads input registers (read-only, e.g. sensor measurements)."}},{"@type":"Question","name":"What is the difference between FC05 and FC15, or FC06 and FC16?","acceptedAnswer":{"@type":"Answer","text":"FC05/FC06 write a single coil/register; FC15/FC16 write a block in one request, useful for multi-register values or atomic output changes."}},{"@type":"Question","name":"Does QModMaster support all Modbus function codes?","acceptedAnswer":{"@type":"Answer","text":"QModMaster supports the eight common codes: 01, 02, 03, 04, 05, 06, 15 and 16, over Modbus RTU and TCP."}},{"@type":"Question","name":"I sent FC03 but got an exception response — what does that mean?","acceptedAnswer":{"@type":"Answer","text":"The slave answered with an error code instead of data — most commonly 02 (Illegal Data Address)."}}]}
</script>

<style>.content-container.site-container{max-width:var(--global-content-narrow-width,842px)!important;margin:0 auto!important;padding:56px 24px 72px!important}.wp-block-table table{border-collapse:collapse;width:100%;margin:1em 0}.wp-block-table th,.wp-block-table td{border:1px solid #ddd;padding:10px;text-align:left}.wp-block-table th{background:#f5f7fa}.cta-box{background:#f0f6ff;border-left:4px solid #2271b1;padding:16px 20px;margin:1.5em 0;border-radius:4px}.verdict-box{background:#f0faf0;border-left:4px solid #2e7d32;padding:16px 20px;margin:1.5em 0;border-radius:4px}.checklist{background:#fffbe6;border:1px solid #e6d96c;padding:16px 20px;margin:1.5em 0;border-radius:4px}</style>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Read Holding Registers (FC03): Step-by-Step</title>
		<link>https://qmodmaster.com/read-holding-registers-step-by-step/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 02:26:35 +0000</pubDate>
				<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/read-holding-registers-step-by-step/</guid>

					<description><![CDATA[How to Read Holding Registers (FC03): Step-by-Step Holding registers are the read/write data locations in a Modbus slave — setpoints, configuration values, measured values you need to check. Function code 03 (FC03) is how a Modbus master reads them. This guide walks you through reading holding registers in QModMaster, register by register. What QModMaster Needs...]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">How to Read Holding Registers (FC03): Step-by-Step</h1>



<p class="wp-block-paragraph">Holding registers are the read/write data locations in a Modbus slave — setpoints, configuration values, measured values you need to check. Function code 03 (FC03) is how a Modbus master <strong>reads</strong> them. This guide walks you through reading holding registers in QModMaster, register by register.</p>



<h2 class="wp-block-heading">What QModMaster Needs to Read Holding Registers</h2>



<p class="wp-block-paragraph">QModMaster acts as the Modbus master (client). Before you can read anything, four fields in the main window have to match your slave device:</p>



<ul class="wp-block-list">
<li><strong>Slave ID</strong> — the Modbus address of your device (1–247). Must match the device&#8217;s configured address.</li>



<li><strong>Function Code</strong> — set to <strong>03: Read Holding Registers</strong>.</li>



<li><strong>Start Address</strong> — the first register you want to read. QModMaster uses 0-based addressing, so a device manual that says &#8220;register 40001&#8221; is entered as <strong>0</strong> here.</li>



<li><strong>Number of Points</strong> — how many consecutive registers to read in one request.</li>
</ul>



<p class="wp-block-paragraph">If the physical link isn&#8217;t up yet (RTU serial port or TCP connection), see our <a href="https://qmodmaster.com/modbus-no-response-timeout-fix/">no-response timeout fix guide</a> first.</p>



<h2 class="wp-block-heading">Step-by-Step: Read 10 Holding Registers</h2>



<p class="wp-block-paragraph">Here is the complete walkthrough. It assumes your connection already works and your slave ID is 1.</p>



<ol class="wp-block-list">
<li><strong>Select the interface.</strong> Serial (RTU) — choose the COM port, baud rate, parity, stop bits exactly as the device is configured. TCP — enter the device IP and port 502.</li>



<li><strong>Set Slave ID to 1</strong> (or your device&#8217;s Modbus address).</li>



<li><strong>Set Function Code to 03: Read Holding Registers.</strong></li>



<li><strong>Set Start Address to 0.</strong> This reads device register 40001 (first holding register) in 1-based notation.</li>



<li><strong>Set Number of Points to 10.</strong> QModMaster will request registers 0–9 (40001–40010 in 1-based notation).</li>



<li><strong>Click Connect / read</strong> — the values appear in the result grid, one row per register.</li>



<li><strong>Watch Bus Monitor</strong> if you want to see the actual request/response frames on the wire (<a href="https://qmodmaster.com/qmodmaster-bus-monitor-guide/">Bus Monitor guide</a>).</li>
</ol>



<div class="verdict-box"><strong>Tip:</strong> Start with a short read (1–5 registers) at address 0. If that works, expand to the range you actually need. Short reads rule out most addressing mistakes in seconds.</div>



<h2 class="wp-block-heading">Interpreting the Values: Data Formats</h2>



<p class="wp-block-paragraph">Raw register values are 16-bit integers, but your device may be sending temperatures, floats, or bit fields. QModMaster lets you switch how the grid displays each value — hex, signed/unsigned int, float — so change the display format before assuming the data is wrong. A &#8220;weird&#8221; reading of 17223 might be a perfectly good value shown in the wrong format.</p>



<h2 class="wp-block-heading">Troubleshooting: When the Read Fails</h2>



<h3 class="wp-block-heading">1. Values are shifted by one register</h3>



<p class="wp-block-paragraph">The most common FC03 issue. Device manuals usually number holding registers from 40001 (1-based), while QModMaster takes the 0-based offset. If your manual&#8217;s &#8220;40005&#8221; returns data for the wrong point, subtract 1: enter <strong>4</strong> in QModMaster. Full explanation in our <a href="https://qmodmaster.com/modbus-register-address-offset-guide/">register address offset guide</a>.</p>



<h3 class="wp-block-heading">2. Wrong Slave ID</h3>



<p class="wp-block-paragraph">No response at all — or a response to a different device on the bus — usually means the Slave ID field doesn&#8217;t match the device&#8217;s configured address. Double-check the device&#8217;s address setting (DIP switches, config menu, or manual).</p>



<h3 class="wp-block-heading">3. Exception code 02 (Illegal Data Address)</h3>



<p class="wp-block-paragraph">The slave answered but refused the address — your Start Address / Number of Points range extends beyond the registers the device actually has. Shorten the range or move the start address. See our <a href="https://qmodmaster.com/modbus-exception-codes-explained/">exception codes guide</a> for the other codes you may see.</p>



<h2 class="wp-block-heading">Frequently Asked Questions</h2>



<h3 class="wp-block-heading">Can I read holding registers while another program is using the port?</h3>



<p class="wp-block-paragraph">No — a serial port can only be opened by one program at a time on Windows. Close the other tool (or disconnect QModMaster) before retrying. On Linux, the same rule applies to the /dev/tty* device node.</p>



<h3 class="wp-block-heading">Why do I get the same value in every register?</h3>



<p class="wp-block-paragraph">Often the device genuinely mirrors one value across a range, but first check the display format: a value shown in the wrong format can look &#8220;stuck.&#8221; Re-read with a different format selected before concluding the device is misbehaving.</p>



<h3 class="wp-block-heading">How many registers can I read in one FC03 request?</h3>



<p class="wp-block-paragraph">Modbus limits an FC03 request to 125 registers. In practice, keep reads short (10–50) while debugging — large reads multiply the chance of crossing into an unmapped address and getting exception 02.</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/modbus-exception-codes-explained/">Modbus Exception Codes Explained</a></li>



<li><a href="https://qmodmaster.com/qmodmaster-tutorial/">QModMaster Tutorial</a></li>



<li><a href="https://qmodmaster.com/download/">Download QModMaster</a></li>
</ul>


<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Can I read holding registers while another program is using the port?","acceptedAnswer":{"@type":"Answer","text":"No — a serial port can only be opened by one program at a time on Windows. Close the other tool before retrying."}},{"@type":"Question","name":"Why do I get the same value in every register?","acceptedAnswer":{"@type":"Answer","text":"Often the device genuinely mirrors one value, but first check the display format in QModMaster — a wrong format can make values look stuck."}},{"@type":"Question","name":"How many registers can I read in one FC03 request?","acceptedAnswer":{"@type":"Answer","text":"Modbus limits FC03 to 125 registers per request. Keep reads short (10–50) while debugging."}}]}
</script>

<style>.content-container.site-container{max-width:var(--global-content-narrow-width,842px)!important;margin:0 auto!important;padding:56px 24px 72px!important}.wp-block-table table{border-collapse:collapse;width:100%;margin:1em 0}.wp-block-table th,.wp-block-table td{border:1px solid #ddd;padding:10px;text-align:left}.wp-block-table th{background:#f5f7fa}.cta-box{background:#f0f6ff;border-left:4px solid #2271b1;padding:16px 20px;margin:1.5em 0;border-radius:4px}.verdict-box{background:#f0faf0;border-left:4px solid #2e7d32;padding:16px 20px;margin:1.5em 0;border-radius:4px}.checklist{background:#fffbe6;border:1px solid #e6d96c;padding:16px 20px;margin:1.5em 0;border-radius:4px}</style>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>QModMaster Bus Monitor: Reading Raw Modbus Traffic</title>
		<link>https://qmodmaster.com/qmodmaster-bus-monitor-guide/</link>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 02:08:26 +0000</pubDate>
				<category><![CDATA[Tutorials]]></category>
		<guid isPermaLink="false">https://qmodmaster.com/qmodmaster-bus-monitor-guide/</guid>

					<description><![CDATA[QModMaster Bus Monitor: Reading Raw Modbus Traffic When Modbus misbehaves, opinions don&#8217;t help — bytes do. QModMaster&#8217;s bus monitor shows every byte sent and received in raw hex, timestamped. Learn to read it and you can distinguish &#8220;my request never left the PC&#8221; from &#8220;the device answered but the frame was corrupt&#8221; from &#8220;the device...]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">QModMaster Bus Monitor: Reading Raw Modbus Traffic</h1>



<p class="wp-block-paragraph">When Modbus misbehaves, opinions don&#8217;t help — bytes do. QModMaster&#8217;s bus monitor shows every byte sent and received in raw hex, timestamped. Learn to read it and you can distinguish &#8220;my request never left the PC&#8221; from &#8220;the device answered but the frame was corrupt&#8221; from &#8220;the device refused on purpose&#8221; in seconds. (QModMaster is free, open-source, LGPLv3 — upstream is <a href="https://sourceforge.net/projects/qmodmaster/" rel="nofollow noopener" target="_blank">the upstream SourceForge project</a>.)</p>



<h2 class="wp-block-heading">Opening the bus monitor</h2>



<p class="wp-block-paragraph">The Bus Monitor panel is docked in the main window — usually along the bottom. If it&#8217;s hidden, re-enable it from the View menu. Each line shows the direction (TX/RX), a timestamp, and the raw hex bytes of the frame.</p>



<h2 class="wp-block-heading">Anatomy of a Modbus RTU frame</h2>



<p class="wp-block-paragraph">Here is a complete, real request — read 10 holding registers starting at protocol address 0 from slave 1 (illustrative example):</p>



<p class="wp-block-paragraph"><code>01 03 00 00 00 0A C5 CD</code></p>



<figure class="wp-block-table"><table><thead><tr><th>Bytes</th><th>Field</th><th>Value</th><th>Meaning</th></tr></thead><tbody>
<tr><td><code>01</code></td><td>Slave ID</td><td>1</td><td>which device this is for</td></tr>
<tr><td><code>03</code></td><td>Function code</td><td>3</td><td>read holding registers</td></tr>
<tr><td><code>00 00</code></td><td>Start address</td><td>0</td><td>protocol address 0 = register 40001</td></tr>
<tr><td><code>00 0A</code></td><td>Quantity</td><td>10</td><td>read ten registers</td></tr>
<tr><td><code>C5 CD</code></td><td>CRC-16</td><td>—</td><td>checksum, low byte first; the receiver recomputes it</td></tr>
</tbody></table></figure>



<p class="wp-block-paragraph">And a matching response carrying ten registers with values 100–1000:</p>



<p class="wp-block-paragraph"><code>01 03 14 00 64 00 C8 01 2C 01 90 01 F4 02 58 02 BC 03 20 03 84 03 E8 DB 70</code></p>



<figure class="wp-block-table"><table><thead><tr><th>Bytes</th><th>Field</th><th>Meaning</th></tr></thead><tbody>
<tr><td><code>01</code></td><td>Slave ID</td><td>reply from device 1</td></tr>
<tr><td><code>03</code></td><td>Function code</td><td>echoes the request</td></tr>
<tr><td><code>14</code></td><td>Byte count</td><td>0x14 = 20 data bytes follow (10 registers × 2)</td></tr>
<tr><td><code>00 64 … 03 E8</code></td><td>Data</td><td>ten 16-bit values: 100, 200, 300, …, 1000</td></tr>
<tr><td><code>DB 70</code></td><td>CRC-16</td><td>checksum over all preceding bytes</td></tr>
</tbody></table></figure>



<p class="wp-block-paragraph">Note the request is 8 bytes and the response is 25 — the request carries only an address and a count, while the response carries the actual data.</p>



<h2 class="wp-block-heading">Three debugging patterns</h2>



<h3 class="wp-block-heading">Pattern 1 — Request goes out, nothing comes back</h3>



<p class="wp-block-paragraph">You see the TX line in the monitor but no RX. The PC side works; the fault is downstream: wiring, slave ID, baud rate, or RTS timing. Work the <a href="https://qmodmaster.com/modbus-no-response-timeout-fix/">no-response checklist</a>.</p>



<h3 class="wp-block-heading">Pattern 2 — Reply arrives but fails CRC</h3>



<p class="wp-block-paragraph">RX bytes appear and QModMaster flags a CRC error. The frame was corrupted in transit — noise, baud mismatch, missing termination. See the <a href="https://qmodmaster.com/modbus-crc-error-causes-fix/">CRC error guide</a>.</p>



<h3 class="wp-block-heading">Pattern 3 — Reply is an exception</h3>



<p class="wp-block-paragraph">The response function code is the request code + 0x80 — e.g. <code>0x83</code> answering an FC 03 read — followed by one code byte. Example: request <code>01 03 00 64 00 01</code>, exception reply <code>01 83 02 C0 F1</code> → code 02, illegal data address. Decode it with the <a href="https://qmodmaster.com/modbus-exception-codes-explained/">exception code guide</a>.</p>



<h2 class="wp-block-heading">When the monitor isn&#8217;t enough</h2>



<p class="wp-block-paragraph">The bus monitor shows what QModMaster&#8217;s serial driver saw — but a USB logic analyzer shows what&#8217;s electrically on the wire. When the two disagree, the adapter or its driver is lying to you. Capturing both sides is the fastest way to settle &#8220;is it the PC or the bus&#8221;.</p>


<div class="cta-box">

<p class="wp-block-paragraph">Ready to compare the wire against the software? <a href="https://qmodmaster.com/go/logic-analyzer">USB logic analyzers</a> capture raw RS485 frames for hardware-level debugging.</p>

</div>


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



<h3 class="wp-block-heading">Does the bus monitor show Modbus TCP traffic too?</h3>



<p class="wp-block-paragraph">Yes. For TCP each line shows the MBAP header (transaction ID, protocol ID, length) followed by the unit ID and the PDU. The request/response logic is identical — there is just no CRC field to decode.</p>



<h3 class="wp-block-heading">Can I copy frames out of the monitor?</h3>



<p class="wp-block-paragraph">Yes — select the hex text and copy it. Pasting a suspect frame into a CRC calculator (or recomputing it by hand) is the fastest way to confirm whether corruption happened on the wire or in software.</p>



<h3 class="wp-block-heading">Why is the response longer than the request?</h3>



<p class="wp-block-paragraph">The request only carries an address and a quantity (8 bytes in the example); the response carries every register value (25 bytes for ten registers). Longer responses are normal — truncated ones are not.</p>



<h3 class="wp-block-heading">The monitor shows garbled or partial bytes. What now?</h3>



<p class="wp-block-paragraph">Garbled bytes almost always mean a baud-rate or framing mismatch — both sides must agree on baud, parity, data bits, and stop bits. Fix the serial settings first, then look at the <a href="https://qmodmaster.com/modbus-crc-error-causes-fix/">CRC error guide</a> if corruption persists.</p>



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



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

<li><a href="https://qmodmaster.com/modbus-no-response-timeout-fix/">QModMaster &#8216;No Response&#8217; Timeout: 9 Fixes</a> — pattern 1: silence on the bus</li>


<li><a href="https://qmodmaster.com/modbus-crc-error-causes-fix/">Modbus CRC Errors: Causes and Fixes</a> — pattern 2: corrupted replies</li>


<li><a href="https://qmodmaster.com/modbus-exception-codes-explained/">Modbus Exception Codes 01–04 Explained</a> — pattern 3: the device refuses</li>


<li><a href="https://qmodmaster.com/qmodmaster-tutorial/">QModMaster Tutorial: Your First Poll in 10 Minutes</a> — from install to live data</li>


<li><a href="https://qmodmaster.com/download/">Download QModMaster</a> — free, open-source (LGPLv3), Windows and Linux</li>

</ul>


<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Does the bus monitor show Modbus TCP traffic too?","acceptedAnswer":{"@type":"Answer","text":"Yes. For TCP each line shows the MBAP header (transaction ID, protocol ID, length) followed by the unit ID and the PDU. The request/response logic is identical - there is just no CRC field to decode."}},{"@type":"Question","name":"Can I copy frames out of the monitor?","acceptedAnswer":{"@type":"Answer","text":"Yes - select the hex text and copy it. Pasting a suspect frame into a CRC calculator (or recomputing it by hand) is the fastest way to confirm whether corruption happened on the wire or in software."}},{"@type":"Question","name":"Why is the response longer than the request?","acceptedAnswer":{"@type":"Answer","text":"The request only carries an address and a quantity (8 bytes in the example); the response carries every register value (25 bytes for ten registers). Longer responses are normal - truncated ones are not."}},{"@type":"Question","name":"The monitor shows garbled or partial bytes. What now?","acceptedAnswer":{"@type":"Answer","text":"Garbled bytes almost always mean a baud-rate or framing mismatch - both sides must agree on baud, parity, data bits, and stop bits. Fix the serial settings first, then check the CRC error guide if corruption persists."}}]}
</script>
<style>.content-container.site-container{max-width:var(--global-content-narrow-width,842px)!important;margin:0 auto!important;padding:56px 24px 72px!important}.wp-block-table table{border-collapse:collapse;width:100%;margin:1em 0}.wp-block-table th,.wp-block-table td{border:1px solid #ddd;padding:10px;text-align:left}.wp-block-table th{background:#f5f7fa}.cta-box{background:#f0f6ff;border-left:4px solid #2271b1;padding:16px 20px;margin:1.5em 0;border-radius:4px}.verdict-box{background:#f0faf0;border-left:4px solid #2e7d32;padding:16px 20px;margin:1.5em 0;border-radius:4px}.checklist{background:#fffbe6;border:1px solid #e6d96c;padding:16px 20px;margin:1.5em 0;border-radius:4px}</style>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
