{"id":3660,"date":"2026-10-29T13:00:00","date_gmt":"2026-10-29T05:00:00","guid":{"rendered":"https:\/\/cnbygele.com\/?p=3660"},"modified":"2026-10-28T19:08:01","modified_gmt":"2026-10-28T11:08:01","slug":"modbus-coherent-snapshot","status":"publish","type":"post","link":"https:\/\/cnbygele.com\/fr\/blog\/modbus-coherent-snapshot\/","title":{"rendered":"Lectures coh\u00e9rentes des registres des compteurs Modbus : \u00e9viter les valeurs incoh\u00e9rentes"},"content":{"rendered":"<p>A coherent Modbus meter read must return the words of a value, and any related measurements used together, from a compatible update state. Reading adjacent registers in one request reduces opportunities for mixed reads, but the protocol alone does not guarantee a meter-wide simultaneous measurement snapshot. Confirm the exact device&#8217;s documented update and buffering behavior before treating a returned block as atomic.<\/p>\n<p>This distinction matters when energy counters cross word boundaries or when a calculation combines values that change at different times. A response can have correct length and valid transport checks while still containing a combination that is unsuitable for the intended calculation. Begin with the <a href=\"https:\/\/cnbygele.com\/blog\/power-meter-modbus-communication-setup\/\">power meter Modbus setup guide<\/a> to establish addressing and basic interpretation before investigating consistency.<\/p>\n<h2>Separate three kinds of consistency<\/h2>\n<p>The first question is whether a multiword number is internally consistent. A 32-bit value might occupy two 16-bit registers. If the client reads each word independently while the source changes, the assembled result could combine words from different versions. Word order and scaling can be correct and the value can still be wrong because the pieces were captured at different moments.<\/p>\n<p>The second question is whether related quantities share a useful measurement window. Voltage, current and power may have different refresh paths or averaging periods. A coherent two-word power value does not prove it was measured at exactly the same instant as a separately read current value. Decide which timing relationship the application actually requires.<\/p>\n<p>The third question concerns the complete data path. A gateway might poll the meter once, cache the result and answer many clients. The client&#8217;s transaction time then describes its interaction with the gateway, not necessarily the meter&#8217;s measurement time. Avoid describing all three issues simply as communication errors; each requires different evidence and a different remedy.<\/p>\n<h2>What the Modbus specification establishes<\/h2>\n<p>The <a href=\"https:\/\/www.modbus.org\/file\/secure\/modbusprotocolspecification.pdf\" rel=\"noopener nofollow\" target=\"_blank\">Modbus Application Protocol Specification<\/a> defines register read requests and their responses. Function 03 reads holding registers and function 04 reads input registers. The returned structure identifies the data bytes belonging to that request. These transport definitions do not describe every manufacturer&#8217;s internal measurement refresh architecture.<\/p>\n<p>Use the specified function, starting address and quantity from the exact register map. Do not combine an entire address range merely because a request can express it. A range may cross unsupported locations, different data groups or implementation boundaries. Respect the instrument&#8217;s documented request limits and timing; the protocol&#8217;s general limits do not establish the capability of a specific model.<\/p>\n<p>The <a href=\"https:\/\/cnbygele.com\/product\/by194-series-multifunctional-power-instruments\/\">CNBYG BY194 family<\/a> includes optional RS485\/MODBUS communication. The family product page is not evidence of a particular multiword encoding, latch function or snapshot guarantee. Ask for the applicable firmware-specific register map and update description. This article supplies an integration review method without assigning undocumented behavior to the instrument.<\/p>\n<p><figure><img decoding=\"async\" alt=\"Disconnected BY194 exterior with multiword read consistency review records \u2014 inspection\" class=\"wp-image-3657\" height=\"1024\" loading=\"lazy\" src=\"https:\/\/cnbygele.com\/wp-content\/uploads\/2026\/10\/modbus-coherent-snapshot-inspection-20261028.png\" style=\"max-width:100%;height:auto\" width=\"1536\" srcset=\"https:\/\/cnbygele.com\/wp-content\/uploads\/2026\/10\/modbus-coherent-snapshot-inspection-20261028.png 1536w, https:\/\/cnbygele.com\/wp-content\/uploads\/2026\/10\/modbus-coherent-snapshot-inspection-20261028-300x200.png 300w, https:\/\/cnbygele.com\/wp-content\/uploads\/2026\/10\/modbus-coherent-snapshot-inspection-20261028-1024x683.png 1024w, https:\/\/cnbygele.com\/wp-content\/uploads\/2026\/10\/modbus-coherent-snapshot-inspection-20261028-768x512.png 768w, https:\/\/cnbygele.com\/wp-content\/uploads\/2026\/10\/modbus-coherent-snapshot-inspection-20261028-18x12.png 18w, https:\/\/cnbygele.com\/wp-content\/uploads\/2026\/10\/modbus-coherent-snapshot-inspection-20261028-600x400.png 600w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><figcaption>Product-reference illustration of the disconnected BY194 front exterior beside multiword read consistency review records. Props illustrate the review process and do not establish installed interfaces, snapshot guarantees, backup functions or gateway features.<\/figcaption><\/figure>\n<\/p>\n<h2>Understand a torn counter with a bounded example<\/h2>\n<p>Consider a hypothetical unsigned 32-bit counter stored as a high word and low word, with no additional scale. Its value is high word multiplied by 65,536 plus low word. Just before a boundary, the words might be 0 and 65,535. After one increment, they become 1 and 0. These are illustrative register values, not a BY194 register assignment.<\/p>\n<p>If separate reads capture the old high word and the new low word, the client assembles zero. If they capture the new high word and old low word, the client assembles 131,071. Neither is the true boundary value. The error arises from mixed versions rather than a bad multiplication factor. Keeping raw words and request times allows the reviewer to recognize that distinction.<\/p>\n<p>A large apparent jump can also result from reset, rollover, wrong type, missing words or mapping errors. Do not diagnose a torn read from the graph alone. Compare raw evidence, device documentation and the circumstances of the transition. The <a href=\"https:\/\/cnbygele.com\/blog\/power-meter-energy-counter-rollover\/\">energy counter rollover guide<\/a> helps keep normal counter limits separate from an inconsistent capture.<\/p>\n<h2>Choose the narrowest supported read strategy<\/h2>\n<p>Start by requesting all words of one value together when the register map permits that operation. Decode only after the complete successful response has been validated. A partial, timed-out or mismatched response must not update half of the application&#8217;s stored number. The application should publish either a complete accepted value or a clearly identified failure state.<\/p>\n<p>A documented snapshot or latch feature may provide a stronger guarantee, but using it can involve a specific sequence, additional status checks or a state-changing command. Follow the exact manual and change-control process. Do not experiment with writes to production equipment in an attempt to discover whether an undocumented latch exists.<\/p>\n<p>Some implementations document a version counter or consistency indicator. Its location, ordering rules and rollover behavior must be specified before a client can use it reliably. A generic repeated-read trick is not a universal replacement for those rules. If the source updates continuously or uses an unexpected order, repeated equal words can still give misleading confidence.<\/p>\n<div style=\"overflow-x:auto;max-width:100%\">\n<table style=\"border-collapse:collapse;width:100%;min-width:560px\">\n<thead>\n<tr>\n<th style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Situation<\/th>\n<th style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Useful evidence<\/th>\n<th style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Appropriate response<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Separate requests assemble one number<\/td>\n<td style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Raw words and per-request times<\/td>\n<td style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Use one supported block read and verify documented consistency<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">One block still shows unexplained jumps<\/td>\n<td style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Device refresh and buffering description<\/td>\n<td style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Obtain model-specific clarification and preserve questionable samples<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Related quantities appear inconsistent<\/td>\n<td style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Averaging windows and update times<\/td>\n<td style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Align the calculation inputs or mark them unsuitable for comparison<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Two clients disagree<\/td>\n<td style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Gateway cache age and routing<\/td>\n<td style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Trace which source instance and update each client received<\/td>\n<\/tr>\n<tr>\n<td style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Partial response reaches the decoder<\/td>\n<td style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Request and response lengths<\/td>\n<td style=\"border:1px solid #d1d5db;padding:10px;text-align:left;vertical-align:top\">Reject the incomplete sample; retain the last value only with explicit quality<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h2>Preserve evidence before changing the system<\/h2>\n<p>Record the device identity, firmware, map revision, client version and gateway route. Retain each diagnostic request with its function, start address, quantity, response bytes and local capture time. Where available, preserve a documented source timestamp or sequence value separately. Keep timezone and clock synchronization evidence so that two logs can be compared meaningfully.<\/p>\n<p>Limit diagnostic collection to approved reads at a rate the network can support. A very aggressive test can increase timeouts and produce a new problem that masks the original one. The <a href=\"https:\/\/cnbygele.com\/blog\/power-meter-polling-interval\/\">polling interval guide<\/a> discusses bus capacity and update rates; a faster client request does not necessarily create a newer measurement inside the instrument.<\/p>\n<p>State the diagnostic hypothesis in advance. For example, suspect that two separate reads cross an energy counter update boundary, then compare with a supported contiguous read under comparable operating conditions. Change one variable at a time. Record whether the suspected anomaly disappears, persists or cannot be reproduced, without treating a short quiet period as proof of correctness.<\/p>\n<h2>Distinguish numeric decoding from snapshot behavior<\/h2>\n<p>Verify address offset, data type, word order, signedness, units and scale before attributing a discrepancy to timing. A stable but implausible value is often a mapping issue. A value that changes dramatically only near a word boundary may justify a consistency investigation, but both conditions can coexist if a client configuration has more than one error.<\/p>\n<p>Keep the raw register pair and the decoded result in the same diagnostic record. This lets a reviewer recompute the interpretation without recollecting the event. Document the decode formula or format reference rather than a screenshot of the final dashboard alone. A numerical display hides whether the application silently reused an old word or substituted a default.<\/p>\n<p>Reject nonfinite or otherwise invalid values according to the documented data contract. Do not smooth an impossible jump just to make a report look plausible. A filter can reduce visible noise while concealing an actual integration error. Preserve the original sample, its quality state and the reason it was excluded from subsequent calculations.<\/p>\n<h2>Test the calculation, not only the transport<\/h2>\n<p>An acceptance test should identify the quantity that depends on coherence. A total energy display may require internally consistent counter words. A phase comparison may require an agreed measurement window. A transient investigation may require capabilities beyond the ordinary polling interface. Write those needs explicitly so that a successful register reply cannot be mistaken for satisfying every use case.<\/p>\n<p>Use a safe test arrangement with controlled or independently observed changes where feasible. Include transitions relevant to the suspected failure, such as a counter word boundary, but do not alter production counters to manufacture one. A software simulator can test the client&#8217;s response assembly logic; it cannot prove how the real meter buffers its measurements.<\/p>\n<p><figure><img decoding=\"async\" alt=\"Disconnected BY194 exterior with multiword read consistency review records \u2014 records\" class=\"wp-image-3658\" height=\"1024\" loading=\"lazy\" src=\"https:\/\/cnbygele.com\/wp-content\/uploads\/2026\/10\/modbus-coherent-snapshot-records-20261028.png\" style=\"max-width:100%;height:auto\" width=\"1536\" srcset=\"https:\/\/cnbygele.com\/wp-content\/uploads\/2026\/10\/modbus-coherent-snapshot-records-20261028.png 1536w, https:\/\/cnbygele.com\/wp-content\/uploads\/2026\/10\/modbus-coherent-snapshot-records-20261028-300x200.png 300w, https:\/\/cnbygele.com\/wp-content\/uploads\/2026\/10\/modbus-coherent-snapshot-records-20261028-1024x683.png 1024w, https:\/\/cnbygele.com\/wp-content\/uploads\/2026\/10\/modbus-coherent-snapshot-records-20261028-768x512.png 768w, https:\/\/cnbygele.com\/wp-content\/uploads\/2026\/10\/modbus-coherent-snapshot-records-20261028-18x12.png 18w, https:\/\/cnbygele.com\/wp-content\/uploads\/2026\/10\/modbus-coherent-snapshot-records-20261028-600x400.png 600w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><figcaption>Product-reference illustration of the disconnected BY194 front exterior beside multiword read consistency review records. Props illustrate the review process and do not establish installed interfaces, snapshot guarantees, backup functions or gateway features.<\/figcaption><\/figure>\n<\/p>\n<p><a href=\"https:\/\/nvlpubs.nist.gov\/nistpubs\/SpecialPublications\/NIST.SP.800-82r3.pdf\" rel=\"noopener nofollow\" target=\"_blank\">NIST&#8217;s OT security guidance<\/a> provides the wider context for controlled changes and dependable operational information. In this workflow, keep the approved map, test configuration and results together. If exact consistency semantics remain undocumented, record that limitation and avoid using the channel for calculations that require a stronger guarantee.<\/p>\n<h2>Report uncertainty in the downstream system<\/h2>\n<p>Store value, quality, source identity and time information as separate fields. An incomplete or questionable read should not become an ordinary valid zero. If the application retains the last accepted value, preserve its original acquisition time and indicate that it is old. Otherwise the dashboard can make a failed consistency check look like a stable operating condition.<\/p>\n<p>For derived quantities, define how input quality propagates. A calculation should not report a fresh valid result when one required input is rejected or belongs to an incompatible window. Keep the policy visible to operations and reporting owners. This is especially important when automated summaries hide individual raw records and display only a daily or monthly total.<\/p>\n<h2>Further learning: timing can change correctness<\/h2>\n<p>Computerphile&#8217;s lesson on race conditions explains why the order and overlap of operations can affect results. It is conceptual background for the mixed-read example, not a Modbus implementation specification. The exact meter documentation and controlled acceptance evidence determine which consistency claim is justified.<\/p>\n<div style=\"position:relative;padding-bottom:56.25%;height:0;overflow:hidden\"><iframe allowfullscreen=\"\" loading=\"lazy\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/W0jPTqIo5oE\" style=\"position:absolute;top:0;left:0;width:100%;height:100%;border:0\" title=\"Race Conditions on a Human Scale - Computerphile\"><\/iframe><\/div>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=W0jPTqIo5oE\" rel=\"noopener nofollow\" target=\"_blank\">Watch the educational lesson<\/a><\/p>\n<h2>Frequently asked questions<\/h2>\n<h3>Does one multi-register request guarantee a simultaneous snapshot?<\/h3>\n<p>No universal meter-wide guarantee follows from the protocol alone. Confirm how the exact device buffers multiword values and related measurement groups before relying on snapshot behavior.<\/p>\n<h3>Can correct CRC checks rule out a torn value?<\/h3>\n<p>No. A transport integrity check does not establish when the application&#8217;s measurement words were updated or whether related quantities share one measurement window.<\/p>\n<h3>Should I add a write command to latch measurements?<\/h3>\n<p>Only when the exact device manual documents the feature and the site&#8217;s approved procedure permits it. Do not discover undocumented behavior by writing to production equipment.<\/p>\n<h3>What should a client do with an incomplete response?<\/h3>\n<p>Reject the incomplete sample and avoid publishing a partially assembled value. If retaining an earlier accepted value, preserve its acquisition time and mark its quality appropriately.<\/p>\n<p><script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Does one multi-register request guarantee a simultaneous snapshot?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No universal meter-wide guarantee follows from the protocol alone. Confirm how the exact device buffers multiword values and related measurement groups before relying on snapshot behavior.\"}}, {\"@type\": \"Question\", \"name\": \"Can correct CRC checks rule out a torn value?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No. A transport integrity check does not establish when the application's measurement words were updated or whether related quantities share one measurement window.\"}}, {\"@type\": \"Question\", \"name\": \"Should I add a write command to latch measurements?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Only when the exact device manual documents the feature and the site's approved procedure permits it. Do not discover undocumented behavior by writing to production equipment.\"}}, {\"@type\": \"Question\", \"name\": \"What should a client do with an incomplete response?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Reject the incomplete sample and avoid publishing a partially assembled value. If retaining an earlier accepted value, preserve its acquisition time and mark its quality appropriately.\"}}]}<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lecture coh\u00e9rente des registres des compteurs Modbus : \u00e9viter les valeurs incoh\u00e9rentes. Guide pratique sur les preuves, la v\u00e9rification contr\u00f4l\u00e9e et la fiabilit\u00e9 des enregistrements des compteurs industriels.<\/p>","protected":false},"author":4,"featured_media":3654,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_gspb_post_css":"","footnotes":""},"categories":[1],"tags":[201],"class_list":["post-3660","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-multifunction-power-meter"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":8}},"acf":[],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/cnbygele.com\/fr\/wp-json\/wp\/v2\/posts\/3660","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cnbygele.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cnbygele.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cnbygele.com\/fr\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/cnbygele.com\/fr\/wp-json\/wp\/v2\/comments?post=3660"}],"version-history":[{"count":1,"href":"https:\/\/cnbygele.com\/fr\/wp-json\/wp\/v2\/posts\/3660\/revisions"}],"predecessor-version":[{"id":3661,"href":"https:\/\/cnbygele.com\/fr\/wp-json\/wp\/v2\/posts\/3660\/revisions\/3661"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cnbygele.com\/fr\/wp-json\/wp\/v2\/media\/3654"}],"wp:attachment":[{"href":"https:\/\/cnbygele.com\/fr\/wp-json\/wp\/v2\/media?parent=3660"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cnbygele.com\/fr\/wp-json\/wp\/v2\/categories?post=3660"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cnbygele.com\/fr\/wp-json\/wp\/v2\/tags?post=3660"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}