<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>LabVIEW Archives | DMC, Inc.</title>
	<atom:link href="https://static.dmcinfo.com/blog/category/test-and-measurement-automation/labview/feed/index.xml" rel="self" type="application/rss+xml" />
	<link></link>
	<description></description>
	<lastBuildDate>Thu, 03 Sep 2026 19:04:41 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.2</generator>

<image>
	<url>https://static.dmcinfo.com/wp-content/uploads/2025/04/site-icon-150x150.png</url>
	<title>LabVIEW Archives | DMC, Inc.</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>What We Learned at GDevCon N.A. 2026: AI, CI/CD, and the Future of LabVIEW</title>
		<link>https://static.dmcinfo.com/blog/50277/dmc-attends-gdevcon-2026/</link>
		
		<dc:creator><![CDATA[Andy Corbato]]></dc:creator>
		<pubDate>Tue, 25 Aug 2026 11:00:00 +0000</pubDate>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Special Events]]></category>
		<category><![CDATA[Test and Measurement Automation]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=50277</guid>

					<description><![CDATA[<p>Every year, Test &amp; Measurement experts gather at GDevCon N.A. to share what&#8217;s working, what&#8217;s broken, and where the community is headed. GDevCon hosts events worldwide, and this year DMC attended and presented at the North American conference in Chicago to share information, learn, and connect. On the Agenda: Extending LabVIEW with NATS I had [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/50277/dmc-attends-gdevcon-2026/">What We Learned at GDevCon N.A. 2026: AI, CI/CD, and the Future of LabVIEW</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Every year, Test &amp; Measurement experts gather at <a href="https://www.gdevconna.org/" target="_blank" rel="noreferrer noopener">GDevCon N.A.</a> to share what&#8217;s working, what&#8217;s broken, and where the community is headed. GDevCon hosts events worldwide, and this year DMC attended and presented at the North American conference in Chicago to share information, learn, and connect.</p>



<h2 id="h-on-the-agenda-extending-labview-with-nats" class="wp-block-heading">On the Agenda: Extending LabVIEW with NATS</h2>



<p class="wp-block-paragraph">I had the opportunity to present <em>Extending LabVIEW with NATS</em>, where I discussed how their <a href="https://nats.io/" data-type="link" data-id="https://nats.io/" target="_blank" rel="noreferrer noopener">pub/sub messaging model</a> can extend LabVIEW test systems beyond a single-language, single-executable architecture. The core idea is that monolithic test applications can be bulky and hard to manage, while tools like NATS allow for more modular software design. Check out the code in the <a href="https://www.vipm.io/package/nats_client_toolkit/">LabVIEW Toolkit</a>.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img fetchpriority="high" decoding="async" width="1263" height="480" src="https://static.dmcinfo.com/wp-content/uploads/2026/08/gdevcon-2026-image-1.png" alt="Extending LabVIEW with NATS" class="wp-image-50620" style="width:1198px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/08/gdevcon-2026-image-1.png 1263w, https://static.dmcinfo.com/wp-content/uploads/2026/08/gdevcon-2026-image-1-300x114.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/08/gdevcon-2026-image-1-1024x389.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/08/gdevcon-2026-image-1-768x292.png 768w" sizes="(max-width: 1263px) 100vw, 1263px" /></figure>



<h2 id="h-sessions-that-stood-out" class="wp-block-heading">Sessions That Stood Out</h2>



<p class="wp-block-paragraph">There were many presenters and panels that stood out this year. Here are a few that stuck with me. You can also see these sessions as they’re uploaded to <a href="https://www.youtube.com/@gdevconna" target="_blank" rel="noreferrer noopener">GDevCon’s YouTube channel</a>.</p>



<ul class="wp-block-list">
<li style="padding-bottom:var(--wp--preset--spacing--30)"><strong><em>Open-source Wrapping: The Gift That Keeps on Giving</em></strong> (Chris Davis, Amentum): A look at wrapping open-source C libraries for LabVIEW for Redis and Kafka. These are great complementary tools to NATS.</li>



<li style="padding-bottom:var(--wp--preset--spacing--30)"><strong><em>Shift-Left: Building Secure LabVIEW Systems from Day One</em></strong> (Sarah Zalusky, JKI): A practical look at security in LabVIEW architectures.</li>



<li style="padding-bottom:var(--wp--preset--spacing--30)"><strong><em>MALpocalypse</em></strong> (Michael Klessens, Intel): A candid account of when measurement abstraction layers stop working at scale with validation constraints.</li>



<li style="padding-bottom:var(--wp--preset--spacing--30)"><strong><em>Shaping the Future: AI and the Evolution of LabVIEW</em></strong> (Elijah Kerry, NI): An early look at Nigel, NI&#8217;s AI coding assistant for LabVIEW. Plus, lots of CI/CD tooling with LabVIEW containers.</li>



<li><strong><em>Our Build and Deployment Process: Using CI/CD and SystemLink</em></strong> (Sarah Morales, SRAM): A walkthrough of SRAM&#8217;s g-cli-based GitLab pipelines. SRAM’s approach validated the work DMC has done to automate our own pipelines with similar tooling.</li>
</ul>



<h2 id="h-catching-up-with-partners" class="wp-block-heading">Catching Up with Partners</h2>



<p class="wp-block-paragraph">Beyond the sessions, GDevCon is a great chance to connect with <a href="https://static.dmcinfo.com/about/partners/" target="_blank" rel="noreferrer noopener">DMC’s partners</a>. We participated in hardware and software demos from Pickering, Beckhoff, and NI. Most importantly, our partners give us insight into their project roadmaps. This allows us to be trusted advisors to our clients, knowing what to avoid for obsolescence and where to leverage new tools.</p>



<h2 id="h-final-takeaway" class="wp-block-heading">Final Takeaway</h2>



<p class="wp-block-paragraph">GDevCon N.A. is always a great place to learn what the test and measurement community is building, breaking, and fixing in production. The conference also gives us the opportunity to catch up with our hardware partners, and this year&#8217;s event did not disappoint!</p>



<p class="wp-block-paragraph">We cannot wait to see what next year will bring.</p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step">Building or modernizing a test system? DMC can help!</h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">Whether it&#8217;s secure-by-design LabVIEW development, multi-language test flows, or making your data actionable, DMC&#8217;s <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/" target="_blank" rel="noreferrer noopener">Test &amp; Measurement team</a> is here to help.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/50277/dmc-attends-gdevcon-2026/">What We Learned at GDevCon N.A. 2026: AI, CI/CD, and the Future of LabVIEW</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>LabVIEW + Python Over TCP: A Reusable Architecture Pattern for Industrial Software</title>
		<link>https://static.dmcinfo.com/blog/47156/labview-python-tcp-integration-architecture/</link>
		
		<dc:creator><![CDATA[Fadil Eledath]]></dc:creator>
		<pubDate>Mon, 13 Jul 2026 11:00:00 +0000</pubDate>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Test and Measurement Automation]]></category>
		<category><![CDATA[LabVIEW Programming]]></category>
		<category><![CDATA[Modbus TCP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Systems Integration]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=47156</guid>

					<description><![CDATA[<p>LabVIEW is still one of the best environments for operator interfaces, machine state logic, and deterministic control workflows. However, many teams now need to ship features that evolve faster than traditional LabVIEW development cycles can accommodate, including computer vision, advanced analytics, AI-assisted decision support, and custom tooling. The practical answer is not to rewrite everything. [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/47156/labview-python-tcp-integration-architecture/">LabVIEW + Python Over TCP: A Reusable Architecture Pattern for Industrial Software</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">LabVIEW is still one of the best environments for operator interfaces, machine state logic, and deterministic control workflows. However, many teams now need to ship features that evolve faster than traditional LabVIEW development cycles can accommodate, including computer vision, advanced analytics, AI-assisted decision support, and custom tooling.</p>



<p class="wp-block-paragraph">The practical answer is not to rewrite everything. Instead, a split-runtime architecture allows teams to keep LabVIEW where it shines and move high-change computation into Python services connected over TCP.</p>



<p class="wp-block-paragraph">This Python integration approach supports a wide range of industrial use cases, including:</p>



<ul class="wp-block-list">
<li>Vision inference and image analysis.</li>



<li>Statistical quality calculations.</li>



<li>Optimization and scheduling support.</li>



<li>Report generation and data enrichment.</li>



<li>AI-assisted engineering tools.</li>
</ul>



<p class="wp-block-paragraph">The end result is an architecture in which LabVIEW remains the orchestration and operator-layer interface for complex hardware systems, while Python hosts features that benefit from rapid iteration and rich libraries. One particularly salient reason to integrate Python in this way is that it integrates cleanly with the latest AI coding agents and tooling, supporting accelerated development.</p>



<h2 id="h-why-tcp-is-the-right-approach" class="wp-block-heading">Why TCP Is the Right Approach</h2>



<p class="wp-block-paragraph">There are multiple ways to connect runtimes, many of which DMC has explored across numerous domains. For example, we’ve worked with MQTT, RabbitMQ, NATS, Redis, as well as other messaging tools and protocols. In this tutorial, we use a simple request-reply pattern. Here, TCP is the best fit since it is:</p>



<ul class="wp-block-list">
<li style="padding-bottom:var(--wp--preset--spacing--30)"><strong>Language neutral:</strong>&nbsp;Both LabVIEW and Python support sockets natively.</li>



<li style="padding-bottom:var(--wp--preset--spacing--30)"><strong>Low overhead:</strong>&nbsp;Efficient for frequent request/response cycles without added protocol information.</li>



<li style="padding-bottom:var(--wp--preset--spacing--30)"><strong>Process isolated:</strong>&nbsp;UI/control failures and compute-service failures are easier to contain. No need to manage the lifecycle of a binary outside of two processes communicating with each other.</li>



<li><strong>Flexible in deployment: </strong>Run components on the same machine or distribute later without changing the contract.</li>
</ul>



<h2 id="h-labview-python-tcp-reference-architecture" class="wp-block-heading">LabVIEW Python TCP Reference Architecture</h2>



<p class="wp-block-paragraph">A reusable version of this request-reply pattern looks like this:</p>



<ol class="wp-block-list">
<li>LabVIEW gathers the request parameters and sends a typed request.</li>



<li>The Python service receives the request and executes the requested logic.</li>



<li>Python returns typed results plus optional status and timing metadata.</li>



<li>LabVIEW processes the reply body as needed.</li>
</ol>



<p class="wp-block-paragraph">This same structural loop applies whether the compute workload is vision, forecasting, anomaly scoring, or rule evaluation.</p>



<h2 id="h-socket-wrappers-for-labview-and-python-communication" class="wp-block-heading">Socket Wrappers for LabVIEW and Python Communication</h2>



<p class="wp-block-paragraph">This is a minimal implementation of a socket wrapper that serves as a skeleton you can use to add type safety, error checking, and other safeguards to make your code more robust. The wire format is a fixed header to ensure that reads are deterministic:</p>



<ul class="wp-block-list">
<li style="padding-bottom:var(--wp--preset--spacing--30)"><strong>LabVIEW to Python:</strong> 1 byte message type + 4 byte big-endian payload size + payload bytes.</li>



<li><strong>Python to LabVIEW:</strong> 4-byte big-endian payload size + payload bytes, since the message type defines the response.</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import json
from enum import Enum


class Lv2PyMessageType(Enum):
    ANALYZE_ANIMAL = 0
    FETCH_WEATHER = 1
    EXIT = 2


class LVSocket:
    def __init__(self, sock):
        self.sock = sock

    def await_message(self) -&gt; tuple&#91;Lv2PyMessageType, bytes&#93;:
        msg_type = Lv2PyMessageType(int.from_bytes(self._recv_exact(1), "big"))
        size = int.from_bytes(self._recv_exact(4), "big")
        return msg_type, self._recv_exact(size)

    def send_message(self, payload: bytes):
        self.sock.sendall(len(payload).to_bytes(4, "big"))
        self.sock.sendall(payload)

    def _recv_exact(self, n: int) -&gt; bytes:
        out = b""
        while len(out) &lt; n:
            chunk = self.sock.recv(n - len(out))
            if not chunk:
                raise ConnectionError("Socket closed")
            out += chunk
        return out</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> json</span></span>
<span class="line"><span style="color: #C586C0">from</span><span style="color: #D4D4D4"> enum </span><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> Enum</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Lv2PyMessageType</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">Enum</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">    ANALYZE_ANIMAL = </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4">    FETCH_WEATHER = </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #D4D4D4">    EXIT = </span><span style="color: #B5CEA8">2</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">LVSocket</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">__init__</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">self</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">sock</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">self</span><span style="color: #D4D4D4">.sock = sock</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">await_message</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">self</span><span style="color: #D4D4D4">) -&gt; tuple&#91;Lv2PyMessageType, </span><span style="color: #4EC9B0">bytes</span><span style="color: #D4D4D4">&#93;:</span></span>
<span class="line"><span style="color: #D4D4D4">        msg_type = Lv2PyMessageType(</span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">.from_bytes(</span><span style="color: #569CD6">self</span><span style="color: #D4D4D4">._recv_exact(</span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">), </span><span style="color: #CE9178">&quot;big&quot;</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #D4D4D4">        size = </span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">.from_bytes(</span><span style="color: #569CD6">self</span><span style="color: #D4D4D4">._recv_exact(</span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4">), </span><span style="color: #CE9178">&quot;big&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> msg_type, </span><span style="color: #569CD6">self</span><span style="color: #D4D4D4">._recv_exact(size)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">send_message</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">self</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">payload</span><span style="color: #D4D4D4">: </span><span style="color: #4EC9B0">bytes</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">self</span><span style="color: #D4D4D4">.sock.sendall(</span><span style="color: #DCDCAA">len</span><span style="color: #D4D4D4">(payload).to_bytes(</span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&quot;big&quot;</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">self</span><span style="color: #D4D4D4">.sock.sendall(payload)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_recv_exact</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">self</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">n</span><span style="color: #D4D4D4">: </span><span style="color: #4EC9B0">int</span><span style="color: #D4D4D4">) -&gt; </span><span style="color: #4EC9B0">bytes</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">        out = </span><span style="color: #569CD6">b</span><span style="color: #CE9178">&quot;&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">while</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">len</span><span style="color: #D4D4D4">(out) &lt; n:</span></span>
<span class="line"><span style="color: #D4D4D4">            chunk = </span><span style="color: #569CD6">self</span><span style="color: #D4D4D4">.sock.recv(n - </span><span style="color: #DCDCAA">len</span><span style="color: #D4D4D4">(out))</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">not</span><span style="color: #D4D4D4"> chunk:</span></span>
<span class="line"><span style="color: #D4D4D4">                </span><span style="color: #C586C0">raise</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">ConnectionError</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Socket closed&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">            out += chunk</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> out</span></span></code></pre></div>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="577" height="220" src="https://static.dmcinfo.com/wp-content/uploads/2026/07/labview-python-over-tcp-1.png" alt="LabVIEW block diagram showing TCP/IP communication using TCP Read and Write functions, including payload handling, connection management, and error handling clusters." class="wp-image-47162" style="aspect-ratio:2.6228373702422147;width:839px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/07/labview-python-over-tcp-1.png 577w, https://static.dmcinfo.com/wp-content/uploads/2026/07/labview-python-over-tcp-1-300x114.png 300w" sizes="(max-width: 577px) 100vw, 577px" /></figure>



<h2 id="h-service-loops" class="wp-block-heading">Service Loops</h2>



<p class="wp-block-paragraph">The service itself is just a&nbsp;<code>while True</code>&nbsp;loop: wait for a typed message, branch on it, compute, and send the reply. This pattern keeps the service logic straightforward and maintainable.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import socket

PORT = 12345

def analyze_animal(payload):
    # parse the payload for this message and generate your response here
    ...

def fetch_weather(payload):
    # parse the payload for this message and generate your response here
    ...

def serve(sock):
    lv = LVSocket(sock)
    while True:
        msg_type, payload = lv.await_message()
        if msg_type == Lv2PyMessageType.ANALYZE_ANIMAL:
            result = analyze_animal(payload)
            lv.send_message(json.dumps(result).encode("utf-8"))
        elif msg_type == Lv2PyMessageType.FETCH_WEATHER:
            result = fetch_weather(payload)
            lv.send_message(json.dumps(result).encode("utf-8"))
        elif msg_type == Lv2PyMessageType.EXIT:
            break

if __name__ == "__main__":
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind(("localhost", PORT))
        s.listen()
        print("Waiting for LabVIEW to connect...")
        conn, addr = s.accept()
        print(f"Connected by {addr}")
        with conn:
            serve(conn)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> socket</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">PORT = </span><span style="color: #B5CEA8">12345</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">analyze_animal</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">payload</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># parse the payload for this message and generate your response here</span></span>
<span class="line"><span style="color: #D4D4D4">    ...</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">fetch_weather</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">payload</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># parse the payload for this message and generate your response here</span></span>
<span class="line"><span style="color: #D4D4D4">    ...</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">serve</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">sock</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">    lv = LVSocket(sock)</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">while</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">True</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">        msg_type, payload = lv.await_message()</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> msg_type == Lv2PyMessageType.ANALYZE_ANIMAL:</span></span>
<span class="line"><span style="color: #D4D4D4">            result = analyze_animal(payload)</span></span>
<span class="line"><span style="color: #D4D4D4">            lv.send_message(json.dumps(result).encode(</span><span style="color: #CE9178">&quot;utf-8&quot;</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">elif</span><span style="color: #D4D4D4"> msg_type == Lv2PyMessageType.FETCH_WEATHER:</span></span>
<span class="line"><span style="color: #D4D4D4">            result = fetch_weather(payload)</span></span>
<span class="line"><span style="color: #D4D4D4">            lv.send_message(json.dumps(result).encode(</span><span style="color: #CE9178">&quot;utf-8&quot;</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">elif</span><span style="color: #D4D4D4"> msg_type == Lv2PyMessageType.EXIT:</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #C586C0">break</span></span>
<span class="line"></span>
<span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">__name__</span><span style="color: #D4D4D4"> == </span><span style="color: #CE9178">&quot;__main__&quot;</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">with</span><span style="color: #D4D4D4"> socket.socket(socket.AF_INET, socket.SOCK_STREAM) </span><span style="color: #C586C0">as</span><span style="color: #D4D4D4"> s:</span></span>
<span class="line"><span style="color: #D4D4D4">        s.bind((</span><span style="color: #CE9178">&quot;localhost&quot;</span><span style="color: #D4D4D4">, PORT))</span></span>
<span class="line"><span style="color: #D4D4D4">        s.listen()</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Waiting for LabVIEW to connect...&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        conn, addr = s.accept()</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">f</span><span style="color: #CE9178">&quot;Connected by </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">addr</span><span style="color: #569CD6">}</span><span style="color: #CE9178">&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">with</span><span style="color: #D4D4D4"> conn:</span></span>
<span class="line"><span style="color: #D4D4D4">            serve(conn)</span></span></code></pre></div>



<p class="wp-block-paragraph">We can handle these messages from LabVIEW using the built-in TCP functions and pass a wide range of data in the message body.</p>



<h2 id="h-lifecycle-management" class="wp-block-heading">Lifecycle Management</h2>



<p class="wp-block-paragraph">The next step is to start and stop our Python script along with our LabVIEW code while gracefully handling errors and exits. We can use the&nbsp;<code>System Exec.vi</code>&nbsp;function to accomplish this, as shown in the snippet below.</p>



<p class="wp-block-paragraph">We can also safely manage the lifecycle of the Python script by, in addition to the EXIT message type, adding handling for socket disconnections by gracefully exiting the Python script if the socket is closed from the LabVIEW side. With this approach, operators can restart Python service, for any reason, by simply stopping and restarting the LabVIEW application, without needing to manage the Python process separately.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="1174" height="541" src="https://static.dmcinfo.com/wp-content/uploads/2026/07/labview-python-over-tcp-2.png" alt="LabVIEW block diagram showing TCP/IP data reception for an Analyze Animal function, including external script execution via command line, resource management, and error handling using case structures." class="wp-image-47163" style="aspect-ratio:2.172079421271356;width:1200px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/07/labview-python-over-tcp-2.png 1174w, https://static.dmcinfo.com/wp-content/uploads/2026/07/labview-python-over-tcp-2-300x138.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/07/labview-python-over-tcp-2-1024x472.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/07/labview-python-over-tcp-2-768x354.png 768w" sizes="(max-width: 1174px) 100vw, 1174px" /></figure>



<h2 id="h-packaging-for-deployment" class="wp-block-heading">Packaging for Deployment</h2>



<p class="wp-block-paragraph">Finally, to deploy this architecture, package the Python script so it can be distributed alongside the LabVIEW build for client systems. This can be done with tools like PyInstaller, which creates a standalone executable from your Python script. You can then conditionally call this executable from LabVIEW using the&nbsp;<code>System Exec.vi</code>&nbsp;as shown below. This approach simplifies testing in development and deployment to production without needing to manage Python environments on the target machines.</p>



<h2 id="h-reliability-requirements-for-production" class="wp-block-heading">Reliability Requirements for Production</h2>



<p class="wp-block-paragraph">Industrial systems need graceful behavior under real-world conditions, including dropped connections, overloaded services, and operator restarts.</p>



<p class="wp-block-paragraph">Baseline reliability checklist includes:</p>



<ul class="wp-block-list">
<li>Request timeout and retry policy.</li>



<li>Reconnect strategy with back-off.</li>



<li>Health check or heartbeat message.</li>



<li>Structured logs on both sides.</li>



<li>Fail-safe startup and shutdown behavior.</li>



<li>Logging of exceptions and edge cases for postmortem analysis.</li>
</ul>



<p class="wp-block-paragraph">These patterns are essential for production readiness, and they also build trust with operations teams by ensuring the system won&#8217;t fail silently or require manual intervention.</p>



<h2 id="h-why-integrating-python-matters-for-ai-adoption-in-labview-teams" class="wp-block-heading">Why Integrating Python Matters for AI Adoption in LabVIEW Teams</h2>



<p class="wp-block-paragraph">This architecture also enables AI adoption. It allows teams to build key software components outside LabVIEW, where AI-assisted development can be faster due to:</p>



<ul class="wp-block-list">
<li>Rapid prototyping of analysis components.</li>



<li>Quick generation of helper tools and scripts.</li>



<li>Faster experimentation with algorithms and thresholds.</li>



<li>Simplified profiling and optimization workflows.</li>
</ul>



<p class="wp-block-paragraph">LabVIEW still governs system behavior; Python becomes the iteration engine. This division allows teams to leverage AI productively while preserving control-system rigor.</p>



<h2 id="h-key-takeaways" class="wp-block-heading">Key Takeaways</h2>



<ul class="wp-block-list">
<li>LabVIEW + Python over TCP is a reusable and extensible architecture pattern across many industrial use cases.</li>



<li>Keep LabVIEW for orchestration and UI; externalize high-change compute to Python.</li>



<li>The pattern creates a practical path for AI-assisted software development in industrial systems.</li>
</ul>



<p class="wp-block-paragraph">If you want to modernize an existing LabVIEW application, TCP-connected Python services are one of the highest-leverage places to start.</p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step">Partner with DMC to accelerate your next LabVIEW project.</h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">DMC’s <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/">Test &amp; Measurement </a>experts can help you design and deploy robust TCP-based architectures tailored to your application.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/47156/labview-python-tcp-integration-architecture/">LabVIEW + Python Over TCP: A Reusable Architecture Pattern for Industrial Software</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Use Raspberry Pi as a DAQ Device in LabVIEW</title>
		<link>https://static.dmcinfo.com/blog/46615/raspberry-pi-labview-data-acquisition/</link>
		
		<dc:creator><![CDATA[Fadil Eledath]]></dc:creator>
		<pubDate>Wed, 08 Jul 2026 11:00:00 +0000</pubDate>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Test and Measurement Automation]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Data Acquisition]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=46615</guid>

					<description><![CDATA[<p>LabVIEW simplifies the process of quickly acquiring data from hardware and processing it into an output for application users. Compared to text-based programming languages, LabVIEW’s treatment of data flow as code makes tasks like parallel processing and hardware resource management much simpler. This is especially true when using hardware created by the group behind it, [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/46615/raspberry-pi-labview-data-acquisition/">How to Use Raspberry Pi as a DAQ Device in LabVIEW</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">LabVIEW simplifies the process of quickly acquiring data from hardware and processing it into an output for application users. Compared to text-based programming languages, LabVIEW’s treatment of data flow as code makes tasks like parallel processing and hardware resource management much simpler. This is especially true when using hardware created by the group behind it, National Instruments. Their DAQ (data acquisition) devices are designed for ease of use in the LabVIEW programming environment and can be configured and used in code to effectively replace typical workbench equipment.</p>



<p class="wp-block-paragraph">There are, of course, other types of hardware that someone might want to acquire data from. Our clients often need us to integrate all kinds of equipment based on their technical and budget needs from a specialized hipot meter to a general-purpose DMM. One such client needed us to integrate a Raspberry Pi, which was collecting data from a set of sensors, with a LabVIEW app that was already collecting data from NI hardware.</p>



<p class="wp-block-paragraph">Raspberry Pis are pretty popular among hobbyists and hardware engineers alike for prototyping and actual production use since they’re inexpensive, fairly robust, and have a broad ecosystem of products that work nicely with them. Their GPIO (General Purpose Input/Output) pins make it easy to interface with hardware over different low-level protocols like SPI or I2C. The boards also come with WiFi, Bluetooth, Ethernet, and USB if you need to connect to something over a higher-level interface. This brings us to the question of how to use a Raspberry Pi in a way that is fast and reliable from a LabVIEW application running on a separate PC—effectively using it as a DAQ device.</p>



<h2 id="h-the-easy-way-fastapi" class="wp-block-heading">The Easy Way: FastAPI</h2>



<p class="wp-block-paragraph">Let&#8217;s begin with a simple approach—we can set up a minimal REST API service on the Raspberry Pi using FastAPI that, when queried, creates and returns your measurement.</p>



<h3 id="h-setting-up-the-api" class="wp-block-heading">Setting Up the API</h3>



<p class="wp-block-paragraph">FastAPI is a modern Python web framework that makes it simple to create REST APIs. On your Raspberry Pi, you can install it along with a production server like <code>uvicorn</code>:</p>



<p class="wp-block-paragraph"><code>pip install fastapi uvicorn</code></p>



<p class="wp-block-paragraph">Then create a simple API endpoint that reads from your sensor:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>from fastapi import FastAPI
import time

app = FastAPI()

@app.get("/sensor/read")
def read_sensor():
    # Your sensor reading code here
    # For example, reading from an I2C device
    value = read_i2c_sensor()
    timestamp = time.time()

    return {
        "value": value,
        "timestamp": timestamp
    }

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">from</span><span style="color: #D4D4D4"> fastapi </span><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> FastAPI</span></span>
<span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> time</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">app = FastAPI()</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">@app.get</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;/sensor/read&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">read_sensor</span><span style="color: #D4D4D4">():</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># Your sensor reading code here</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># For example, reading from an I2C device</span></span>
<span class="line"><span style="color: #D4D4D4">    value = read_i2c_sensor()</span></span>
<span class="line"><span style="color: #D4D4D4">    timestamp = time.time()</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #CE9178">&quot;value&quot;</span><span style="color: #D4D4D4">: value,</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #CE9178">&quot;timestamp&quot;</span><span style="color: #D4D4D4">: timestamp</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">__name__</span><span style="color: #D4D4D4"> == </span><span style="color: #CE9178">&quot;__main__&quot;</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> uvicorn</span></span>
<span class="line"><span style="color: #D4D4D4">    uvicorn.run(app, </span><span style="color: #9CDCFE">host</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;0.0.0.0&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">port</span><span style="color: #D4D4D4">=</span><span style="color: #B5CEA8">8000</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<p class="wp-block-paragraph">From LabVIEW, you can use the HTTP Client VIs to make GET requests to <code>&lt;http://your-pi-ip:8000/sensor/read&gt;</code> and parse the JSON response to extract your sensor data.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="620" height="269" src="https://static.dmcinfo.com/wp-content/uploads/2026/07/raspberry-pi-with-labview-application-1.png" alt="LabVIEW block diagram performing an HTTP GET request to a Raspberry Pi, parsing JSON sensor data, timestamping results, and processing output with built-in error handling." class="wp-image-46842" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/07/raspberry-pi-with-labview-application-1.png 620w, https://static.dmcinfo.com/wp-content/uploads/2026/07/raspberry-pi-with-labview-application-1-300x130.png 300w" sizes="(max-width: 620px) 100vw, 620px" /></figure>



<h3 id="h-the-issues" class="wp-block-heading">The Issues</h3>



<p class="wp-block-paragraph">While this approach is straightforward and gets you up and running quickly, it has some significant limitations for serious data acquisition:</p>



<p class="wp-block-paragraph"><strong>Not Truly Time-Series</strong>: Each request creates a new measurement on demand. If you&#8217;re trying to capture a continuous stream of data, you&#8217;ll miss all the samples between requests. This is fine for slow-changing values like temperature readings every few seconds, but inadequate for high-speed data acquisition.</p>



<p class="wp-block-paragraph"><strong>Request Overhead</strong>: Every HTTP request involves substantial overhead, TCP handshaking, HTTP headers, JSON serialization/deserialization, and network latency. If you need to sample at high rates (say, 1000 samples per second), making 1000 individual HTTP requests per second is inefficient and will likely introduce timing jitter and missed samples.</p>



<p class="wp-block-paragraph">For applications where you need occasional readings or the data changes slowly, this approach works great. But for continuous, high-speed data acquisition, we need something better.</p>



<h2 id="h-the-high-speed-way-redis-streams" class="wp-block-heading">The High-Speed Way: Redis Streams</h2>



<p class="wp-block-paragraph">Redis is an in-memory data structure store that&#8217;s fast and supports various data types, including streams &#8211; perfect for time-series data collection. The architecture here is more sophisticated but provides much better performance:</p>



<p class="wp-block-paragraph">In production, you may implement the sensor loop in C or another lower-level language for tighter timing, but Python is a good way to understand and prototype the architecture.</p>



<ol class="wp-block-list">
<li>A Python process on the Raspberry Pi continuously reads sensors and writes to a Redis stream.</li>



<li>Redis stores the data in memory as a time-ordered stream.</li>



<li>LabVIEW periodically reads from the stream, getting batches of new data.</li>



<li>Webdis provides an HTTP interface to Redis, making it accessible from LabVIEW.</li>
</ol>



<h3 id="h-setting-up-redis" class="wp-block-heading">Setting Up Redis</h3>



<p class="wp-block-paragraph">First, install Redis on your Raspberry Pi:</p>



<p class="wp-block-paragraph"><code>sudo apt-get install redis-server</code></p>



<p class="wp-block-paragraph">Install the Python Redis client as well:</p>



<p class="wp-block-paragraph"><code>pip install redis</code></p>



<p class="wp-block-paragraph">Configure Redis to start on boot and ensure it&#8217;s listening on the network if your LabVIEW application is on a different machine:</p>



<p class="wp-block-paragraph"><code>sudo systemctl enable redis-server<br>sudo systemctl start redis-server</code></p>



<h3 id="h-the-data-collection-process" class="wp-block-heading">The Data Collection Process</h3>



<p class="wp-block-paragraph">Create a Python script that continuously reads your sensors and writes to a Redis stream:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import time
import json
import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)

def collect_data():
    interval = 0.001  # 1ms = 1000 Hz sampling
    cycle_time = time.time()
    while True:

        # Read your sensor
        sensor_value = read_i2c_sensor()

        # Add to Redis stream
        r.xadd('sensor_stream', {
            'value': sensor_value,
            'timestamp': cycle_time
        })

        # Delay enough to start next loop at the interval rate
        time_to_next_cycle = cycle_time + interval - time.time()
        sleep_time = max(0, time_to_next_cycle)
        time.sleep(sleep_time)
        cycle_time += interval

if __name__ == "__main__":
    collect_data()</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> time</span></span>
<span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> json</span></span>
<span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> redis</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">r = redis.Redis(</span><span style="color: #9CDCFE">host</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&apos;localhost&apos;</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">port</span><span style="color: #D4D4D4">=</span><span style="color: #B5CEA8">6379</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">decode_responses</span><span style="color: #D4D4D4">=</span><span style="color: #569CD6">True</span><span style="color: #D4D4D4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">collect_data</span><span style="color: #D4D4D4">():</span></span>
<span class="line"><span style="color: #D4D4D4">    interval = </span><span style="color: #B5CEA8">0.001</span><span style="color: #D4D4D4">  </span><span style="color: #6A9955"># 1ms = 1000 Hz sampling</span></span>
<span class="line"><span style="color: #D4D4D4">    cycle_time = time.time()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">while</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">True</span><span style="color: #D4D4D4">:</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955"># Read your sensor</span></span>
<span class="line"><span style="color: #D4D4D4">        sensor_value = read_i2c_sensor()</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955"># Add to Redis stream</span></span>
<span class="line"><span style="color: #D4D4D4">        r.xadd(</span><span style="color: #CE9178">&apos;sensor_stream&apos;</span><span style="color: #D4D4D4">, {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #CE9178">&apos;value&apos;</span><span style="color: #D4D4D4">: sensor_value,</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #CE9178">&apos;timestamp&apos;</span><span style="color: #D4D4D4">: cycle_time</span></span>
<span class="line"><span style="color: #D4D4D4">        })</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955"># Delay enough to start next loop at the interval rate</span></span>
<span class="line"><span style="color: #D4D4D4">        time_to_next_cycle = cycle_time + interval - time.time()</span></span>
<span class="line"><span style="color: #D4D4D4">        sleep_time = </span><span style="color: #DCDCAA">max</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">, time_to_next_cycle)</span></span>
<span class="line"><span style="color: #D4D4D4">        time.sleep(sleep_time)</span></span>
<span class="line"><span style="color: #D4D4D4">        cycle_time += interval</span></span>
<span class="line"></span>
<span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">__name__</span><span style="color: #D4D4D4"> == </span><span style="color: #CE9178">&quot;__main__&quot;</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    collect_data()</span></span></code></pre></div>



<p class="wp-block-paragraph">This process runs independently, continuously writing data to the stream regardless of whether anyone is reading it. Redis handles the buffering and ensures data isn&#8217;t lost.</p>



<h3 id="h-accessing-redis-from-labview-with-webdis" class="wp-block-heading">Accessing Redis from LabVIEW with Webdis</h3>



<p class="wp-block-paragraph">Webdis is a simple web server that provides an HTTP interface to Redis. Install it on your Raspberry Pi:</p>



<p class="wp-block-paragraph"><code>git clone https://github.com/nicolasff/webdis.git<br>cd webdis<br>make<br>./webdis &amp;</code></p>



<p class="wp-block-paragraph">Now you can access Redis commands via HTTP. From LabVIEW, you can read from the stream using the HTTP Client VIs to make requests like:</p>



<p class="wp-block-paragraph"><code>http://your-pi-ip:7379/XREAD/COUNT/&lt;count>/STREAMS/sensor_stream/$</code></p>



<p class="wp-block-paragraph">The <code>$</code> special ID means &#8220;only entries added after this request begins&#8221; &#8211; it&#8217;s useful for your initial read when you want to ignore old buffered samples and start with future data. For subsequent reads to get all new data since your last read, you&#8217;ll need to use the actual stream ID you received from the previous read instead of <code>$</code>.</p>



<p class="wp-block-paragraph">The <code>&lt;count&gt;</code> value represents the maximum number of entries to return. Based on your sample rate and how often you want to read buffered data from the device, you will want to modify this value to keep up with data production on the Raspberry Pi.</p>



<h3 id="h-labview-implementation" class="wp-block-heading">LabVIEW Implementation</h3>



<p class="wp-block-paragraph">In your LabVIEW VI:</p>



<ol class="wp-block-list">
<li>Store the last stream ID you read (starting with &#8220;$&#8221;).</li>



<li>Periodically poll the stream using XREAD with your last ID.</li>



<li>Parse the JSON response to extract the sensor values.</li>



<li>Update your last stream ID for the next request.</li>



<li>Process the batch of samples.</li>
</ol>



<figure class="wp-block-image size-full"><img decoding="async" width="926" height="404" src="https://static.dmcinfo.com/wp-content/uploads/2026/07/raspberry-pi-with-labview-application-2.png" alt="LabVIEW block diagram showing an HTTP GET request to a Raspberry Pi, with JSON parsing and a loop for processing response data, including error handling clusters." class="wp-image-46843" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/07/raspberry-pi-with-labview-application-2.png 926w, https://static.dmcinfo.com/wp-content/uploads/2026/07/raspberry-pi-with-labview-application-2-300x131.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/07/raspberry-pi-with-labview-application-2-768x335.png 768w" sizes="(max-width: 926px) 100vw, 926px" /></figure>



<p class="wp-block-paragraph">This approach dramatically reduces overhead; instead of 1000 requests per second for 1000 samples, you might make 10 requests per second and get 100 samples each time.</p>



<h3 id="h-advantages" class="wp-block-heading">Advantages</h3>



<ul class="wp-block-list">
<li><strong>Continuous Collection: </strong>The Python process collects data continuously without gaps.</li>



<li><strong>Buffering:</strong> Redis buffers recent data in memory, so if LabVIEW is briefly busy, samples remain available.</li>



<li><strong>Batch Processing: </strong>LabVIEW can read multiple samples per request, reducing overhead.</li>
</ul>



<h3 id="h-adding-time-synchronization" class="wp-block-heading">Adding Time Synchronization</h3>



<p class="wp-block-paragraph">When combining data from multiple sources (like your NI DAQ and Raspberry Pi), timestamp synchronization becomes critical. The Raspberry Pi&#8217;s clock and your Windows PC&#8217;s clock will drift apart over time, making it difficult to properly align and correlate data.</p>



<p class="wp-block-paragraph">There are several approaches to tackle this problem:</p>



<p class="wp-block-paragraph"><strong>Measuring Clock Offset:</strong> Create a calibration routine in which LabVIEW requests the current time from the Pi and measures the round-trip time to calculate the clock offset. Apply this offset to align timestamps. Keep in mind that different hardware clocks will experience drift and you will need to regularly re-calibrate to account for this.</p>



<p class="wp-block-paragraph"><strong>Network Time Protocol (NTP):</strong> Configure both systems to sync with the same NTP server. This gets you in the ballpark but won&#8217;t give you perfect alignment due to network delays and update intervals.</p>



<h2 id="h-conclusion" class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Integrating a Raspberry Pi as a data acquisition device in your LabVIEW application enables cost-effective, flexible hardware integration. Your chosen approach depends on your requirements.</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--40)">For our client&#8217;s application, we used the Redis approach with time synchronization to integrate their Raspberry Pi sensors with their LabVIEW system, achieving reliable 1 kHz data collection aligned with their NI DAQ data.</p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step">Have an upcoming project? DMC can help you take the next step.</h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">Whether integrating Raspberry Pis, NI DAQs, mixed or specialized hardware, DMC can help build robust <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/">test and measurement systems</a>.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/46615/raspberry-pi-labview-data-acquisition/">How to Use Raspberry Pi as a DAQ Device in LabVIEW</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>LabVIEW Programming for DEWETRON OXYGEN Data Acquisition Integration</title>
		<link>https://static.dmcinfo.com/blog/42978/labview-programming-dewetron-oxygen-data-acquisition-integration/</link>
		
		<dc:creator><![CDATA[Brady Donahue]]></dc:creator>
		<pubDate>Wed, 15 Apr 2026 17:12:34 +0000</pubDate>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Test and Measurement Automation]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=42978</guid>

					<description><![CDATA[<p>On a recent project in the consumer electronics space, DMC developed a turnkey automated test stand with DEWETRON’s highly capable TRIONet3 chassis as the centerpiece of our data acquisition architecture. For this project, the system needed to be able to acquire temperature data, DC voltage measurements, digital tachometer measurements, and AC voltage and current for [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/42978/labview-programming-dewetron-oxygen-data-acquisition-integration/">LabVIEW Programming for DEWETRON OXYGEN Data Acquisition Integration</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">On <a href="https://static.dmcinfo.com/our-work/turnkey-automated-blender-test-cart/">a recent project in the consumer electronics space</a>, DMC developed a turnkey automated test stand with <a href="https://static.dmcinfo.com/about/partners/dewetron-integrator/" type="link" id="https://static.dmcinfo.com/about/partners/dewetron-integrator/">DEWETRON</a>’s highly capable TRIONet3 chassis as the centerpiece of our data acquisition architecture. For this project, the system needed to be able to acquire temperature data, DC voltage measurements, digital tachometer measurements, and AC voltage and current for power analysis to evaluate the overall performance of kitchen blenders.</p>



<p class="wp-block-paragraph">DEWETRON’s data acquisition chassis uses software called OXYGEN for channel configuration control, high-speed data logging, acquisition triggering, and more. OXYGEN can be controlled via the software front panel itself or, behind the scenes, by any software framework using SCPI commands.</p>



<p class="wp-block-paragraph">For this test application, DMC chose to integrate control of OXYGEN through our custom application framework based in LabVIEW using <a href="https://docs.dewetron.cloud/doc/scpi/Introduction.html">DEWETRON’s well-</a><a href="https://docs.dewetron.cloud/doc/scpi/Introduction.html" target="_blank" rel="noreferrer noopener">documented </a><a href="https://docs.dewetron.cloud/doc/scpi/Introduction.html">SCPI commands</a> and their in-house developed LabVIEW wrappers.</p>



<h2 id="h-oxygen-capability" class="wp-block-heading">OXYGEN Capability</h2>



<p class="wp-block-paragraph">Before highlighting DMC’s use of SCPI commands to control data acquisition, it is worth noting the design decisions behind selecting DEWETRON’s hardware and the corresponding OXYGEN software.</p>



<p class="wp-block-paragraph">OXYGEN allows users to configure and manage their own test setups by:</p>



<ul class="wp-block-list">
<li>Naming specific hardware channels</li>



<li>Applying sample rate, units, and scaling to measurement channels</li>



<li>Creating trigger events that will start and stop recording data automatically</li>



<li>Configuring logging settings, with log types available in TXT, CSV, TDMS, and more</li>



<li>Creating digital value displays that update in real time to allow operators to review test data as it is acquired</li>
</ul>



<p class="wp-block-paragraph">and, perhaps most notably for our application:</p>



<ul class="wp-block-list">
<li><strong>Creating AC power groups from available configured channels for detailed multi-phase AC power analysis</strong>
<ul class="wp-block-list">
<li><strong>This power group feature automatically calculates and presents highly accurate and detailed data like active/reactive/apparent power, power factor, fundamental vs total power, and more from simple voltage and current measurements on each AC phase.</strong></li>
</ul>
</li>
</ul>



<figure class="wp-block-image aligncenter size-full has-custom-border" style="margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="925" height="374" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/dewetron-data-acquisition-integration-image-1.jpg" alt="Simulated three-phase power analysis capability in OXYGEN." class="wp-image-42980" style="border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/dewetron-data-acquisition-integration-image-1.jpg 925w, https://static.dmcinfo.com/wp-content/uploads/2026/04/dewetron-data-acquisition-integration-image-1-300x121.jpg 300w, https://static.dmcinfo.com/wp-content/uploads/2026/04/dewetron-data-acquisition-integration-image-1-768x311.jpg 768w" sizes="(max-width: 925px) 100vw, 925px" /><figcaption class="wp-element-caption"><em>Example simulated three-phase power analysis capability in OXYGEN</em></figcaption></figure>



<p class="wp-block-paragraph">Having all of these features configurable in OXYGEN and accessible via SCPI commands on the back-end means we can let users configure and control their data acquisition through DMC’s custom LabVIEW application, which also integrates custom test sequencing.</p>



<figure class="wp-block-image aligncenter size-full has-custom-border" style="margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50)"><img decoding="async" width="925" height="473" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/dewetron-data-acquisition-integration-image-2.jpg" alt="OXYGEN channel configuration example." class="wp-image-42981" style="border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/dewetron-data-acquisition-integration-image-2.jpg 925w, https://static.dmcinfo.com/wp-content/uploads/2026/04/dewetron-data-acquisition-integration-image-2-300x153.jpg 300w, https://static.dmcinfo.com/wp-content/uploads/2026/04/dewetron-data-acquisition-integration-image-2-768x393.jpg 768w" sizes="(max-width: 925px) 100vw, 925px" /><figcaption class="wp-element-caption"><em>OXYGEN Channel Configuration Example &#8211; Simulated TRION3-1600-dLV-32-D-CAN module</em></figcaption></figure>



<h2 id="h-interfacing-with-oxygen-using-scpi-commands" class="wp-block-heading">Interfacing with OXYGEN using SCPI Commands</h2>



<p class="wp-block-paragraph">In order to integrate OXYGEN control into our custom LabVIEW application, we first had to dive deep into DEWETRON’s SCPI programming guide to determine the correct commands. Though this is standard practice when creating new hardware drivers, DEWETRON provides a great LabVIEW driver set that exposes basic SCPI control of OXYGEN via TCP/IP. This driver set includes built-in SCPI functionality to:</p>



<ul class="wp-block-list">
<li>Read channel properties
<ul class="wp-block-list">
<li>Each channel has separate configurable properties that vary based on the type of hardware</li>
</ul>
</li>



<li>Configure, start, and stop external data streaming</li>



<li>Query measurement values for one or more channels</li>



<li>Query system errors</li>
</ul>



<p class="wp-block-paragraph">In addition to the basic drivers listed above, DMC developed additional custom SCPI code modules to:</p>



<ul class="wp-block-list">
<li>Create and configure automated OXYGEN trigger events for controlling digital output channels
<ul class="wp-block-list">
<li>Using the <a href="https://docs.dewetron.cloud/doc/scpi/Triggerevents.html?highlight=trig">:TRIGger: command set</a></li>
</ul>
</li>



<li>Write OXYGEN channel properties like units, sample rate, etc., from the user’s test configuration setup
<ul class="wp-block-list">
<li>Using the <a href="https://docs.dewetron.cloud/doc/scpi/Channellist_access.html#id1">:PROPerty: command set</a></li>
</ul>
</li>



<li>Create time-stamped, descriptive data markers when measurement values exceed any user-configured guardrails during testing
<ul class="wp-block-list">
<li>Using the <a href="https://docs.dewetron.cloud/doc/scpi/Marker.html">:MARKer: command set</a></li>
</ul>
</li>
</ul>



<h2 id="h-integrating-oxygen-commands-into-labview" class="wp-block-heading">Integrating OXYGEN Commands into LabVIEW</h2>



<p class="wp-block-paragraph">A question that the reader may have at this point is: <strong>Why bother with using LabVIEW at all? Why not just use OXYGEN to do all data acquisition and skip the SCPI commands?</strong></p>



<p class="wp-block-paragraph">The answer is that integrating with our custom application framework in LabVIEW enables us to use a tried-and-true device control and measurement sequencing architecture and to integrate with a variety of measurement devices from several manufacturers. It also allowed for a custom user interface experience.</p>



<p class="wp-block-paragraph">DMC is well-versed in test application development in LabVIEW and has developed several in-house LabVIEW toolkits that allow us to present data to our users in information-dense, highly configurable custom applications.</p>



<p class="wp-block-paragraph">For this project, DMC has used its custom-developed sequencing toolkit based in LabVIEW that allows our users to configure device control and measurement test sequences with custom test limits. Users can use pre-made sequence steps and string them together to create custom automated test routines tailored to their various systems, and manage those sequence files and their revisions, all within DMC’s LabVIEW application. These test routines may reconfigure a device’s settings, turn a device on/off, start/stop data acquisition, continuously monitor safety circuits, and allow the user to pause, restart, and stop execution at any point.</p>



<figure class="wp-block-image aligncenter size-full has-custom-border" style="margin-top:var(--wp--preset--spacing--40);margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="925" height="420" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/dewetron-data-acquisition-integration-image-3.jpg" alt="Test software with sequence monitoring." class="wp-image-42982" style="border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-left-radius:20px;border-bottom-right-radius:20px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/dewetron-data-acquisition-integration-image-3.jpg 925w, https://static.dmcinfo.com/wp-content/uploads/2026/04/dewetron-data-acquisition-integration-image-3-300x136.jpg 300w, https://static.dmcinfo.com/wp-content/uploads/2026/04/dewetron-data-acquisition-integration-image-3-768x349.jpg 768w" sizes="(max-width: 925px) 100vw, 925px" /><figcaption class="wp-element-caption"><em>A view of the test software with sequence monitoring, data plots, and a live data table view</em></figcaption></figure>



<p class="wp-block-paragraph">Additionally, integrating remote control of devices like OXYGEN within our LabVIEW application allows us to modify and standardize on things like:</p>



<ul class="wp-block-list">
<li>Error and warning messages to the user from different devices</li>



<li>Centralized sequence and diagnostic logging from different devices for system-level troubleshooting</li>



<li>Standardized device control widgets that are exposed to the user</li>



<li>Simulated devices for testing in non-laboratory development environments</li>
</ul>



<h2 id="h-conclusion" class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">By leveraging the powerful capabilities of the DEWETRON OXYGEN software and measurement hardware via SCPI commands, DMC seamlessly integrated detailed power analysis and high-speed data acquisition from the TRIONet3 chassis into our custom test sequencing application.</p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step"><strong>Need a LabVIEW solution for your test and measurement project? Talk with DMC.</strong></h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">Learn more about how DMC can integrate DEWETRON OXYGEN software and LabVIEW programming to take your <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/" id="428">Test &amp; Measurement</a> project to the next level.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://static.dmcinfo.com/blog/42978/labview-programming-dewetron-oxygen-data-acquisition-integration/">LabVIEW Programming for DEWETRON OXYGEN Data Acquisition Integration</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Automating RF Measurements Using LabVIEW for Keysight CXA, ENA, and EPM Instruments</title>
		<link>https://static.dmcinfo.com/blog/42297/automating-rf-measurements-using-labview/</link>
		
		<dc:creator><![CDATA[Andrew Croissant]]></dc:creator>
		<pubDate>Thu, 26 Mar 2026 13:00:00 +0000</pubDate>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Test and Measurement Automation]]></category>
		<category><![CDATA[Keysight]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=42297</guid>

					<description><![CDATA[<p>Automating RF measurement systems can dramatically improve test efficiency, repeatability, and accuracy, especially in environments where multiple instruments must be configured and synchronized.&#160;DMC&#160;developed a LabVIEW-based application to automate measurements for three commonly used Keysight RF test instruments: an RF Spectrum Analyzer (RFSA), an RF Network Analyzer (RFNA), and an RF Power Meter (RFPM).&#160; The application [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/42297/automating-rf-measurements-using-labview/">Automating RF Measurements Using LabVIEW for Keysight CXA, ENA, and EPM Instruments</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Automating RF measurement systems can dramatically improve test efficiency, repeatability, and accuracy, especially in environments where multiple instruments must be configured and synchronized.&nbsp;DMC&nbsp;developed a LabVIEW-based application to automate measurements for three commonly used <a href="https://static.dmcinfo.com/about/partners/keysight-solutions-partner/" type="link" id="https://static.dmcinfo.com/about/partners/keysight-solutions-partner/">Keysight</a> RF test instruments: an RF Spectrum Analyzer (RFSA), an RF Network Analyzer (RFNA), and an RF Power Meter (RFPM).&nbsp;</p>



<p class="wp-block-paragraph">The application leverages the Keysight instrument driver library to handle communication and control, while providing a user-friendly graphical interface (GUI) for remote operation. We also integrated the system with NI TestStand, creating a reusable set of custom steps that simplify sequence development.</p>



<h2 id="h-system-overview" class="wp-block-heading">System Overview</h2>



<p class="wp-block-paragraph">The goal was to design a flexible, modular system that allows an engineer or technician to:</p>



<ul class="wp-block-list">
<li>Configure measurement parameters for each instrument, using either the LabVIEW GUI or the onboard GUI of each device.</li>



<li>Execute measurements automatically or under manual supervision.</li>



<li>Collect and log results for analysis.</li>



<li>Save and recall instrument states for repeatability.</li>



<li>Integrate the entire workflow into automated TestStand sequences.</li>
</ul>



<p class="wp-block-paragraph">The core of the system is a LabVIEW application that acts as both the user interface and the instrument control framework. Each instrument is managed by its own dedicated driver class, responsible for communication, configuration, and data acquisition. All devices are connected to a controller PC that runs the LabVIEW application via LAN interface.</p>



<h2 id="h-using-keysight-instrument-drivers" class="wp-block-heading">Using Keysight Instrument Drivers</h2>



<p class="wp-block-paragraph">Keysight provides certified LabVIEW drivers for many of its instruments. The libraries used in this application are as follows:</p>



<ul class="wp-block-list">
<li><strong>RFSA:</strong> Keysight XSAn library</li>



<li><strong>RFNA:</strong> Keysight NA library</li>



<li><strong>RFPM:</strong> Agilent E441X Series library</li>
</ul>



<p class="wp-block-paragraph">These drivers implement a consistent API structure and follow the VISA standard, making them ideal for this type of automation project.</p>



<p class="wp-block-paragraph">Our application created an Initialize, Calibrate, Configure, Acquire Data, Save/Recall Device State, and Close step for each device, using a parallel structure to the Keysight API for ease of integration. While these steps mirror the basic functionality of the VIs in the libraries, they allow the application to be more customizable by controlling only the settings we need to help streamline TestStand sequence development. The functions of each step are below:</p>



<ul class="wp-block-list">
<li><strong>Initialize:</strong> This step creates an instrument handle that will be used by all other Keysight drivers in the device’s lifecycle</li>



<li><strong>Calibrate:</strong> This step allows the user to perform calibration and zeroing steps on the device (only for RFPM)</li>



<li><strong>Configure: </strong>This step allows the user to select specific settings for the measurements and sends them to the device</li>



<li><strong>Acquire Data:</strong> This step will perform a measurement using the settings specified in the previous step and export the data to the application</li>



<li><strong>Save/Recall Device State:</strong> This step allows the user to save or recall all device settings as a configuration file locally on the device’s drive (Only for RFSA/RFNA)</li>



<li><strong>Close:</strong> This step closes the VISA resource for the device to prevent any memory issues when the app closes</li>
</ul>



<h2 id="h-application-design-and-architecture" class="wp-block-heading">Application Design and Architecture</h2>



<p class="wp-block-paragraph">The LabVIEW application uses an object-oriented approach, with each device having a widget class, an abstract class, a Keysight instrument class, and a simulated class. The widget class uses APIs from the abstract class to call the basic steps listed above. Each widget also contains the GUI for device control from the LabVIEW front-end.</p>



<p class="wp-block-paragraph">The Keysight instrument class contains device-specific drivers, and the simulated class generates random data when hardware is not available. If we replaced our devices with a non-Keysight model, we could easily add another class for that device’s drivers.</p>



<div class="wp-block-group alignfull wp-elements-3 has-global-padding is-layout-constrained wp-container-core-group-is-layout-869938a1 wp-block-group-is-layout-constrained" style="margin-top:var(--wp--preset--spacing--40);margin-bottom:var(--wp--preset--spacing--40);padding-top:0;padding-right:0;padding-bottom:0;padding-left:0">
<div class="wp-block-group alignwide has-white-color has-custom-light-blue-background-color has-text-color has-background has-link-color wp-elements-4 has-global-padding is-layout-constrained wp-container-core-group-is-layout-b03e55dc wp-block-group-is-layout-constrained" style="border-radius:20px;margin-top:var(--wp--preset--spacing--60);margin-bottom:var(--wp--preset--spacing--60);padding-top:var(--wp--preset--spacing--60);padding-right:0;padding-bottom:var(--wp--preset--spacing--60);padding-left:0">
<p class="has-text-align-center wp-block-paragraph" id="h-for-more-information-on-dmc-s-labview-oo-philosophy-and-hardware-abstraction-layers-like-those-used-in-this-application-check-out-these-additional-blogs"><strong>For more information on DMC’s LabVIEW OO philosophy and hardware abstraction layers like those used in this application, check out these additional blogs:</strong></p>



<p class="has-text-align-center has-custom-primary-blue-color has-text-color has-link-color wp-elements-5 wp-block-paragraph"><a href="https://static.dmcinfo.com/blog/20433/a-simple-hardware-abstraction-using-labview-oop/" type="post" id="20433">A Simple Hardware Abstraction using LabVIEW OOP</a></p>



<p class="has-text-align-center has-custom-primary-blue-color has-text-color has-link-color wp-elements-6 wp-block-paragraph"><a href="https://static.dmcinfo.com/blog/36802/labview-oop-does-it-pay-off/" type="post" id="36802">LabVIEW OOP: Does it Pay Off?</a></p>
</div>
</div>



<h2 id="h-gui-module" class="wp-block-heading">GUI Module</h2>



<p class="wp-block-paragraph">The GUI for RFSA has 2 screens, with users able to control basic display settings or recall a state from the device’s settings on the first screen. More settings options are available on the second screen, which is accessible by selecting the “Configure” button. After the user selects their desired settings, they can conduct a measurement using the “Start” button, then set markers using the frequency control or the slider below. The positions of the markers automatically update, and their frequency and amplitude values are displayed below.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-0e47273b wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img decoding="async" width="594" height="618" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/swept-SA-measurement.png" alt="main tab swept SA measurement" class="wp-image-42366" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/swept-SA-measurement.png 594w, https://static.dmcinfo.com/wp-content/uploads/2026/03/swept-SA-measurement-288x300.png 288w" sizes="(max-width: 594px) 100vw, 594px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img decoding="async" width="556" height="608" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/RF-measurement-configuration.png" alt="configure tab RF measurement" class="wp-image-42367" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/RF-measurement-configuration.png 556w, https://static.dmcinfo.com/wp-content/uploads/2026/03/RF-measurement-configuration-274x300.png 274w" sizes="(max-width: 556px) 100vw, 556px" /></figure>
</div>
</div>



<p class="wp-block-paragraph">The RFNA has a similar GUI but requires fewer settings. It has one screen, allowing the user to control the frequency range and select the test type between Insertion Loss (S12) or VSWR (S11). Like the RFSA, users can recall a device state, start a measurement, and control the marker from this screen.</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="596" height="613" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/vswr-measurement.png" alt="VSWR measurement" class="wp-image-42368" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/vswr-measurement.png 596w, https://static.dmcinfo.com/wp-content/uploads/2026/03/vswr-measurement-292x300.png 292w" sizes="(max-width: 596px) 100vw, 596px" /></figure>



<p class="wp-block-paragraph">The RFPM has a different GUI because it only conducts single-channel measurements, as opposed to frequency sweeps. This GUI allows the user to perform a calibration sequence by selecting the type (Calibrate, Zero, or Calibrate &amp; Zero). The user can then select the frequency at which to conduct the measurement and set the resolution for the measurements. When the user selects the “Measure” button, the device conducts a power measurement and displays it both on the device’s onboard GUI and the LabVIEW GUI.</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="604" height="291" src="https://static.dmcinfo.com/wp-content/uploads/2026/03/RF-measurement-calibration.png" alt="RF measurement calibration" class="wp-image-42369" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/03/RF-measurement-calibration.png 604w, https://static.dmcinfo.com/wp-content/uploads/2026/03/RF-measurement-calibration-300x145.png 300w" sizes="(max-width: 604px) 100vw, 604px" /></figure>



<h2 id="h-data-acquisition-and-storage" class="wp-block-heading">Data Acquisition and Storage</h2>



<p class="wp-block-paragraph">Measurements for each device can be conducted simultaneously, and the data from all three instruments can be automatically logged to local or network drives. For this application, the data is stored in a TDMS file format, but could easily be saved as a CSV or other format as well.</p>



<p class="wp-block-paragraph">DMC implemented a data tagging system that associates each measurement with metadata such as date, time, operator, device under test (DUT) ID, and test sequence name. This metadata improves traceability and simplifies post-test analysis.</p>



<h2 id="h-integration-with-ni-teststand" class="wp-block-heading">Integration with NI TestStand</h2>



<p class="wp-block-paragraph">DM added an additional layer of efficiency to the RF measurements by integrating them into NI TestStand sequences used across multiple test stations. To achieve this, we created custom TestStand steps that directly call the LabVIEW VIs controlling each instrument. Each step has a wrapper VI that is used to create a TestStand custom step. This allows the user to create sequences in TestStand the same way they would in LabVIEW, but without needing to understand the programming backend. When used in a sequence, the data plots appear in the report generated by TestStand, and the data can be used in pass/fail grading steps during the sequence itself.</p>



<p class="wp-block-paragraph">TestStand is the foundation of one of DMC’s core battery test platforms for the reasons above and can enhance the accessibility of automation when used in conjunction with well-encapsulated LabVIEW code.</p>



<h2 id="h-conclusion" class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">This project demonstrates how combining LabVIEW, Keysight instrument drivers, and NI TestStand creates a powerful and flexible RF measurement automation platform. By automating configuration, acquisition, and reporting for the three devices, we achieved significant gains in efficiency, repeatability, and scalability. The system meets current test requirements and lays the foundation for future automation initiatives. Because of the modular LabVIEW code, we can easily scale the system to add functions, GUI elements, and devices with minimal rework.</p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step">Turn Manual Testing Into Automated Results. </h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">Reduce manual effort and improve repeatability with <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/" id="428">Test &amp; Measurement solutions</a> from DMC. Learn more about our capabilities with <a href="https://static.dmcinfo.com/our-work/category/service/test-measurement-automation/labview/" data-type="work_category" data-id="685">LabVIEW</a>, <a href="https://static.dmcinfo.com/our-work/test-data-centralization-standardization-and-storage-using-python-ni-systemlink-server/" data-type="our_work" data-id="15116">NI TestStand</a>, and <a href="https://static.dmcinfo.com/about/partners/keysight-solutions-partner/" data-type="page" data-id="42353">Keysight</a> RF Instruments today.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/42297/automating-rf-measurements-using-labview/">Automating RF Measurements Using LabVIEW for Keysight CXA, ENA, and EPM Instruments</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Spreading Holiday Cheer with New LabVIEW Ornaments</title>
		<link>https://static.dmcinfo.com/blog/40329/spreading-holiday-cheer-with-new-labview-ornaments/</link>
		
		<dc:creator><![CDATA[Rachel Hughes]]></dc:creator>
		<pubDate>Thu, 11 Dec 2025 23:20:48 +0000</pubDate>
				<category><![CDATA[Culture]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Test and Measurement Automation]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=40329</guid>

					<description><![CDATA[<p>For the last several years, DMC’s Test &amp; Measurement Team has put their artistic skills to the test to celebrate the holiday season with the LabVIEW Icon Editor. LabVIEW’s Icon Editor is typically used to document code, but we’ve found that the 32&#215;32-pixel icons make great ornaments for a tree. The activity starts with development: [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/40329/spreading-holiday-cheer-with-new-labview-ornaments/">Spreading Holiday Cheer with New LabVIEW Ornaments</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">For the last several years, <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/">DMC’s Test &amp; Measurement Team</a> has put their artistic skills to the test to celebrate the holiday season with the LabVIEW Icon Editor. LabVIEW’s <a href="https://www.ni.com/docs/en-US/bundle/labview/page/creating-icons.html?srsltid=AfmBOoo6n0YKyr2YqKq1POEhoxyFg1Led5_x83naC24sBoXXWvfyXCNW">Icon Editor</a> is typically used to document code, but we’ve found that the 32&#215;32-pixel icons make great ornaments for a tree.</p>



<p class="wp-block-paragraph">The activity starts with development: using LabVIEW, MS Paint, and our own creativity, we all create ornament designs that inspire us for the year. We then print them, laminate them, and hole-punch just like any paper ornament before the best part: hanging them on the tree!</p>



<div class="wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-0e47273b wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-large has-custom-border"><img decoding="async" width="1024" height="676" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-labview-ornaments-1024x676.jpg" alt="Creating LabVIEW Ornaments" class="wp-image-40332" style="border-radius:20px" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-labview-ornaments-1024x676.jpg 1024w, https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-labview-ornaments-300x198.jpg 300w, https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-labview-ornaments-768x507.jpg 768w, https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-labview-ornaments-1536x1014.jpg 1536w, https://static.dmcinfo.com/wp-content/uploads/2025/12/creating-labview-ornaments-2048x1352.jpg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-large has-custom-border"><img decoding="async" width="1024" height="676" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/dmc-labview-ornament-tree-1024x676.jpg" alt="DMC LabVIEW Ornament tree" class="wp-image-40347" style="border-radius:20px;object-fit:cover" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/dmc-labview-ornament-tree-1024x676.jpg 1024w, https://static.dmcinfo.com/wp-content/uploads/2025/12/dmc-labview-ornament-tree-300x198.jpg 300w, https://static.dmcinfo.com/wp-content/uploads/2025/12/dmc-labview-ornament-tree-768x507.jpg 768w, https://static.dmcinfo.com/wp-content/uploads/2025/12/dmc-labview-ornament-tree-1536x1014.jpg 1536w, https://static.dmcinfo.com/wp-content/uploads/2025/12/dmc-labview-ornament-tree-2048x1352.jpg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>
</div>
</div>



<p class="wp-block-paragraph">The activity is a team effort, as after several years of festive ornaments, we must be selective about what makes the tree each year. This year, themes like AI, LabVIEW package managers, and our ongoing <a href="https://static.dmcinfo.com/blog/17544/dmc-and-nasas-journey-to-the-stars/">NASA project</a> felt particularly topical to keep on the tree, as well as some classic LabVIEW icons and the Top Level at the top of the tree. If you want to check out some of the prior years&#8217; events, check out <a href="https://static.dmcinfo.com/blog/16970/dmcs-test-measurement-team-makes-labview-holiday-ornaments/" type="link" id="https://static.dmcinfo.com/blog/16970/dmcs-test-measurement-team-makes-labview-holiday-ornaments/">2023</a> and <a href="https://static.dmcinfo.com/blog/15735/creating-labview-ornaments-with-labview-icon-editor/" type="link" id="https://static.dmcinfo.com/blog/15735/creating-labview-ornaments-with-labview-icon-editor/">2025</a>!</p>



<div class="wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained">
<figure class="wp-block-image size-large has-custom-border"><img decoding="async" width="1024" height="676" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/labVIEW-ornaments-1-1024x676.jpg" alt="Creating LabVIEW Ornaments" class="wp-image-40336" style="border-radius:20px" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/labVIEW-ornaments-1-1024x676.jpg 1024w, https://static.dmcinfo.com/wp-content/uploads/2025/12/labVIEW-ornaments-1-300x198.jpg 300w, https://static.dmcinfo.com/wp-content/uploads/2025/12/labVIEW-ornaments-1-768x507.jpg 768w, https://static.dmcinfo.com/wp-content/uploads/2025/12/labVIEW-ornaments-1-1536x1014.jpg 1536w, https://static.dmcinfo.com/wp-content/uploads/2025/12/labVIEW-ornaments-1-2048x1352.jpg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<p class="wp-block-paragraph">One of DMC’s <a href="https://static.dmcinfo.com/about/core-values/">core values is Have Fun</a>, and we’ve found that our ornament tradition helps us do just that. It’s a great way to refresh your focus with some creativity and come together as a team to make something we can enjoy for the rest of the holiday season.</p>



<figure class="wp-block-image aligncenter size-large is-resized has-custom-border"><img decoding="async" width="1024" height="881" src="https://static.dmcinfo.com/wp-content/uploads/2025/12/dmc-creating-labview-ornaments-1024x881.jpg" alt="DMC team creating LabVIEW ornaments" class="wp-image-40337" style="border-radius:20px;width:724px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/12/dmc-creating-labview-ornaments-1024x881.jpg 1024w, https://static.dmcinfo.com/wp-content/uploads/2025/12/dmc-creating-labview-ornaments-300x258.jpg 300w, https://static.dmcinfo.com/wp-content/uploads/2025/12/dmc-creating-labview-ornaments-768x661.jpg 768w, https://static.dmcinfo.com/wp-content/uploads/2025/12/dmc-creating-labview-ornaments-1536x1322.jpg 1536w, https://static.dmcinfo.com/wp-content/uploads/2025/12/dmc-creating-labview-ornaments-2048x1762.jpg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 id="h-celebrating-the-season-as-an-ni-platinum-partner" class="wp-block-heading">Celebrating the Season as an NI Platinum Partner</h2>



<p class="wp-block-paragraph">Our ornament tradition is also a reminder of how closely we work with NI technologies throughout the year. DMC is proud to be one of NI’s highest-ranked partners worldwide and the exclusive Platinum-level partner in the Americas. Since 1997, our teams have partnered with NI to deliver complete instrumentation, measurement, and automated test solutions for clients across a wide range of industries.<br><br>The same LabVIEW tools that spark our creativity during the holidays are the foundation of the work we do every day. Our engineers bring deep knowledge of NI products to projects involving <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/labview-programming/">LabVIEW programming</a>, <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/automated-test-stand-design/">automated test equipment</a>, <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/real-time-and-fpga-systems/">real-time and FPGA development</a>, and more. This expertise helps us design solutions that are consistent, scalable, and built for long-term success. Visit our <a href="https://static.dmcinfo.com/about/partners/ni-integration-partner/">NI partner page</a> to learn more about our expertise. &nbsp;</p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step">Have a NI-ce Holiday Season with Our LabVIEW Capabilities.</h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">Got a creative LabVIEW idea you’d like to take a swing at? Learn more about our <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/" data-type="page" data-id="428">Test &amp; Measurement</a> team and our <a href="https://static.dmcinfo.com/our-work/category/service/test-measurement-automation/labview/" data-type="work_category" data-id="685">LabVIEW</a> expertise beyond the icon editor!</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/40329/spreading-holiday-cheer-with-new-labview-ornaments/">Spreading Holiday Cheer with New LabVIEW Ornaments</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>DMC-Complete: Faster LabVIEW Coding with Old-Fashioned AI</title>
		<link>https://static.dmcinfo.com/blog/40065/dmc-complete-faster-labview-coding-with-old-fashioned-ai/</link>
		
		<dc:creator><![CDATA[Fadil Eledath]]></dc:creator>
		<pubDate>Wed, 10 Dec 2025 15:00:00 +0000</pubDate>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Test and Measurement Automation]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=40065</guid>

					<description><![CDATA[<p>When you start using LabVIEW, one of the first tools you’ll encounter is the Functions Palette. This palette helps you locate the blocks needed to build your program&#8217;s logic by organizing them into various sections. As you gain experience, you start using the QuickDrop tool, which lets you add blocks and structures by searching for [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/40065/dmc-complete-faster-labview-coding-with-old-fashioned-ai/">DMC-Complete: Faster LabVIEW Coding with Old-Fashioned AI</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">When you start using LabVIEW, one of the first tools you’ll encounter is the Functions Palette. This palette helps you locate the blocks needed to build your program&#8217;s logic by organizing them into various sections. As you gain experience, you start using the QuickDrop tool, which lets you add blocks and structures by searching for them.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-0e47273b wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph"><strong>Figure 1: Functions Palette</strong></p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="640" height="931" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-1-1.png" alt="Figure 1" class="wp-image-40066" style="width:483px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-1-1.png 640w, https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-1-1-206x300.png 206w" sizes="(max-width: 640px) 100vw, 640px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph"><strong>Figure 2: QuickDrop</strong></p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="575" height="488" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-2-1.png" alt="Figure 2" class="wp-image-40067" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-2-1.png 575w, https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-2-1-300x255.png 300w" sizes="(max-width: 575px) 100vw, 575px" /></figure>
</div>
</div>



<p class="wp-block-paragraph">To complement QuickDrop, we have been working on DMC-Complete: a tool that has the potential to supercharge the way you use LabVIEW by predicting the blocks you need right when you need them. View Our Demo.</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
<div style="width: 640px;" class="wp-video"><video class="wp-video-shortcode" id="video-40065-1" width="640" height="360" preload="metadata" controls="controls"><source type="video/mp4" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/DMC-Complete-Demo.mp4?_=1" /><a href="https://static.dmcinfo.com/wp-content/uploads/2025/11/DMC-Complete-Demo.mp4">https://static.dmcinfo.com/wp-content/uploads/2025/11/DMC-Complete-Demo.mp4</a></video></div>
</div></figure>



<p class="wp-block-paragraph">Simply clicking on a block triggers the DMC-Complete interface to predict what block you are most likely to use next, speeding up the process of programming so you can focus on the logic of your code rather than the tedium of searching for a specific block.</p>



<p class="wp-block-paragraph"><strong>DMC-Complete Offers:</strong></p>



<ul class="wp-block-list">
<li>Blazing speed – predictions happen in milliseconds</li>



<li>Fully local operation – no internet required</li>



<li>Minimal resource usage – runs efficiently even on VMs</li>



<li>Full library compatibility – works with custom and VIPM packages</li>



<li>Strong privacy – your code stays on your device</li>



<li>Easy retraining – add or remove packages with minimal effort</li>



<li>Open-source access – check out the code, available under the BSD 3-Clause License</li>
</ul>



<h2 id="h-getting-started" class="wp-block-heading">Getting Started </h2>



<p class="wp-block-paragraph">If you want to get started with using DMC-Complete, check out <a href="https://github.com/fadilf/DMC-Complete" type="link" id="https://github.com/fadilf/DMC-Complete" target="_blank" rel="noreferrer noopener">our repository</a> where the code for this project lives.</p>



<p class="wp-block-paragraph">The Installation and Usage sections of the README.md file should help you get up and running with the tool in no time! Keep in mind that the project is currently an early beta, so if you encounter any issues while using it, please file them on the GitHub page.</p>



<h2 id="h-how-it-works" class="wp-block-heading">How It Works</h2>



<p class="wp-block-paragraph">At GDevCon NA in Chicago this year, DMC got a chance to give a talk on how the tool works in more detail!</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="LabVIEW Autocomplete - Fadil Eledath. GDevCon N.A. 2025" width="500" height="281" src="https://www.youtube.com/embed/vfY3ENiGERk?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h3 id="h-markov-chains" class="wp-block-heading">Markov Chains</h3>



<p class="wp-block-paragraph">The key to understanding DMC Complete? <a href="https://en.wikipedia.org/wiki/Markov_chain" target="_blank" rel="noreferrer noopener">Markov chains</a>. A Markov chain can model a sequence of events in which the probability of each event depends only on a limited set of prior states. This approach can be used to model things as important as the weather or something as mundane as your opponent’s next move in rock-paper-scissors:</p>



<p class="wp-block-paragraph">[&#8230;, <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2600.png" alt="☀" class="wp-smiley" style="height: 1em; max-height: 1em;" />, <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2601.png" alt="☁" class="wp-smiley" style="height: 1em; max-height: 1em;" />, <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f327.png" alt="🌧" class="wp-smiley" style="height: 1em; max-height: 1em;" />] → <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26c8.png" alt="⛈" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (50%) / <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f327.png" alt="🌧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (30%) / <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2601.png" alt="☁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (20%)</p>



<p class="wp-block-paragraph">[&#8230;, rock, paper, scissors] → rock (60%) / paper (30%) / scissors (10%)</p>



<p class="wp-block-paragraph">These simple statistical relationships form the basis for predicting the next LabVIEW block in your block diagram.</p>



<h3 id="h-analyzing-block-diagrams" class="wp-block-heading">Analyzing Block Diagrams</h3>



<p class="wp-block-paragraph"><strong>Figure 3</strong></p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="244" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-3-1.png" alt="Figure 3 " class="wp-image-40070" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-3-1.png 975w, https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-3-1-300x75.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-3-1-768x192.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<p class="wp-block-paragraph">Let’s look at an example block diagram. We’ve got different types of blocks like controls, indicators, constants, DAQmx functions, etc., as well as a for loop structure. If we ignore structures, our block diagram looks like this:</p>



<p class="wp-block-paragraph"><strong>Figure 4</strong></p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="244" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-4-1.png" alt="" class="wp-image-40071" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-4-1.png 975w, https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-4-1-300x75.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-4-1-768x192.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<p class="wp-block-paragraph">We then genericize the blocks so we can treat them as Markov states for analysis. You might notice that this looks a lot like a directed acyclic graph.</p>



<p class="wp-block-paragraph"><strong>Figure 5</strong></p>



<figure class="wp-block-image size-full"><img decoding="async" width="1024" height="272" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-5-1.png" alt="" class="wp-image-40072" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-5-1.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-5-1-300x80.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-5-1-768x204.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Once we have this set of Markov states, we can start to observe patterns of blocks to make predictions later. If we count 2-block sequences, a pattern begins to emerge.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-0e47273b wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph"><strong>Figure 6</strong></p>



<figure class="wp-block-image size-full"><img decoding="async" width="974" height="329" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-6-1.png" alt="" class="wp-image-40073" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-6-1.png 974w, https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-6-1-300x101.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/Figure-6-1-768x259.png 768w" sizes="(max-width: 974px) 100vw, 974px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph"><strong>Figure 7</strong></p>



<figure class="wp-block-image size-full"><img decoding="async" width="1144" height="1000" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/image.psd7_.png" alt="" class="wp-image-40080" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/image.psd7_.png 1144w, https://static.dmcinfo.com/wp-content/uploads/2025/11/image.psd7_-300x262.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/image.psd7_-1024x895.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2025/11/image.psd7_-768x671.png 768w" sizes="(max-width: 1144px) 100vw, 1144px" /></figure>
</div>
</div>



<p class="wp-block-paragraph">Once you have a table like figure 7, you can reorganize it into a Markov model, which looks more like this:</p>



<p class="wp-block-paragraph"><strong>Figure 8</strong></p>



<figure class="wp-block-image size-full"><img decoding="async" width="2000" height="957" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/New-Project8.jpg" alt="" class="wp-image-40081" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/New-Project8.jpg 2000w, https://static.dmcinfo.com/wp-content/uploads/2025/11/New-Project8-300x144.jpg 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/New-Project8-1024x490.jpg 1024w, https://static.dmcinfo.com/wp-content/uploads/2025/11/New-Project8-768x367.jpg 768w, https://static.dmcinfo.com/wp-content/uploads/2025/11/New-Project8-1536x735.jpg 1536w" sizes="(max-width: 2000px) 100vw, 2000px" /></figure>



<p class="wp-block-paragraph">Now, when we see a numeric control, we know that the next block is either a Sine Wave (50% chance), a DAQmx Create Channel block (~33% chance), or a DAQmx Timing block (~17% chance). If we apply this process to our entire training set, including the example files included with LabVIEW and any libraries we install, we get a model that learns the pattern of how we code with the blocks we have.</p>



<p class="wp-block-paragraph">This model is just a mapping/dictionary, so it only takes up a few megabytes on disk and in memory. Using it is as simple as a map lookup, so it’s an instant O(1) operation. Behind the scenes, there is a caching mechanism that takes place, so if you want to retrain with fewer/more files, the retraining process runs very quickly. The slowest part of training is the initial conversion of a VI file into a graph, which is why we have taken on the burden of creating a pre-made cache that should speed up initial training as well.</p>



<h2 id="h-summary" class="wp-block-heading">Summary</h2>



<p class="wp-block-paragraph">DMC-Complete demonstrates how classical AI techniques can deliver surprising results. By combining the simple principle of Markov modeling with the power of LabVIEW’s graphical programming, you can have a practical, private, and responsive coding companion. Sometimes, the simplest solutions are the most effective.</p>



<p class="wp-block-paragraph">By developing this tool, we hope to contribute to the ever-growing landscape of open-source projects written in LabVIEW that work to improve productivity and serve our needs as well as our clients’ needs better. Contributions to the project are welcome at the repository link provided above.</p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step"><strong>Accelerate Your LabVIEW Development</strong> with DMC-Complete.</h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">Use AI techniques with DMC-Complete to deliver high-quality solutions for your <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/labview-programming/" data-type="page" data-id="584">LabVIEW </a>projects. Learn more about our <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/" data-type="page" data-id="428">Test &amp; Measurement</a> capabilities.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/40065/dmc-complete-faster-labview-coding-with-old-fashioned-ai/">DMC-Complete: Faster LabVIEW Coding with Old-Fashioned AI</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		<enclosure url="https://static.dmcinfo.com/wp-content/uploads/2025/11/DMC-Complete-Demo.mp4" length="413435" type="video/mp4" />

			</item>
		<item>
		<title>LabVIEW Real-Time: When to Opt for RT and When to Stick to PC</title>
		<link>https://static.dmcinfo.com/blog/39753/labview-real-time-when-to-opt-for-rt-and-when-to-stick-to-pc/</link>
		
		<dc:creator><![CDATA[Brent Hoerman]]></dc:creator>
		<pubDate>Thu, 13 Nov 2025 13:00:00 +0000</pubDate>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Test and Measurement Automation]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=39753</guid>

					<description><![CDATA[<p>There’s a moment in nearly every test system kickoff when someone asks, “Should we go Real-Time for this?” or “Why are we using real-time for this?” These are fair questions, and they deserve more than a knee-jerk answer. At DMC, we’ve seen both ends of the spectrum—from rugged cRIO deployments in wind tunnels to PC-based [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/39753/labview-real-time-when-to-opt-for-rt-and-when-to-stick-to-pc/">LabVIEW Real-Time: When to Opt for RT and When to Stick to PC</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">There’s a moment in nearly every test system kickoff when someone asks, “Should we go Real-Time for this?” or “Why are we using real-time for this?” These are fair questions, and they deserve more than a knee-jerk answer. At DMC, we’ve seen both ends of the spectrum—from rugged cRIO deployments in wind tunnels to PC-based validation testers that run for a year without a reboot or freeze. The truth is, choosing between LabVIEW Real-Time (RT) and a Windows PC isn’t just about specs—it’s about strategy.&nbsp;Sometimes, the best strategy is not choosing at all, but combining both.&nbsp;</p>



<h2 id="h-the-real-time-advantage-when-determinism-is-king" class="wp-block-heading">The Real-Time Advantage—When Determinism is King</h2>



<p class="wp-block-paragraph">LabVIEW RT shines when timing is non-negotiable. Think high-speed control loops, synchronized data acquisition, or safety-critical automation. With platforms like PXI, cRIO, and sbRIO, you get deterministic execution, hardware-level reliability, and the ability to run headless in harsh environments. It’s the kind of setup that makes engineers sleep better at night.&nbsp;</p>



<p class="wp-block-paragraph">But it comes at a cost—literally. &nbsp;</p>



<p class="wp-block-paragraph">RT systems often require specialized hardware, longer development cycles, and deeper expertise. Controlling costs requires familiarity with all of the hardware and software options out there, a rapidly increasing assortment. That’s why we recommend RT when the application demands it, not just because it sounds robust, and we carefully choose toolsets before we begin based on all the requirements, not just our preferences.&nbsp;</p>



<h2 id="h-the-pc-based-powerhouse-flexibility-speed-and-ui-nbsp" class="wp-block-heading">The PC-Based Powerhouse—Flexibility, Speed, and UI&nbsp;</h2>



<p class="wp-block-paragraph">Windows-based LabVIEW systems are the unsung heroes of test and measurement. They’re often faster to develop, easier to debug, and offer rich UI capabilities and easy data storage that RT typically just can’t match. Do you need to integrate with some weird DLL or third-party drivers? Then a PC may be your only friend.&nbsp;</p>



<p class="wp-block-paragraph">We’ve built PC-based systems for everything from EV battery validation labs to simple torque acquisition carts. Yes, these systems can be stable—if engineered with experience and care. We have clients that run PC-based testers for years without problems. The secret? Thoughtful architecture, plenty of lessons learned, and smart error handling.&nbsp;</p>



<h2 id="h-stability-isn-t-exclusive-to-rt-nbsp" class="wp-block-heading">Stability Isn’t Exclusive to RT&nbsp;</h2>



<p class="wp-block-paragraph">While RT systems are quickly becoming all the rage, a common misconception is that only RT systems are stable enough to handle long-term testing. While RT does offer inherent stability, Windows systems can be just as reliable with the right design. We’ve modernized many legacy LabVIEW codebases to run on modern Windows platforms, with smart improvements for stability. The result? Systems that are easier to maintain and just as robust.&nbsp;</p>



<h2 id="h-hybrid-systems-nbsp-the-best-of-both-worlds-nbsp" class="wp-block-heading">Hybrid Systems&nbsp;—The Best of Both Worlds&nbsp;</h2>



<p class="wp-block-paragraph">Here’s where things get interesting. Many clients don’t realize that they don’t have to choose between RT and PC—sometimes they really need both. Hybrid systems combine RT for deterministic control and PC for orchestration, visualization, and data management.&nbsp;</p>



<p class="wp-block-paragraph">We’ve been building hybrid architectures for decades. Consider a test system where a cRIO handles real-time DAQ and control, while a Windows PC manages the UI, logging, and remote access. They also naturally facilitate extension outside of the NI Universe, if additional third-party RT systems are needed, like UEI, Beckhoff, etc. These systems require well-designed interfaces (TCP/IP, UDP, shared memory, OPC UA, EtherCAT, etc.), but when done right, they’re elegant yet robust, scalable and cost-effective.&nbsp;</p>



<p class="wp-block-paragraph">One of our engineers likes to say, “RT is the brainstem, PC is the cortex.” It’s a metaphor that works. Each part does what it’s best at, and together they form a complete system</p>



<h2 id="h-real-world-examples-and-more-to-explore-nbsp" class="wp-block-heading">Real-World Examples and More to Explore&nbsp;</h2>



<p class="wp-block-paragraph">Explore some examples of DMC&#8217;s work.</p>



<ul class="wp-block-list">
<li><a href="https://static.dmcinfo.com/blog/30006/rt-101-real-time-operating-systems-rtos/">RT-101: Real-Time Operating Systems (RTOS)</a></li>



<li><a href="https://static.dmcinfo.com/blog/29877/rt-301-capabilities-of-distributed-labview-real-time/">RT-301: Capabilities of Distributed LabVIEW Real-Time</a></li>



<li><a href="https://static.dmcinfo.com/our-work/real-time-ethercat-motion-control-with-ni-crio-and-embedded-ui/">Real-Time EtherCAT Motion Control with NI cRIO and Embedded UI</a></li>



<li><a href="https://static.dmcinfo.com/our-work/real-time-battery-testing-a-synergy-of-ni-labview-teststand-and-veristand/">Real-Time Battery Testing: A Synergy of NI LabVIEW, TestStand, and VeriStand</a></li>



<li><a href="https://static.dmcinfo.com/our-work/labview-real-time-solution-for-chemical-process-industry/">LabVIEW Real-Time solution for Chemical Process Monitoring</a></li>



<li><a href="https://static.dmcinfo.com/our-work/real-time-fpga-system-for-fast-responding-high-voltage-arc-detection/">Real-Time FPGA System for Fast-Responding High-Voltage Arc Detection</a></li>



<li>Browse <a href="https://static.dmcinfo.com/our-work/">more examples</a> across industries.&nbsp;</li>
</ul>



<h2 id="h-what-we-ve-learned-at-dmc-nbsp" class="wp-block-heading">What We’ve Learned at DMC&nbsp;</h2>



<p class="wp-block-paragraph">From NI VeriStand to RT Linux to PAtools, NI cRIO to UEIdaq and PowerDNA to NI PXI, we’ve worked across platforms and industries. We’ve learned that the best solution often isn’t the most complex one. Sometimes a PC-based system with a solid framework beats a full RT deployment. Other times, RT is the only way to meet timing and safety requirements. Often, the sweet spot is somewhere in between.&nbsp;</p>



<p class="wp-block-paragraph">We’re proud to be one of <a href="https://static.dmcinfo.com/about/partners/ni-integration-partner/">NI’s Platinum Partners</a> and an NI Center of Excellence. That means we don’t just build test systems—we build the right test systems for your requirements.&nbsp;</p>



<h2 id="h-conclusion-nbsp" class="wp-block-heading">Conclusion&nbsp;</h2>



<p class="wp-block-paragraph">Choosing between LabVIEW RT and PC-based systems isn’t a binary decision. It’s a conversation—one that should consider timing, cost, stability, and long-term goals. Sometimes, the best answer is “both.” If you’re wondering which path is right for your next test system, let’s talk. We’d love to help you engineer a solution that’s not just functional—but exceptional.&nbsp;</p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step"><strong>Real-Time, PC, or Both? Choose the Right LabVIEW Architecture</strong></h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">Whether you&#8217;re evaluating <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/real-time-and-fpga-systems/" data-type="page" data-id="605">LabVIEW Real-Time</a> or determining if a PC-based architecture is the right fit, DMC&#8217;s <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/" data-type="page" data-id="428">Test &amp; Measurement</a> experts can help you design and implement reliable test systems.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/39753/labview-real-time-when-to-opt-for-rt-and-when-to-stick-to-pc/">LabVIEW Real-Time: When to Opt for RT and When to Stick to PC</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Standardize Your Automated Test Systems—Without Starting From Scratch</title>
		<link>https://static.dmcinfo.com/blog/39679/the-hidden-cost-of-one-off-test-systems/</link>
		
		<dc:creator><![CDATA[Steven Dusing]]></dc:creator>
		<pubDate>Thu, 06 Nov 2025 13:00:00 +0000</pubDate>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Test and Measurement Automation]]></category>
		<category><![CDATA[Test Stand]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=39679</guid>

					<description><![CDATA[<p>If you’ve worked on more than a few automated test stations, you’ve probably felt this pain. Every line, bench, or site becomes its own custom framework—different sequence patterns, device drivers, report styles, and operator UIs. Your engineering team needs expertise on numerous test platforms, with an ever-growing list of new ones to learn. That patchwork [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/39679/the-hidden-cost-of-one-off-test-systems/">Standardize Your Automated Test Systems—Without Starting From Scratch</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">If you’ve worked on more than a few automated test stations, you’ve probably felt this pain. Every line, bench, or site becomes its own custom framework—different sequence patterns, device drivers, report styles, and operator UIs. Your engineering team needs expertise on numerous test platforms, with an ever-growing list of new ones to learn. That patchwork is costly to maintain and hard to scale without outsourcing everything. </p>



<p class="wp-block-paragraph">Standardizing helps, but building a “company framework” from scratch can take quarters (or years) and divert your best engineers. Even after it’s built, engineers inevitably come and go, and soon you may be left with no one who truly understands what you’ve built in-house.&nbsp;</p>



<p class="wp-block-paragraph">CORTEX changes the equation.&nbsp;</p>



<h2 id="h-what-is-cortex" class="wp-block-heading">What Is CORTEX?</h2>



<p class="wp-block-paragraph">CORTEX is a modular automated test framework built on NI TestStand and LabVIEW that engineering teams use to standardize production and non-real-time validation workflows. It combines a hardware abstraction layer (HAL), custom step types, process model and reporting plugins, and an operator-friendly application to deliver a repeatable platform you can deploy across benches, stations, and sites.&nbsp;</p>



<h3 id="h-is-cortex-right-for-your-team-nbsp" class="wp-block-heading">Is CORTEX Right for Your Team?&nbsp;</h3>



<p class="wp-block-paragraph">Choose CORTEX if you want to stop reinventing a framework for every new station, deploy consistently across benches and sites, integrate quickly with diverse hardware, and improve reliability with standardized safety and reporting.&nbsp;</p>



<h3 id="h-cortex-highlights-nbsp" class="wp-block-heading">CORTEX Highlights&nbsp;</h3>



<ul class="wp-block-list">
<li><strong>CORTEX standardizes sequencing</strong> by leveraging TestStand with a custom Sequence Editor and reusable step libraries. TestStand is an open and industry-leading test sequencer, with plenty of experts who know how to develop tests using this tool and plenty of training for those looking to get started.&nbsp;</li>



<li><strong>It abstracts hardware</strong> through a HAL and plugin classes for your devices and instruments, including but not limited to: DMMs, Digital/Analog IO, Serial &amp; Industrial Communications, Power Supplies, PLCs, and more.&nbsp;</li>



<li><strong>It prioritizes configuration over code</strong> with dynamic workspaces, station configurations, and socket mapping for multi-up stations. Your team can spend more time on the configuration without needing to be programming experts.&nbsp;</li>



<li><strong>It delivers a production</strong><strong>&#8211;</strong><strong>grade user experience</strong> with Auto and Manual test modes, device dashboards, live data channel viewer, alarms, and a roles-based user-permission schema.&nbsp;</li>



<li><strong>It ensures reporting and traceability</strong> with a combination of Test reports and engineering waveform logs, so you can understand what your test system was doing over the entire test, regardless of what you actually graded.&nbsp;</li>



<li><strong>It integrates with your ecosystem: </strong>Need to connect to your PLCs/MES for material handling? What about that company database you’ve standardized on? Does your IT want to control user permissions? No problem—CORTEX can integrate with PLCs, custom databases for custom reporting, and IT systems by using LDAP to ensure the application works well in your environment<strong>.</strong>&nbsp;</li>
</ul>



<h2 id="h-architecture-at-a-glance" class="wp-block-heading">Architecture at a Glance</h2>



<ul class="wp-block-list">
<li><strong>The CORTEX app runs tests in Auto or Manual mode</strong> and provides dashboards, alarms, and live data visualization.&nbsp;</li>



<li><strong>The CORTEX Sequence Editor enhances TestStand</strong> with custom tools for workspace management, signal mapping, and test point configuration.&nbsp;</li>



<li><strong>TestStand process model and plugins handle device management</strong> along with safety interlocks, configuration management, and reporting workflows.&nbsp;</li>



<li><strong>The HAL and device plugins integrate instruments</strong> like power supplies, standard DAQ, and common industrial communication protocols like Modbus and Ethernet/IP that let engineers configure tests at a high level without the need to dive into low-level code.&nbsp;</li>



<li><strong>Data is captured in TDMS logs and TestStand reports</strong>, with the ability to correlate data output from both of these files and view them together to provide a comprehensive understanding of the test results.&nbsp;</li>
</ul>



<h2 id="h-what-you-get-out-of-the-box" class="wp-block-heading">What You Get Out of the Box</h2>



<ul class="wp-block-list">
<li><strong>Auto Test Mode runs looping, operator-focused sequences</strong> with perUUT reports and live sequence execution view with debugging tools.&nbsp;</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="532" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-1.png" alt="CORTEX framework interface" class="wp-image-39697" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-1.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-1-300x177.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-1-768x454.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<ul class="wp-block-list">
<li><strong>Manual Test Mode gives engineers direct control</strong> to run subsequences and operate instruments via device widgets.&nbsp;</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="540" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-2.png" alt="CORTEX framework interface" class="wp-image-39698" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-2.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-2-300x180.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-2-768x461.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<ul class="wp-block-list">
<li><strong>The Channel Viewer provides real-time signal plots</strong> for monitoring and troubleshooting.&nbsp;</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="498" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-3.jpg" alt="CORTEX framework interface" class="wp-image-39699" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-3.jpg 900w, https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-3-300x166.jpg 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-3-768x425.jpg 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<ul class="wp-block-list">
<li><strong>The Test Results Viewer correlates parametric results with waveform data</strong> for faster root cause analysis.&nbsp;</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="535" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-4.png" alt="CORTEX framework interface" class="wp-image-39700" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-4.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-4-300x178.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-4-768x457.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<ul class="wp-block-list">
<li><strong>Alarms and history views simplify troubleshooting</strong> and improve operator understanding of system operations.&nbsp;</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="900" height="532" src="https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-5.png" alt="CORTEX framework interface" class="wp-image-39701" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-5.png 900w, https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-5-300x177.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/11/cortex-framework-5-768x454.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<ul class="wp-block-list">
<li><strong>User permissions enforce role-based access</strong> for operators, engineers, and administrators.&nbsp;</li>



<li><strong>Safety monitoring runs independently</strong> to terminate execution if limits are exceeded.&nbsp;</li>
</ul>



<h2 id="h-how-to-get-started-with-cortex" class="wp-block-heading">How to Get Started with CORTEX</h2>



<ol start="1" class="wp-block-list">
<li><strong>Schedule a Discovery Call</strong>&nbsp;<br>We’ll start by learning about your current testing setup, your pain points, and your future needs. This helps us understand where CORTEX can deliver the most value.&nbsp;<strong><a href="https://static.dmcinfo.com/contact#get-in-touch">Contact us</a> to schedule a call.</strong></li>
</ol>



<ol start="2" class="wp-block-list">
<li><strong>See a Live Demo</strong>&nbsp;<br>We’ll walk you through the CORTEX framework, including its Sequence Editor, operator interface, and hardware abstraction layer. You’ll see how it simplifies test development and standardizes workflows.&nbsp;</li>
</ol>



<ol start="3" class="wp-block-list">
<li><strong>Discuss Your Hardware and Integration Needs</strong>&nbsp;<br>We’ll review the instruments, PLCs, and systems you need to connect, and outline how CORTEX’s plugin architecture can support them. These can include both short and long-term needs.&nbsp;</li>
</ol>



<ol start="4" class="wp-block-list">
<li><strong>Plan a Pilot Deployment</strong>&nbsp;<br>Identify a representative test station that we can deploy CORTEX to for an initial assessment and quick win. The best way to help you become convinced of the value of CORTEX and demonstrate the savings to your management is by experiencing it. After an initial deployment, we’ll work with your team to build a roadmap for scaling across your organization.&nbsp;</li>
</ol>



<h2 id="h-need-hard-real-time-test-sequencing" class="wp-block-heading">Need hard Real-Time Test Sequencing?</h2>



<p class="wp-block-paragraph">TestStand is awesome at many things, but one thing it’s not suited for is real-time deterministic sequencing (e.g., submillisecond HIL control). If you need software that can do real-time simulation, emulation, or test sequencing, reach out to DMC to learn more about our custom HIL test solutions, as demonstrated in these case studies:&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li><a href="https://static.dmcinfo.com/our-work/power-hil-test-stand-for-an-autonomous-air-vehicle/">Power HIL Test Stand for an Autonomous Air Vehicle</a></li>



<li><a type="our_work" href="https://static.dmcinfo.com/our-work/battery-stack-simulator-for-hardware-in-the-loop-hil-testing-of-electric-vehicles/" id="14071">Battery Stack Simulator for Hardware in the Loop (HIL) Testing of Electric Vehicles</a></li>
</ul>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step"><strong>Turn Custom Test Stations into a Scalable Platform</strong>.</h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">See how you can standardize automated test systems with DMC&#8217;s <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/" data-type="page" data-id="428">Test &amp; Measurement</a> team. Learn more about our <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/automated-test-stand-design/aerospace-hil-test-systems/" data-type="page" data-id="40760">HIL Test</a> capabilities.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/39679/the-hidden-cost-of-one-off-test-systems/">Standardize Your Automated Test Systems—Without Starting From Scratch</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Diagnosing LabVIEW: Windows Firewall and What to Do</title>
		<link>https://static.dmcinfo.com/blog/39294/diagnosing-labview-windows-firewall-and-what-to-do/</link>
		
		<dc:creator><![CDATA[Rachel Hughes]]></dc:creator>
		<pubDate>Mon, 03 Nov 2025 15:02:33 +0000</pubDate>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Test and Measurement Automation]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=39294</guid>

					<description><![CDATA[<p>LabVIEW can contain mysterious behaviors and errors, but perhaps the most baffling are when Windows Firewall is involved. With Windows 10 at end of life, there are new and improved firewall protections in Windows 11 that can make LabVIEW deployments challenging. DMC has worked on hundreds of LabVIEW systems with Windows Firewall interactions, and we&#8217;re [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/39294/diagnosing-labview-windows-firewall-and-what-to-do/">Diagnosing LabVIEW: Windows Firewall and What to Do</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">LabVIEW can contain mysterious behaviors and errors, but perhaps the most baffling are when Windows Firewall is involved. With <a href="https://static.dmcinfo.com/blog/38899/upgrading-labview-for-windows-11-compatibility/">Windows 10 at end of life</a>, there are new and improved firewall protections in Windows 11 that can make LabVIEW deployments challenging. DMC has worked on hundreds of LabVIEW systems with Windows Firewall interactions, and we&#8217;re sharing a few of our best tips on diagnosing and resolving the issues.</p>



<figure class="wp-block-image size-medium"><img decoding="async" width="300" height="290" src="https://static.dmcinfo.com/wp-content/uploads/2025/10/labview-windows-firewall-300x290.png" alt="Windows Firewall and LabVIEW logos" class="wp-image-39335" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/10/labview-windows-firewall-300x290.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/10/labview-windows-firewall.png 418w" sizes="(max-width: 300px) 100vw, 300px" /></figure>



<h2 id="h-target-connection" class="wp-block-heading">Target Connection</h2>



<p class="wp-block-paragraph">Firewall issues typically emerge when communicating with multiple targets (computers or DAQ hardware). The first step when connecting to an external target is to confirm that you can at least <a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/ping" target="_blank" rel="noreferrer noopener">ping</a> it—preferably both directions. By default, Windows Firewall disables incoming ping requests to its computers.</p>



<h3 id="h-enabling-ping" class="wp-block-heading">Enabling Ping</h3>



<p class="wp-block-paragraph">Perform the following steps on any Windows device where you want to receive pings.</p>



<ol class="wp-block-list">
<li>Open <em>Windows Defender Firewall</em> and select <em>Advanced Settings</em> in the sidebar. Depending on your organization, you may need administrator rights or an IT employee to do this.</li>



<li>Switch to <em>Inbound Rules</em> via the Getting Started page or the sidebar.</li>



<li>Find the rule named &#8220;Core Networking Diagnostics &#8211; ICMP Echo Request (ICMPv4-In).&#8221; Right-click the rule and <em>Enable Rule</em> for all relevant network types (Private, Domain, Public). The rule may also be named &#8220;File and Printer Sharing (Echo Request &#8211; ICMPv4-In).&#8221;</li>
</ol>



<p class="wp-block-paragraph">Once you can ping back and forth between your two targets, then you know the connection is set up correctly, and any additional issues are in the LabVIEW and Windows Firewall interaction.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="976" height="220" src="https://static.dmcinfo.com/wp-content/uploads/2025/10/windows-defender-firewall.png" alt="Windows Defender Firewall interface" class="wp-image-39337" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/10/windows-defender-firewall.png 976w, https://static.dmcinfo.com/wp-content/uploads/2025/10/windows-defender-firewall-300x68.png 300w, https://static.dmcinfo.com/wp-content/uploads/2025/10/windows-defender-firewall-768x173.png 768w" sizes="(max-width: 976px) 100vw, 976px" /></figure>



<h2 id="h-common-firewall-issues" class="wp-block-heading">Common Firewall Issues</h2>



<p class="wp-block-paragraph">So, how do you know if Windows Firewall is causing your problem? Here are a few common symptoms you might see.</p>



<ol class="wp-block-list">
<li>TCP or UDP messages sent between two separate LabVIEW applications on the same or different targets aren’t making it to their destination.</li>



<li>Intermittent connection errors to external devices or computers. If connecting via TCP, this will likely manifest as <a href="https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z0000019Lz2SAE&amp;l=en-US" target="_blank" rel="noreferrer noopener">Error 56</a>.</li>



<li>Failure to connect to NI hardware in NI MAX, or open DAQmx or IMAQdx resource connections.</li>



<li>If using Shared Variables, errors when pulling data from the Shared Variables.</li>
</ol>



<p class="wp-block-paragraph">If you’re seeing unexplained or inconsistent network operation errors after you’ve confirmed that the two targets are connected, then Windows Firewall should be a suspect.</p>



<h2 id="h-troubleshooting-and-resolution" class="wp-block-heading">Troubleshooting and Resolution</h2>



<h3 id="Blog-LabVIEWandWindowsFirewall-DisabletheFirewallandAddRules" class="wp-block-heading">Disable the Firewall and Add Rules</h3>



<p class="wp-block-paragraph">The first step to determining if the firewall is the culprit is, if possible, disabling the firewall altogether. If this resolves the issue, but you can’t leave the firewall off, then it’s time to explore adding firewall rules. <a href="https://www.ni.com/en/support/security/configuring-software-and-hardware-firewalls-to-support-national-.html" target="_blank" rel="noreferrer noopener">NI has a list of ports</a> that they use that can be worth enabling if you are experiencing an issue with one of their listed tools. However, it’s common for custom LabVIEW applications to use custom or dynamic port numbers. In that case, you’ll want to make firewall rules not only for the ports you’re using, but also to allow all ports for the specific LabVIEW application you’re running. <a href="https://support.microsoft.com/en-us/windows/risks-of-allowing-apps-through-windows-firewall-654559af-3f54-3dcf-349f-71ccd90bcc5c" type="link" id="https://support.microsoft.com/en-us/windows/risks-of-allowing-apps-through-windows-firewall-654559af-3f54-3dcf-349f-71ccd90bcc5c">Microsoft outlines</a> some risks to doing this, as well as instructions. The important thing to remember is that with no firewall, the ports and applications are more vulnerable, so only allow what you actively plan to use.</p>



<h3 id="h-run-a-tcp-or-udp-tester" class="wp-block-heading">Run a TCP or UDP Tester</h3>



<p class="wp-block-paragraph">If you’ve added firewall rules or haven’t been able to troubleshoot whether the firewall is the issue, a great way to test LabVIEW’s ability to access network resources is using a tester. LabVIEW <a href="https://www.ni.com/en/support/documentation/supplemental/06/basic-tcp-ip-communication-in-labview.html?srsltid=AfmBOor7cbCQe1CYzKnGZ6DWT7T1srrMiQXl-EbxY6xowj0COpq94Nua" target="_blank" rel="noreferrer noopener">ships with a TCP/IP communication tester</a>. Running this for a while and logging any errors can help determine if the issues you’re encountering are intermittent and possibly firewall-related, or if there’s something else in your application causing issues. Running just this tester distills out only the network operation from LabVIEW—it’s like the LabVIEW equivalent of constantly pinging. If you’re able to run this successfully, then there may be other issues at play beyond the firewall.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="706" height="172" src="https://static.dmcinfo.com/wp-content/uploads/2025/10/TCPIP-communication-tester.png" alt="TCP/IP communication tester interface" class="wp-image-39338" srcset="https://static.dmcinfo.com/wp-content/uploads/2025/10/TCPIP-communication-tester.png 706w, https://static.dmcinfo.com/wp-content/uploads/2025/10/TCPIP-communication-tester-300x73.png 300w" sizes="(max-width: 706px) 100vw, 706px" /></figure>



<h2 id="h-we-can-help" class="wp-block-heading">We Can Help</h2>



<p class="wp-block-paragraph">Fighting with the firewall, or any mysterious LabVIEW TCP connection errors, is better with a partner. If you’re looking for support as you troubleshoot existing systems or prepare to set up new ones, we&#8217;d love to help. </p>



<div class="wp-block-group alignwide has-custom-light-blue-background-color has-background is-layout-flow wp-container-core-group-is-layout-dbd34961 wp-block-group-is-layout-flow" style="border-radius:20px;margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);padding-top:var(--wp--preset--spacing--50);padding-right:0;padding-bottom:var(--wp--preset--spacing--50);padding-left:0">
<div class="wp-block-columns alignwide are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-43efaee5 wp-block-columns-is-layout-flex" style="padding-right:var(--wp--preset--spacing--60);padding-left:var(--wp--preset--spacing--60)">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:85%">
<h3 class="wp-block-heading has-text-align-left" id="h-have-an-upcoming-project-dmc-can-help-you-take-the-next-step"><strong>When LabVIEW and Windows Firewall Don’t Communicate</strong>&#8230;</h3>



<p class="has-text-align-left wp-block-paragraph" id="h-need-help-turning-ideas-into-outcomes-automation-project-to-the-next-level-contact-us-today-to-learn-more-about-our-solutions-and-how-we-can-help-you-achieve-your-goals">Explore DMC&#8217;s <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/labview-programming/" data-type="page" data-id="584">LabVIEW</a> capabilities in navigating firewall conflicts and learn more about our <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/" data-type="page" data-id="428">Test &amp; Measurement</a> expertise.</p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-2236275c wp-block-buttons-is-layout-flex">
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-base-contrast-color has-text-color has-link-color wp-element-button" href="https://static.dmcinfo.com/contact/">Contact Us</a></div>
</div>
</div>
</div>
</div>
<p>The post <a href="https://static.dmcinfo.com/blog/39294/diagnosing-labview-windows-firewall-and-what-to-do/">Diagnosing LabVIEW: Windows Firewall and What to Do</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
