<?xml version="1.0" encoding="UTF-8" ?><!-- generator=Zoho Sites --><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><atom:link href="https://www.accuratetechnologies.com/blog/tag/uds/feed" rel="self" type="application/rss+xml"/><title>Accurate Technologies - Blog #UDS</title><description>Accurate Technologies - Blog #UDS</description><link>https://www.accuratetechnologies.com/blog/tag/uds</link><lastBuildDate>Tue, 31 Mar 2026 13:05:46 -0700</lastBuildDate><generator>http://zoho.com/sites/</generator><item><title><![CDATA[8. Higher-Layer Protocols: CANopen, J1939, and UDS ]]></title><link>https://www.accuratetechnologies.com/blog/post/pt.-8-introduction-to-can-bus</link><description><![CDATA[As we’ve seen throughout this series, a CAN frame is intentionally simple: 11 or 29 bits of identifier, data payload. This minimalism makes CAN fast, deterministic, and flexible—but it also means that different industries needed ways to define what those bytes represent.]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_i5mMNuJuS9yhCsmcAvHT-w" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_-xZEKrg2SCi5fKon-ZC-ig" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_FVC4EX9VTXiP2vccukalvQ" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm__8RvwhpDRD-FJ08HbloESw" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-align-center zpheading-align-mobile-center zpheading-align-tablet-center " data-editor="true"><span>Understanding Structured Data and Application-Layer Standards on CAN Bus</span></h2></div>
<div data-element-id="elm_ODPwwCw3S7CB_JKzXrPqPw" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center zptext-align-mobile-center zptext-align-tablet-center " data-editor="true"><div style="text-align:left;"><div><div>As we’ve seen throughout this series, a CAN frame is intentionally simple: 11 or 29 bits of identifier, data&nbsp; payload. This minimalism makes CAN fast, deterministic, and flexible—but it also means that different industries needed ways to define what those bytes represent.</div><div><br/></div><div>This is where higher-layer protocols come in. They standardize data structures, communication flows, and device behaviors on top of the basic CAN transport. Whether you're working on heavy-duty vehicles, industrial automation, robotics, or medical equipment, chances are you're interacting with one of these application-layer standards.&nbsp;</div><div><br/></div><div>In this post, we’ll explore three of the most widely used: CANopen, SAE J1939, and UDS (Unified Diagnostic Services)—what they solve, how they structure data, and where you’re likely to encounter them.&nbsp;</div></div></div></div>
</div><div data-element-id="elm_G08F9xLtz_6_Hdv-A6xEOA" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-style-none zpheading-align-left zpheading-align-mobile-left zpheading-align-tablet-left " data-editor="true"><span>CANopen: Modular Control for Industrial and Robotics Systems</span></h2></div>
<div data-element-id="elm_iC6yvPytqJKbeK7XrhfXcg" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><div><div><p style="margin-bottom:10.6667px;"><span>Originally defined by CAN in Automation (CiA), </span><span style="font-weight:bold;"><span>CANopen</span></span><span> is popular in automation, robotics, and medical devices where multiple intelligent nodes must coordinate.&nbsp;</span></p></div></div></div>
</div><div data-element-id="elm_OfZJXUb32_oE9zePB7thMA" data-element-type="row" class="zprow zprow-container zpalign-items-flex-start zpjustify-content-flex-start zpdefault-section zpdefault-section-bg " data-equal-column="false"><style type="text/css"></style><div data-element-id="elm_CGuhSYP21tH6mDAn8r9uMQ" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-7 zpcol-sm-12 zpalign-self- zpdefault-section zpdefault-section-bg "><style type="text/css"></style><div data-element-id="elm_IOv675qo4qoHGnodKSl_Xg" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-style-none zpheading-align-left zpheading-align-mobile-left zpheading-align-tablet-left " data-editor="true"><span>Why CANopen Exists</span></h2></div>
<div data-element-id="elm_DYLx6DEJmIKLd9_ojlqRkw" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><p></p><div></div><p></p><div><div><span style="font-weight:bold;font-size:16px;">CANopen provides:&nbsp;</span></div></div><ul><li>A standardized Object Dictionary for device parameters&nbsp;</li><li>Real-time messaging for control loops&nbsp;</li><li>A predictable set of device behaviors (profiles for drives, sensors, I/O modules)</li></ul></div>
</div><div data-element-id="elm_YvnCIO5WsW68yNSD6uiumw" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-style-none zpheading-align-left zpheading-align-mobile-left zpheading-align-tablet-left " data-editor="true"><span>Key Concepts</span></h2></div>
<div data-element-id="elm_TZSrBkk-eErg5ZeqZOfpjQ" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><ul><li>PDOs (Process Data Objects) <br/>Real-time data messages—position, velocity, force, sensor values—sent without request.&nbsp;</li></ul><ul><li>SDOs (Service Data Objects) <br/>Request/response messages for configuration and parameter access.&nbsp;</li></ul><ul><li>NMT (Network Management) <br/>Controlling device states (pre-operational, operational, reset).&nbsp;</li></ul></div>
</div></div><div data-element-id="elm_X29t70_5b7JXIsLCSf0GOA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-5 zpcol-sm-12 zpalign-self- zpdefault-section zpdefault-section-bg "><style type="text/css"></style><div data-element-id="elm_2wdJ8tBx2O7jxzGUFM8jtA" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_2wdJ8tBx2O7jxzGUFM8jtA"] .zpimage-container figure img { width: 445px ; height: 556.25px ; } } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="center" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-center zpimage-tablet-align-center zpimage-mobile-align-center zpimage-size-fit zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/files/Layered%20CAN%20Protocol%20Stack.png" size="fit" alt="CANopen Protocol Stack" data-lightbox="true"/></picture></span></figure></div>
</div></div></div><div data-element-id="elm_fwkb_aAGcFu55irqVwx42w" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-style-none zpheading-align-left zpheading-align-mobile-left zpheading-align-tablet-left " data-editor="true"><span>Typical Use Cases</span></h2></div>
<div data-element-id="elm_UYbD0OH6JT8ThxSL3dYAzg" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><p></p><div></div><p></p><ul><li>Servo drives in robotics&nbsp;</li><li>Infusion pumps and imaging systems&nbsp;</li><li>Modular I/O in factories&nbsp;</li></ul></div>
</div><div data-element-id="elm_sq8mh1c8vnMC3S_u28p9xg" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-style-none zpheading-align-left zpheading-align-mobile-left zpheading-align-tablet-left " data-editor="true"><span>How Tools Like CANLab Fit In</span></h2></div>
<div data-element-id="elm_rfc2i8iHHNONYoBy9GjWxg" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><p><span>Even without a full protocol stack, being able to capture traffic, decode identifiers, and interpret payloads using dictionaries or EDS files helps engineers inspect PDOs and monitor device interactions.&nbsp;</span></p></div>
</div><div data-element-id="elm_ELZWGipPkF4wuEF9liMndg" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-style-none zpheading-align-left zpheading-align-mobile-left zpheading-align-tablet-left " data-editor="true"><span>SAE J1939: Structured Messaging for Heavy-Duty Vehicles</span></h2></div>
<div data-element-id="elm_U1118qgDAmrxxHenjNeOGA" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><p><span>J1939 is built around 29-bit identifiers and a standardized way of grouping signals. It’s the backbone of communication in agriculture, trucking, construction, and marine applications.&nbsp;</span></p></div>
</div><div data-element-id="elm_Di93GWrfkmW4a1S1yzTpBQ" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-style-none zpheading-align-left zpheading-align-mobile-left zpheading-align-tablet-left " data-editor="true"><span>Why J1939 Exists</span></h2></div>
<div data-element-id="elm_GNM2zMeyhEVRiP5LY0u4tQ" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><p></p><div><div>Heavy-duty environments must ensure that ECUs from multiple vendors can cooperate—engine, transmission, brakes, telematics, hydraulic controllers, etc.&nbsp;</div><div></div></div><p></p><div><div><span style="font-weight:bold;font-size:16px;">Key Concepts&nbsp;</span></div></div><ul><li>PGNs (Parameter Group Numbers) <br/>Message “types” defined by the identifier.&nbsp;</li></ul><div><div><ul><li>SPNs (Suspect Parameter Numbers)<br/>Named, scaled signals within a PGN—engine speed, fuel rate, boost pressure.&nbsp;</li></ul></div><div>This structured approach means engineers can decode data consistently as long as they know the PGN and SPN definitions.&nbsp;</div></div></div>
</div><div data-element-id="elm_3solPM6j2-E_gprc0wDuMA" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-style-none zpheading-align-left zpheading-align-mobile-left zpheading-align-tablet-left " data-editor="true">Typical Use Cases<span style="font-weight:bold;">&nbsp;</span></h2></div>
<div data-element-id="elm_V5rJ8EU5b3kpr3VtGjmDEg" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><p></p><div></div><p></p><ul><li>Engine and emissions monitoring&nbsp;</li><li>Tractor implement communication&nbsp;</li><li>Fleet telematics and diagnostics&nbsp;</li><li>Hydraulic equipment control&nbsp;</li></ul></div>
</div><div data-element-id="elm_C11kX-CTivha7fakWZwmzA" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-style-none zpheading-align-left zpheading-align-mobile-left zpheading-align-tablet-left " data-editor="true"><span>How Tools Like CANLab Fit In</span></h2></div>
<div data-element-id="elm_f-kBai20LQHxVzyc9S8nqg" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><p><span>Tools can decode PGNs or SPNs from raw CAN frames when given the definitions, making it easier to validate equipment behavior or inspect network traffic during testing.&nbsp;</span></p></div>
</div><div data-element-id="elm_Vv6J01uCAq4RqHG_sIcFmg" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-style-none zpheading-align-left zpheading-align-mobile-left zpheading-align-tablet-left " data-editor="true"><span>UDS (Unified Diagnostic Services): The Standard Diagnostic Protocol</span></h2></div>
<div data-element-id="elm_LSp_iNReC030IAaFfNRCQA" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><p><span>UDS (ISO 14229) is the diagnostic framework used in modern passenger cars, many commercial vehicles, and increasingly in specialized equipment.&nbsp;</span></p></div>
</div><div data-element-id="elm_IcdAxcKAh4XWk1fpPlQztA" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-style-none zpheading-align-left zpheading-align-mobile-left zpheading-align-tablet-left " data-editor="true"><span>Why UDS Exists</span></h2></div>
<div data-element-id="elm_ZCTgGRgcN6atNQjNRNbh1g" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><p></p><div><div>Manufacturers needed a unified system to:&nbsp;</div></div><p></p><ul><li>Read diagnostic trouble codes (DTCs)&nbsp;</li><li>Request data&nbsp;</li><li>Perform ECU programming&nbsp;</li><li>Control routines and tests&nbsp;</li></ul></div>
</div><div data-element-id="elm_zUzLeHTWBAoT7fxiZt9L0w" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-style-none zpheading-align-left zpheading-align-mobile-left zpheading-align-tablet-left " data-editor="true"><span>Key Concepts</span></h2></div>
<div data-element-id="elm_kt6LRyRiplKMRRtb6CTEcw" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><ul><li>Service IDs (SIDs) <br/>Each UDS operation corresponds to a numeric command (e.g., 0x22 for Read Data By Identifier).&nbsp;</li></ul><div><div><ul><li>DIDs (Data Identifiers) <br/>Structured identifiers for parameters—VIN, temperature sensors, calibration values.&nbsp;</li><li>Security Levels <br/>Seed/key mechanisms for unlocking sensitive functions.&nbsp;</li></ul></div></div></div>
</div><div data-element-id="elm_hs1zr8Qm1vn7KoRGnMZzJA" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-style-none zpheading-align-left zpheading-align-mobile-left zpheading-align-tablet-left " data-editor="true"><span>Typical Use Cases</span></h2></div>
<div data-element-id="elm_6hBxSVCOTaFgqLgqlQ7zAA" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><p></p><div></div><p></p><ul><li>Dealer-level diagnostics&nbsp;</li><li>Field service for specialized machinery&nbsp;</li><li>ECU flashing and reprogramming&nbsp;</li><li>Advanced testing and validation&nbsp;</li></ul></div>
</div><div data-element-id="elm_R6-QlCgaG-SW-aLvQaBnHA" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-style-none zpheading-align-left zpheading-align-mobile-left zpheading-align-tablet-left " data-editor="true"><span>How Tools Like CANLab Fit In</span></h2></div>
<div data-element-id="elm_fnwbrnHN3AZRGUwBGjBCJQ" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><p><span>Even without UDS automation, engineers can observe and analyze diagnostic exchanges directly on the CAN network, which is valuable during integration and troubleshooting. While UDS has a well-defined command/response structure, the in-vehicle implementation can be very OEM specific. The integrated scripting available in CANLab can be used to create custom UDS command sequences.&nbsp;</span></p></div>
</div><div data-element-id="elm_jClOZOmrXQkTaMjwvaYe6w" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-style-none zpheading-align-left zpheading-align-mobile-left zpheading-align-tablet-left " data-editor="true"><span>Where These Protocols Are Used</span></h2></div>
<div data-element-id="elm_tXuoZlcwPS13gE5YsC44jg" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><p></p><div><div><span style="font-weight:bold;">Heavy-Duty &amp; Off-Highway&nbsp;</span></div></div><p></p><ul><li>J1939 for engine, transmission, and vehicle systems&nbsp;</li><li>UDS for diagnostics and firmware updates&nbsp;</li><li>CANopen for implement controls (ISO 11783 based on J1939/CANopen concepts)&nbsp;</li></ul><div><div><br/></div><div><span style="font-weight:bold;">Medical Devices&nbsp;</span></div><div><ul><li>CANopen in pumps, imaging, patient monitoring&nbsp;</li><li>UDS occasionally for maintenance diagnostics&nbsp;</li><li>Emphasis on deterministic control and safe parameter access&nbsp;</li></ul></div><div><br/></div><div><span style="font-weight:bold;">Robotics &amp; Automation&nbsp;</span></div><div><ul><li>CANopen for drives and real-time control&nbsp;</li><li>Custom higher-layer protocols for proprietary robots&nbsp;</li><li>UDS in some robotic platforms for service diagnostics</li></ul></div></div></div>
</div><div data-element-id="elm_TX2g9Cho32MA6jMibXrT6A" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h2
 class="zpheading zpheading-style-none zpheading-align-left zpheading-align-mobile-left zpheading-align-tablet-left " data-editor="true"><span>Conclusion: Higher-Layer Protocols Bring Meaning to CAN</span></h2></div>
<div data-element-id="elm_G-_HiJAJMY8JgQ_1tA5Zaw" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left zptext-align-mobile-left zptext-align-tablet-left " data-editor="true"><p></p><div><div>Higher-layer protocols such as CANopen, J1939, and UDS give structure and meaning to raw CAN traffic, enabling interoperability across industries from heavy-duty vehicles to robotics and medical systems. Understanding how these protocols package data; whether through PGNs, SPNs, PDOs, or diagnostic services, helps engineers work more confidently across diverse applications.&nbsp;</div><div><br/></div><div>In our next article, we’ll shift focus from protocols to practice by exploring how engineers choose the right CAN tools as they move from hobby-level experimentation to professional workflows.&nbsp;</div></div><p></p></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Mon, 15 Dec 2025 12:42:33 -0500</pubDate></item></channel></rss>