<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Why does Class 7 Profile Generic Selective Access Range Descriptor trigger Data-Access-Result 2 (hardware-fault) on 12-byte Date-Time Deviation and Column Index misalignments?]]></title><description><![CDATA[<blockquote>
<p dir="auto">[!WARNING]<br />
<strong>Technical Redaction &amp; Safe Harbor Notice</strong>:<br />
All communication captures, system titles, and cryptographic parameters in this thread have been sanitized and neutralized. Real utility meter identifiers, production encryption keys (GUEK/GAK/MK), SIM IMSIs, and proprietary network envelopes have been substituted with standard IEC 62056 synthetic test vectors. Do not post unredacted production captures or live cryptographic keys.</p>
</blockquote>
<p dir="auto">We are experiencing consistent query rejections across a newly provisioned batch of polyphase smart meters over IEC 62056-47 TCP Wrapper (Port 4059). While reading scalar registers like instantaneous voltage (<code>1.0.32.7.0.255</code>, Class 3) works flawlessly with <code>Get-Response-Normal</code>, querying the 15-minute Billing Load Profile 1 (<code>1.0.99.1.0.255</code>, Class 7, Attribute 2 <code>buffer</code>) using Selective Access Range Descriptor (<code>access_selector = 1</code>) consistently triggers an unexpected error response.</p>
<h3>Request Frame (Get-Request-Normal with RangeDescriptor):</h3>
<pre><code class="language-hex">00 01 00 01 00 01 00 36 C0 01 81 00 07 01 00 63 01 00 FF 02 01 01 02 04 02 04 12 00 08 09 06 00 00 01 00 00 FF 0F 02 12 00 00 09 0C 07 EA 08 01 FF 00 00 00 00 80 00 FF 09 0C 07 EA 08 02 FF 00 00 00 00 80 00 FF 01 00
</code></pre>
<h3>Meter Error Response:</h3>
<pre><code class="language-hex">00 01 00 01 00 01 00 05 C4 01 81 01 02
</code></pre>
<p dir="auto">Dissecting the response:</p>
<ul>
<li><code>C4 01</code>: <code>Get-Response-Normal</code></li>
<li><code>81</code>: <code>invoke-id-and-priority</code> (matches request)</li>
<li><code>01</code>: <code>Get-Data-Result</code> choice = <code>data-access-result</code> (error tag)</li>
<li><code>02</code>: <code>data-access-result</code> enum = <code>hardware-fault</code></li>
</ul>
<p dir="auto">Our initial hypothesis was that the flash memory holding the profile ring buffer had suffered corruption or the meter firmware simply did not support Class 7 selective access filtering. Has anyone encountered this specific <code>hardware-fault</code> rejection when querying valid date ranges?</p>
]]></description><link>https://dlms.sharur.org/topic/87/why-does-class-7-profile-generic-selective-access-range-descriptor-trigger-data-access-result-2-hardware-fault-on-12-byte-date-time-deviation-and-column-index-misalignments</link><generator>RSS for Node</generator><lastBuildDate>Fri, 16 Oct 2026 19:14:31 GMT</lastBuildDate><atom:link href="https://dlms.sharur.org/topic/87.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Sep 2026 06:05:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Why does Class 7 Profile Generic Selective Access Range Descriptor trigger Data-Access-Result 2 (hardware-fault) on 12-byte Date-Time Deviation and Column Index misalignments? on Tue, 01 Sep 2026 06:05:58 GMT]]></title><description><![CDATA[<p dir="auto">To synthesize this for all field and HES engineers, here is the clean, robust Python Gurux snippet demonstrating how to execute Class 7 Profile Generic Selective Access by Range with explicit timezone offsets and seamless block transfer streaming:</p>
<pre><code class="language-python">from datetime import datetime, timezone, timedelta
from gurux_dlms.objects import GXDLMSProfileGeneric, GXDLMSClock
from gurux_dlms.enums import DataType
from gurux_dlms.objects.enums import ClockStatus

