<?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>Maddie Drake, Author at DMC, Inc.</title>
	<atom:link href="https://static.dmcinfo.com/blog/author/maddied/feed/index.xml" rel="self" type="application/rss+xml" />
	<link></link>
	<description></description>
	<lastBuildDate>Wed, 08 Jul 2026 19:12:00 +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>Maddie Drake, Author at DMC, Inc.</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>How to Programmatically Generate Global Virtual Channels with LabVIEW</title>
		<link>https://static.dmcinfo.com/blog/17340/how-to-programmatically-generate-global-virtual-channels-with-labview/</link>
		
		<dc:creator><![CDATA[Maddie Drake]]></dc:creator>
		<pubDate>Fri, 04 Aug 2023 11:35:51 +0000</pubDate>
				<category><![CDATA[IoT]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/17340/how-to-programmatically-generate-global-virtual-channels-with-labview/</guid>

					<description><![CDATA[<p>How many times have you had to create numerous global virtual channels for a project? It&#8217;s the tedious task of going into NI MAX and creating a channel one by one based on an IO sheet. In this tutorial, I will show you how to programmatically create and save a global virtual channel in LabVIEW. [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/17340/how-to-programmatically-generate-global-virtual-channels-with-labview/">How to Programmatically Generate Global Virtual Channels with LabVIEW</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">How many times have you had to create numerous global virtual channels for a project? It&rsquo;s the tedious task of going into NI MAX and creating a channel one by one based on an IO sheet.</p>

<p class="wp-block-paragraph">In this tutorial, I will show you how to programmatically create and save a global virtual channel in LabVIEW. I will tie it all together by generating the same signals from an IO sheet in Excel.</p>

<h2 class="wp-block-heading">Background</h2>

<p class="wp-block-paragraph">I wanted to reuse a library DMC developed that controls relays and reads their feedback. I preferred not to modify this library because we were referencing the repo in another DMC project; modifying the library would change it for&nbsp;another team&rsquo;s project. The inputs to this library were global virtual channels connecting to the control and feedback of each relay. I could have manually created global channels for our 100+ relays, but&nbsp;instead, I let LabVIEW do all the work.</p>

<h2 class="wp-block-heading">NI Max Setup</h2>

<p class="wp-block-paragraph">In this example, I added a simulated cDAQ to NI Max. I also added two NI 9403 DIO module and gave it the names below:</p>

<figure class="wp-block-image"><img decoding="async" alt="screenshot of a computer screen " src="https://static.dmcinfo.com/wp-content/uploads/2025/05/image-1-.png"  /></figure>

<h2 class="wp-block-heading">The Code</h2>

<p class="wp-block-paragraph">The below code is what we will use to create 6 global virtual channels. This code will&nbsp;iterate&nbsp;between a relay control (Digital Control) and relay feedback (Digital Feedback).</p>

<figure class="wp-block-image"><img decoding="async" alt="Screenshot of code on a computer " src="https://static.dmcinfo.com/wp-content/uploads/2025/05/image-2-1.png"  /></figure>

<p class="wp-block-paragraph">First, I do modulo two to iterate between the control and feedback enum I made. I then use &ldquo;format into string&rdquo; to create the name of the channel.&nbsp;</p>

<p class="wp-block-paragraph">To prevent errors, clear the task name. I also like to delete the task in case it exists. If the task doesn&rsquo;t exist, an error will be thrown, so make sure to clear errors coming out of that VI.</p>

<ul class="wp-block-list">
 <li value="1"><strong>Factoid</strong>: You can feed a string into a task name and it will typecast automatically for you.</li>
</ul>

<p class="wp-block-paragraph">Create the task by feeding the task coming out of the previous VI into the &ldquo;New Task Name&rdquo; input of &ldquo;DAQmx Create Task&rdquo;.&nbsp;</p>

<ul class="wp-block-list">
 <li value="1"><strong>Factoid</strong>: You can feed a task into a string input as well*, and it will be typecast automatically.</li>
</ul>

<p class="wp-block-paragraph">Create the hardware line you want to connect the channel to. I do this by using format string again. Make sure to use the name of the module you have in NI Max.</p>

<ul class="wp-block-list">
 <li><strong>Factoid</strong>: If you want a list of all available channels, you can drop a &ldquo;DAQmx Physical Channel&rdquo; onto the block diagram and browse for available lines.</li>
</ul>

<figure class="wp-block-image"><img decoding="async" alt="Image of code on a screen " src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Image-3-1.png"  /></figure>

<p class="wp-block-paragraph">Create the DAQmx virtual channel. I use a Digital Output for the controls and Digital Input for feedback.</p>

<p class="wp-block-paragraph">Save the global channel using &quot;DAQmx Save Global Channel.vi&quot;.</p>

<p class="wp-block-paragraph">Below, are the channels that were created in NI Max.</p>

<figure class="wp-block-image"><img decoding="async" alt="screenshot of code on a laptop " src="https://static.dmcinfo.com/wp-content/uploads/2025/05/image-4-1.png"  /></figure>

<h2 class="wp-block-heading">Reading From an IO Sheet</h2>

<p class="wp-block-paragraph">Now that you can programmatically create global virtual channels, you can take it a step further and create channels from information contained in an IO sheet like the one below.</p>

<figure class="wp-block-image"><img decoding="async" alt="screenshot of spreadsheet on a computer " src="https://static.dmcinfo.com/wp-content/uploads/2025/05/image-5-1.png"  /></figure>

<p class="wp-block-paragraph">You can read this information by using &ldquo;Read Delimited Spreadsheet.vi&rdquo; and removing the top row of headers. After that, feed the inputs into the code from before, like so.</p>

<figure class="wp-block-image"><img decoding="async" alt="Screenshot of code on a laptop" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/image-6-1.png"  /></figure>

<p class="wp-block-paragraph">And viola! Four new global virtual channels have been made from your spreadsheet.</p>

<figure class="wp-block-image"><img decoding="async" alt="Screenshot of four global virtual channels " src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Image-7-1.png"  /></figure>

<h2 class="wp-block-heading">Deleting Channels</h2>

<p class="wp-block-paragraph">You can delete the channels programmatically just as easy as you made them by using &ldquo;DAQmx Delete Saved Global Channels.vi&rdquo;.&nbsp;</p>

<figure class="wp-block-image"><img decoding="async" alt="Screenshot of laptop screen " src="https://static.dmcinfo.com/wp-content/uploads/2025/05/image-8-1.png"  /></figure>

<h2 class="wp-block-heading">Why is this useful?</h2>

<p class="wp-block-paragraph">This is useful because you don&rsquo;t have to manually type in global virtual channels to NI Max. This prevents fat fingering a wrong IO channel. This will also save you time depending on how many channels you have. It also prevents errors from happening by pulling straight from the IO list. When collaborating with coworkers on an IO list, you don&rsquo;t have to worry about someone else making a change in the list that doesn&rsquo;t get propagated into the code. The code will pick up on it!</p>

<p class="wp-block-paragraph">Another benefit of note is you can decrease the amount of fluff in an NI Max file. All you will need in your NI Max file are the hardware and module names. If a coworker needs to add a channel, they can add it to the IO sheet, and it will automatically be imported into your code when you pull their code. No more pushing and pulling the NI Max file nor importing and exporting channels causing less committing and merging of NI Max channels between developers.</p>

<p class="wp-block-paragraph">Learn more about DMC&rsquo;s <strong><a href="https://static.dmcinfo.com/services/test-and-measurement-automation/labview-programming" target="_blank">LabVIEW Programming</a></strong> and <strong><a href="https://static.dmcinfo.com/contact" target="_blank">contact us</a></strong> today for your next project!</p>
<p>The post <a href="https://static.dmcinfo.com/blog/17340/how-to-programmatically-generate-global-virtual-channels-with-labview/">How to Programmatically Generate Global Virtual Channels with LabVIEW</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Unleashing the Power of VBA Using NI Report Generation Toolkit</title>
		<link>https://static.dmcinfo.com/blog/17530/unleashing-the-power-of-vba-using-ni-report-generation-toolkit/</link>
		
		<dc:creator><![CDATA[Maddie Drake]]></dc:creator>
		<pubDate>Wed, 14 Jun 2023 16:12:32 +0000</pubDate>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Test and Measurement Automation]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/17530/unleashing-the-power-of-vba-using-ni-report-generation-toolkit/</guid>

					<description><![CDATA[<p>Built-in functionality from the Report Generation Toolkit (RGT) is an awesome way to get started programmatically manipulating Word using LabVIEW. This tutorial will demonstrate how to further customize your report&#8217;s formatting by creating VIs. The result of this tutorial is a PDF&#160;programmatically generated by LabVIEW: Template Report To start, create a template Word document that [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/17530/unleashing-the-power-of-vba-using-ni-report-generation-toolkit/">Unleashing the Power of VBA Using NI Report Generation Toolkit</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Built-in functionality from the Report Generation Toolkit (RGT) is an awesome way to get started programmatically manipulating Word using LabVIEW. This tutorial will demonstrate how to further customize your report&#8217;s formatting by creating VIs.</p>



<p class="wp-block-paragraph">The result of this tutorial is a PDF&nbsp;programmatically generated by LabVIEW:</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Report-Generation-Toolkit-with-LabVIEW-Fancy-Report.png" alt=""/></figure>



<h2 class="wp-block-heading" id="h-template-report">Template Report</h2>



<p class="wp-block-paragraph">To start, create a template Word document that will serve as the base for all reports you make. Anything that will be consistent across reports should be included here. This eliminates the need to programmatically add these attributes&nbsp;every time you create a report. In this example, the consistent information is the document header, the DMC logo, and the table names.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Report-Generation-Toolkit-with-LabVIEW-Fancy-Report-in-Microsoft-Word.png" alt=""/></figure>



<h2 class="wp-block-heading" id="h-basic-report-using-built-in-vis">Basic Report Using Built-in VIs</h2>



<p class="wp-block-paragraph">To add a table to this document, use the “Append Table to Report” VI provided by the RGT, but, first, you must add bookmarks to the template document in Word. You can achieve this by clicking the spot&nbsp;where you want to add a bookmark and typing “Bookmark” into the search bar. In my example, I added two bookmarks (Table1 and Table2) where I wanted tables inserted.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Report-Generation-Toolkit-with-LabVIEW-Fancy-Report-in-Microsoft-Word-with-diagrams.png" alt=""/></figure>



<p class="wp-block-paragraph">After that, the “Append Table to Report” VI can be used in conjunction with other NI RGT VIs to write to the bookmarks. The following code is what I used to achieve this:</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Report-Generation-Toolkit-with-LabVIEW-Bookmark-Code.png" alt=""/></figure>



<p class="wp-block-paragraph">The result of running this code is shown below.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Report-Generation-Toolkit-with-LabVIEW-Final-Result.png" alt="Table, WordDescription automatically generated"/></figure>



<p class="wp-block-paragraph">LabVIEW successfully inserts tables where the bookmarks are placed, but they are not&nbsp;formatted. To add formatting,&nbsp;find&nbsp;VIs that are provided in the “NI_Word” class (pictured below). If you can’t find what you’re looking for in that class, you can create custom formatting VIs. Learn how to do this in the next section.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Report-Generation-Toolkit-with-LabVIEW-Custom-Formatting.png" alt="Graphical user interface, text, applicationDescription automatically generated"/></figure>



<h2 class="wp-block-heading" id="h-customizing-formatting-functionality">Customizing Formatting Functionality</h2>



<p class="wp-block-paragraph">If you want functionality that isn’t provided in the RGT toolkit, you can build your own custom VIs. You can do this by utilizing the power of VBA using property nodes in LabVIEW. In this example, I will show you how to format these tables using a “New Table” VI I made.</p>



<p class="wp-block-paragraph">In this VI, the same “Append Table to Report” VI is used to paste in table data. After that, I find the reference to the table that was just pasted in using the “Word_Bookmark_Table_Exists” VI. Once you have the reference, you can use property nodes to manipulate the table. In the example below, the code is removing the space after each paragraph and&nbsp;setting the column width.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Report-Generation-Toolkit-with-LabVIEW-Formatting-Functionality-1.png" alt="Graphical user interface, timelineDescription automatically generated with medium confidence"/></figure>



<p class="wp-block-paragraph">This VI will get called in the main VI.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Report-Generation-Toolkit-with-LabVIEW-Formatting-Functionality-2.png" alt=""/></figure>



<p class="wp-block-paragraph"><strong>How to Figure Out Which Property Nodes to Use</strong></p>



<p class="wp-block-paragraph">You may be asking yourself how to figure out which property nodes to use. After all, when you wire the table reference to a property node, there are many options to choose from.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Report-Generation-Toolkit-with-LabVIEW-Property-Node-Options.png" alt="Graphical user interface, applicationDescription automatically generated"/></figure>



<p class="wp-block-paragraph">You can figure out what combination of property nodes to use by checking the <a href="https://learn.microsoft.com/en-us/office/vba/api/overview/language-reference" target="_blank">VBA language reference</a>. For example, if you want to format the amount of space you have after text, you can search “How to remove spacing after text in VBA.”&nbsp;This will bring you to the “<a href="https://learn.microsoft.com/en-us/office/vba/api/word.paragraphformat.spaceafter" target="_blank">SpaceAfter</a>” property in VBA, which allows you to remove spaces using the lines of VBA code below.</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(1 * 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">VB</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>
ActiveDocument.Range.ParagraphFormat.SpaceAfter = 0
 </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>
<span class="line"><span style="color: #D4D4D4">ActiveDocument.Range.ParagraphFormat.</span><span style="color: #9CDCFE">SpaceAfter</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">0</span></span>
<span class="line"><span style="color: #D4D4D4"> </span></span></code></pre></div>



<p class="wp-block-paragraph">Notice how the property nodes in the New Table VI are identical to the VBA code.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Report-Generation-Toolkit-with-LabVIEW-Property-Nodes-VBA-Code.png" alt=""/></figure>



<h2 class="wp-block-heading" id="h-custom-vis-built-in-vis">Custom VIs + Built In VIs</h2>



<p class="wp-block-paragraph">Custom VIs can be used in conjunction with built in VIs. A built-in VI was added after the custom VI in the Main VI&nbsp;to bold the first row of the second table (see code below). The RGT VIs will remember the last table that was edited and manipulate only that one. The first table will not have any text bolded in this example.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Report-Generation-Toolkit-with-LabVIEW-RGT-Formatting-code.png" alt="Diagram, schematicDescription automatically generated"/></figure>



<h2 class="wp-block-heading" id="h-exporting-as-a-pdf">Exporting as a PDF</h2>



<p class="wp-block-paragraph">To put custom VIs into practice once again, we will walk through an example of saving the report as a PDF. Instead of retrieving the table reference like we did in the last custom VI, the ActiveX Reference for the Word document is retrieved using the “Word Get ActiveX References” VI. The reference is wired to an invoke node where it commands the VI to export the document as a PDF.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Report-Generation-Toolkit-with-LabVIEW-Exporting-PDF.png" alt="Graphical user interface, application, tableDescription automatically generated"/></figure>



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



<p class="wp-block-paragraph">You can use the report generation toolkit to create custom functionality and piece it together to achieve a beautiful, dare I say, fancy&nbsp;report. In the screenshot below, all of the code described in previous sections is amalgamated to obtain the desired functionality.</p>



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



<p class="wp-block-paragraph">This produces a PDF that is formatted with more customization than reports produced using only RGT VIs.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Report-Generation-Toolkit-with-LabVIEW-Final-Report.png" alt=""/></figure>



<p class="wp-block-paragraph">The default VIs for NI RGT are&nbsp;a great way to quickly save and format data to Word. Using these in conjunction with custom code gives you&nbsp;endless programming possibilities.</p>



<p class="wp-block-paragraph"><strong>Learn more about DMC&#8217;s <a href="/services/test-and-measurement-automation/labview-programming">LabVIEW Programming</a> services and <a href="/contact">contact us</a> today for your next project.</strong></p>
<p>The post <a href="https://static.dmcinfo.com/blog/17530/unleashing-the-power-of-vba-using-ni-report-generation-toolkit/">Unleashing the Power of VBA Using NI Report Generation Toolkit</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Communicating Between a Siemens PLC and LabVIEW Using Modbus TCP</title>
		<link>https://static.dmcinfo.com/blog/20491/communicating-between-a-siemens-plc-and-labview-using-modbus-tcp/</link>
		
		<dc:creator><![CDATA[Maddie Drake]]></dc:creator>
		<pubDate>Wed, 27 Nov 2019 13:32:16 +0000</pubDate>
				<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[Test and Measurement Automation]]></category>
		<category><![CDATA[LabVIEW Programming]]></category>
		<category><![CDATA[Modbus]]></category>
		<category><![CDATA[Siemens Programming]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/20491/communicating-between-a-siemens-plc-and-labview-using-modbus-tcp/</guid>

					<description><![CDATA[<p>Have you ever needed to integrate LabVIEW into a Siemens PLC project or vice versa? PLCs offer features such as reliability and safety, whereas LabVIEW has plug and play libraries for a variety of hardware. The list of different benefits these two offerings is long, but what if you need both? Modbus TCP is an [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/20491/communicating-between-a-siemens-plc-and-labview-using-modbus-tcp/">Communicating Between a Siemens PLC and LabVIEW Using Modbus TCP</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">Have you ever needed to integrate <a href="/services/test-and-measurement-automation/labview-programming">LabVIEW</a> into a <a href="/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming">Siemens PLC</a> project or vice versa? PLCs offer features such as reliability and safety, whereas LabVIEW has plug and play libraries for a variety of hardware.</p>

<p class="wp-block-paragraph">The list of different benefits these two offerings is long, but what if you need both?</p>

<p class="wp-block-paragraph"><strong>Modbus TCP</strong> is an excellent way to transfer data between the two programs. Modbus is an easy to deploy protocol that enables multiple devices on the same network to communicate. To set up Modbus Communication in <a href="/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming/tia-portal-development">TIA Portal</a>, drag an &ldquo;MB_Server&rdquo; block to the Main[OB1]. This will be the only rung you need in Main [OB1].</p>

<figure class="wp-block-image"><img decoding="async" alt="program blocks" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/1-program-blocks.png"  /></figure>

<p class="wp-block-paragraph">You will need to create a data block for holding registers, which contain the information you are trying to send and receive. Mine is named <strong>&ldquo;dbHoldingRegisters&rdquo;</strong> and I filled it with an array of random values to send to LabVIEW.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/2-datablocks-siemens.png"  /></figure>

<p class="wp-block-paragraph">You will also need space in a data block to save configuration information to connect using Modbus. The data block should be of type <strong>TCON_IP_v4</strong>, which includes all address parameters required for establishing a connection. Details on how to populate this are listed below.</p>

<figure class="wp-block-image"><img decoding="async" alt="populate data blocks" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/3-populate-data-blocks.png"  /></figure>

<ul class="wp-block-list">
 <li style="margin-bottom: 10px;"><strong>InterfaceID:</strong> This references hardware identifier number, found in &ldquo;Devices and Networks&rdquo;, pictured below.<br />
 <figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/4-interfaceid.png"  /></figure></li>
 <li style="margin-bottom: 10px;"><strong>ID:</strong> A unique ID for the connection within the CPU ranging from 1 to 4095. If you have multiple &ldquo;MB_Server&rdquo; blocks, they will each need unique numbers.</li>
 <li style="margin-bottom: 10px;"><strong>Connection Type:</strong> 11 is for TCP connections</li>
 <li style="margin-bottom: 10px;"><strong>Active Established:&nbsp;</strong>Select false for passive connection establishment.</li>
 <li style="margin-bottom: 10px;"><strong>Remote Address:</strong> The default address is 0.0.0.0 (any IP address), but you can enter a specific IP address so that the server only responds to requests from this address. For example, if the IP address of my computer is 192.168.0.73, the addresses will be.
 <ul class="wp-block-list">
  <li style="margin-bottom: 10px;">addr[1] = 192</li>
  <li style="margin-bottom: 10px;">addr[2] = 168</li>
  <li style="margin-bottom: 10px;">addr[3] = 0</li>
  <li style="margin-bottom: 10px;">addr[4] = 73</li>
 </ul>
 </li>
 <li style="margin-bottom: 10px;"><strong>Remote Port:</strong> This is the incoming tunnel port number of the remote connection partner (value range: 1 to 49151) or 0 for any.</li>
 <li style="margin-bottom: 10px;"><strong>Local Port:</strong> This is the outgoing port number of the local connection partner (value range: 1 to 49151), 502 is the default. A Modbus client (LabVIEW) sends its messages on the port 502, and a Modbus server (PLC) receives messages on 502.</li>
</ul>

<p class="wp-block-paragraph">On the LabVIEW side, the code is straightforward. All VIs are taken from the Modbus Master.lvclass and are listed below. You will need to create a TCP connection to the IP address of the PLC as well as use the same local port number (502) in your <strong>&ldquo;serverData&rdquo;</strong> data block. Then, you can write and read registers as you choose. As always, make sure to close the connection when you are done.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/5-labview-sample-code.png"  /></figure>

<p class="wp-block-paragraph">In this example, the value 999 was written to address 0, and then all the holding register values were read and populated in the &ldquo;register values&rdquo; indicator. And Voila! The random array of values we sent from the PLC has been transmitted successfully. You are now reading and writing data from LabVIEW to a PLC.</p>

<p class="wp-block-paragraph">Happy programming!</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/6-programcode.png"  /></figure>

<p class="wp-block-paragraph">Learn more about <a href="/services/test-and-measurement-automation/labview-programming">DMC&apos;s LabVIEW Programming services</a> and <a href="/contact">contact us</a> with any project inquiries!</p>
<p>The post <a href="https://static.dmcinfo.com/blog/20491/communicating-between-a-siemens-plc-and-labview-using-modbus-tcp/">Communicating Between a Siemens PLC and LabVIEW Using Modbus TCP</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The Guide to Life at DMC Houston</title>
		<link>https://static.dmcinfo.com/blog/20774/the-guide-to-life-at-dmc-houston/</link>
		
		<dc:creator><![CDATA[Maddie Drake]]></dc:creator>
		<pubDate>Mon, 14 Oct 2019 11:26:59 +0000</pubDate>
				<category><![CDATA[Houston]]></category>
		<category><![CDATA[Locations]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/20774/the-guide-to-life-at-dmc-houston/</guid>

					<description><![CDATA[<p>Houston has produced some of the nation&#8217;s gems, including NASA and Beyoncé. Now, a&#160;new masterpiece has arisen&#8212;the new and improved DMC Houston office.&#160; New Building New Me Prior to the pandemic, DMC Houston relocated to the beautiful Greenway Plaza complex. Our&#160;location has prime access to&#160;food trucks and fountains. This bigger, better office space has made [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/20774/the-guide-to-life-at-dmc-houston/">The Guide to Life at DMC Houston</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">Houston has produced some of the nation&rsquo;s gems, including NASA and Beyoncé. Now, a&nbsp;new masterpiece has arisen&mdash;the new and improved DMC Houston office.&nbsp;</p>

<h2 class="wp-block-heading">New Building New Me</h2>

<p class="wp-block-paragraph">Prior to the pandemic, DMC Houston relocated to the beautiful Greenway Plaza complex. Our&nbsp;location has prime access to&nbsp;food trucks and fountains. This bigger, better office space has made room for a new ping pong table and an expansion of potted plants.</p>

<figure class="wp-block-image"><img decoding="async" alt="Exterior view of DMC's new Houston office location" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/DMC-houston-office-exterior-view.jpg"  /></figure>

<figure class="wp-block-image"><img decoding="async" alt="Two office desks at DMC Houston" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/DMC-houston-office-2_1.jpg"  /></figure>

<figure class="wp-block-image"><img decoding="async" alt="A conference room at DMC Houston" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/DMC-Houston-office_1.jpg"  /></figure>

<h2 class="wp-block-heading">Our Work&nbsp;</h2>

<p class="wp-block-paragraph">The Houston team welcomed twelve new engineers from top schools in the country, expanding our team to fifteen people. They will be working on a mixture of <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence">automation</a> and <a href="https://static.dmcinfo.com/services/test-and-measurement-automation/labview-programming">LabVIEW</a> projects, which is the bulk of our business here. Houston has proved to be fruitful for our industry. Many of our clients are local, in the oil and gas business, but we are no stranger to travel.&nbsp;</p>

<h2 class="wp-block-heading">Our People</h2>

<p class="wp-block-paragraph">Time at DMC Houston is spent creating betting brackets to watch <em>Bachelor in Paradise</em>&nbsp;during lunch. Debating &ldquo;hot takes&rdquo;, like which restaurant has the best tacos&nbsp;or whether or not <em>Game of Thrones</em>&nbsp;is terrible, leads us to heated (yet friendly and non-harassing) discussions. Ping pong is an intrinsic part of daily life here in the office, with duels happening daily. &nbsp;</p>

<p class="wp-block-paragraph">Before the pandemic, our office expansion gave us plenty of room to host our visitors for our yearly office event (YOE), where DMC employees visit from around the country. We took participants two-stepping, shootin&rsquo; guns, and&nbsp;floating the river. The Houston team is&nbsp;excited about all our recent changes and continues to explore all our diverse city has to offer.&nbsp;</p>

<figure class="wp-block-image"><img decoding="async" alt="The DMC Houston team inner-tubing" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/DMC-houston-team.jpg"  /></figure>

<p class="wp-block-paragraph"><strong>Learn more about DMC&apos;s <a href="https://static.dmcinfo.com/latest-thinking/blog/articletype/categoryview/categoryid/13/culture">company culture</a>.&nbsp;</strong></p>
<p>The post <a href="https://static.dmcinfo.com/blog/20774/the-guide-to-life-at-dmc-houston/">The Guide to Life at DMC Houston</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Create an Object-Oriented Dynamic User Interface in LabVIEW</title>
		<link>https://static.dmcinfo.com/blog/21322/how-to-create-an-object-oriented-dynamic-user-interface-in-labview/</link>
		
		<dc:creator><![CDATA[Maddie Drake]]></dc:creator>
		<pubDate>Tue, 02 Jul 2019 12:08:22 +0000</pubDate>
				<category><![CDATA[Test and Measurement Automation]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/21322/how-to-create-an-object-oriented-dynamic-user-interface-in-labview/</guid>

					<description><![CDATA[<p>It&#8217;s not uncommon for DMC to develop applications for flexible test stands with interchangeable devices. With these test stands, the type of data acquired can change at a given time, so it makes sense to pair it with a user interface that adapts to these variations. We recently completed a project to develop a flexible [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/21322/how-to-create-an-object-oriented-dynamic-user-interface-in-labview/">How to Create an Object-Oriented Dynamic User Interface 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">It&rsquo;s not uncommon for DMC to develop applications for flexible test stands with interchangeable devices. With these test stands, the type of data acquired can change at a given time, so it makes sense to pair it with a user interface that adapts to these variations.</p>

<p class="wp-block-paragraph">We recently completed a project to develop a flexible UI, and this blog will give a high-level overview of how to create your own dynamic UI.</p>

<p class="wp-block-paragraph"><iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/U1UECO4Y5GA" width="560"><!--cke_bookmark_200S--><!--cke_bookmark_200E--></iframe></p>

<h2 class="wp-block-heading">Step 1: Utilize Tab Controls for Your UI Foundation</h2>

<p class="wp-block-paragraph">First, create a tab control and add a shortcut menu to add indicators to the front panel during runtime.</p>

<p class="wp-block-paragraph">To create a shortcut menu, right click on tab control and select <strong>Advanced </strong>&gt; <strong>Run Time Shortcut Menu </strong>&gt; <strong>Edit Items</strong>. Here, you can add all the indicator names.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Shortcut-Menu-Editor-and-Result-After-You-Right-Click-on-Tab-Control-Image.png"  /></figure>

<h2 class="wp-block-heading">Step 2: Create Subpanels for Every Potential Device</h2>

<p class="wp-block-paragraph">The number of subpanels you have invisible on the front panel at the start of the program limits the number of indicators you can have on the screen since you cannot programmatically add a subpanel at run time. In this example, there is a maximum of 20.</p>

<p class="wp-block-paragraph">Every indicator (Boolean, Meter, etc.) is a class in the project; that inherits from the Indicator class. These classes are reusable and, so you can have X instances of a Boolean class.</p>

<p class="wp-block-paragraph">Choosing an indicator from the menu causes a previously hidden subpanel on the UI to appear that holds it. A separate array of indicator classes keeps track of the reference to the child class created.</p>

<p class="wp-block-paragraph">BLOCK DIAGRAM OF THE TOP LEVEL</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/BLOCK-DIAGRAM-OF-THE-TOP-LEVEL-Chart.png"  /></figure>

<h2 class="wp-block-heading">Step 3: Insert Indicator into Sub Panel</h2>

<p class="wp-block-paragraph">In every Indicator child class, there is a <strong>User Experience.vi</strong>. This VI contains the interface that gets put into the subpanel, and the user sees on the front panel.</p>

<p class="wp-block-paragraph">To display the <strong>User Experience.vi</strong>, it is called asynchronously and placed into the subpanel once an indicator is selected from the shortcut menu.</p>

<p class="wp-block-paragraph">The <strong>User Experience </strong>VI reference is a variable in the class private data of the indicator class and is saved so that it can be referenced in the next step.</p>

<p class="wp-block-paragraph">To insert the User Experience.vi into the subpanel, you need to first find an unoccupied subpanel. In this step, you will insert the user experience VI and make it visible.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/User-Experience-VI-reference.png"  /></figure>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/In-Constructor_vi-Chart.png"  /></figure>

<h2 class="wp-block-heading">Step 4: Customizing the Indicators</h2>

<p class="wp-block-paragraph">The <strong>User Experience.vi</strong> also has a shortcut menu set up to allow you to edit the indicator&rsquo;s parameters. The <strong>User Experience.vi </strong>will run continuously using a while loop, until <strong>Delete </strong>is chosen from the shortcut menu.</p>

<p class="wp-block-paragraph">There is also a Boolean variable called <strong>stop?</strong> in the class private data of the parent Indicator class that signifies the user wants the indicator deleted. If this variable is ever true, the user experience while loop will stop running. Handle other features, such as editing colors and text of the indicator in the <strong>User Experience VI</strong>.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/editing-colors-and-text-of-the-indicator.png"  /></figure>

<h2 class="wp-block-heading">Step 5: Deleting the Indicator from Front Panel</h2>

<p class="wp-block-paragraph">Check if an indicator needs to be deleted in <strong>Timeout</strong> of the event structure in the top level VI, which periodically calls the <strong>Check Delete</strong> VI.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Periodically-checks-if-a-sub-vi-needs-to-be-deleted.png"  /></figure>

<p class="wp-block-paragraph">The <strong>Check Delete </strong>VI checks all the subpanels to see if there is a sub VI inside it. If there is, the program checks a Boolean value in the Indicator class private data to see if the user wants the indicator deleted.</p>

<p class="wp-block-paragraph">If the Boolean is true, the panel is set invisible, the sub VI removed, as well as removing the indicator from the indicator array.</p>

<p class="wp-block-paragraph">CHECK DELETE.VI</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/CHECK-DELETE_VI-Chart.png"  /></figure>

<h2 class="wp-block-heading">Step 6: Stop the Dynamic UI from Running</h2>

<p class="wp-block-paragraph">When the user wants to stop the application from running, an event in the top-level VI sets all the Indicator <strong>stop?</strong> variables to true. This variable then gets read in the User Experience VI and stops all the running sub-VIs.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Step-6-Stop-the-Dynamic-UI-from-Running.png"  /></figure>

<h2 class="wp-block-heading">Step 7: El Fin</h2>

<p class="wp-block-paragraph">This dynamic user interface setup can be used to drop different indicators across a front panel while a LabVIEW program is running. This functionality could be customized to be used to monitor different inputs of a system quickly and flexibly.</p>

<h2 class="wp-block-heading">Conclusion</h2>

<p class="wp-block-paragraph">If you follow these steps, you should have a functioning dynamic UI. Leave questions or comments about this walkthrough in the comments below.</p>

<p class="wp-block-paragraph">Learn more about DMC&rsquo;s <a href="https://static.dmcinfo.com/services/test-and-measurement-automation">Test &amp; Measurement </a>services or <a href="https://static.dmcinfo.com/contact">contact us</a> to get started on a project today.</p>
<p>The post <a href="https://static.dmcinfo.com/blog/21322/how-to-create-an-object-oriented-dynamic-user-interface-in-labview/">How to Create an Object-Oriented Dynamic User Interface in LabVIEW</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>LUSH Welcome Party</title>
		<link>https://static.dmcinfo.com/blog/22581/lush-welcome-party/</link>
		
		<dc:creator><![CDATA[Maddie Drake]]></dc:creator>
		<pubDate>Thu, 04 Oct 2018 12:14:41 +0000</pubDate>
				<category><![CDATA[Culture]]></category>
		<category><![CDATA[Houston]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/22581/lush-welcome-party/</guid>

					<description><![CDATA[<p>After training in Chicago and kicking off my career at DMC by helping out in Reno,&#160;I finally made my way back to my home office of Houston. Being back permitted me to have my very own welcome party which&#160;every employee at gets. Everyone chooses their own party location and it&apos;s a great chance to get [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/22581/lush-welcome-party/">LUSH Welcome Party</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">After training in Chicago and kicking off my career at DMC by helping out in Reno,&nbsp;I finally made my way back to my home office of Houston. Being back permitted me to have my very own welcome party which&nbsp;every employee at gets.</p>

<p class="wp-block-paragraph">Everyone chooses their own party location and it&apos;s a great chance to get to know more people at DMC.&nbsp;I thought, what better activity to do to bond with an office full of men than to make bath bombs at my favorite cruelty-free, vegan-friendly cosmetics store.</p>

<h2 class="wp-block-heading">The Low-Down On Lush</h2>

<p class="wp-block-paragraph">Lush employees&nbsp;greeted us warmly and explained some of the ingredients that go into their products. They don&apos;t buy anything from companies that carry out, fund, or commission animal testing. Instead, their products are tested on human volunteers before they go to the public market.</p>

<figure class="wp-block-image"><img decoding="async" alt="Lush" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Lush-1.jpg"  /></figure>

<h2 class="wp-block-heading">Fresh Faces</h2>

<p class="wp-block-paragraph">Our first activity was getting the &ldquo;fresh face&rdquo; mask applied to us. I chose the garlic face mask, which had a similar smell and texture to the dip I was eating my chips with. We then competed in charades where we sculpted objects with playdough soap and had our team guess what object it was. Team &ldquo;Luscious&rdquo; took home the victory, along with bragging rights. We finished the night by making a specialty, discontinued bath bomb.</p>

<figure class="wp-block-image"><img decoding="async" alt="lush welcome party" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Lush-2.jpg"  /></figure>

<p class="wp-block-paragraph">At the end of the night, everyone walked away with a $50 gift card and the sweet scent of Lush embedded in their clothes.</p>

<p class="wp-block-paragraph">Want to join our team and join the DMC fun? <a href="/careers">Check out our open positions!</a></p>
<p>The post <a href="https://static.dmcinfo.com/blog/22581/lush-welcome-party/">LUSH Welcome Party</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
