{"id":15106,"date":"2022-12-06T00:00:00","date_gmt":"2022-12-06T00:00:00","guid":{"rendered":"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/"},"modified":"2025-05-29T22:47:44","modified_gmt":"2025-05-29T22:47:44","slug":"ni-data-acquisition-library-and-calibration-utility-in-python","status":"publish","type":"our_work","link":"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/","title":{"rendered":"NI Data Acquisition Library and Calibration Utility in Python"},"content":{"rendered":"<p>The client requested two deliverables from DMC. They wanted\u00a0a\u00a0Python package that wraps NI\u2019s DAQmx hardware drivers and provides an easy interface that they could use to integrate these measurements in their automated test sequences. Additionally, they wanted to have an easy-to-use calibration GUI for their operators,\u00a0to ensure that precise power measurements could be made reliably.<\/p>\r\n\r\n<p>DMC\u2019s approach was to develop a Python package that wrapped\u00a0NI\u2019s <a href=\"https:\/\/nidaqmx-python.readthedocs.io\/en\/latest\/\" target=\"_blank\">nidaqmx<\/a> package and provided\u00a0a more convenient interface to the rest of their automations. The nidaqmx package contained the official DAQmx bindings but familiarity with DAQmx is required to use it easily.<\/p>\r\n\r\n<p>DMC first trained the client to use NI-MAX to configure DAQmx tasks, which\u00a0are convenient abstractions that can help set up, use, test, and debug data acquisition hardware. DMC worked with the client to formulate an appropriate test methodology, and we then assisted in the configuration of the DAQmx task to provide the required measurements.<\/p>\r\n\r\n<p>Next, we developed a Python package that gets used as the back-end of both the calibration and data acquisition features. This package was written to provide a convenient API for acquiring calibration data and for applying that data to live measurements.<\/p>\r\n\r\n<p>Finally, DMC developed a simple graphical application for operators to conduct regular calibrations. For this, we used <a href=\"https:\/\/doc.qt.io\/qt-6\/qtquick-index.html\">QtQuick<\/a>, a graphical framework provided by the <a href=\"https:\/\/www.qt.io\/\">Qt library<\/a>. Qt provides Python bindings via the <a href=\"https:\/\/pypi.org\/project\/PySide6\/\">PySide6<\/a> package, allowing QtQuick to\u00a0integrate\u00a0well with Python, and making it easy to\u00a0produce\u00a0professional, customizable, highly-dynamic user interfaces. All of the system&#8217;s software and hardware components can be visualized as follows:<\/p>\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" alt=\"Software Stack\" src=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165540\/software-stack-1.png\"  \/><\/figure>\r\n\r\n<p>Our approach and the technologies we employed had several benefits to our client. The NI hardware provided high-quality, high-precision measurements of the values of interest. The NI-MAX utility and the DAQmx drivers improved the debugging experience and allowed DMC to use simulated devices to keep costs low by eliminating travel and\/or shipping costs.<\/p>\r\n\r\n<p>Furthermore, Python enabled the client to easily integrate these measurements into their existing (Python-based) automations. NI\u2019s nidaqmx package provided a convenient Python interface for DAQmx so\u00a0the hardware could be integrated quickly and easily. QtQuick as a graphical framework allowed DMC to quickly create a simple, portable GUI application in Python.<\/p>\r\n\r\n<p>Overall, we met the client&#8217;s goals and provided their deliverables using our expertise with NI\u2019s DAQ hardware,\u00a0the Python interface to that hardware, and a simple but powerful GUI framework.<\/p>\r\n\r\n<p><strong>Read more about <a href=\"https:\/\/www.dmcinfo.com\/services\/application-development\/pc-application-development\/python-development-services\">DMC&#8217;s Python Development Services<\/a>, and <a href=\"https:\/\/www.dmcinfo.com\/contact\">contact us<\/a> today for your next project!<\/strong><\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>The client requested two deliverables from DMC. They wanted\u00a0a\u00a0Python package that wraps NI\u2019s DAQmx hardware drivers and provides an easy interface that they could use to integrate these measurements in their automated test sequences. Additionally, they wanted to have an easy-to-use calibration GUI for their operators,\u00a0to ensure that precise power measurements could be made reliably. [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":15104,"template":"","meta":{"customer":"Western Digital","summary":"<p>DMC&rsquo;s client had a series of automated test sequences written in Python and was in the process of adding another&nbsp;test step that required precision power measurements using a National Instruments PXI DAQ module. While the client had internal Python development capability, they needed our expertise and familiarity with NI&rsquo;s DAQ hardware and&nbsp;the Python interface to that hardware.<\/p>\r\n\r\n<ol>\r\n<\/ol>\r\n","description":"","customer_benefits":"<ul>\r\n <li>Better data acquisition<\/li>\r\n <li>More accurate product characterization<\/li>\r\n <li>Rapid, low-cost development<\/li>\r\n <li>Improved test time and reduced operator intervention<\/li>\r\n <li>Flexible, modular software that can be extended and reused<\/li>\r\n<\/ul>\r\n","components_used":"<ul>\r\n <li><a href=\"https:\/\/www.python.org\/\" target=\"_blank\">Python 3.10<\/a><\/li>\r\n <li><a href=\"https:\/\/doc.qt.io\/qtforpython\/\" target=\"_blank\">PySide6<\/a><\/li>\r\n <li><a href=\"https:\/\/doc.qt.io\/qt-6\/qtquick-index.html\" target=\"_blank\">QtQuick<\/a><\/li>\r\n <li><a href=\"https:\/\/nidaqmx-python.readthedocs.io\/en\/latest\/\" target=\"_blank\">NI-DAQmx Python bindings<\/a><\/li>\r\n <li><a href=\"https:\/\/www.ni.com\/en-us\/support\/model.pxie-4309.html\" target=\"_blank\">NI PXIe-4309<\/a><\/li>\r\n<\/ul>\r\n","project":"SSD Power Test","author":"Mark Locascio","notes":"I have not contacted WD about this, so there's no identifiable information in it.\r\nProject was executed between about 01\/2022 and 06\/2022."},"work_category":[686,688,684],"class_list":["post-15106","our_work","type-our_work","status-publish","has-post-thumbnail","hentry","work_category-consumer-goods","work_category-pc-application-development","work_category-test-measurement-automation"],"yoast_head":"<title>NI Data Acquisition Library and Calibration Utility in Python | 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\/ni-data-acquisition-library-and-calibration-utility-in-python\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"NI Data Acquisition Library and Calibration Utility in Python\" \/>\n<meta property=\"og:description\" content=\"The client requested two deliverables from DMC. They wanted\u00a0a\u00a0Python package that wraps NI\u2019s DAQmx hardware drivers and provides an easy interface that they could use to integrate these measurements in their automated test sequences. Additionally, they wanted to have an easy-to-use calibration GUI for their operators,\u00a0to ensure that precise power measurements could be made reliably. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/\" \/>\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:47:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165540\/unnamed-file-120.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1400\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\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=\"2 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\/ni-data-acquisition-library-and-calibration-utility-in-python\/\",\"url\":\"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/\",\"name\":\"NI Data Acquisition Library and Calibration Utility in Python | DMC, Inc.\",\"isPartOf\":{\"@id\":\"https:\/\/www.dmcinfo.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165540\/unnamed-file-120.jpg\",\"datePublished\":\"2022-12-06T00:00:00+00:00\",\"dateModified\":\"2025-05-29T22:47:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/#primaryimage\",\"url\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165540\/unnamed-file-120.jpg\",\"contentUrl\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165540\/unnamed-file-120.jpg\",\"width\":1400,\"height\":500},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Work\",\"item\":\"https:\/\/www.dmcinfo.com\/our-work\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"NI Data Acquisition Library and Calibration Utility in Python\"}]},{\"@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":"NI Data Acquisition Library and Calibration Utility in Python | 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\/ni-data-acquisition-library-and-calibration-utility-in-python\/","og_locale":"en_US","og_type":"article","og_title":"NI Data Acquisition Library and Calibration Utility in Python","og_description":"The client requested two deliverables from DMC. They wanted\u00a0a\u00a0Python package that wraps NI\u2019s DAQmx hardware drivers and provides an easy interface that they could use to integrate these measurements in their automated test sequences. Additionally, they wanted to have an easy-to-use calibration GUI for their operators,\u00a0to ensure that precise power measurements could be made reliably. [&hellip;]","og_url":"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/","og_site_name":"DMC, Inc.","article_publisher":"https:\/\/www.facebook.com\/pages\/DMC-Inc\/107982009242929","article_modified_time":"2025-05-29T22:47:44+00:00","og_image":[{"width":1400,"height":500,"url":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165540\/unnamed-file-120.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/","url":"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/","name":"NI Data Acquisition Library and Calibration Utility in Python | DMC, Inc.","isPartOf":{"@id":"https:\/\/www.dmcinfo.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/#primaryimage"},"image":{"@id":"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165540\/unnamed-file-120.jpg","datePublished":"2022-12-06T00:00:00+00:00","dateModified":"2025-05-29T22:47:44+00:00","breadcrumb":{"@id":"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/#primaryimage","url":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165540\/unnamed-file-120.jpg","contentUrl":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165540\/unnamed-file-120.jpg","width":1400,"height":500},{"@type":"BreadcrumbList","@id":"https:\/\/www.dmcinfo.com\/our-work\/ni-data-acquisition-library-and-calibration-utility-in-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Work","item":"https:\/\/www.dmcinfo.com\/our-work\/"},{"@type":"ListItem","position":2,"name":"NI Data Acquisition Library and Calibration Utility in Python"}]},{"@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\/15106","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\/15104"}],"wp:attachment":[{"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/media?parent=15106"}],"wp:term":[{"taxonomy":"work_category","embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/work_category?post=15106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}