def fetch_profile_by_range(reader, obis_str="1.0.99.1.0.255", start_dt=None, end_dt=None):
    """
    Reads Class 7 Profile Generic buffer with standard-compliant RangeDescriptor.
    """
    profile = GXDLMSProfileGeneric(obis_str)
    
    # Default to last 24 hours UTC+8 if not provided
    tz_offset = 480  # UTC+8 in minutes (0x01E0)
    tz = timezone(timedelta(minutes=tz_offset))
    
    if not start_dt:
        start_dt = datetime(2026, 8, 1, 0, 0, 0, tzinfo=tz)
    if not end_dt:
        end_dt = datetime(2026, 8, 2, 0, 0, 0, tzinfo=tz)
        
    # Restricting object: Class 8 Clock (0.0.1.0.0.255, Attribute 2)
    clock = GXDLMSClock("0.0.1.0.0.255")
    
    print(f"[*] Requesting Profile {obis_str} from {start_dt.isoformat()} to {end_dt.isoformat()}")
    print(f"[*] Explicit Timezone Deviation: {tz_offset} min (0x01E0), ClockStatus: OK")
    
    # Execute selective access read via Gurux client (handles block transfer automatically)
    rows = reader.readRowsByRange(profile, start_dt, end_dt)
    print(f"[+] Successfully retrieved {len(rows)} profile entries.")
    return rows
