{"id":14736,"date":"2019-04-22T00:00:00","date_gmt":"2019-04-22T00:00:00","guid":{"rendered":"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/"},"modified":"2025-05-29T22:41:39","modified_gmt":"2025-05-29T22:41:39","slug":"streamline-hardware-configuration-with-the-hardware-abstraction-layer","status":"publish","type":"our_work","link":"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/","title":{"rendered":"Streamline Hardware Configuration with the Hardware Abstraction Layer"},"content":{"rendered":"<p><span style=\"font-size:larger;\"><strong>LabVIEW Hardware Abstraction<\/strong><\/span><\/p>\r\n\r\n<p>The Hardware Abstraction Layer (HAL) works by grouping together devices that perform similar functions\u00a0or require the same configurations from the user, and grouping them under a single API. With this HAL, adding a new device model only requires writing the lowest level drivers specific to that device.\u00a0 All the higher-level interaction with the rest of the application is taken care of by the hardware abstraction layer.<\/p>\r\n\r\n<p>As a result, the cost of upgrading and maintaining test systems over time can be greatly reduced. New test devices can be easily added, and deprecated ones can be easily removed.<\/p>\r\n\r\n<p>Another important feature this standardization provides us is any user or engineer can have the capability to select or configure the hardware to be used for a given test. This hardware can be hot-swapped with other supported units of the same family, and no programming team is needed for the change!\u00a0<\/p>\r\n\r\n<p><span style=\"font-size:larger;\"><strong>What Does it Look Like?<\/strong><\/span><\/p>\r\n\r\n<p>Pictured below is an example of the settings configuration tab. This interface allows any user with appropriate credentials to make all necessary hardware and software setting changes. This menu can be tailored to contain settings particular to each customer.<\/p>\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" alt=\"Hardware extraction configuration settings\" src=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165823\/hardware-extraction-settings-configuration.png\"  \/><\/figure>\r\n\r\n<p><span style=\"font-size:larger;\"><strong>How is it Done?<\/strong><\/span><\/p>\r\n\r\n<p>DMC establishes the hardware abstraction layer in LabVIEW using object oriented techniques. \u00a0Each unit within a family of devices (a National Instruments Power Supply [PS] within the PS family) can inherit from a common ancestor. \u00a0The common ancestor defines an application-programming interface (API) and an interface which is typically shared by all children classes. \u00a0For the purpose of exploring the concept, we will examine the hardware abstraction layer of a power supply.<\/p>\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" alt=\"Hardware extraction for power supply\" src=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165823\/power-supply-hardware-extraction.png\"  \/><\/figure>\r\n\r\n<p>The abstract power supply class, _Power Supply.lvclass, defines the set of interactions a user or piece of code can have with a generic Power Supply (e.g. Command Voltage, Command Output State, etc.). \u00a0These API calls point to blank pieces of code, with the intention that a child class will override these stubbed out API implementations.<\/p>\r\n\r\n<p>DMC makes use of LabVIEW\u2019s dynamic dispatch functionality to call the correct child class\u2019s implementation of an API at runtime. \u00a0This allows for the programmer to drop in a \u2018Command Voltage \u2013 API\u2019 and not worry about which device type is implementing the call at runtime.<\/p>\r\n\r\n<p>In addition to a standard set of API calls, devices which inherit from the _Power Supply.lvclass can take advantage of a standardized control interface (shared and implemented at the parent _Power Supply.lvclass level). \u00a0<\/p>\r\n\r\n<p><figure class=\"wp-block-image\"><img decoding=\"async\" alt=\"The _Power Supply.lvclass\u2019s Interface\" src=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165823\/The-_Power-Supply_lvclasss-Interface.png\"  \/><\/figure><br \/>\r\n<em>The _Power Supply.lvclass\u2019s Interface<\/em><\/p>\r\n\r\n<p>Each button on the interface makes an API call, allowing the children classes to push data to the interface for users to view.\u00a0 This shared interface allows for users to interact with a variety of Power Supply types without needing to know which exact type of Power Supply is connected, providing for a familiar user experience while maximizing code reuse across an application.<\/p>\r\n\r\n<p>This architecture has proven useful for customers who have multiple units of devices within a family of instruments by allowing programmers to program to an abstract class\u2019s API instead of to a specific class\u2019s implementation, enabling programmers to develop faster and more efficiently.<\/p>\r\n\r\n<p>These features are part of a powerful suite of tools called the DMC Flex Framework.\u00a0<a href=\"https:\/\/www.dmcinfo.com\/services\/test-and-measurement-automation\/labview-programming\/flex-framework\">Find out more about all of these tools here<\/a>.<\/p>\r\n\r\n<p><strong>Learn more about DMC&#8217;s\u00a0<a href=\"https:\/\/www.dmcinfo.com\/services\/test-and-measurement-automation\/labview-programming\">LabVIEW programming expertise<\/a>.\u00a0<\/strong><\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>LabVIEW Hardware Abstraction The Hardware Abstraction Layer (HAL) works by grouping together devices that perform similar functions\u00a0or require the same configurations from the user, and grouping them under a single API. With this HAL, adding a new device model only requires writing the lowest level drivers specific to that device.\u00a0 All the higher-level interaction with [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":14732,"template":"","meta":{"customer":"","summary":"<p>The Hardware Abstraction Layer is a powerful part of the Device-Module hierarchy present in DMC&#39;s Flex Framework. It allows developers to easily integrate new pieces of hardware, and users to switch between hardware configurations on-the-fly.<\/p>\r\n","description":"","customer_benefits":"<ul>\r\n <li><strong>Common API&rsquo;s:<\/strong> Similar devices are integrated under the same API (Application Programming Interface), simplifying integration into existing software.<\/li>\r\n <li><strong>Reduced Development Time:<\/strong> Since a new API doesn&#39;t need to be written for each new device, new devices can be added with lower engineering effort.<\/li>\r\n <li><strong>Hot-Swappable:&nbsp;<\/strong>Just as pieces of hardware can be easily swapped due to standardized connectors and cables, the standardized API&rsquo;s allow for quick and easy software swapping of device driver layers.<\/li>\r\n <li><strong>DMCquencer Integration:<\/strong> Test sequences take advantage of hardware abstraction, allowing users to write a test sequence once and run it on different hardware configurations.<\/li>\r\n <li><strong>Interface Simplicity:<\/strong> The software can easily execute the behind-the-scenes operations needed to switch to a new piece of hardware. For&nbsp;the user, choosing a new device to use is as simple as selecting an item from a drop-down menu.<\/li>\r\n<\/ul>\r\n","components_used":"<ul>\r\n <li><a href=\"https:\/\/www.dmcinfo.com\/services\/test-and-measurement-automation\/labview-programming\">National Instruments LabVIEW<\/a><\/li>\r\n<\/ul>\r\n","project":"Flex Framework","author":"Kyle Mitchell","notes":""},"work_category":[685,684],"class_list":["post-14736","our_work","type-our_work","status-publish","has-post-thumbnail","hentry","work_category-labview","work_category-test-measurement-automation"],"yoast_head":"<title>Streamline Hardware Configuration with the Hardware Abstraction Layer | DMC, Inc.<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Streamline Hardware Configuration with the Hardware Abstraction Layer\" \/>\n<meta property=\"og:description\" content=\"LabVIEW Hardware Abstraction The Hardware Abstraction Layer (HAL) works by grouping together devices that perform similar functions\u00a0or require the same configurations from the user, and grouping them under a single API. With this HAL, adding a new device model only requires writing the lowest level drivers specific to that device.\u00a0 All the higher-level interaction with [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/\" \/>\n<meta property=\"og:site_name\" content=\"DMC, Inc.\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/pages\/DMC-Inc\/107982009242929\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-29T22:41:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165824\/Hardware-abstraction-layer.png\" \/>\n\t<meta property=\"og:image:width\" content=\"700\" \/>\n\t<meta property=\"og:image:height\" content=\"663\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/\",\"url\":\"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/\",\"name\":\"Streamline Hardware Configuration with the Hardware Abstraction Layer | DMC, Inc.\",\"isPartOf\":{\"@id\":\"https:\/\/www.dmcinfo.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165824\/Hardware-abstraction-layer.png\",\"datePublished\":\"2019-04-22T00:00:00+00:00\",\"dateModified\":\"2025-05-29T22:41:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/#primaryimage\",\"url\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165824\/Hardware-abstraction-layer.png\",\"contentUrl\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165824\/Hardware-abstraction-layer.png\",\"width\":700,\"height\":663,\"caption\":\"Hardware abstraction layer\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Work\",\"item\":\"https:\/\/www.dmcinfo.com\/our-work\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Streamline Hardware Configuration with the Hardware Abstraction Layer\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dmcinfo.com\/#website\",\"url\":\"https:\/\/www.dmcinfo.com\/\",\"name\":\"DMC, Inc.\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.dmcinfo.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dmcinfo.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.dmcinfo.com\/#organization\",\"name\":\"DMC, Inc.\",\"url\":\"https:\/\/www.dmcinfo.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dmcinfo.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27171146\/dmc-logo-1.png\",\"contentUrl\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27171146\/dmc-logo-1.png\",\"width\":418,\"height\":167,\"caption\":\"DMC, Inc.\"},\"image\":{\"@id\":\"https:\/\/www.dmcinfo.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/pages\/DMC-Inc\/107982009242929\",\"https:\/\/www.instagram.com\/dmcengineering\",\"https:\/\/www.youtube.com\/DMCEngineering\",\"https:\/\/www.linkedin.com\/company\/dmc-engineering\"]}]}<\/script>","yoast_head_json":{"title":"Streamline Hardware Configuration with the Hardware Abstraction Layer | DMC, Inc.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/","og_locale":"en_US","og_type":"article","og_title":"Streamline Hardware Configuration with the Hardware Abstraction Layer","og_description":"LabVIEW Hardware Abstraction The Hardware Abstraction Layer (HAL) works by grouping together devices that perform similar functions\u00a0or require the same configurations from the user, and grouping them under a single API. With this HAL, adding a new device model only requires writing the lowest level drivers specific to that device.\u00a0 All the higher-level interaction with [&hellip;]","og_url":"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/","og_site_name":"DMC, Inc.","article_publisher":"https:\/\/www.facebook.com\/pages\/DMC-Inc\/107982009242929","article_modified_time":"2025-05-29T22:41:39+00:00","og_image":[{"width":700,"height":663,"url":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165824\/Hardware-abstraction-layer.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/","url":"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/","name":"Streamline Hardware Configuration with the Hardware Abstraction Layer | DMC, Inc.","isPartOf":{"@id":"https:\/\/www.dmcinfo.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/#primaryimage"},"image":{"@id":"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165824\/Hardware-abstraction-layer.png","datePublished":"2019-04-22T00:00:00+00:00","dateModified":"2025-05-29T22:41:39+00:00","breadcrumb":{"@id":"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/#primaryimage","url":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165824\/Hardware-abstraction-layer.png","contentUrl":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165824\/Hardware-abstraction-layer.png","width":700,"height":663,"caption":"Hardware abstraction layer"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dmcinfo.com\/our-work\/streamline-hardware-configuration-with-the-hardware-abstraction-layer\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Work","item":"https:\/\/www.dmcinfo.com\/our-work\/"},{"@type":"ListItem","position":2,"name":"Streamline Hardware Configuration with the Hardware Abstraction Layer"}]},{"@type":"WebSite","@id":"https:\/\/www.dmcinfo.com\/#website","url":"https:\/\/www.dmcinfo.com\/","name":"DMC, Inc.","description":"","publisher":{"@id":"https:\/\/www.dmcinfo.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dmcinfo.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.dmcinfo.com\/#organization","name":"DMC, Inc.","url":"https:\/\/www.dmcinfo.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dmcinfo.com\/#\/schema\/logo\/image\/","url":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27171146\/dmc-logo-1.png","contentUrl":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27171146\/dmc-logo-1.png","width":418,"height":167,"caption":"DMC, Inc."},"image":{"@id":"https:\/\/www.dmcinfo.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/pages\/DMC-Inc\/107982009242929","https:\/\/www.instagram.com\/dmcengineering","https:\/\/www.youtube.com\/DMCEngineering","https:\/\/www.linkedin.com\/company\/dmc-engineering"]}]}},"_links":{"self":[{"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/our_work\/14736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/our_work"}],"about":[{"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/types\/our_work"}],"author":[{"embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/users\/8"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/media\/14732"}],"wp:attachment":[{"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/media?parent=14736"}],"wp:term":[{"taxonomy":"work_category","embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/work_category?post=14736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}