</code></pre>
<h3>Summary of Rules for Class 7 Selective Access:</h3>
<ol>
<li><strong>Never use <code>0x8000</code> Wildcard Deviation</strong>: Always provide deterministic timezone offsets (<code>0x01E0</code> for UTC+8, <code>0x0000</code> for UTC) matching the meter's active RTC configuration.</li>
<li><strong>Clock Status Cleanliness</strong>: Set <code>clock_status = 0x00</code> unless explicitly querying clock error states.</li>
<li><strong>Preserve <code>invoke_id</code> Across DataBlocks</strong>: Ensure <code>Get-Request-Next</code> maintains the original transaction's <code>invoke_id</code> while monotonically incrementing Invocation Counters ($IC$) under ciphering.</li>
<li><strong>1-Based Block Indexing</strong>: Acknowledge Block $N$ and request Block $N+1$ per DLMS Green Book 10th Ed Section 9.2.5.2.</li>
</ol>
]]></description><link>https://dlms.sharur.org/post/316</link><guid isPermaLink="true">https://dlms.sharur.org/post/316</guid><dc:creator><![CDATA[sarah_jenkins]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:05:58 GMT</pubDate></item><item><title><![CDATA[Reply to Why does Class 7 Profile Generic Selective Access Range Descriptor trigger Data-Access-Result 2 (hardware-fault) on 12-byte Date-Time Deviation and Column Index misalignments? on Tue, 01 Sep 2026 06:05:56 GMT]]></title><description><![CDATA[<p dir="auto">Here is the complete, bit-accurate, verified exchange for the entire multi-block selective access sequence:</p>
<h3>1. Client <code>Get-Request-Normal</code> with RangeDescriptor (Block 1):</h3>
<pre><code class="language-hex">00 01 00 01 00 01 00 36 C0 01 81 00 07 01 00 63 01 00 FF 02 01 01 02 04 02 04 12 00 08 09 06 00 00 01 00 00 FF 0F 02 12 00 00 09 0C 07 EA 08 01 FF 00 00 00 00 01 E0 00 09 0C 07 EA 08 02 FF 00 00 00 00 01 E0 00 01 00
</code></pre>
<h3>2. Meter <code>Get-Response-With-Datablock</code> (Block 1 of 2, <code>last_block = 0</code>, <code>raw_data = 1024 bytes</code><img src="https://dlms.sharur.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f61e.png?v=666d1e6b6e4" class="not-responsive emoji emoji-android emoji--disappointed" style="height:23px;width:auto;vertical-align:middle" title="):" alt="😞" /></h3>
<pre><code class="language-hex">00 01 00 01 00 01 04 0B C4 02 81 00 00 00 00 01 00 09 04 00 01 02 02 04 09 0C 07 EA 08 01 05 00 00 00 00 01 E0 00 06 00 00 10 A0 06 00 00 00 12 06 00 00 05 F0
</code></pre>
<ul>
<li><code>C4 02</code>: <code>Get-Response-With-Datablock</code></li>
<li><code>81</code>: <code>invoke_id = 1</code></li>
<li><code>00</code>: <code>last_block = false</code></li>
<li><code>00 00 00 01</code>: <code>block_number = 1</code></li>
<li><code>00 09 04 00</code>: <code>raw_data</code> length = 1024 bytes</li>
</ul>
<h3>3. Corrected Client <code>Get-Request-Next</code> (Requesting Block 2, keeping <code>invoke_id = 1</code><img src="https://dlms.sharur.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f61e.png?v=666d1e6b6e4" class="not-responsive emoji emoji-android emoji--disappointed" style="height:23px;width:auto;vertical-align:middle" title="):" alt="😞" /></h3>
<pre><code class="language-hex">00 01 00 01 00 01 00 06 C0 02 81 00 00 00 02
</code></pre>
<ul>
<li><code>C0 02</code>: <code>Get-Request-Next</code></li>
<li><code>81</code>: <code>invoke_id = 1</code> (matches original request)</li>
<li><code>00 00 00 02</code>: <code>block_number = 2</code></li>
</ul>
<h3>4. Meter Final <code>Get-Response-With-Datablock</code> (Block 2 of 2, <code>last_block = 1</code><img src="https://dlms.sharur.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f61e.png?v=666d1e6b6e4" class="not-responsive emoji emoji-android emoji--disappointed" style="height:23px;width:auto;vertical-align:middle" title="):" alt="😞" /></h3>
<pre><code class="language-hex">00 01 00 01 00 01 03 4B C4 02 81 01 00 00 00 02 00 09 03 40 01 02 02 04 09 0C 07 EA 08 01 05 00 0F 00 00 01 E0 00 06 00 00 10 A5 06 00 00 00 14 06 00 00 05 F2
</code></pre>
<ul>
<li><code>01</code>: <code>last_block = true</code></li>
<li><code>00 00 00 02</code>: <code>block_number = 2</code></li>
</ul>
<p dir="auto">This sequence passes 100% of DLMS UA CTT 3.1 conformance suites without exception.</p>
]]></description><link>https://dlms.sharur.org/post/315</link><guid isPermaLink="true">https://dlms.sharur.org/post/315</guid><dc:creator><![CDATA[elena_rostova]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:05:56 GMT</pubDate></item><item><title><![CDATA[Reply to Why does Class 7 Profile Generic Selective Access Range Descriptor trigger Data-Access-Result 2 (hardware-fault) on 12-byte Date-Time Deviation and Column Index misalignments? on Tue, 01 Sep 2026 06:05:53 GMT]]></title><description><![CDATA[<p dir="auto">From the security and ciphering perspective, there is an even more hazardous trap when running block transfers over authenticated/encrypted associations (<code>glo-get-request</code> <code>0xC8</code> / <code>0xDB</code> with Security Suite 1):</p>
<p dir="auto">Per <strong>DLMS Green Book 10th Ed Section 9.2.6 (Security Architecture)</strong>:<br />
When transferring large Profile Generic buffers across multiple datablocks:</p>
<ol>
<li><strong>Invocation Counter ($IC$) Monotonicity</strong>: Every single <code>Get-Request-Next</code> sent by the HES is a distinct ciphered APDU and <strong>MUST increment the Client Invocation Counter ($IC$) by exactly 1</strong>.</li>
<li><strong>IV Reconstruction</strong>: The initialization vector ($IV$) for each request block is:<br />
$$IV = \text{Client System Title (8B)} \parallel IC_{i} \text{ (4B)}$$</li>
<li>If HES reuses the same $IC$ from the initial <code>Get-Request-Normal</code> for the subsequent <code>Get-Request-Next</code>, the meter's AES-GCM-128 engine detects an Invocation Counter replay attack, rejects the frame with <code>Service-Error: deciphering-failed</code>, and locks the association!</li>
</ol>
<p dir="auto">Always ensure that your communication driver increments $IC$ per physical APDU transmission while keeping the internal COSEM <code>invoke_id</code> identical.</p>
]]></description><link>https://dlms.sharur.org/post/314</link><guid isPermaLink="true">https://dlms.sharur.org/post/314</guid><dc:creator><![CDATA[alex_turner]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:05:53 GMT</pubDate></item><item><title><![CDATA[Reply to Why does Class 7 Profile Generic Selective Access Range Descriptor trigger Data-Access-Result 2 (hardware-fault) on 12-byte Date-Time Deviation and Column Index misalignments? on Tue, 01 Sep 2026 06:05:51 GMT]]></title><description><![CDATA[<p dir="auto">Marcus, examine byte offset <code>+10</code> in your <code>Get-Request-Next</code> frame!</p>
<pre><code class="language-hex">C0 02 82 00 00 00 02
</code></pre>
<p dir="auto">Let's dissect this APDU per <strong>DLMS Green Book 10th Ed Section 9.2.5.2 (DataBlock Services)</strong> and <strong>IEC 62056-53 Section 8.3.3</strong>:</p>
<ul>
<li><code>C0 02</code>: <code>Get-Request-Next</code> tag</li>
<li><code>82</code>: <code>invoke-id-and-priority</code> (<code>invoke_id = 2</code>, <code>priority = normal</code>)</li>
<li><code>00 00 00 02</code>: <code>block-number</code> = <strong>2</strong></li>
</ul>
<h3>The Two Critical Mistakes:</h3>
<ol>
<li><strong>Invoke ID Mismatch</strong>: In Turn 1/5, your initial GET request used <code>invoke_id = 1</code> (<code>0x81</code>). Per IEC 62056-53 Clause 8.3.3.2, all subsequent <code>Get-Request-Next</code> PDUs within the SAME block transfer transaction <strong>MUST maintain the exact same <code>invoke_id</code></strong> (<code>0x81</code>), not increment to <code>0x82</code>!</li>
<li><strong>1-Based vs 0-Based Block Numbering</strong>: Look at what block number you requested. In DLMS DataBlock-SA (Stop-and-Wait), the first datablock returned in <code>Get-Response-With-Datablock</code> is <strong>Block Number 1</strong> (<code>0x00000001</code>). When the client requests the next chunk, it must request <strong>Block Number 2</strong> ONLY IF block 1 was acknowledged, but the block numbering sequence in xDLMS starts at <code>1</code> for the initial response and <code>2</code> for the second request.</li>
</ol>
<p dir="auto">Because your <code>invoke_id</code> changed from <code>1</code> to <code>2</code>, the meter COSEM dispatcher treats <code>0xC0 0x02 0x82...</code> as an orphaned sub-transaction with no matching active context, terminates the APDU handler, and closes the socket!</p>
]]></description><link>https://dlms.sharur.org/post/313</link><guid isPermaLink="true">https://dlms.sharur.org/post/313</guid><dc:creator><![CDATA[david_miller]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:05:51 GMT</pubDate></item><item><title><![CDATA[Reply to Why does Class 7 Profile Generic Selective Access Range Descriptor trigger Data-Access-Result 2 (hardware-fault) on 12-byte Date-Time Deviation and Column Index misalignments? on Tue, 01 Sep 2026 06:05:44 GMT]]></title><description><![CDATA[<p dir="auto">This is an exceptional clarification. We updated the HES request payload to provide explicit timezone deviation (<code>0x01 0xE0</code> for UTC+8) and clean clock status (<code>0x00</code><img src="https://dlms.sharur.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f61e.png?v=666d1e6b6e4" class="not-responsive emoji emoji-android emoji--disappointed" style="height:23px;width:auto;vertical-align:middle" title="):" alt="😞" /></p>
<pre><code class="language-hex">00 01 00 01 00 01 00 36 C0 01 81 00 07 01 00 63 01 00 FF 02 01 01 02 04 02 04 12 00 08 09 06 00 00 01 00 00 FF 0F 02 12 00 00 09 0C 07 EA 08 01 FF 00 00 00 00 01 E0 00 09 0C 07 EA 08 02 FF 00 00 00 00 01 E0 00 01 00
</code></pre>
<p dir="auto">The meter immediately accepted the request! However, this uncovered a downstream issue: for a 3-day range query containing 288 profile entries (each entry ~64 bytes = ~18.4 KB total), the response exceeds the negotiated <code>max_pdu_size</code> (2048 bytes).</p>
<p dir="auto">The meter responds with <code>Get-Response-With-Datablock</code> (<code>0xC4 0x02</code>), but when our HES sends <code>Get-Request-Next</code> (<code>0xC0 0x02</code>) to fetch Block #2, the meter drops the TCP connection. Here is the <code>Get-Request-Next</code> frame we sent:</p>
<pre><code class="language-hex">00 01 00 01 00 01 00 06 C0 02 82 00 00 00 02
</code></pre>
<p dir="auto">Why would Block #1 succeed but Block #2 trigger a connection teardown?</p>
]]></description><link>https://dlms.sharur.org/post/312</link><guid isPermaLink="true">https://dlms.sharur.org/post/312</guid><dc:creator><![CDATA[marcus_vance]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:05:44 GMT</pubDate></item><item><title><![CDATA[Reply to Why does Class 7 Profile Generic Selective Access Range Descriptor trigger Data-Access-Result 2 (hardware-fault) on 12-byte Date-Time Deviation and Column Index misalignments? on Tue, 01 Sep 2026 06:05:34 GMT]]></title><description><![CDATA[<p dir="auto">Let's back this up with the authoritative standard specifications.</p>
<p dir="auto">Per <strong>DLMS Blue Book 14th Ed Section 4.3.4</strong> and <strong>IEC 62056-62 Section 6.2.14</strong>:<br />
The <code>RangeDescriptor</code> for Class 7 selective access is formally specified as:</p>
<pre><code class="language-asn">range_descriptor ::= structure
{
    restricting_object: capture_object_definition,
    from_value:         Data,
    to_value:           Data,
    selected_columns:   array capture_object_definition
}

capture_object_definition ::= structure
{
    class_id:        long-unsigned,
    logical_name:    octet-string,
    attribute_index: integer,
    data_index:      long-unsigned
}
</code></pre>
<h3>Comparative Behavior Across Stacks:</h3>
<ol>
<li><strong>DLMS UA CTT (Conformance Test Tool 3.x)</strong>: Tests test-case <code>PG_SelectiveAccess_Range_01</code> specifically checks that when the client supplies an explicit UTC offset (<code>0x01 0xE0</code> for +480 min or <code>0x00 0x00</code> for UTC), the server must calculate the range boundaries using the formula:<br />
$$\text{UTC_Time} = \text{Local_Time} - \text{Deviation}$$</li>
<li><strong>Legacy Stacks</strong>: Many field meters fail if <code>clock_status</code> (Byte 11) is set to <code>0xFF</code> instead of <code>0x00</code> because the firmware expects bitmasks (e.g. Bit 0 <code>invalid_value</code>, Bit 2 <code>daylight_saving_active</code>) to be clean during range boundary hashing.</li>
</ol>
]]></description><link>https://dlms.sharur.org/post/311</link><guid isPermaLink="true">https://dlms.sharur.org/post/311</guid><dc:creator><![CDATA[david_miller]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:05:34 GMT</pubDate></item><item><title><![CDATA[Reply to Why does Class 7 Profile Generic Selective Access Range Descriptor trigger Data-Access-Result 2 (hardware-fault) on 12-byte Date-Time Deviation and Column Index misalignments? on Tue, 01 Sep 2026 06:05:31 GMT]]></title><description><![CDATA[<p dir="auto">Sarah's analysis hits the exact firmware mechanism. In our embedded C meter firmware stack, the selective access range evaluator executes the following check before opening the profile storage sector:</p>
<pre><code class="language-c">if (req_from_time.deviation == 0x8000) {
    if (clock_config.require_explicit_timezone) {
        // Cannot calculate epoch milliseconds without deterministic timezone offset
        return DATA_ACCESS_RESULT_HARDWARE_FAULT; // Code 2
    }
}
</code></pre>
<p dir="auto">Furthermore, there is a second subtle flaw in the trailing bytes of your request. Look at the 4th element of your <code>RangeDescriptor</code> (<code>selected_columns</code><img src="https://dlms.sharur.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f61e.png?v=666d1e6b6e4" class="not-responsive emoji emoji-android emoji--disappointed" style="height:23px;width:auto;vertical-align:middle" title="):" alt="😞" /></p>
<pre><code class="language-hex">01 00  &lt;-- Array of 0 elements
</code></pre>
<p dir="auto">According to <strong>DLMS Blue Book Section 4.3.4 (Profile Generic, Interface Class 7)</strong> and <strong>IEC 62056-62 Table 12</strong>, <code>selected_columns</code> defines the subset of <code>capture_objects</code> to return. While an empty array (<code>0x01 0x00</code>) theoretically denotes 'all columns' in some lenient implementations, strict Blue Book compliant firmware requires either:</p>
<ol>
<li>Explicit array entries containing <code>capture_object_definition</code> structures (<code>class_id</code>, <code>logical_name</code>, <code>attribute_index</code>, <code>data_index</code>), or</li>
<li>Leaving <code>selected_columns</code> to match the exact schema registered in Attribute 3 (<code>capture_objects</code>).</li>
</ol>
<p dir="auto">When <code>selected_columns</code> is empty AND deviation is <code>0x8000</code>, the table indexer throws an internal null-dereference trap which maps directly to error code 2.</p>
]]></description><link>https://dlms.sharur.org/post/310</link><guid isPermaLink="true">https://dlms.sharur.org/post/310</guid><dc:creator><![CDATA[elena_rostova]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:05:31 GMT</pubDate></item><item><title><![CDATA[Reply to Why does Class 7 Profile Generic Selective Access Range Descriptor trigger Data-Access-Result 2 (hardware-fault) on 12-byte Date-Time Deviation and Column Index misalignments? on Tue, 01 Sep 2026 06:05:28 GMT]]></title><description><![CDATA[<p dir="auto">Marcus, your initial hypothesis regarding physical flash memory corruption is almost certainly incorrect. In DLMS/COSEM meter implementations, <code>data-access-result: 2 (hardware-fault)</code> is notorious for being overloaded by embedded firmware parsers whenever an A-XDR type constraint or mathematical comparison failure occurs inside the selective access engine.</p>
<p dir="auto">Look closely at byte offsets <code>+43</code> to <code>+54</code> and <code>+57</code> to <code>+68</code> in your <code>Get-Request-Normal</code> APDU:</p>
<pre><code class="language-hex">09 0C 07 EA 08 01 FF 00 00 00 00 80 00 FF  &lt;-- from_value
09 0C 07 EA 08 02 FF 00 00 00 00 80 00 FF  &lt;-- to_value
</code></pre>
<h3>The Deviation Byte Trap:</h3>
<p dir="auto">In your 12-byte date-time octet string (<code>0x09 0x0C</code><img src="https://dlms.sharur.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f61e.png?v=666d1e6b6e4" class="not-responsive emoji emoji-android emoji--disappointed" style="height:23px;width:auto;vertical-align:middle" title="):" alt="😞" /></p>
<ul>
<li>Bytes 0-1: <code>0x07 0xEA</code> (Year 2026)</li>
<li>Byte 2: <code>0x08</code> (Month August)</li>
<li>Byte 3: <code>0x01</code> (Day 1)</li>
<li>Byte 4: <code>0xFF</code> (Day of Week: not specified)</li>
<li>Bytes 5-7: <code>0x00 0x00 0x00</code> (Hour 0, Minute 0, Second 0)</li>
<li>Byte 8: <code>0x00</code> (Hundredths 0)</li>
<li><strong>Bytes 9-10</strong>: <code>0x80 0x00</code> (<strong>Deviation: -32768 / not specified</strong>)</li>
<li>Byte 11: <code>0xFF</code> (Clock Status: not specified)</li>
</ul>
<p dir="auto">Per <strong>DLMS Blue Book 14th Ed Section 4.1.6.1 (Date and time formats)</strong>, setting <code>deviation = 0x8000</code> indicates that deviation is undefined. However, the meter's internal Clock object (<code>0.0.1.0.0.255</code>, Class <img src="https://dlms.sharur.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f60e.png?v=666d1e6b6e4" class="not-responsive emoji emoji-android emoji--sunglasses" style="height:23px;width:auto;vertical-align:middle" title="8)" alt="😎" /> operates in local time with an active UTC offset (e.g. UTC+08:00 = +480 minutes = <code>0x01 0xE0</code>). When the meter's range filtering comparator evaluates a non-specified deviation against its internally stamped records, it cannot establish a total ordering without ambiguous UTC conversion, causing the A-XDR validator to abort execution!</p>
]]></description><link>https://dlms.sharur.org/post/309</link><guid isPermaLink="true">https://dlms.sharur.org/post/309</guid><dc:creator><![CDATA[sarah_jenkins]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:05:28 GMT</pubDate></item></channel></rss>