<?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>PLC Archives | DMC, Inc.</title>
	<atom:link href="https://static.dmcinfo.com/blog/tag/plc/feed/index.xml" rel="self" type="application/rss+xml" />
	<link></link>
	<description></description>
	<lastBuildDate>Fri, 04 Sep 2026 21:30: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>PLC Archives | DMC, Inc.</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Getting Started with Beckhoff TwinCAT HMI: Simple Project Setup Tutorial</title>
		<link>https://static.dmcinfo.com/blog/42316/beckhoff-twincat-hmi-project-setup-tutorial/</link>
		
		<dc:creator><![CDATA[Andre Lopez]]></dc:creator>
		<pubDate>Wed, 13 May 2026 11:00:00 +0000</pubDate>
				<category><![CDATA[Beckhoff PLC]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[PLC Programming]]></category>
		<category><![CDATA[Siemens HMI]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/?p=42316</guid>

					<description><![CDATA[<p>Beckhoff&#160;TwinCAT HMI&#160;provides a responsive engineering design environment&#160;for building industrial&#160;web-based&#160;user interfaces.&#160;Because it is built on standard HTML5 technologies, TwinCAT HMI applications can run in any modern web browser. Its flexible architecture and extensive built‑in feature set make it well-suited for everything from simple operator panels to complex, scalable HMI systems.&#160;In this&#160;article,&#160;we will go over basic project [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/42316/beckhoff-twincat-hmi-project-setup-tutorial/">Getting Started with Beckhoff TwinCAT HMI: Simple Project Setup Tutorial</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Beckhoff&nbsp;<strong>TwinCAT HMI</strong>&nbsp;provides a responsive engineering design environment&nbsp;for building industrial&nbsp;web-based&nbsp;user interfaces.&nbsp;Because it is built on standard HTML5 technologies, TwinCAT HMI applications can run in any modern web browser. Its flexible architecture and extensive built‑in feature set make it well-suited for everything from simple operator panels to complex, scalable HMI systems.&nbsp;In this&nbsp;article,&nbsp;we will go over basic project setup for TwinCAT HMI by walking through a&nbsp;simple&nbsp;project.&nbsp;</p>



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



<ol start="1" class="wp-block-list">
<li>TwinCAT&nbsp;XAE installed&nbsp;</li>



<li>TwinCAT&nbsp;HMI installed&nbsp;</li>



<li>PLC&nbsp;Project&nbsp;built and running <em>(see bonus information for the&nbsp;PLC&nbsp;Code&nbsp;used in this example)</em></li>
</ol>



<h2 class="wp-block-heading" id="h-project-setup">Project Setup</h2>



<h3 class="wp-block-heading" id="h-creating-the-project">Creating the Project</h3>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--30)">With&nbsp;the prerequisites&nbsp;checked off, we can&nbsp;start the basic project setup for the HMI. Begin by right-clicking the solution in the <strong>Solution Explorer</strong> project tree and selecting <strong>Add&nbsp;&gt;&nbsp;New Project</strong>.&nbsp;When the <strong>Add New Project</strong> window launches, navigate to <strong>TwinCAT HMI &gt; TwinCAT HMI Project</strong> and name it whatever you like.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-e8839977 wp-block-columns-is-layout-flex" style="padding-bottom:var(--wp--preset--spacing--30)">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image aligncenter size-full has-custom-border"><img fetchpriority="high" decoding="async" width="754" height="487" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-1.png" alt="Context menu in Microsoft Visual Studio, a widely used integrated development environment (IDE) for software engineering." class="has-border-color wp-image-44073" style="border-color:#eeeeee" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-1.png 754w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-1-300x194.png 300w" sizes="(max-width: 754px) 100vw, 754px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image aligncenter size-full is-resized has-custom-border"><img decoding="async" width="938" height="653" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-2.png" alt="This image shows the &quot;Add New Project&quot; dialog box within the Beckhoff TwinCAT 3 engineering environment." class="has-border-color wp-image-44074" style="border-color:#eeeeee;aspect-ratio:1.4365061249334246;width:546px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-2.png 938w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-2-300x209.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-2-768x535.png 768w" sizes="(max-width: 938px) 100vw, 938px" /></figure>
</div>
</div>



<h3 class="wp-block-heading" id="h-linking-tags-nbsp">Linking Tags&nbsp;</h3>



<p class="wp-block-paragraph">The first step in setting up a&nbsp;TwinCAT&nbsp;HMI project is linking PLC symbols to the user interface. This is done by exposing symbols to the&nbsp;TwinCAT&nbsp;HMI Server and binding them directly to HMI control properties.</p>



<p class="wp-block-paragraph">Navigate to&nbsp;<strong>TwinCAT&nbsp;HMI &gt;&nbsp;Windows&nbsp;&gt;&nbsp;&nbsp;TwinCAT&nbsp;HMI Configuration</strong>.</p>



<p class="wp-block-paragraph">From <strong>TwinCAT HMI Configuration</strong>,&nbsp;navigate to&nbsp;<strong>All symbols &gt;&nbsp;ADS &gt;&nbsp;PLC</strong>,&nbsp;and wherever you have your variables defined, in my case &#8216;MAIN&#8217;.</p>



<p class="wp-block-paragraph"><strong>Note:</strong> If ADS is not appearing, check&nbsp;your ADS Route (review the bonus information to learn how).&nbsp;</p>



<p class="wp-block-paragraph">From here,&nbsp;you can right-click on a variable and hit &#8216;Map Symbol&#8217;.&nbsp;You can also simply double-click on a symbol to map it.&nbsp;We&nbsp;have&nbsp;now successfully&nbsp;pulled&nbsp;the&nbsp;PLC data&nbsp;into&nbsp;the HMI Server.</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--30)">Now,&nbsp;we can&nbsp;bind&nbsp;these tags to controls in the HMI screen.&nbsp;Navigate to&nbsp;&#8216;Desktop.view&#8217;.&nbsp;This is the main screen on which we will develop.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-e8839977 wp-block-columns-is-layout-flex" style="padding-bottom:var(--wp--preset--spacing--30)">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image aligncenter size-full has-custom-border"><img decoding="async" width="771" height="384" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-3.png" alt="Screenshot showing the TwinCAT HMI Configuration window in Beckhoff TwinCAT 3 engineering software." class="has-border-color wp-image-44083" style="border-color:#eeeeee" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-3.png 771w, https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-3-300x149.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-3-768x383.png 768w" sizes="(max-width: 771px) 100vw, 771px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image aligncenter size-full is-resized has-custom-border"><img decoding="async" width="686" height="429" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-4.png" alt="Image displaying the project structure for a Beckhoff TwinCAT HMI project within Visual Studio." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44084" style="aspect-ratio:1.599119129293186;width:472px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-4.png 686w, https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-4-300x188.png 300w" sizes="(max-width: 686px) 100vw, 686px" /></figure>
</div>
</div>



<h2 class="wp-block-heading" id="h-creating-nbsp-controls-nbsp">Creating&nbsp;Controls&nbsp;</h2>



<p class="wp-block-paragraph">On the right pane, we have properties and&nbsp;the toolbox. These are used to add&nbsp;and edit controls within the project. We’ll&nbsp;start&nbsp;by dragging a&nbsp;<strong>Button&nbsp;</strong>into the project.</p>



<p class="wp-block-paragraph">After your&nbsp;component&nbsp;is added, you can then select it to&nbsp;edit the&nbsp;<strong>Properties&nbsp;</strong>tab.&nbsp;For a basic button, we will want to create a data binding for&nbsp;the&nbsp;state symbol.&nbsp;Click the square to the right of the text field to link tags&nbsp;and select&nbsp;&#8216;Create data binding&#8217;.</p>



<div class="wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-0e47273b wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image aligncenter size-full has-custom-border" style="margin-right:0"><img decoding="async" width="764" height="228" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-5.png" alt="Image of a property configuration menu within the Beckhoff TwinCAT 3 HMI engineering environment, specifically allowing users to bind properties to data or functions" class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44092" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-5.png 764w, https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-5-300x90.png 300w" sizes="(max-width: 764px) 100vw, 764px" /></figure>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph" style="padding-left:var(--wp--preset--spacing--40)">This&nbsp;opens&nbsp;the symbol browser where you can select mapped PLC variables. On my screen, some variable groups include &#8216;ADS&#8217;, &#8216;PLC1&#8217;, &#8216;Global_Version&#8217;, and &#8216;MAIN&#8217;. Within the &#8216;MAIN&#8217; category, we&#8217;ll select the <strong>bRun </strong>variable. It is worth noting that you can also map symbols from this screen using the same method as in HMI configuration.</p>
</div>
</div>



<p class="wp-block-paragraph">You should now see the name for that symbol populated in the&nbsp;&#8216;StateSymbol&#8217;<strong>&nbsp;</strong>box. You can also hover over property names to see a description&nbsp;of what&nbsp;they do. Now, we will drag in an <strong>Ellipse </strong>to show how the Events tab works.</p>



<div class="wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-0e47273b wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image alignleft size-full has-custom-border" style="margin-right:0;margin-left:var(--wp--preset--spacing--20)"><img decoding="async" width="763" height="148" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-6.png" alt="Image displaying the properties for a TcHmiEllipse control within the Beckhoff TwinCAT 3 HMI Engineering environment." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44103" style="aspect-ratio:5.155652648825778" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-6.png 763w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-6-300x58.png 300w" sizes="(max-width: 763px) 100vw, 763px" /></figure>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph" style="padding-left:var(--wp--preset--spacing--40)">With your ellipse selected,&nbsp;navigate over to the&nbsp;Events tab&nbsp;indicated by&nbsp;the lightning bolt symbol. From here,&nbsp;you can see that there are many built-in events to configure, like <code>.onMouseDoubleClick</code>, <code>.onMouseEnter</code>, <code>.onMouseLeave</code>, etc. You also have the option&nbsp;to configure&nbsp;a custom event.</p>
</div>
</div>



<p class="wp-block-paragraph">Click the small square next to the <strong>Custom</strong> field to map a symbol to this control. In our case, we will select &#8216;bState&#8217;. Once that symbol is mapped, click the pencil icon to open and edit the custom event associated with the control.</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--30)">In the Events tab, you will see a drag-and-drop interface that allows you to define logic for the controller&#8217;s behavior. This visual workflow makes it easy to configure interactions without writing traditional code. For this example, we will use a <strong>Condition </strong>block. Drag the condition into the steps section, then begin populating the auto-generated fields.</p>



<figure class="wp-block-image aligncenter size-full has-custom-border" style="margin-bottom:var(--wp--preset--spacing--40)"><img decoding="async" width="1395" height="648" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-7.png" alt="This screenshot shows the Actions and Conditions Editor in Beckhoff's TwinCAT 3 HMI software" class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44107" style="aspect-ratio:2.142916934066241" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-7.png 1395w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-7-300x139.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-7-1024x476.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-7-768x357.png 768w" sizes="(max-width: 1395px) 100vw, 1395px" /></figure>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--40)">Here, we want to check whether the boolean variable <strong>bRun</strong> is set to &#8216;True&#8217;. If the condition evaluates to true, we will update the ellipse&#8217;s appearance to indicate an active state. To do this, drag the <strong>FillColor</strong> property into both the <strong>&#8216;then&#8217;</strong> and <strong>&#8216;else&#8217;</strong> branches. Set the &#8216;then&#8217; color to green to represent a running state, and the &#8216;else&#8217; color to grey to indicate that the system is not running.</p>



<figure class="wp-block-image alignleft size-large is-resized has-custom-border"><img decoding="async" width="1024" height="733" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-8-1024x733.png" alt="This image shows the Beckhoff TwinCAT HMI development environment, specifically the MAIN screen configuration area." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44108" style="aspect-ratio:1.3970697054906023;object-fit:cover;width:550px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-8-1024x733.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-8-300x215.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-8-768x549.png 768w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-8.png 1177w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading" id="h-testing-in-live-view">Testing in Live View</h2>



<p class="wp-block-paragraph">After configuring this logic, it&#8217;s also important to establish your screen&#8217;s behavior. Return to the <strong>Desktop.View</strong>, where you will see a set of controls on the right-hand side. Click the &#8216;L&#8217;<strong> </strong>button to launch the live view.</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--30)">As you interact with the interface, observe the ellipse once again. When the button is pressed and held, the condition should evaluate to true, and the circle should toggle from red to green in real time. This confirms that your event logic is working as expected and that the control is properly responding to changes in the mapped variable.</p>



<h2 class="wp-block-heading" id="h-user-nbsp-controls-nbsp">User&nbsp;Controls&nbsp;</h2>



<p class="wp-block-paragraph">As your HMI projects grow in size and complexity, maintaining reusability and consistency becomes increasingly important. TwinCAT HMI addresses this need through <strong>User Controls</strong>, which are reusable templates that combine multiple HMI elements into configurable, modular components.</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--30)">To get started, create a new folder in your project called &#8216;UserControls&#8217;. This helps keep your project organized as your library of reusable components expands. Within this folder, add a new item and select &#8216;User Control&#8217;. From here, you can begin building a custom control that can be reused across screens, reducing development time and ensuring a consistent user interface.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-e8839977 wp-block-columns-is-layout-flex" style="padding-bottom:var(--wp--preset--spacing--30)">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image aligncenter size-large is-resized has-custom-border"><img decoding="async" width="1024" height="423" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-10-1024x423.png" alt="Screenshot showing the context menu within the Beckhoff TwinCAT 3 HMI Engineering environment, specifically under the Solution Explorer with &quot;New Folder&quot; highlighted." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44118" style="aspect-ratio:2.3932057294967675;width:555px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-10-1024x423.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-10-300x124.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-10-768x317.png 768w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-10.png 1193w" 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 aligncenter size-large has-custom-border"><img decoding="async" width="1024" height="397" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-11-1024x397.png" alt="Image of a context menu in TwinCAT HMI Engineering within Visual Studio with &quot;New Item&quot; highlighted." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44119" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-11-1024x397.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-11-300x116.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-11-768x298.png 768w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-11.png 1037w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>
</div>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--30)">Once again, on the&nbsp;right‑hand&nbsp;side of the screen, you&#8217;ll see a set of small buttons.&nbsp;Selecting the&nbsp;&#8216;P&#8217;&nbsp;button opens the User Control parameters. These parameters are configurable values that are passed into each instance of the <strong>User Control</strong>, allowing multiple instances to be created without&nbsp;modifying&nbsp;the control’s internal layout, grouping, or logic.&nbsp;</p>



<figure class="wp-block-image aligncenter size-full has-custom-border" style="margin-bottom:var(--wp--preset--spacing--40)"><img decoding="async" width="1701" height="931" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-12.png" alt="Dialog box used to define parameters for a UserControl in TwinCAT HMI, allowing for custom, reusable interface elements." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44128" style="aspect-ratio:1.8270923538088215;object-fit:cover" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-12.png 1701w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-12-300x164.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-12-1024x560.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-12-768x420.png 768w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-12-1536x841.png 1536w" sizes="(max-width: 1701px) 100vw, 1701px" /></figure>



<p class="wp-block-paragraph" style="padding-top:var(--wp--preset--spacing--30)">We are going to create two parameters:</p>



<ul class="wp-block-list">
<li style="padding-bottom:0">One for the&nbsp;<strong>HMI_PbLight</strong>&nbsp;struct</li>



<li>One&nbsp;<strong>String</strong> for&nbsp;the name of the&nbsp;component</li>
</ul>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--40)"><strong>Note: </strong>If&nbsp;your&nbsp;struct&nbsp;does not show&nbsp;up,&nbsp;try&nbsp;closing parameters,&nbsp;adding a button&nbsp;to your user control,&nbsp;and linking&nbsp;<strong>HMI_PbLight</strong>. Return to the parameters and the datatype should now appear as <strong>PLC1.HMI_PbLight</strong>, with <strong>String</strong> for <strong>sName</strong>.</p>



<figure class="wp-block-image aligncenter size-full is-resized has-custom-border" style="margin-bottom:var(--wp--preset--spacing--40)"><img decoding="async" width="1569" height="896" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-13.png" alt="Image shows the Edit/Define Parameters dialog window in TwinCAT HMI engineering software." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44220" style="aspect-ratio:1.7511457692044599;width:1179px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-13.png 1569w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-13-300x171.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-13-1024x585.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-13-768x439.png 768w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-13-1536x877.png 1536w" sizes="(max-width: 1569px) 100vw, 1569px" /></figure>



<p class="wp-block-paragraph">With the User Control parameters defined, we can now build the control in much the same way as before, with one key difference: instead of binding directly to PLC symbols, we bind each element to properties exposed by the User Control. The pushbutton is configured so its state and behavior reference the <strong>bRun</strong> member of the <strong>HMI_PbLight</strong> parameter, allowing each instance of the control to respond to its own data source.</p>



<p class="wp-block-paragraph">In the same way, the ellipse used as a status indicator is bound to the <strong>bState</strong> variable within the same struct, and simple logic is applied to drive its fill color, green when the run condition is true and grey when it is false. Finally, we’ll add a text element and bind its <strong>Text</strong> property to the <strong>sName </strong>string parameter, enabling each instance to display a unique label.</p>



<figure class="wp-block-image size-full has-custom-border" style="margin-bottom:var(--wp--preset--spacing--60)"><img decoding="async" width="1357" height="541" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-21.png" alt="Screenshot displaying a Conditional (IF/THEN/ELSE) logic block within Beckhoff TwinCAT HMI." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44599" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-21.png 1357w, https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-21-300x120.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-21-1024x408.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-21-768x306.png 768w" sizes="(max-width: 1357px) 100vw, 1357px" /></figure>



<figure class="wp-block-image aligncenter size-full has-custom-border"><img decoding="async" width="1239" height="668" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-14-1.png" alt="Screenshot shows an Actions and Conditions editor used for creating logical behavior in Beckhoff TwinCAT program." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44600" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-14-1.png 1239w, https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-14-1-300x162.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-14-1-1024x552.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-14-1-768x414.png 768w" sizes="(max-width: 1239px) 100vw, 1239px" /><figcaption class="wp-element-caption"><em>Color reference shown for the combobox.</em></figcaption></figure>



<p class="wp-block-paragraph" style="padding-bottom:0">Notice that none of the elements inside the User Control are bound directly to PLC symbols. Instead, each element references the variables exposed by the <strong>HMI_PbLight</strong> struct parameter. This indirection is what makes the control reusable.</p>



<div class="wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-0e47273b wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full is-resized has-custom-border"><img decoding="async" width="761" height="200" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-15-e1777921687642.png" alt="Image of an HMI property configuration screen within TwinCAT program." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44222" style="aspect-ratio:3.692049507027481;width:550px;height:auto" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-15-e1777921687642.png 761w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-15-e1777921687642-300x79.png 300w" sizes="(max-width: 761px) 100vw, 761px" /></figure>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph">After saving the User Control, switch back to <strong>Desktop.View</strong> and you will see it appear in the toolbox alongside the standard HMI elements. From there, drag the control onto a screen, bind the <strong>HMI_PbLight</strong> parameter to a specific instance of the struct, and assign a name. Boom! With that single step, the control is fully configured, and you can now drop in as many instances as needed while maintaining consistent behavior, appearance, and logic across your HMI.</p>
</div>
</div>



<h2 class="wp-block-heading" id="bonus">Bonus Information</h2>



<h3 class="wp-block-heading" id="h-adding-a-combobox">Adding a Combobox</h3>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--30)">This section introduces a <strong>Combobox</strong> that allows the operator to change the light&#8217;s color behavior within the User Control. Rather than hard-coding the color logic, the Combobox provides a simple, configurable way to select between predefined color states at runtime.</p>



<figure class="wp-block-image alignleft size-full is-resized has-custom-border" style="margin-bottom:var(--wp--preset--spacing--40)"><img decoding="async" width="748" height="605" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-16-1.png" alt="Configuration dialog box for a TwinCAT HMI ComboBox control, allowing a user to add color entries for different system states." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44225" style="aspect-ratio:1.2363798654722815;object-fit:cover;width:550px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-16-1.png 748w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-16-1-300x243.png 300w" sizes="(max-width: 748px) 100vw, 748px" /></figure>



<p class="wp-block-paragraph">To add the Combobox, navigate to <strong>SrcData</strong>, click the three dots on the right-hand side, and create a new data source that will hold the selected value. This data source is then bound to the Combobox and referenced by the User Control logic, allowing the selected option to drive how the indicator is displayed. By handling the color selection this way, the control remains flexible and reusable while giving each instance the ability to behave differently based on user input.</p>



<p class="wp-block-paragraph">Next, define the selectable color options for the Combobox. Add three entries labeled <strong>Green</strong>, <strong>Yellow</strong>, and <strong>Red</strong>, and assign each one a corresponding hex color value in the <strong>Value</strong> category. These values will be used directly by the User Control logic to drive the appearance of the status indicator.</p>



<p class="wp-block-paragraph">Once the options are in place, navigate back to the ellipse inside the User Control and update its custom action. For the bRun true condition, set the fill color using a function binding that references the Combobox selection: <strong>({ color: %ctrl%TcHmiCombobox_1::SelectedValue%/ctrl% })</strong></p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--40)">This binding allows the ellipse color to be determined dynamically based on the selected Combobox value rather than fixed logic. With that complete, you can add additional instances of the User Control to your screen, bind each one to a different <strong>HMI_PbLight</strong> [HO16.1] struct instance, and select the desired color from the Combobox. Each control now behaves independently, while still leveraging the same reusable design.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-container-core-gallery-is-layout-589b94c0 wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-full has-custom-border"><img decoding="async" width="1247" height="830" data-id="44227" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-17.png" alt="Image of Beckhoff TwinCAT HMI Live-View interface displaying a red indicator." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44227" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-17.png 1247w, https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-17-300x200.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-17-1024x682.png 1024w, https://static.dmcinfo.com/wp-content/uploads/2026/05/beckhoff-twincat-hmi-basic-project-set-up-image-17-768x511.png 768w" sizes="(max-width: 1247px) 100vw, 1247px" /></figure>



<figure class="wp-block-image size-full has-custom-border"><img decoding="async" width="900" height="563" data-id="43978" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/twincat-hmi-42.png" alt="Image of Beckhoff TwinCAT HMI Live-View interface displaying a yellow indicator." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-43978" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/twincat-hmi-42.png 900w, https://static.dmcinfo.com/wp-content/uploads/2026/05/twincat-hmi-42-300x188.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/twincat-hmi-42-768x480.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<figure class="wp-block-image size-full has-custom-border"><img decoding="async" width="900" height="566" data-id="43979" src="https://static.dmcinfo.com/wp-content/uploads/2026/05/twincat-hmi-41.png" alt="Image of Beckhoff TwinCAT HMI Live-View interface displaying a green indicator." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-43979" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/05/twincat-hmi-41.png 900w, https://static.dmcinfo.com/wp-content/uploads/2026/05/twincat-hmi-41-300x189.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/05/twincat-hmi-41-768x483.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>
</figure>



<h3 class="wp-block-heading" id="h-basic-plc-project-nbsp">Basic PLC Project&nbsp;</h3>



<p class="wp-block-paragraph">This section walks through setting up a simple PLC project to support a basic pushbutton and light, which will later be consumed by the TwinCAT HMI. Start by creating a new solution and selecting &#8216;TwinCAT XAE Project&#8217;. This initializes the TwinCAT environment and provides the framework needed to add PLC logic and HMI communication.</p>



<figure class="wp-block-image alignleft size-full is-resized has-custom-border" style="margin-bottom:var(--wp--preset--spacing--30)"><img decoding="async" width="549" height="346" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-18.png" alt="Image of s a Structured Text (ST) program, likely within a PLC environment like TwinCAT or CODESYS, used to control light indicators." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44228" style="width:550px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-18.png 549w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-18-300x189.png 300w" sizes="(max-width: 549px) 100vw, 549px" /></figure>



<p class="wp-block-paragraph">Once the project is created, navigate to the <strong>Solution Explorer</strong>, right-click on <strong>PLC</strong>, and add a new PLC project. This creates the runtime environment where the control logic will live. With the PLC project in place, we can define the shared data structure used by the HMI. Right-click on <strong>DUTs</strong>, select <strong>Add &gt; DUT</strong>, and choose <strong>Structure</strong>. Name this structure <strong>HMI_PbLight</strong> and add two boolean members: <strong>bRun</strong> to represent the pushbutton command, and <strong>bState</strong> to represent the resulting status of the light.</p>



<p class="wp-block-paragraph">Next, navigate to <strong>POUs &gt; MAIN (PRG)</strong> and declare an instance of the HMI_PbLight struct along with any supporting variables. Add simple logic that drives <strong>bState</strong> based on the value of <strong>bRun</strong>, mimicking the behavior of a pushbutton controlling a status light. This keeps the PLC logic intentionally straightforward while clearly demonstrating the data flow between the PLC and HMI.</p>



<p class="wp-block-paragraph">With the code in place, activate the configuration and log in to the PLC. If you are running TwinCAT on a local host, be sure to execute the required .bat script before logging in. At this point, the PLC is ready, and the <strong>HMI_PbLight</strong> structure can be bound to the HMI elements and User Controls created in the previous sections.</p>



<h3 class="wp-block-heading" id="h-updating-nbsp-to-user-mode-runtime-nbsp-ads-nbsp-route">Updating&nbsp;to User Mode Runtime&nbsp;ADS&nbsp;Route</h3>



<div class="wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-0e47273b wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full is-resized has-custom-border"><img decoding="async" width="812" height="439" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-19-e1777912208951.png" alt="Image showing and ADS (Automation Device Specification) configuration screen within the TwinCAT HMI Server Configuration." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44230" style="width:550px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-19-e1777912208951.png 812w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-19-e1777912208951-300x162.png 300w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-19-e1777912208951-768x415.png 768w" sizes="(max-width: 812px) 100vw, 812px" /></figure>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph">This final step ensures that the TwinCAT HMI Server is communicating with the correct runtime by updating the ADS route to point to the User Mode Runtime. Begin by opening the <strong>TwinCAT HMI Server configuration</strong> by going to <strong>TwinCAT HMI &gt; Windows &gt; TwinCAT Server Configuration</strong>. From there, navigate to <strong>ADS &gt; Runtimes &gt; AMSNetId</strong>. This setting defines which TwinCAT runtime the HMI will connect to for symbol access and data exchange.</p>



<p class="wp-block-paragraph">Verify that the <strong>AMSNetId</strong> is set to the <strong>AmsNetId</strong> of your User Mode runtime, if that is the runtime you are using.</p>
</div>
</div>



<div class="wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-0e47273b wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full is-resized has-custom-border"><img decoding="async" width="578" height="151" src="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-20-e1777912405127.png" alt="Image of a configuration screen for industrial network communication showing AMS Net ID field, selectable IP address options, and a setting to allow read-only access for connected devices." class="has-border-color has-custom-light-gray-neutral-2-border-color wp-image-44231" style="width:550px" srcset="https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-20-e1777912405127.png 578w, https://static.dmcinfo.com/wp-content/uploads/2026/04/beckhoff-twincat-hmi-basic-project-set-up-image-20-e1777912405127-300x78.png 300w" sizes="(max-width: 578px) 100vw, 578px" /></figure>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow">
<p class="wp-block-paragraph">This is especially important when running TwinCAT locally or when multiple runtimes are present, as an incorrect AMSNetId will prevent the HMI from resolving PLC symbols and binding data correctly.</p>



<p class="wp-block-paragraph">Once the AMSNetId is confirmed, the HMI and PLC are fully aligned, allowing the User Controls and bindings configured in the previous sections to function as expected at runtime.</p>
</div>
</div>



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



<p class="wp-block-paragraph">This tutorial walked through the foundational steps required to build a simple, reusable TwinCAT HMI project, starting with PLC structure design and basic HMI bindings, then expanding into User Controls and runtime configuration. By introducing the <strong>HMI_PbLight</strong> struct and gradually abstracting symbol bindings into User Control parameters, we demonstrated how to move from a single hard-coded screen toward a scalable, modular HMI architecture. The use of events, visual logic blocks, and configurable parameters highlights how TwinCAT HMI enables powerful interaction design without requiring custom scripting.</p>



<p class="wp-block-paragraph" style="padding-bottom:var(--wp--preset--spacing--40)">By the end of this project, you should have a working HMI that connects cleanly to a PLC, supports multiple instances of a reusable control, and allows runtime configuration via simple UI elements such as a Combobox. These same concepts scale directly to larger applications, where consistency, maintainability, and development speed become critical. Whether you are building a small operator interface or a plant-wide visualization system, following these patterns will help you create HMIs that are flexible, readable, and easy to extend.</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">Take your project to the next level with engineering solutions from DMC. Learn more about our <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/beckhoff-and-twincat-3-programming/" id="457">Beckhoff programming expertise</a> and contact us to get started 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 class="wp-block-paragraph"></p>
<p>The post <a href="https://static.dmcinfo.com/blog/42316/beckhoff-twincat-hmi-project-setup-tutorial/">Getting Started with Beckhoff TwinCAT HMI: Simple Project Setup Tutorial</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Upgrading from WinCC Comfort to WinCC Unified</title>
		<link>https://static.dmcinfo.com/blog/16018/upgrading-from-wincc-comfort-to-wincc-unified/</link>
		
		<dc:creator><![CDATA[Josh Wrobel]]></dc:creator>
		<pubDate>Mon, 16 Sep 2024 09:33:28 +0000</pubDate>
				<category><![CDATA[PLC]]></category>
		<category><![CDATA[Siemens]]></category>
		<category><![CDATA[WinCC Comfort]]></category>
		<category><![CDATA[WinCC Unified]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/16018/upgrading-from-wincc-comfort-to-wincc-unified/</guid>

					<description><![CDATA[<p>With WinCC Comfort being phased out, it will become more difficult to find replacement hardware and technical support for the software. Over time, upgrading to WinCC Unified will become more and more prevalent. WinCC Unified is more powerful than WinCC Comfort, allowing more flexibility when designing screens. We&#8217;ve picked up some pointers while helping clients [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/16018/upgrading-from-wincc-comfort-to-wincc-unified/">Upgrading from WinCC Comfort to WinCC Unified</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">With WinCC Comfort being phased out, it will become more difficult to find replacement hardware and technical support for the software. Over time, upgrading to WinCC Unified will become more and more prevalent. WinCC Unified is more powerful than WinCC Comfort, allowing more flexibility when designing screens.</p>



<p class="wp-block-paragraph">We&#8217;ve picked up some pointers while helping clients migrate their existing WinCC projects. These are our best practices for navigating that transition, with practical tips and tricks to make the process as smooth as possible.</p>



<h2 id="h-why-upgrade-from-comfort-to-unified" class="wp-block-heading"><strong>Why Upgrade from Comfort to Unified?</strong></h2>



<p class="wp-block-paragraph"><strong>Comfort is Phasing Out:</strong> As WinCC Comfort is gradually being retired, moving to WinCC Unified will ensure that your projects remain supported and functional.</p>



<p class="wp-block-paragraph"><strong>Scarcity of Technology and Hardware:</strong> Comfort hardware will become increasingly rare, making upgrading worthwhile to maintain project viability and avoid future headaches.</p>



<p class="wp-block-paragraph">While this blog isn’t a full-blown tutorial on WinCC Unified,&nbsp;it focuses on providing useful tips, tricks, and common pitfalls you might encounter when converting your projects. Our primary focus is on version 18 of Unified, though many of these insights are relevant for earlier versions like V16 and V17, which come with their own set of challenges, and also future versions.</p>



<h2 id="h-using-the-data2unified-conversion-tool" class="wp-block-heading"><strong>Using the Data2Unified Conversion Tool</strong></h2>



<p class="wp-block-paragraph">The Data2Unified Conversion Tool from Siemens is a great starting point for converting your projects. This tool handles about 50%-90% of the conversion process for you, depending on what elements are present in your project.</p>



<p class="wp-block-paragraph"><strong>How to Use the Tool:</strong></p>



<ol class="wp-block-list">
<li>Install the Data2Unified Conversion Tool.</li>



<li>In Portal, ensure you’ve added a Unified panel to your original Comfort project.</li>



<li>Right-click on your Comfort panel in the project, find the Data2Unified tool in the context menu, and select “Start.” The tool will begin processing your project.</li>
</ol>



<p class="wp-block-paragraph"><p style="text-align: center;"><img decoding="async" alt="Data2Unified Tool" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Data2Unified-Tool.png"></p></p>



<ol class="wp-block-list">
<li value="4">Once your project loads, you&rsquo;ll choose what you want to convert. Be sure to select the Unified panel as your target. Update the file name and path if needed, and then click &ldquo;Save file.&rdquo; For larger projects, this process might take a while, so it can be a good idea to run it overnight.</li>
</ol>



<p class="wp-block-paragraph"><p style="text-align: center;"><img decoding="async" alt="Data2Unified Add in" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Data2Unified-Conversion-Pop-Up.png">&nbsp;</p></p>



<p class="wp-block-paragraph"><strong>Limitations to Keep in Mind:</strong></p>



<ul class="wp-block-list">
<li><strong>Basic Navigation:</strong> The tool often produces basic navigation outputs that may need refinement.</li>



<li><strong>Faceplates:</strong> These aren’t converted automatically, so they’ll need manual attention.</li>



<li><strong>Displays and Lists:</strong> Alarm lists, trend displays, graphic displays, and similar elements require manual adjustment.</li>



<li><strong>VBA Scripts:</strong> Review and convert these scripts manually if necessary.</li>



<li><strong>Artifacts:</strong> Be on the lookout for issues like blinking elements or rotated vertical text.</li>
</ul>



<h2 id="h-advantages-of-wincc-unified" class="wp-block-heading"><strong>Advantages of WinCC Unified</strong></h2>



<p class="wp-block-paragraph"><strong>1. Improved Navigation:</strong></p>



<ul class="wp-block-list">
<li><strong>Screen Windows:</strong> WinCC Unified allows you to design screens larger than your display and embed them in smaller windows, which automatically adds scroll bars. This feature helps keep your project organized and user-friendly. In the below example, notice the scroll bar at the bottom of the zone section that lets you slide between different zones.</li>
</ul>



<p class="wp-block-paragraph"><p style="text-align: center;"><img decoding="async" alt="WinCC Unified Large Display" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/WinCC-Unified-Large-Display.png"></p></p>



<ul class="wp-block-list">
<li><strong>Consistent Navigation:</strong> Set up a main screen with different windows for the header, content, and navigation. This setup creates a cohesive user experience and makes navigation more intuitive.</li>
</ul>



<p class="wp-block-paragraph"><p style="text-align: center;"><img decoding="async" alt="WinCC Unified Consistent Navigation" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/WinCC-Unified-Consistent-Navigation.png"></p></p>



<p class="wp-block-paragraph"><strong>2. Simplified Popup Architecture:</strong></p>



<ul class="wp-block-list">
<li><strong>Faceplate Popups:</strong> You can use scripting to open faceplates as popups. This reduces the number of screens you need and simplifies your project. However, if you need to handle multilingual text, be aware that the OpenFaceplateInPopup function doesn’t support text arguments in multiple languages.</li>
</ul>



<h2 id="h-tips-for-converting-faceplates" class="wp-block-heading"><strong>Tips for Converting Faceplates</strong></h2>



<p class="wp-block-paragraph">When moving faceplates from Comfort to Unified, direct copying won’t work. Here’s a step-by-step approach to make the conversion easier:</p>



<ol class="wp-block-list">
<li><strong>Copy Visual Elements:</strong> Move elements from the faceplate definition to a blank screen.</li>



<li><strong>Run the Conversion Tool:</strong> Use the tool on this new screen to convert sizes, positions, fonts, and colors (all aesthetic properties).</li>



<li><strong>Create a New Faceplate: </strong>Group select all objects from the conversion tool, and create a new faceplate.</li>



<li><strong>Re-link Dynamics:</strong> Manually update dynamizations and tag linking.</li>



<li><strong>Event Interface:</strong> Configure it as needed.</li>
</ol>



<p class="wp-block-paragraph">If your faceplates are complex, this approach can save a lot of time, as the conversion tool will handle all visual properties, allowing programmers to focus on quickly re-linking tags.</p>



<h2 id="h-leveraging-javascript-scripting-in-unified" class="wp-block-heading"><strong>Leveraging JavaScript Scripting in Unified</strong></h2>



<p class="wp-block-paragraph">WinCC Unified supports JavaScript, adding a new level of flexibility. You can use it to enhance screens, events, and object properties, making your HMI more powerful and customizable.</p>



<p class="wp-block-paragraph"><strong>1. Nested Faceplates:</strong></p>



<ul class="wp-block-list">
<li><strong>Benefits:</strong> Nested faceplates allow for advanced graphics and cleaner architecture.</li>



<li><strong>Cautions:</strong> Avoid overusing nested faceplates and complex scripts to prevent performance issues. Efficiently manage variables and use Global Definitions to keep your code organized and avoid artifacts in the HMI simulator.</li>
</ul>



<h2 id="h-additional-resources" class="wp-block-heading"><strong>Additional Resources</strong></h2>



<p class="wp-block-paragraph">For further reading and detailed guidance, check out these resources:</p>



<ul class="wp-block-list">
<li><a href="https://cache.industry.siemens.com/dl/files/536/109758536/att_1032976/v3/109758536_Unified_TipsScripting_V30_en.pdf" target="_new"><strong>SIMATIC WinCC Unified Tips and Tricks for Scripting (JavaScript)</strong></a></li>



<li><a href="https://support.industry.siemens.com/cs/document/109770510/data2unified-add-in?dti=0&amp;lc=en-WW" target="_new"><strong>Data2Unified Tool Documentation</strong></a></li>



<li><a href="https://static.dmcinfo.com/latest-thinking/blog/id/10322/getting-started-with-wincc-unified" target="_new"><strong>“Getting Started with WinCC Unified”</strong></a></li>



<li><a href="https://cache.industry.siemens.com/dl/files/600/109801600/att_1084233/v5/109801600_WinCC_Unified_VisualStudioCode_en.pdf" target="_new"><strong>Developing Unified JavaScript with VSCode</strong></a></li>
</ul>



<p class="wp-block-paragraph">Upgrading from WinCC Comfort to Unified might seem like a big task, but with the right approach and tools, you can handle the transition smoothly.</p>



<p class="wp-block-paragraph"><strong>Are you looking&nbsp;to upgrade your existing systems to WinCC Unified? DMC&#8217;s team of <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming">Automation engineers</a> have extensive experience and can help with conversions and migrations of any size. Contact us&nbsp;<a href="https://static.dmcinfo.com/contact#get-in-touch">today</a>&nbsp;to discuss your project needs.</strong></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>Navigate the Move from WinCC Comfort to Unified</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">Explore our <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" data-type="page" data-id="420">Automation</a> expertise in migrating Siemens <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/" data-type="page" data-id="497">HMI</a> applications to <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/wincc-7-programming/" data-type="page" data-id="518">WinCC</a> Unified while modernizing navigation, faceplates, displays, and scripts.</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/16018/upgrading-from-wincc-comfort-to-wincc-unified/">Upgrading from WinCC Comfort to WinCC Unified</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>DMC&#8217;s Drinkbot Gets an HMI Upgrade to WinCC Unified</title>
		<link>https://static.dmcinfo.com/blog/16188/dmcs-drinkbot-gets-an-hmi-upgrade-to-wincc-unified/</link>
		
		<dc:creator><![CDATA[Evan Ripperger]]></dc:creator>
		<pubDate>Fri, 28 Jun 2024 13:18:26 +0000</pubDate>
				<category><![CDATA[PLC]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[Drink Bot]]></category>
		<category><![CDATA[DrinkBot]]></category>
		<category><![CDATA[Siemens]]></category>
		<category><![CDATA[Simatic]]></category>
		<category><![CDATA[Simulation]]></category>
		<category><![CDATA[Unified]]></category>
		<category><![CDATA[WinCC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/16188/dmcs-drinkbot-gets-an-hmi-upgrade-to-wincc-unified-14/</guid>

					<description><![CDATA[<p>Introduction The DMC Drinkbot is a robotic bartender powered by Siemens automation hardware. It was originally created in the DMC Denver office in 2016 using a Siemens S7-1200 PLC interfaced by a 7&#8243; SIMATIC Comfort Panel. Eight years after creation as Siemens has begun to phase out their COMFORT HMI Panels, DMC wanted to give [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/16188/dmcs-drinkbot-gets-an-hmi-upgrade-to-wincc-unified/">DMC&#8217;s Drinkbot Gets an HMI Upgrade to WinCC Unified</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 id="h-introduction" class="wp-block-heading">Introduction</h2>



<p class="wp-block-paragraph">The DMC Drinkbot is a robotic bartender powered by Siemens automation hardware. It was originally created in the DMC Denver office in 2016 using a Siemens S7-1200 PLC interfaced by a 7&#8243; SIMATIC Comfort Panel.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="687" height="419" src="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-1.png" alt="DMC Drinkbot 2024 WinCC upgrade" class="wp-image-35665" srcset="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-1.png 687w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-1-300x183.png 300w" sizes="(max-width: 687px) 100vw, 687px" /></figure>



<p class="wp-block-paragraph">Eight years after creation as Siemens has begun to phase out their COMFORT HMI Panels, DMC wanted to give Drinkbot an HMI upgrade. We received a new MTP700 Unified Comfort Panel that runs TIA Portal V19 WinCC Unified programs to show off the latest and greatest of Siemens HMI technology. This guide will walk through the steps taken to upgrade Drinkbot and the new features developed.</p>



<h2 id="h-background-and-operational-overview" class="wp-block-heading"><strong>Background and Operational Overview</strong></h2>



<p class="wp-block-paragraph">The DMC Drinkbot uses PROFINET communication for a Siemens G120 VFD drive controlled by an S7-1200 PLC. The user can choose drinks on a SIMATIC key panel or the MTP700 Unified Comfort Panel HMI that this blog focuses on. The user can choose between 44 standard drink recipes made from 8 bottles of alcohol and 6 mixers. There is also a custom drink option where the user can select any ingredient available based on the current configuration of the Drinkbot.&nbsp;</p>



<figure class="wp-block-image size-full"><img decoding="async" width="452" height="491" src="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-2.png" alt="DMC Drinkbot HMI Closeup Main Screen" class="wp-image-35667" srcset="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-2.png 452w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-2-276x300.png 276w" sizes="(max-width: 452px) 100vw, 452px" /></figure>



<p class="wp-block-paragraph">Without replacing any bottles on the machine, the ability to make alcoholic drinks can be toggled. If the Drinkbot is taken to an event where alcohol is not permitted, the bottles may also be swapped out for flavored syrups and soda water to make “Italian sodas”. The Italian soda switch overrides the selectable recipes limiting the machine to the new available ingredients. The settings screen for these configurations is accessible by selecting the DMC logo in the upper left corner where the user can view alarms and diagnostics and change the machine mode. The motion axis of the Drinkbot can also be manually operated for demonstration and debugging purposes.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="608" height="359" src="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-3.png" alt="Drinkbot WinCC Settings and Diagnostics Navigation" class="wp-image-35668" srcset="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-3.png 608w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-3-300x177.png 300w" sizes="(max-width: 608px) 100vw, 608px" /></figure>



<p class="wp-block-paragraph">For a detailed history of the development of Drinkbot, refer to the following two blogposts.</p>



<p class="wp-block-paragraph"><a href="https://static.dmcinfo.com/blog/23327/dmc-engineers-serve-up-a-siemens-s7-powered-drinkbot/">DMC Engineers Serve up a Siemens S7 Powered DrinkBot </a></p>



<p class="wp-block-paragraph"><a href="https://static.dmcinfo.com/blog/20875/adding-siemens-mindsphere-tracking-to-the-dmc-drinkbot/">Adding Siemens MindSphere Tracking to the DMC DrinkBot</a></p>



<h2 id="h-data-2-unified" class="wp-block-heading"><strong>Data 2 Unified</strong></h2>



<p class="wp-block-paragraph">About half of the work for creating the Unified program was accomplished using the Data2Unified tool by Siemens. This tool does a great job taking an older Comfort program and converting it to Unified, maintaining the basic layout and functionality of most HMI Elements and Controls. For some deprecated elements, the tool will even generate custom VBA scripting to maintain original functionality.</p>



<p class="wp-block-paragraph">There are current limitations to this tool as the conversion will notably not create alarm lists, faceplates, and navigation elements. Additionally, due to WinCC Unified’s aspect flexibility, it is typically worth touching up the screens’ layout and aesthetics. The custom scripting that is auto-generated may also need to be redone as more efficient element functions can be created manually without scripts. Typically, the automatically generated scripts will function as intended, but the script will be written in unconventional and overcomplicated language. Double-checking these scripts and replacing them with standard functions where applicable is good practice.</p>



<p class="wp-block-paragraph">After running the conversion, most of the Drinkbot settings screens were recreated to match the previous comfort program to maximize the ease of configuring the system during events. The cleaning sequence screens that use basic elements were converted seamlessly into Unified. Settings screens, like the alarms and diagnostics, were easily replaced with drop-in standard Siemens resources.</p>



<p class="wp-block-paragraph">The bulk of the work left out by the tool was completed when modernizing the faceplates for drink selection and the recipe management system talked about in the following section. &nbsp;</p>



<h2 id="h-recipe-conversion" class="wp-block-heading"><strong>Recipe Conversion</strong></h2>



<p class="wp-block-paragraph">In the Comfort program, there was a built-in recipe management feature that the developer could create their own data type and store recipes locally on the HMI panel to be written onto the PLC when selected. In the Drinkbot Comfort HMI the recipe list included 44 drinks detailing their ingredients and quantities.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="435" src="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-4.png" alt="Drinkbot Comfort HMI Recipe Data Records" class="wp-image-35672" srcset="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-4.png 975w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-4-300x134.png 300w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-4-768x343.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<p class="wp-block-paragraph">This recipe feature was a convenient way to store information and access data to be written into the instructions of the PLC. In WinCC Unified, this feature was removed, so this storage was recreated using a user-defined type and a data block on the PLC.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="974" height="580" src="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-5-1.png" alt="Drinkbot WinCC Unified Recipe UDT DataBlock" class="wp-image-35673" srcset="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-5-1.png 974w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-5-1-300x179.png 300w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-5-1-768x457.png 768w" sizes="(max-width: 974px) 100vw, 974px" /></figure>



<p class="wp-block-paragraph">The dbHMI data block stores all of the original recipe data using integers to signify ingredient quantities and a single string for the name of the recipe. Memory on the PLC is conserved by these simple UDTs, provided that the bottle setup in the Drinkbot is always the same. For simplicity, to set up the Drinkbot, the user consults a printout that lists all of the ingredient bottle positions. The string and 18 integers are then fed to the HMI through a multiplexed array 11 recipes at a time.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="967" height="415" src="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-6.png" alt="DrinkBot WinCC Unified HMI multiplex tag" class="wp-image-35676" srcset="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-6.png 967w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-6-300x129.png 300w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-6-768x330.png 768w" sizes="(max-width: 967px) 100vw, 967px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="663" height="393" src="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-7.png" alt="Drinkbot WinCC HMI Closeup main screen" class="wp-image-35695" srcset="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-7.png 663w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-7-300x178.png 300w" sizes="(max-width: 663px) 100vw, 663px" /></figure>



<p class="wp-block-paragraph">The 11 recipes are selected to be read based on the page of the HMI drink list the user is currently reading. The last display recipe on the page is number 12 that is left intentionally blank. A custom drink faceplate is opened when the custom button is pressed that displays all possible ingredients in the Drinkbot. The user can select how many of each ingredient to make their drink based on if alcohol is toggled on or the Drinkbot is displaying Italian Sodas. Once completed the ‘Make Drink’ button populates the display recipe 12 and once the Drinkbot completes the cycle the recipe is cleared.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="656" height="386" src="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-8.png" alt="DrinkBot Unified HMI Custom drink screen" class="wp-image-35696" srcset="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-8.png 656w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-8-300x177.png 300w" sizes="(max-width: 656px) 100vw, 656px" /></figure>



<p class="wp-block-paragraph">To access standard drinks that access one of the stored recipes, 11 faceplate buttons are displayed on each page. These simple faceplates display the drink name based on page number and intake the recipe parameters once selected. They serve as an in between display button to open a nested faceplate that will display the selected drink in detail. The nested standard drink faceplate used in reading and writing recipe data is talked about in the next section.</p>



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



<p class="wp-block-paragraph">In the Comfort HMI, having a local way to manage the recipes within the HMI made development simpler as a single popup recipe screen could read the ingredients for each drink and display all possible options at once in a matrix.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="505" height="372" src="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-9.png" alt="Drinkbot Comfort HMI Recipe Popup Screen" class="wp-image-35697" srcset="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-9.png 505w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-9-300x221.png 300w" sizes="(max-width: 505px) 100vw, 505px" /></figure>



<p class="wp-block-paragraph">The Drinkbot is intended to be used at live events in a fast paced setting so for the WinCC update, the drink recipe popup should prioritize readability and information efficiency. The new Unified program uses a standard drink faceplate that only displays ingredients used in a particular drink recipe.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="509" height="306" src="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-10-1.png" alt="DrinkBot WinCC HMI Recipe Nested Faceplate" class="wp-image-35702" srcset="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-10-1.png 509w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-10-1-300x180.png 300w" sizes="(max-width: 509px) 100vw, 509px" /></figure>



<p class="wp-block-paragraph">The maximum ingredient amount in the original 44 drinks was 3 alcohols and 3 mixers. Custom scripting is used to take the recipe fed into the faceplate and populate the drink name plus the ingredients with their amounts. The script takes in the name and amount of each drink in ounces and automatically fills out each box for how many ingredients exist in each recipe. The user then has controls to make the drink and stop the process midway if needed.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="678" height="470" src="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-11-1.png" alt="Drinkbot Siemens MTP700 SIMATIC HMI Recipe Faceplate" class="wp-image-35703" srcset="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-11-1.png 678w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-11-1-300x208.png 300w" sizes="(max-width: 678px) 100vw, 678px" /></figure>



<p class="wp-block-paragraph">For taking Drinkbot to events where alcohol is not an option, the machine can also be configured to dispense “Italian sodas” using soda water and flavored syrup. Selecting this mode locks the display page to an Italian soda mode and makes the button faceplates open a nested Italian soda faceplate. All Italian soda recipes only include up to two syrups and eight ounces of soda so the faceplate is simplified and resized.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="468" height="279" src="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-12.png" alt="Drinkbot WinCC HMI Italian Soda Main" class="wp-image-35704" srcset="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-12.png 468w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-12-300x179.png 300w" sizes="(max-width: 468px) 100vw, 468px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="457" height="276" src="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-13.png" alt="Drinkbot WinCC HMI Italian Soda Recipe" class="wp-image-35705" srcset="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-13.png 457w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-13-300x181.png 300w" sizes="(max-width: 457px) 100vw, 457px" /></figure>



<p class="wp-block-paragraph">For information on how to create a faceplate in WinCC unified, refer to the guide here: <a href="https://static.dmcinfo.com/blog/18140/creating-faceplates-in-wincc-unified/">Creating Faceplates in WinCC Unified</a></p>



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



<p class="wp-block-paragraph">The updated HMI program improves the usability and functionality of the COMFORT version. The custom scripted nested faceplates using the new recipe storage system in Unified make it easier to order a drink. To celebrate the completion of the WinCC Unified upgrade the DMC Chicago office had a happy hour party to have the Drinkbot make cocktails and entertain.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="518" height="466" src="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-14.png" alt="Drinkbot Party at DMC Chicago Office" class="wp-image-35706" srcset="https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-14.png 518w, https://static.dmcinfo.com/wp-content/uploads/2024/06/drink-robot-14-300x270.png 300w" sizes="(max-width: 518px) 100vw, 518px" /></figure>



<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>DrinkBot Gets a Fresh Pour with WinCC Unified</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 our <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" data-type="page" data-id="420">Automation</a> capabilities in utilizing <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/siemens-simatic-wincc-programming/" data-type="page" data-id="500">Siemens HMIs</a> with modern faceplates, custom scripting, and recipe management.</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/16188/dmcs-drinkbot-gets-an-hmi-upgrade-to-wincc-unified/">DMC&#8217;s Drinkbot Gets an HMI Upgrade to WinCC Unified</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Simulating Siemens WinCC Unified HMI with Real PLC Data</title>
		<link>https://static.dmcinfo.com/blog/16194/simulating-siemens-wincc-unified-hmi-with-real-plc-data/</link>
		
		<dc:creator><![CDATA[Evan Ripperger]]></dc:creator>
		<pubDate>Wed, 26 Jun 2024 17:39:53 +0000</pubDate>
				<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[S7ONLINE]]></category>
		<category><![CDATA[Siemens]]></category>
		<category><![CDATA[Simatic]]></category>
		<category><![CDATA[Simulation]]></category>
		<category><![CDATA[Unified]]></category>
		<category><![CDATA[WinCC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/16194/simulating-siemens-wincc-unified-hmi-with-real-plc-data/</guid>

					<description><![CDATA[<p>In this blog we will explore&#160;simulating a Siemens WinCC Unified Version 19 HMI program using data from a connected physical PLC. In TIA version 19, the Siemens Communication Settings&#160;tool or Set PG/PC Interface&#160;is the easiest way to configure the online access path for the PC simulation to communicate with your hardware. The Simatic Step 7 [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/16194/simulating-siemens-wincc-unified-hmi-with-real-plc-data/">Simulating Siemens WinCC Unified HMI with Real PLC Data</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In this blog we will explore&nbsp;simulating a Siemens WinCC Unified Version 19 HMI program using data from a connected physical PLC. In TIA version 19, the Siemens Communication Settings&nbsp;tool or Set PG/PC Interface&nbsp;is the easiest way to configure the online access path for the PC simulation to communicate with your hardware.</p>



<p class="wp-block-paragraph">The Simatic Step 7 manager uses the S7ONLINE access point for communication on the PC/PG interface. By default, the access path on S7ONLINE is set to none as simulating a WinCC HMI program will run disconnected of the PLC program through Simatic manager. The HMI in this state will not display tags read from the PLC but will use HMI local tags and should be fully navigable.</p>



<h2 id="h-connection-parameters" class="wp-block-heading">Connection Parameters</h2>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Screenshot-2024-06-26-131614.png" alt="Siemens Communication Settings Windows Control Panel"/></figure>



<p class="wp-block-paragraph">The easiest tool to use for&nbsp;establishing a simulator connection is the Siemens Communication Settings&nbsp;tool located in the control panel. Opening the tool will provide you with all possible connection modules on the computer as well as their respective parameters and diagnostics tools. From the address menu you can configure your IP address in the network connections menu of your PC.</p>



<p class="wp-block-paragraph">To establish simulator-hardware connection, open the Access points&nbsp;menu. Select S7ONLINE and open the dropdown arrow. From here you can select the interface parameter which should match the same pathway that the PC uses to communicate with the hardware. The module property should auto populate and match the network connection name you configured.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Screenshot-2024-06-26-132435.png" alt="Siemens Communication Settings Tool"/></figure>



<p class="wp-block-paragraph">In older versions of TIA Portal there is an interface configuration tool found in the Windows control panel named Set PG/PC Interface. From here, you can set the same pathway that will enable communication between the simulator and PLC.</p>



<p class="wp-block-paragraph">After opening the tool, navigate to the Access path tab and select S7ONLINE as the access point. In the box below you will see all available interfaces for the path to take. Select the module in the list that matches the communication method you are using to talk to your hardware.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Screenshot-2024-06-26-161956.png" alt="Set PG/PC Interface tool"/></figure>



<p class="wp-block-paragraph">After selecting the correct module, you can close the tool and launch your WinCC simulation from Simatic Manager or TIA Portal. Provided that you are in contact, the S7ONLINE point should update your simulation with real data coming from the PLC.</p>



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



<p class="wp-block-paragraph">If the Set PC/PG tool opens but does not display the S7ONLINE access point, it may be resolved by downloading a Siemens PC_Identifier&nbsp;hotfix support package linked below.</p>



<p class="wp-block-paragraph"><a href="https://support.industry.siemens.com/cs/document/109812676/simatic-s7-plcsim-advanced-v4-0-service-pack-1-hotfix-1?dti=0&amp;lc=en-WW" target="_blank">SIMATIC S7-PLCSIM Advanced V4.0</a></p>



<p class="wp-block-paragraph">Troubleshooting the PLC connection can follow the same path as a typical process to go online with hardware. Ensure that you have a stable ethernet connection to the PLC you are attempting to communicate with. On the S7ONLINE path that you configured, note the module name that auto populated when the interface parameter was assigned. In your Windows taskbar search &#8220;view network connections.&#8221;&nbsp;Then, in this menu locate the ethernet driver that has the same module name as on the S7ONLINE path you are trying to use. In the popup window, go to properties then IPv4 and assign your own IP address on the same subnet and mask as the desired PLC. Once complete you should be able to ping the IP of your PLC from the command prompt.</p>



<p class="wp-block-paragraph">If the simulated instance of your HMI still does not communicate with the PLC, stop the simulation and verify that the PC/PG interface selected when trying to go online with the PLC is the same as configured in either of the tools. Redownloading the program and verifying run mode is active may also assist with troubleshooting measures.</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>Test WinCC Unified HMIs with Live PLC Data</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 our Siemens <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/" data-type="page" data-id="441">PLC</a> and <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/" data-type="page" data-id="497">HMI</a> capabilities in WinCC Unified simulation, and our expertise in <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" data-type="page" data-id="420">Automation</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/16194/simulating-siemens-wincc-unified-hmi-with-real-plc-data/">Simulating Siemens WinCC Unified HMI with Real PLC Data</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Programming a PLC to be a Game Console</title>
		<link>https://static.dmcinfo.com/blog/16605/programming-a-plc-to-be-a-game-console/</link>
		
		<dc:creator><![CDATA[Finnbar Norman]]></dc:creator>
		<pubDate>Thu, 08 Feb 2024 12:48:45 +0000</pubDate>
				<category><![CDATA[Allen Bradley PLC]]></category>
		<category><![CDATA[Denver]]></category>
		<category><![CDATA[HMI and SCADA]]></category>
		<category><![CDATA[Ignition]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[ignition]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/16605/programming-a-plc-to-be-a-game-console/</guid>

					<description><![CDATA[<p>PLC Code This past week, I took on the challenge of turning one of our IO demo kits connected to a Siemens PLC into a working game system. I chose to program the classic games Bop It and Simon Says as they would be easy to understand while still presenting their own challenges in both [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/16605/programming-a-plc-to-be-a-game-console/">Programming a PLC to be a Game Console</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 id="h-plc-code" class="wp-block-heading"><strong>PLC Code</strong></h2>



<p class="wp-block-paragraph">This past week, I took on the challenge of turning one of our IO demo kits connected to a <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming" target="_blank">Siemens PLC</a> into a working game system. I chose to program the classic games Bop It and Simon Says as they would be easy to understand while still presenting their own challenges in both programming and playing.</p>



<p class="wp-block-paragraph">I first created a simple infrastructure that would allow users to select which game they would like to play using one of the two colored push buttons on the IO kit. I associated each game with a different LED flash sequence to indicate which game had been selected.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/LabHardware.jpg" alt="Physical IO trainer used for BopIt game"/></figure>



<p class="wp-block-paragraph">The first game I decided to tackle was Bop It. In place of the original game’s “Twist it,” “Pull it,” etc., I used the IO kit’s toggle switches and push buttons. &nbsp;I wrote a simple logic sequence that would randomly illuminate one of the four colored LEDs and wait for the user to press/toggle the corresponding button/switch. Like the original game, if the user waited too long or selected the wrong button or switch, they would lose the game and the program would play a failure LED sequence and return to the game selection sequence. After enough correct button pushing and switch flipping, the program would display a winning LED sequence and return to game selection.</p>



<p class="wp-block-paragraph">Simon Says used similar code but with a few differences. These changes were needed due to the game’s sequence, stored using an array, which would be flashed by the LEDs then input by the user. The LED flash was accomplished using a counter up to the current length of the sequence, reading the index of the array at the current count and flashing the corresponding LED. The user input used similar logic, comparing the user’s selection to the array after each button push or switch flip. After successfully repeating a sequence of 10 LED flashes the program displays the winning sequence and returns to the game selection.</p>



<h2 id="h-user-interface" class="wp-block-heading"><strong>User Interface</strong></h2>



<p class="wp-block-paragraph">I created a project in Ignition to graphically display the state of the game and monitor some key statistics. This endeavor added some useful functionality to the PLC code through the powerful tools provided by <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/ignition-programming" target="_blank">Ignition Perspective</a>.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/IgnitionBopIt.png" alt="Main Ignition screen for Bop It game"/></figure>



<p class="wp-block-paragraph">The perspective session has three main views: an overview screen and two screens for the games. It is set up so that additional games can be added easily. The overview screen offers navigation to both games, as well as a leaderboard and a popup that explains the games. Each game screen displays a brief description of the game, the status of each digital output, and the player’s current progress. Additionally, a timer shows the player how much time is remaining to make a move, a feature that is not available on the physical kit. Each game screen displays the current high score for that game. This data is pulled from a PostgreSQL database of player initials, scores, and dates. This database is also used to populate the leaderboard.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Leaderboard.png" alt="Leaderboard used to show Bop It and Simon Says high scores"/></figure>



<p class="wp-block-paragraph">This project utilizes several of Ignition’s powerful features. Perspective can pull data from the PLC with OPC tags. These tags are then used with both built-in and custom graphics, in combination with Ignition scripting to display the status of the game. Ignition also connects to the database to create the leaderboard and high score features, through additional scripting and SQL queries. Additionally, popups are used in combination with scripts and event handlers to provide a seamless navigation experience for the user. This project uses one PLC, one database, and six windows, but these features can easily be applied to much larger automation applications.</p>



<p class="wp-block-paragraph">Currently, the Perspective session only reads data from the PLC. An interesting next step could be to use Ignition to write to the plc, maybe with inputs more realistic to Bop It (i.e. twisting and pulling). This project takes advantage of some of the functionality of Ignition, but there are numerous other features that could be utilized for additional functionality.</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>Turn a Siemens PLC into a Game Console</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">Explore our <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" data-type="page" data-id="420">Automation</a> expertise in <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming/" data-type="page" data-id="444">Siemens PLC</a> programming, Ignition Perspective, and database integration through unique applications.</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/16605/programming-a-plc-to-be-a-game-console/">Programming a PLC to be a Game Console</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Starting a Project in GX Works3: A Beginner&#8217;s Guide</title>
		<link>https://static.dmcinfo.com/blog/16810/starting-a-project-in-gx-works3-a-beginners-guide/</link>
		
		<dc:creator><![CDATA[Wenjing Deng]]></dc:creator>
		<pubDate>Mon, 08 Jan 2024 13:14:24 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[Mitsubishi PLC]]></category>
		<category><![CDATA[PLC Programming]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/16810/starting-a-project-in-gx-works3-a-beginners-guide/</guid>

					<description><![CDATA[<p>Embarking on a new project can be both exhilarating and overwhelming, especially when diving into the realm of programmable logic controllers (PLCs). If you&#8217;ve chosen GX Works3 as your development environment, you&#8217;re in for a treat. In this blog, we&#8217;ll guide you through the initial steps of starting a project in GX Works3, from installation [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/16810/starting-a-project-in-gx-works3-a-beginners-guide/">Starting a Project in GX Works3: A Beginner&#8217;s Guide</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Embarking on a new project can be both exhilarating and overwhelming, especially when diving into the realm of programmable logic controllers (PLCs).</p>



<p class="wp-block-paragraph">If you&#8217;ve chosen GX Works3 as your development environment, you&#8217;re in for a treat. In this blog, we&#8217;ll guide you through the initial steps of starting a project in GX Works3, from installation to writing your first program, setting you on the path to automation success!</p>



<p class="wp-block-paragraph"><u><a id="Table of Contents" name="Table of Contents"></a>Table of Contents:</u></p>



<ol class="wp-block-list">
<li><a href="#1. Installation">Installation</a></li>



<li><a href="#2. Importing CSP/CSPP Files for Devices">Importing CSP/CSPP Files for Devices</a></li>



<li><a href="#3. Creating a New Project">Creating a New Project</a></li>



<li><a href="#4. Navigating the Interface">Navigating the Interface</a></li>



<li><a href="#5. Hardware Configuration">Hardware Configuration</a></li>



<li><a href="#6. Writing Your First Program">Writing Your First Program</a></li>



<li><a href="#7. Simulation and Debugging">Simulation and Debugging</a></li>



<li><a href="#8. Final Thoughts">Final Thoughts</a></li>
</ol>



<h2 id="h-1-installation" class="wp-block-heading"><u><a id="1. Installation" name="1. Installation"></a>1. Installation</u></h2>



<p class="wp-block-paragraph"><em><a href="#Table of Contents">Back to Table of Contents</a></em></p>



<h5 id="h-system-requirements" class="wp-block-heading">System Requirements</h5>



<p class="wp-block-paragraph">Before installing GX Works3, make sure that your system meets the following requirements:</p>



<ul class="wp-block-list">
<li>Windows 7 or later</li>



<li>At least 2 GB RAM</li>



<li>5 GB of free disk space</li>
</ul>



<p class="wp-block-paragraph"><strong>Before you can dive into creating a project, ensure that GX Works3 is installed on your system. Follow the installation wizard&#8217;s prompts&nbsp;and, once complete, launch the software.</strong></p>



<h2 id="h-2-importing-csp-cspp-files-for-devices" class="wp-block-heading"><u><a id="2. Importing CSP/CSPP Files for Devices" name="2. Importing CSP/CSPP Files for Devices"></a>2. Importing CSP/CSPP Files for Devices</u></h2>



<p class="wp-block-paragraph"><em><a href="#Table of Contents">Back to Table of Contents</a></em></p>



<p class="wp-block-paragraph">CSP/CSPP files are the Mitsubishi equivalent of ‘EDS’ files (like in Rockwell). These files are usually provided on the device manufacturers website.</p>



<p class="wp-block-paragraph">Open GX Works3. <strong>Do not open a project. If you have a project open, you must close it.</strong></p>



<p class="wp-block-paragraph">In the top menu bar, click “Tool,”&nbsp;then “Profile Management,” and then “Register.”&nbsp;Select the files you want to import and then “Register.”</p>



<figure class="wp-block-image"><img decoding="async" alt="MELSOFT GX Works3 Profile Mangement" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-1-profile-management.png" width="900px" /></figure>



<h2 id="h-3-creating-a-new-project" class="wp-block-heading"><u><a id="3. Creating a New Project" name="3. Creating a New Project"></a>3. Creating a New Project</u></h2>



<p class="wp-block-paragraph"><em><a href="#Table of Contents">Back to Table of Contents</a></em></p>



<h5 id="h-steps-to-create-a-new-project" class="wp-block-heading">Steps to Create a New Project</h5>



<p class="wp-block-paragraph">Click on “File” and then “New Project,”&nbsp;or on the icon circled below:</p>



<figure class="wp-block-image"><img decoding="async" alt="MELSOFT GX Works3 Navigation" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-2-navigation.png" width="900px" /></figure>



<p class="wp-block-paragraph">Choose the type and series of PLC you&#8217;re using. In our project we used an R08SF. <strong>Most of the programming will be done in ladder, so leave the Program Language as “Ladder.”</strong></p>



<figure class="wp-block-image"><img decoding="async" alt="New Series R08SF" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-3-new-series-type.png" width="900px" /></figure>



<p class="wp-block-paragraph">Name your project and select a storage location.</p>



<p class="wp-block-paragraph">Click “Finish.”</p>



<p class="wp-block-paragraph">Next, you will be prompted to set up a new user.</p>



<p class="wp-block-paragraph">You will need to re-enter your chosen username and password every time you open the program and when you go online with the PLC to read or write for the first time in an online session, so choose your username and password wisely.</p>



<p class="wp-block-paragraph">Note: You can go back to change this later if needed.</p>



<p class="wp-block-paragraph">After this, you will be prompted to name your project. Then, your new project will open.</p>



<figure class="wp-block-image"><img decoding="async" alt="Add New User" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-4-add-new-user.png" width="900px" /></figure>



<h2 id="h-4-navigating-the-interface" class="wp-block-heading"><u><a id="4. Navigating the Interface" name="4. Navigating the Interface"></a>4. Navigating the Interface</u></h2>



<p class="wp-block-paragraph"><em><a href="#Table of Contents">Back to Table of Contents</a></em></p>



<p class="wp-block-paragraph">Here are some important areas of the GX Works3 interface:</p>



<h5 id="h-navigation" class="wp-block-heading">Navigation</h5>



<p class="wp-block-paragraph">This is where you&#8217;ll find all the elements related to your project&nbsp;such as programs, function blocks, devices, labels (AKA Tags), and parameters (for hardware configuration).</p>



<p class="wp-block-paragraph"><p style="text-align: center;" width="500px"></p></p>



<h5 id="h-workspace" class="wp-block-heading">Workspace</h5>



<p class="wp-block-paragraph">This is where you&#8217;ll write and edit your code</p>



<figure class="wp-block-image"><img decoding="async" alt="2 Step Write 1 Workspace" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-6-2-step-write-1.png" width="900px" /></figure>



<h5 id="h-output-window" class="wp-block-heading">Output Window</h5>



<p class="wp-block-paragraph">This window shows the output of compile-time or run-time actions. There are some other tabs here that are helpful for online debugging, but we will look at those later on.</p>



<figure class="wp-block-image"><img decoding="async" alt="Output" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-7-output.png" width="900px" /></figure>



<h2 id="h-5-hardware-configuration" class="wp-block-heading"><u><a id="5. Hardware Configuration" name="5. Hardware Configuration"></a>5. Hardware Configuration</u></h2>



<p class="wp-block-paragraph"><em><a href="#Table of Contents">Back to Table of Contents</a></em></p>



<h5 id="h-adding-devices-and-modules" class="wp-block-heading">Adding Devices and Modules</h5>



<p class="wp-block-paragraph">To add devices and modules:</p>



<p class="wp-block-paragraph">Right-click on the “Module Information” under Parameter in the Navigation.</p>



<p class="wp-block-paragraph">Next, select “Add Module,” and choose the specific device or module you&#8217;re working with.</p>



<p class="wp-block-paragraph">It is ok to leave&nbsp;“Start I/O No. Specification” as “Not Set” if you want GX Works3 to handle assigning these values automatically based on slot number.</p>



<p class="wp-block-paragraph">If there are specific values you want a module to start at, you can choose &#8216;set&#8217; and pick your Start I/O.</p>



<p class="wp-block-paragraph"><p style="text-align: center;">&nbsp;</p></p>



<p class="wp-block-paragraph">For this example project, we will choose a digital input card RX42C4 in slot 1 and a digital output card RY42PT1P in slot 2 to start.</p>



<p class="wp-block-paragraph">In addition, the R08SFCPU requires an&nbsp;R6SFM, a&nbsp;safety function module, which we will put in slot 0 here.</p>



<h3 id="h-plc-configuration-and-setup" class="wp-block-heading">PLC Configuration and Setup</h3>



<h5 id="h-ip-address" class="wp-block-heading">IP Address</h5>



<p class="wp-block-paragraph">Double click on “Module Parameter” under R08SFCPU or your chosen PLC series. This will open the screen below:</p>



<figure class="wp-block-image"><img decoding="async" alt="Setting Item Explanation" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-10-setting-item-explanation.png" width="900px" /></figure>



<p class="wp-block-paragraph">Here you can set the IP Address information for your PLC. Press “Apply” on the bottom right side of the screen to save.</p>



<h4 id="h-cpu-module-operation-setting-at-error-detection" class="wp-block-heading">CPU Module Operation Setting at Error Detection</h4>



<p class="wp-block-paragraph">While debugging programs later, if any of your programs encounter an operation error (ex. array index out of bounds, invalid function input data when using direct addresses), the PLC will default to a “stop” error state: which requires a full reset of the PLC to clear (sometimes includes a power cycle if there is a safety module involved).</p>



<p class="wp-block-paragraph">This can be very annoying when debugging and testing code; however, there is a setting that you can change that allows the PLC to continue running with the operation error allowing you to track down the error, make an adjustment, and continue testing.</p>



<p class="wp-block-paragraph">Double click on CPU Parameter under R08SFCPU or your chosen PLC series. This will pull up the parameter window.</p>



<p class="wp-block-paragraph">In the “Setting Item List,”&nbsp;click on “RAS Setting,” and then navigate to the “Operation Error” line item in the window on the right.<br>
&nbsp;<br>
The default setting is “Stop.”&nbsp;Click on the drop down and change it to “Continue” to prevent the PLC from stopping. Click “Apply” on the bottom right corner before exiting this tab.</p>



<figure class="wp-block-image"><img decoding="async" alt="Setting Item List" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-11-setting-item-list.png" width="900px" /></figure>



<p class="wp-block-paragraph">There are a couple of other types of execution errors here that can also be set to “Continue”&nbsp;if desired. After testing and debugging, remember to switch these settings back to “stop.”</p>



<h5 id="h-timer-setup" class="wp-block-heading">Timer Setup</h5>



<p class="wp-block-paragraph">Double click on CPU Parameter under R08SFCPU or your chosen PLC series. This will pull up the parameter window.</p>



<p class="wp-block-paragraph">In the “Setting Item List,”&nbsp;click on the “Operation Related Setting.”</p>



<p class="wp-block-paragraph">This will pull up the “Timer Limit Setting,” which controls the units that each of the three timer instructions:&nbsp;OUTL, OUTH, and OUTHS.&nbsp;</p>



<p class="wp-block-paragraph">Note: We typically set one of these to 1ms, so it is easier to keep track of how long timers are.</p>



<figure class="wp-block-image"><img decoding="async" alt="CPU Parameter" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-12-cpu-parameter.png" width="900px" /></figure>



<figure class="wp-block-image"><img decoding="async" alt="Point OUT OUTH OUTHS" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-13-out-outh-ouths.png" width="900px" /></figure>



<h4 id="h-labels-data-types-and-memory-address-mapping" class="wp-block-heading">Labels, Data Types, and Memory Address Mapping</h4>



<p class="wp-block-paragraph">Labels are what you use for your program variables. They can be defined locally in a program or function and only accessible in that particular program or function, or they can be defined globally and accessed anywhere.&nbsp;</p>



<p class="wp-block-paragraph">They are equivalent to “tags” in a Rockwell PLC.</p>



<p class="wp-block-paragraph"><strong>You can create multiple global label lists with different names, but there is no way to differentiate which global label list a global label is defined in. Each program/function can only have one local label list.</strong></p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Here is a helpful table showing the available data types for labels:</p>



<figure class="wp-block-image"><img decoding="async" alt="Data Type Description Value Range" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-15-data-type-description-value-range.png" width="900px" /></figure>



<p class="wp-block-paragraph">In Gx Works3, you can choose to assign memory addresses to your labels explicitly or let Gx Works automatically assign them when converting your program.</p>



<p class="wp-block-paragraph"><br>
Below are the commonly used memory addresses available in Gx Works3:</p>



<ul class="wp-block-list">
<li>X: Input
 
 
<ul class="wp-block-list">
<li>Inputs coming to the PLC through any devices or modules will be mapped to the X device addresses.</li>
</ul>
</li>



<li>Y: Outputs
 
 
<ul class="wp-block-list">
<li>Outputs being sent&nbsp;from the PLC to any devices will be mapped through the Y device addresses.</li>
</ul>
</li>



<li>M: Internal Relay
 
 
<ul class="wp-block-list">
<li>These are bits internal to the PLC. These are similar to memory bits in a Siemens PLC.</li>
</ul>
</li>



<li>D: Internal Word
 
 
<ul class="wp-block-list">
<li>These are words internal to the PLC.</li>
</ul>
</li>
</ul>



<figure class="wp-block-image"><img decoding="async" alt="Setting Item Device" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Mitsubishi-16-setting-item-device.png" width="900px" /></figure>



<p class="wp-block-paragraph">Although you can reference device addresses directly in your program as normally open/closed contacts, outputs, etc., <strong>it is best practice to define helpfully named labels and use those in your program instead.</strong></p>



<p class="wp-block-paragraph">This makes it significantly easier to read and follow along whether you are revisiting your program at a later date or if another programmer is helping review your program.</p>



<figure class="wp-block-image"><img decoding="async" alt="Filter Output 1 Input 1" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Mitsubishi-17-filter-output-1-input-1.png" width="900px" /></figure>



<p class="wp-block-paragraph"><strong>One more thing to keep in mind is that, if you do wish to assign device addresses to any of your labels, you will need to keep track of how many registers each data type will take up.</strong></p>



<p class="wp-block-paragraph">For example, if you assign a float/real label a device address of D1000, since a float is 32 bits long, it will take up registers D1000 and D1001. Gx Works3 will not tell you explicitly that this is happening, so it is up to you to keep track and avoid&nbsp;unintentionally double assigning device addresses.</p>



<h2 id="h-6-writing-your-first-program" class="wp-block-heading"><u><a id="6. Writing Your First Program" name="6. Writing Your First Program"></a>6. Writing Your First Program</u></h2>



<p class="wp-block-paragraph"><em><a href="#Table of Contents">Back to Table of Contents</a></em></p>



<p class="wp-block-paragraph">Now that you&#8217;re familiar with the interface, it’s time to write some code.</p>



<p class="wp-block-paragraph">First, we can start by adding a normal scan program.</p>



<p class="wp-block-paragraph">Note: We also have the option of adding other types of programs, if desired, such as&nbsp;‘Initial,’&nbsp;‘Fixed Scan,’&nbsp;‘Event,’&nbsp;etc. Right clicking on any of the other options under the ‘Program’ tree will allow you to add new data to those types of programs.</p>



<p class="wp-block-paragraph">In this blog we’ll cover the basics of ladder since that is the most frequently used.</p>



<p class="wp-block-paragraph">Right-click on the “MAIN” under the “SCAN” dropdown in the Navigation and select “Add New Data.”</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">A “New Data” window will pop up. Here you can name your program and choose the language (ladder, ST, SFC, FBD/LD).</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">This will open the Local Label list and Program Body for the new program. You can define any program specific labels in the Local Label List before starting to write the program.</p>



<p class="wp-block-paragraph">Alternatively, you can define your labels as your program as well. If you enter in label name that isn’t defined, it will open the dialogue window below, and you can choose to define it.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">If you have an undefined tag, it will be gray instead of pink.</p>



<figure class="wp-block-image"><img decoding="async" alt="Prog 1 PRG 1 LD" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-21-prog-1-prg-ld.png" width="900px" /></figure>



<p class="wp-block-paragraph">Next, to start writing your program, navigate to the “ProgramBody.”&nbsp;Make sure to set the drop down on the top left to “Write:”</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">The “Read” option will not allow editing, and you cannot copy lines of code in “Read” mode either. “Write Mntr” and “Read Mntr” are for monitoring the program while online with the PLC.</p>



<p class="wp-block-paragraph">There are some display options that can be set to make the ladder editor easier to read. Click on “Tool” &gt; “Options.”</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Next, click on “Ladder Editor:”</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Here are some settings that I think are helpful to have on; these will display any comments you add to labels or any comments you add to your ladder rungs.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">One other setting that is useful to have on is the “Wrapping Ladder Display.”&nbsp;This will wrap a long label name and show the whole name.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">To start writing logic, you can double click on a cell or select a cell and just start typing a label name or instruction. The drop down here shows the type of basic instruction&nbsp;you can assign to a cell.</p>



<p class="wp-block-paragraph">Note: If you don’t choose anything, it will default to a normally open contact.</p>



<figure class="wp-block-image"><img decoding="async" alt="Prog 1 Input 1" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-27-prog-1-input-1.png" width="900px" /></figure>



<p class="wp-block-paragraph">The easiest way to program is to type out the instruction and labels for each cell and then press enter.</p>



<p class="wp-block-paragraph">Typically, the syntax is: Instruction Input1 Input2 …. Here is an example for a move instruction&nbsp;where an integer value 1 is moved into iCount. Here I typed: MOV K1 iCount.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Each instruction might have different inputs.&nbsp;If you need details, you can right click and select&nbsp;“Open Instruction Help.”</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Here are some basic, commonly used shortcuts and instructions:</p>



<p class="wp-block-paragraph">F5: NO<br>
F6: NC<br>
F7: OUT</p>



<p class="wp-block-paragraph">Set: latch a Boolean</p>



<p class="wp-block-paragraph">RST: unlatch a Boolean</p>



<p class="wp-block-paragraph">Unlike Siemens and Rockwell, Gx Works3 requires different versions of instructions when using different data types. Here are some examples:</p>



<p class="wp-block-paragraph">=, &gt;=, &lt;=, &lt;&gt;, Instructions for comparing 16-bit data.</p>



<p class="wp-block-paragraph">+, -, *, /, Instructions for basic math with 16-bit data.</p>



<p class="wp-block-paragraph">MOV, to transfer 16-bit data.</p>



<p class="wp-block-paragraph">D=, D&gt;=, D&lt;=, D&lt;&gt;, Instructions for comparing 32-bit data.</p>



<p class="wp-block-paragraph">D+, D-, D*, D/, Instructions for basic math with 32-bit data.</p>



<p class="wp-block-paragraph">DMOV, to transfer 32-bit data.</p>



<p class="wp-block-paragraph">E=, E&gt;=, E&lt;=, E&lt;&gt;, Instructions for comparing single precision real numbers</p>



<p class="wp-block-paragraph">E+, E-, E*, E/, Instructions for basic math with single precision real numbers</p>



<p class="wp-block-paragraph">EMOV, to transfer single precision real numbers.</p>



<p class="wp-block-paragraph">ED=, ED&gt;=, ED&lt;=, ED&lt;&gt;, Instructions for comparing double precision real numbers</p>



<p class="wp-block-paragraph">ED+, ED-, ED*, ED/, Instructions for basic math with double precision real numbers</p>



<p class="wp-block-paragraph">EDMOV, to move double precision real numbers.</p>



<p class="wp-block-paragraph">$+, to concatenate strings.</p>



<p class="wp-block-paragraph">$MOV to transfer character strings.</p>



<p class="wp-block-paragraph">Next, we will go over basic timers.</p>



<p class="wp-block-paragraph">Earlier in this blog we set timer units in the CPU parameters. The instructions for each of the timers are OUT, OUTH, and OUTHS.</p>



<p class="wp-block-paragraph">These timers will run based on what was set earlier. OUT is the instruction for a normal output coil, but, when the first input is a label of type “Timer” and the second input is a 16-bit unsigned integer, this instruction behaves as a timer. Here is an example of how this would look like:</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">This timer is enabled when Input1 goes high and starts counting to 100*10ms (default setting).&nbsp;When the time is reached, the label Timer1 can be used directly as a contact and will go high turning on Output1.</p>



<figure class="wp-block-image"><img decoding="async" alt="Input 1 Timer 1 OUTH" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-31-input-1-timer-1-outh-.png" width="900px" /></figure>



<p class="wp-block-paragraph">Finally, we will cover how to comment in Gx Works3.</p>



<p class="wp-block-paragraph">The&nbsp;three icons below can be toggled on and off. When toggled on, double clicking on a rung or a cell will pull up a window where you can add a comment.<br>
&nbsp;<br>
The leftmost icon allows you to comment on your labels (you can also do this in the label lists), the middle icon is for commenting an entire rung, and the last one will add a comment to an output.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Adding comments to entire rungs is the most useful.</p>



<p class="wp-block-paragraph">If you check “Display in Navigation Window,”&nbsp;text you write here will become subtitles in the Navigation window:&nbsp;which can be helpful for organizing your code.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">You can add multiple comments above a rung, like this:</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<h2 id="h-7-simulation-and-debugging" class="wp-block-heading"><u><a id="7. Simulation and Debugging" name="7. Simulation and Debugging"></a>7. Simulation and Debugging</u></h2>



<p class="wp-block-paragraph"><em><a href="#Table of Contents">Back to Table of Contents</a></em></p>



<p class="wp-block-paragraph">This section will focus on how to simulate a PLC and go online to test your program.</p>



<p class="wp-block-paragraph">We have created a basic sample program. <strong>Anything that hasn’t been compiled yet will show up as gray in the ladder editor and red in the Navigation window.</strong></p>



<figure class="wp-block-image"><img decoding="async" alt="iCount timer 1" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-35-icount-timer-1.png" width="900px" /></figure>



<p class="wp-block-paragraph">To check and compile code, click on “Convert,”&nbsp;then press the “Convert(B).”</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Alternatively, you can click the convert button in the tool bar shown below.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">If there are no errors in the code, after converting, the rungs in the ladder editor will turn white, and the titles in the Navigation will also turn white. If there are any errors, they will be displayed in the Output Window.</p>



<figure class="wp-block-image"><img decoding="async" alt="Input Trigger iCount Timer 1" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-38-input-trigger-icourt-timer-1.png" width="900px" /></figure>



<p class="wp-block-paragraph">Next, click on the “Start Simulation” icon to start a PLC simulation. The button immediately to the right is “Stop Simulation” and will end the simulated PLC.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">The first time you start a simulation, the program will automatically write to the simulation PLC. It will open the window below. which is the simulated PLC.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Now, you can switch to “Read Mntr” or “Write Mntr” to test your programs live.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">If you make a change to your program, you will need to write these changes to the PLC. If you only changed your program, you could&nbsp;do an online change by pressing the icon below.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">If you make a change to any Structured Data Types or Parameters, you will have to rebuild/recompile your project and then do a full download. To do a download, press the red arrow icon shown below. It will open a window where you can select exactly what you want to write to the PLC.</p>



<figure class="wp-block-image"><img decoding="async" alt="Online Data Operation" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-43-online-data-operation.png" width="900px" /></figure>



<p class="wp-block-paragraph"><strong>If you have multiple people working on the same PLC, anytime someone writes a change to the PLC, all other people will need to read from the PLC to obtain that change. It doesn’t automatically update. To read from the PLC, press the blue arrow button shown below. It will open a window where you can choose what you want to read.</strong></p>



<figure class="wp-block-image"><img decoding="async" alt="Online Data Operation R08SF" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-44-online-data-operation-r08sf.png" width="900px" /></figure>



<h4 id="h-basic-debugging-and-troubleshooting" class="wp-block-heading">Basic debugging and troubleshooting</h4>



<p class="wp-block-paragraph">The last part of this blog will go over some debugging and troubleshooting tools in Gx Works3.</p>



<p class="wp-block-paragraph">After going online with the PLC and monitoring your selected program, the ladder editor will display the values in any referenced labels, and any contacts that are true will be colored blue.</p>



<p class="wp-block-paragraph">In our sample program here, Input1 is true and iCount = 1.</p>



<figure class="wp-block-image"><img decoding="async" alt="Setting 2" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-45-setting-2.png" width="900px" /></figure>



<p class="wp-block-paragraph">There are two main ways to modify labels.</p>



<p class="wp-block-paragraph">For a Boolean, you can right click on the label, go to “Debug,” then click on “Modify Value.”&nbsp;This will flip the value of the Boolean.</p>



<figure class="wp-block-image"><img decoding="async" alt="Debug" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-46-debug.png" width="900px" /></figure>



<p class="wp-block-paragraph">The other way to modify labels is to right click, go to “Register to Watch Window” and then add the label to a watch window of your choice. The selected watch window will open.</p>



<figure class="wp-block-image"><img decoding="async" alt="Register to Watch Window" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-47-watch-1.png" width="900px" /></figure>



<p class="wp-block-paragraph">If no values are being displayed on the watch window, you can right-click on a label in the watch window and click “Start Watching.”</p>



<p class="wp-block-paragraph">You can monitor and modify any label values in the watch window. After entering in the desired value, press “Enter” on your keyboard to confirm the value modification.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">To cross reference a tag, right click on the tag and click on “Cross Reference.”</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">The cross-reference window will open and show all instances of the label.</p>



<figure class="wp-block-image"><img decoding="async" alt="Cross Reference 1 Reset 1" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-50-cross-reference-1-reset-1.png" width="900px" /></figure>



<p class="wp-block-paragraph">One important thing to note is that&nbsp;no matter what value is present at a certain index in an array, the GX Works3 ladder editor will show that it is -1. To see its actual value, you can use a watch window.</p>



<p class="wp-block-paragraph">In the example below, IntArray[Index] should equal 2, but the value shown in the ladder editor is -1.</p>



<figure class="wp-block-image"><img decoding="async" alt="Watch 1 Watching" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-51-watch-1-watching.png" width="900px" /></figure>



<p class="wp-block-paragraph">The icons shown below near the top right corner show the statuses of the PLC.</p>



<p class="wp-block-paragraph"><strong>If there are any errors, there will be a yellow exclamation mark present. To check on any PLC or module errors, clicking on the check mark will bring up the&nbsp;diagnostic window below.</strong></p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">One last useful tool for debugging is the Device/Buffer Memory Batch Monitor which can be accessed by pressing the icon below:</p>



<figure class="wp-block-image"><img decoding="async" alt="PRG Monitoring 66" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-53-prg-monitoring-66.png" width="900px" /></figure>



<p class="wp-block-paragraph">Here you can type a device name (ex. D10, or X100) or buffer memory unit and monitor the bits at those places in memory.</p>



<figure class="wp-block-image"><img decoding="async" alt="Device Buffer Memory Batch Monitoring" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-54-device-buffer-memory-batch-monitoring.png" width="900px" /></figure>



<p class="wp-block-paragraph"><strong>After you are done with simulating your program, make sure to stop the simulation before connecting to a real PLC.</strong></p>



<p class="wp-block-paragraph">To get connected with a real PLC, start off by pinging the PLC IP address using command prompt. After that is successful, press the icon shown below:</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">This will open the following window:</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Double click on “Ethernet Board” to specify your adapter and hit OK.</p>



<p class="wp-block-paragraph"><p style="text-align: center;"></p></p>



<p class="wp-block-paragraph">Double click on “PLC Module.”</p>



<p class="wp-block-paragraph"><strong>The first time you connect to the PLC, you will have to connect through the ethernet port directly on the PLC to write an IP address to the PLC.&nbsp;</strong></p>



<p class="wp-block-paragraph">Choose “Ethernet Port Direct Connection.”</p>



<p class="wp-block-paragraph">If you have connected to the PLC before, set the IP address already, and are now connected through an ethernet switch, click on “Connection via HUB” and enter in the IP address of the PLC. Next, press “OK.”</p>



<figure class="wp-block-image"><img decoding="async" alt="PLC side I/F Detailed Setting of PLC Module" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-58-plc-side-if-detailed-setting-of-plc-module.png" width="741px" /></figure>



<p class="wp-block-paragraph">Next, click on “Connection Channel List.”</p>



<p class="wp-block-paragraph">There are many different routes to connect to the PLC, the most common is “19 Ethernet Board Communication PLC Module Connection.”</p>



<p class="wp-block-paragraph">If you have a different network topology, you may need to choose a different setting here. Selecting different options will change the graphic shown to help illustrate the topology. After choosing your setting, click “OK.”</p>



<figure class="wp-block-image"><img decoding="async" alt="Connection Channel List" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/mitsubishi-59-connection-channel-list.png" width="900px" /></figure>



<p class="wp-block-paragraph">Finally, we can test our connection to the PLC by clicking on “Connection Test.”&nbsp;A dialog box will show up to display whether&nbsp;the connection is successful or not.</p>



<p class="wp-block-paragraph">If this is the first time you are connecting to a fresh PLC, make sure to write your entire project to the PLC to set the IP address of the PLC for future connections.</p>



<h2 id="h-8-final-thoughts" class="wp-block-heading"><u><a id="8. Final Thoughts" name="8. Final Thoughts"></a>8. Final Thoughts</u></h2>



<p class="wp-block-paragraph"><em><a href="#Table of Contents">Back to Table of Contents</a></em></p>



<p class="wp-block-paragraph">GX Works3 provides an integrated environment for developing and managing automation projects. While navigating and programming in GX Works3 may present challenges, mastering its key functionalities and insights can significantly alleviate the frustration, paving the way for a smoother and more efficient experience in harnessing its power for industrial automation.</p>



<p class="wp-block-paragraph">Happy programming!</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>Start Programming Mitsubishi PLCs with GX Works3</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">Explore our <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/" data-type="page" data-id="420">Automation</a> expertise in <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/mitsubishi-plc-programming-and-automation-services/" data-type="page" data-id="463">Mitsubishi PLC programming</a> with GX Works3 project setup, hardware configuration, ladder logic, simulation, and PLC debugging.</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/16810/starting-a-project-in-gx-works3-a-beginners-guide/">Starting a Project in GX Works3: A Beginner&#8217;s Guide</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Using an SD Card for Retentive Memory &#8211; Siemens PLC</title>
		<link>https://static.dmcinfo.com/blog/17200/using-an-sd-card-for-retentive-memory-siemens-plc/</link>
		
		<dc:creator><![CDATA[Rex Foster]]></dc:creator>
		<pubDate>Thu, 14 Sep 2023 12:00:06 +0000</pubDate>
				<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[Retentive Memory]]></category>
		<category><![CDATA[SD Card]]></category>
		<category><![CDATA[Siemens]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/17200/using-an-sd-card-for-retentive-memory-siemens-plc/</guid>

					<description><![CDATA[<p>When working with Siemens PLCs, sometimes you will need the ability to save data that does not fit in the retentive memory when there is a power cycle. The solution is to use an SD card with a Siemens PLC to periodically write data from a data block to the SD card and then read that data during [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/17200/using-an-sd-card-for-retentive-memory-siemens-plc/">Using an SD Card for Retentive Memory &#8211; Siemens PLC</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">When working with Siemens PLCs, sometimes you will need the ability to save data that does not fit in the retentive memory when there is a power cycle. The solution is to use an SD card with a Siemens PLC to periodically write data from a data block to the SD card and then read that data during startup. Data writing intervals can be specified by an HMI setting and manual read/write options are also made available.</p>



<p class="wp-block-paragraph">To accomplish this task in the PLC code, a duplicate datablock can be created to store on the SD card, data can be split up into readable and writeable chunks, and triggers can be created for reading and writing to the SD card. The steps to implement this solution are below:</p>



<h2 class="wp-block-heading" id="h-step-1-nbsp-creating-the-datablock-that-will-be-stored-on-the-sd-card">Step 1:&nbsp;Creating the datablock that will be stored on the SD card</h2>



<p class="wp-block-paragraph">Duplicate the datablock that is&nbsp;to be&nbsp;periodically saved to the SD card. In the duplicated datablock’s properties, set the attribute for “Only store in load memory” to true. This will make sure the datablock is stored on the SD card. All other options can remain the same.</p>



<h2 class="wp-block-heading" id="h-step-2-nbsp-splitting-up-your-data">Step 2:&nbsp;Splitting up your data</h2>



<p class="wp-block-paragraph">The &#8220;WRIT_DBL&#8221; instruction will be used to write the data in a later step. When using this instruction, data with the datatype “Struct” cannot be written. Only UDTs and arrays can be written to another data block. To accommodate this, split the data into sections that can be written to the SD card, and write each section inside of a datablock writing sequence.</p>



<h2 class="wp-block-heading" id="h-step-3-nbsp-writing-the-data-to-the-sd-card">Step 3:&nbsp;Writing the Data to the SD Card</h2>



<p class="wp-block-paragraph">To write the data to the SD card, the source block of the &#8220;WRIT_DBL&#8221;&nbsp;should be set to the data block that is being backed up; the destination block should be set to the corresponding data block on the SD card. If the data was split into sections, make sure to specify the section being copied and written on both the source and destination parameters.</p>



<p class="wp-block-paragraph">The busy signal is an important component of the reading and writing process. The sequence should only move on to writing the next section when the busy signal is low. The busy signal can be high for several scans, and each write instruction should be given time to finish before moving on to the next one to avoid problems with the writing process.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/next-step-instructions.png" alt="Next step instructions - Siemens TIA Portal"/></figure>



<h2 class="wp-block-heading" id="h-step-4-nbsp-reading-the-data-from-the-sd-card">Step 4:&nbsp;Reading the Data from the SD Card</h2>



<p class="wp-block-paragraph">Reading data from the SD card works similarly to the writing process. Just use the &#8220;READ_DBL&#8221; instruction. To trigger a read from the SD card on startup, use the Memory bit for “FirstScan” as one of the triggers for the read sequence. The same guidance from the data writing step&nbsp;on using the busy signal applies to the read sequence.</p>



<h2 class="wp-block-heading" id="h-step-5-nbsp-create-the-trigger-for-reading-and-writing">Step 5:&nbsp;Create the Trigger for Reading and Writing</h2>



<p class="wp-block-paragraph">To make a trigger for the reading or writing of the sequence, the timer, button, or any other kind of trigger&nbsp;should be tied to a Boolean. Use that Boolean to set off the write or read sequence. The active signal latches ON using the busy signal and the sequence trigger to complete the sequence without getting interrupted. If the sequence is running, the “bActive” boolean is ON until the sequence is completed.</p>



<p class="wp-block-paragraph">Stepping through the sequence is controlled by the busy signal. The final step of the sequence should reset the sequence back to the beginning to wait for the next trigger.</p>



<p class="wp-block-paragraph"><strong>Learn more about our <a href="/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming">Siemens PLC Programming</a> expertise and <a href="/contact">contact us</a> today for your next project.</strong></p>
<p>The post <a href="https://static.dmcinfo.com/blog/17200/using-an-sd-card-for-retentive-memory-siemens-plc/">Using an SD Card for Retentive Memory &#8211; Siemens PLC</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Triggering Popups and Display Changes in FactoryTalk View Site Edition from the PLC</title>
		<link>https://static.dmcinfo.com/blog/17267/triggering-popups-and-display-changes-in-factorytalk-view-site-edition-from-the-plc/</link>
		
		<dc:creator><![CDATA[DMC]]></dc:creator>
		<pubDate>Mon, 28 Aug 2023 18:23:57 +0000</pubDate>
				<category><![CDATA[Allen Bradley PLC]]></category>
		<category><![CDATA[HMI and SCADA]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Display]]></category>
		<category><![CDATA[FactoryTalk]]></category>
		<category><![CDATA[FactoryTalk View SE]]></category>
		<category><![CDATA[FactoryTalk View Site Edition]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[Popup]]></category>
		<category><![CDATA[VB]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/17267/triggering-popups-and-display-changes-in-factorytalk-view-site-edition-from-the-plc/</guid>

					<description><![CDATA[<p>Whether you are migrating from Machine Edition or working with FactoryTalk View for the first time, triggering displays or popups from the PLC in Site Edition is non-trivial. In this blog post, we are going to discuss how to use Visual Basic to our advantage to trigger both display changes and popup displays. Common questions [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/17267/triggering-popups-and-display-changes-in-factorytalk-view-site-edition-from-the-plc/">Triggering Popups and Display Changes in FactoryTalk View Site Edition from the PLC</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Whether you are migrating from Machine Edition or working with FactoryTalk View for the first time, triggering displays or popups from the PLC in Site Edition is non-trivial. In this blog post, we are going to discuss how to use Visual Basic to our advantage to trigger both display changes and popup displays.</p>



<p class="wp-block-paragraph"><strong>Common questions that may have led you here:</strong></p>


<div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">


<p class="wp-block-paragraph"><strong>Why can I do this in Machine Edition but not Site Edition?</strong></p>



<p class="wp-block-paragraph">One major difference between ME and SE is the <a href="https://en.wikipedia.org/wiki/Client%E2%80%93server_model" rel="no follow" target="_blank">Client-server model</a> employed by SE. While ME has one instance of the HMI, SE can have multiple clients connected to the same server that the PLC is connected to. Each of these client instances will appear as its own <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming"><strong>HMI programming</strong></a> and can be operated independently of the others. This behavior is contrary to ME’s.</p>



<p class="wp-block-paragraph"><strong>Why can&#8217;t I use events to trigger the &#8220;Display&#8221; command?</strong></p>



<p class="wp-block-paragraph">FactoryTalk View Site Edition operates on a <a href="https://en.wikipedia.org/wiki/Client%E2%80%93server_model" rel="no follow" target="_blank">Client-server model</a>. When you run a <code>.cli</code> file, you are running a client connected to a server. When an event triggers, it is done on the server, not the client. The FactoryTalk server is configured to ignore <code><tt>Display</tt> </code>commands run on it.</p>


</div>


<h2 class="wp-block-heading" id="h-the-basics">The Basics</h2>



<p class="wp-block-paragraph">In this section, we will&nbsp;cover how to do the minimum viable work to get display changes working. This process will cover the basics and allow you to get working on your own, but feel free to stick around if you want to improve your coding and architecting skills.</p>



<h3 class="wp-block-heading" id="h-creating-a-trigger">Creating a Trigger</h3>



<p class="wp-block-paragraph">In this section, I am going to explain how to create a global trigger. This just means that we are going to set up a display such that the trigger is always being updated so you can initiate a change from any display.</p>


<div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">


<p class="wp-block-paragraph"><strong>That is too vague. Give me the technical description!</strong></p>



<p class="wp-block-paragraph">In order to create a “global trigger,” we are going to employ the assistance of an event-driven VBA subroutine on a screen loaded into cache and being constantly updated.</p>



<p class="wp-block-paragraph">We will create an event-driven VB subroutine by using the <code>Change</code> event on a numeric input component. This numeric input will be put on a screen that is developed specifically to be loaded into cache and constantly updated so that the <code>Change</code> event can be seen at any time. This will be achieved by calling the <code>Display </code>command with the <code>/ZA</code> parameter (see the&nbsp;<a data-sk="tooltip_parent" data-stringify-link="https://literature.rockwellautomation.com/idc/groups/literature/documents/um/viewse-um006_-en-e.pdf#page=313" delay="150" href="https://literature.rockwellautomation.com/idc/groups/literature/documents/um/viewse-um006_-en-e.pdf#page=283" rel="noopener noreferrer" target="_blank">Rockwell Docs</a>&nbsp;for more specifics on the behavior of this command) from a macro run on startup.</p>


</div>


<p class="wp-block-paragraph"><p data-pm-slice="1 1 []">Firstly, we are going to create a new display. You can call this display <code>PopupHandler&nbsp;</code>if you want it to be sufficiently descriptive. On this display, we are going to add a numeric input. Set the expression to be your trigger condition.</p></p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/numeric-display-on-popuphandler-display.png" alt="Numeric Display on PopupHandler Display"/></figure>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/sample-expression-for-numeric-display.png" alt="Sample Expression for the Numeric Display"/></figure>


<div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">


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



<p class="wp-block-paragraph"><p data-pm-slice="1 1 [&quot;expand&quot;,{&quot;title&quot;:&quot;Multistate Triggers&quot;,&quot;__expanded&quot;:true}]">The observant eye might realize our expression is not limited to a 0 or 1; therefore, neither is the behavior of our triggered event. If you have a more multistate tag that you want to link here, feel free to do so. We will address how to change the event by value later in the blog when discussing architecture improvements.</p></p>


</div>


<p class="wp-block-paragraph"><p data-pm-slice="1 1 []">Once you’ve got the numeric input set up, right click the background of the display and select <code>Display Settings...</code> . Make sure the following properties match between your displays:</p></p>



<p class="wp-block-paragraph"><p data-pm-slice="1 1 []"></p></p>



<p class="wp-block-paragraph"><p data-pm-slice="1 1 []">Now, we are going to make the PopupHandler silently load and stay cached and updated so the numeric input we have created is always loaded. Create a macro and call it <code>startup</code>. When the macro opens, add the following command on a new line:</p></p>


<pre data-pm-slice="1 1 []">
<code>Display PopupHandler /ZA</code></pre>


<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/example-macro-script.png" alt="Example Macro Script"/></figure>


<div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">


<p class="wp-block-paragraph"><strong>What does this command do?</strong></p>



<p class="wp-block-paragraph"><p data-pm-slice="1 1 [&quot;expand&quot;,{&quot;title&quot;:&quot;What does this command do?&quot;,&quot;__expanded&quot;:true}]">This command will load this display into cache and continually update its values. This is important as it will make sure the numeric stays loaded and updated as the client runs.</p></p>



<p class="wp-block-paragraph"><p data-pm-slice="1 1 [&quot;expand&quot;,{&quot;title&quot;:&quot;What does this command do?&quot;,&quot;__expanded&quot;:true}]"><strong>What if I already have a client-side startup macro?</strong></p></p>



<p class="wp-block-paragraph"><p data-pm-slice="1 1 [&quot;expand&quot;,{&quot;title&quot;:&quot;What if I already have a client-side startup macro?&quot;,&quot;__expanded&quot;:true}]">If you already have one, just append this command to the end of the existing macro.</p></p>


</div>


<p class="wp-block-paragraph"><p data-pm-slice="1 1 []">Now that we have the macro ready, we are going to add it to our client runtime. Edit your <code>.cli</code> file and make sure you’ve got the <code>startup</code> macro selected to run on startup. Once this is done, the macro should execute on startup and load the <code>PopupHandler</code> display into our cache.</p></p>



<p class="wp-block-paragraph"><p data-pm-slice="1 1 [&quot;expand&quot;,{&quot;title&quot;:&quot;What does this command do?&quot;,&quot;__expanded&quot;:true}]"></p></p>



<h3 class="wp-block-heading" id="h-using-vb-to-set-a-display">Using VB to Set a Display</h3>



<p class="wp-block-paragraph">Now that we have the trigger ready, we are going to add the corresponding VB Script. Select the numeric input on your <code>PopupHandler</code> display, right click, and select <code>VBA Code...</code> . You should see the following:</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/vba-subroutine-definition.png" alt="VBA Subroutine Definition"/></figure>



<p class="wp-block-paragraph"><p data-pm-slice="1 1 []">The subroutine (<code>sub</code>) you see of the form <code>NumericDisplayName_Change</code> is the script that is going to run when our condition changes. To trigger our display change, we are going to add the following line of code inside the subroutine (replace “DisplayName” with the display you want to appear).</p></p>


<pre data-pm-slice="1 1 []">
<code>ExecuteCommand ("Display DisplayName")</code></pre>


<p class="wp-block-paragraph">With that, you should be ready to go. Go ahead and restart your client and try triggering your condition. Ideally, you should see the popup or display you specified appear when the condition changes. If you do, you’ve got the minimum viable product and should proceed to the &#8220;Let&#8217;s Make it Better&#8221; section to refine your implementation.</p>



<h2 class="wp-block-heading" id="h-let-s-make-it-better">Let’s Make it Better</h2>



<p class="wp-block-paragraph">We can do better and you know it. If you want to impress the&nbsp;future engineers who will look at your work, then I suggest you get&nbsp;to the end of this section.</p>



<h3 class="wp-block-heading" id="h-better-naming-practice">Better Naming Practice</h3>



<p class="wp-block-paragraph">Let’s start by changing the name of our component. Go into the component properties and set the name to something more descriptive —&nbsp;in this case, we will use <code>PopupEventTrigger</code>. If we observe the VB Script again, then we will see the name of the subroutine has been changed to reflect what was done in FactoryTalk View Studio.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/updated-vba-subroutine.png" alt="Updated VBA Subroutine"/></figure>



<p class="wp-block-paragraph"><p data-pm-slice="1 1 []">Let’s also leave a clear visual indication of the work we have done. Next to the numeric input you are using, go ahead and add a text box and describe what is happening here. This will make it readily apparent to other engineers that there is VB Scripting going on behind the scenes.</p></p>



<p class="wp-block-paragraph"><p data-pm-slice="1 1 []"></p></p>



<h3 class="wp-block-heading" id="h-case-by-case-events">Case-By-Case Events</h3>



<p class="wp-block-paragraph"><p data-pm-slice="1 1 []">Instead of triggering any time we see the value change, let&#8217;s consider the value we are seeing. In this case, we are going to nest another condition that checks if the value of our trigger is&nbsp;&#8220;1&#8221;. With this new implementation,&nbsp;we should only see our change when we have a rising edge signal.</p></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>
Private Sub PopupEventTrigger_Change()
    ' If trigger value is rising '
    If PopupEventTrigger.Value = 1 Then
        ' Change Display '
        ExecuteCommand ("Display Popup")
    End If
End Sub </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: #569CD6">Private Sub </span><span style="color: #DCDCAA">PopupEventTrigger_Change</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; If trigger value is rising &apos;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">If</span><span style="color: #D4D4D4"> PopupEventTrigger.</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">&apos; Change Display &apos;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">ExecuteCommand</span><span style="color: #D4D4D4"> (</span><span style="color: #CE9178">&quot;Display Popup&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">End If</span></span>
<span class="line"><span style="color: #569CD6">End Sub </span></span></code></pre></div>


<div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">


<p class="wp-block-paragraph"><strong>Working with popup displays?</strong></p>



<p class="wp-block-paragraph">If you are working with popup displays, you may want to use triggers to close the popup as well as open it. Well, as luck has it, implementing this functionality is a breeze. In the simplest terms, we need only execute the command <code>Abort DisplayName</code> from our Visual Basic script; however, if we want to get clever, we can reuse our existing condition, closing the popup on a falling edge signal in addition to opening it with a rising edge signal!</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">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>
Private Sub PopupEventTrigger_Change()
    ' If trigger value is rising '
    If PopupEventTrigger.Value = 1 Then
        ' Change Display '
        ExecuteCommand ("Display Popup")
    ' If trigger value is falling '
    ElseIf PopupEventTrigger.Value = 0 Then
        ' Close Display '
        ExecuteCommand ("Abort Popup")
    End If
End Sub
</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: #569CD6">Private Sub </span><span style="color: #DCDCAA">PopupEventTrigger_Change</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; If trigger value is rising &apos;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">If</span><span style="color: #D4D4D4"> PopupEventTrigger.</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">&apos; Change Display &apos;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">ExecuteCommand</span><span style="color: #D4D4D4"> (</span><span style="color: #CE9178">&quot;Display Popup&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; If trigger value is falling &apos;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">ElseIf</span><span style="color: #D4D4D4"> PopupEventTrigger.</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">&apos; Close Display &apos;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">ExecuteCommand</span><span style="color: #D4D4D4"> (</span><span style="color: #CE9178">&quot;Abort Popup&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">End If</span></span>
<span class="line"><span style="color: #569CD6">End Sub</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Notice that I chose to use an <code>Elsif</code> here instead of an <code>Else</code>. This was intentional, as the value of the numeric display is not limited to 1 nor 0. When deciding how to handle your code, consider what makes the most sense for you based on your intended behavior.</p>


</div>


<h3 class="wp-block-heading" id="h-error-handling">Error Handling</h3>



<p class="wp-block-paragraph">Let&#8217;s prevent errors from interfering with our operation. If there is an issue with the connection to the PLC, then the numeric display may have an error value. Unfortunately for us, this change to an error value counts as a value change and will trigger our display change subroutine. To avoid this, we will wrap our logic in an if statement that checks if there is an error value in our component.</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">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>
Private Sub PopupEventTrigger_Change()
    ' Make sure there is no error '
    If Not IsError(PopupEventTrigger.Value) Then

        ' If trigger value is rising '
        If PopupEventTrigger.Value = 1 Then
            ' Change Display '
            ExecuteCommand ("Display Popup")
        End If

    End If
End Sub
</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: #569CD6">Private Sub </span><span style="color: #DCDCAA">PopupEventTrigger_Change</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; Make sure there is no error &apos;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">If</span><span style="color: #D4D4D4"> Not </span><span style="color: #DCDCAA">IsError</span><span style="color: #D4D4D4">(PopupEventTrigger.</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">Then</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">&apos; If trigger value is rising &apos;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">If</span><span style="color: #D4D4D4"> PopupEventTrigger.</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #6A9955">&apos; Change Display &apos;</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">ExecuteCommand</span><span style="color: #D4D4D4"> (</span><span style="color: #CE9178">&quot;Display Popup&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">End If</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">End If</span></span>
<span class="line"><span style="color: #569CD6">End Sub</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Alternatively, we could exit the subroutine early if there is an error.</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">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>
Private Sub PopupEventTrigger_Change()
    ' Make sure there is no error '
    If IsError(PopupEventTrigger.Value) Then
        Exit Sub
    End If

    ' If trigger value is rising '
    If PopupEventTrigger.Value = 1 Then
        ' Change Display '
        ExecuteCommand ("Display Popup")
    End If
End Sub
</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: #569CD6">Private Sub </span><span style="color: #DCDCAA">PopupEventTrigger_Change</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; Make sure there is no error &apos;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">If</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">IsError</span><span style="color: #D4D4D4">(PopupEventTrigger.</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">Exit Sub</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">End If</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; If trigger value is rising &apos;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">If</span><span style="color: #D4D4D4"> PopupEventTrigger.</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">&apos; Change Display &apos;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">ExecuteCommand</span><span style="color: #D4D4D4"> (</span><span style="color: #CE9178">&quot;Display Popup&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">End If</span></span>
<span class="line"><span style="color: #569CD6">End Sub</span></span>
<span class="line"></span></code></pre></div>



<h2 class="wp-block-heading" id="h-let-s-make-it-scalable">Let’s Make it Scalable</h2>



<p class="wp-block-paragraph">While this solution works great for changing to one specific display, it doesn’t work great at scale. Imagine, for a moment, having to repeat the process of creating a new numeric input and writing the Visual Basic subroutine for every display you want to change to. Needless to say, this proposition elicits feelings of dread.</p>



<p class="wp-block-paragraph">To avoid this monotonous task, we are going to discuss a couple possible architecture changes to support additional display changes.</p>



<h3 class="wp-block-heading" id="h-potential-architectures">Potential Architectures</h3>



<p class="wp-block-paragraph">There are, of course, more options than the two I will address here; however, they should generate some considerations for designing the architecture that fits best for your uses.</p>



<h3 class="wp-block-heading" id="h-custom-display-indexing">Custom Display Indexing</h3>



<p class="wp-block-paragraph">The numeric display we have been using to trigger our subroutine is not limited to a 1 or 0, so let’s make use of it. Change the expression to read an int on the PLC, and let&#8217;s move to a display based on what int is shown.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/integer-expression-in-numeric-display.png" alt="Integer Expression in Numeric Display"/></figure>



<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">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>
Private Sub PopupEventTrigger_Change()
    ' Make sure there is no error '
    If IsError(PopupEventTrigger.Value) Then
        Exit Sub
    End If

    Select Case PopupEventTrigger.Value
        Case 1
            ExecuteCommand ("Display Popup1")
        Case 2
            ExecuteCommand ("Display Popup2")
        Case 3
            ExecuteCommand ("Display Popup3")
    End Select
End Sub
</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: #569CD6">Private Sub </span><span style="color: #DCDCAA">PopupEventTrigger_Change</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; Make sure there is no error &apos;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">If</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">IsError</span><span style="color: #D4D4D4">(PopupEventTrigger.</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">Exit Sub</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">End If</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">Select</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Case</span><span style="color: #D4D4D4"> PopupEventTrigger.Value</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">Case</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">ExecuteCommand</span><span style="color: #D4D4D4"> (</span><span style="color: #CE9178">&quot;Display Popup1&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">Case</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">2</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">ExecuteCommand</span><span style="color: #D4D4D4"> (</span><span style="color: #CE9178">&quot;Display Popup2&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">Case</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">3</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">ExecuteCommand</span><span style="color: #D4D4D4"> (</span><span style="color: #CE9178">&quot;Display Popup3&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">End Select</span></span>
<span class="line"><span style="color: #569CD6">End Sub</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">This approach is handy as it allows you to map integer values to displays, similar to how the process works in ME. All the display changes are handled here in this subroutine; however, you will have to manually add each new display you want to transition to. To avoid this, we can have the PLC pass a string indicating a destination display.</p>



<h3 class="wp-block-heading" id="h-passing-strings-from-the-plc">Passing Strings from the PLC</h3>



<p class="wp-block-paragraph">By setting a string on the PLC for the HMI to read, we can indicate any display we want to transfer to! For simplicity, let&#8217;s create a string display on our <code>PopupHandler</code> screen to reference in our VBA. There, we can change our command to display whatever display is referenced in the string. Make sure that the string display has plenty of characters, as it will trim the PLCs string to the specified character amount. Additionally, make sure to expose the string display to VBA from the property panel with the option &#8220;VBA Control&#8221;.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/addition-of-string-display-to-popuphandler.png" alt="Addition of String Display to PopupHandler"/></figure>



<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">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>
Private Sub PopupEventTrigger_Change()
    ' Make sure there is no error '
    If IsError(PopupEventTrigger.Value) Then
        Exit Sub
    End If

    ' If trigger bit rising '
    If PopupEventTrigger.Value = 1 Then
        ' Trigger display change based on the value of the passed string '
        ExecuteCommand ("Display " &amp; DisplayNameString.Value)
    End If
End Sub
</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: #569CD6">Private Sub </span><span style="color: #DCDCAA">PopupEventTrigger_Change</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; Make sure there is no error &apos;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">If</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">IsError</span><span style="color: #D4D4D4">(PopupEventTrigger.</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">Exit Sub</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">End If</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; If trigger bit rising &apos;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">If</span><span style="color: #D4D4D4"> PopupEventTrigger.</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">&apos; Trigger display change based on the value of the passed string &apos;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">ExecuteCommand</span><span style="color: #D4D4D4"> (</span><span style="color: #CE9178">&quot;Display &quot;</span><span style="color: #D4D4D4"> &amp; DisplayNameString.</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">End If</span></span>
<span class="line"><span style="color: #569CD6">End Sub</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph"><strong>If you want help with your FactoryTalk View SE project or <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming">PLC development</a>, <a href="https://static.dmcinfo.com/contact">contact us</a>&nbsp;today for your next project&nbsp;</strong>—<strong>&nbsp;we would love to help!</strong></p>
<p>The post <a href="https://static.dmcinfo.com/blog/17267/triggering-popups-and-display-changes-in-factorytalk-view-site-edition-from-the-plc/">Triggering Popups and Display Changes in FactoryTalk View Site Edition from the PLC</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Update a Siemens PLC without TIA Portal using the SIMATIC Automation Tool</title>
		<link>https://static.dmcinfo.com/blog/24475/how-to-update-a-siemens-plc-without-tia-portal-using-the-simatic-automation-tool/</link>
		
		<dc:creator><![CDATA[DMC]]></dc:creator>
		<pubDate>Fri, 31 Mar 2017 15:25:08 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[PROFINET]]></category>
		<category><![CDATA[Siemens]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/24475/how-to-update-a-siemens-plc-without-tia-portal-using-the-simatic-automation-tool/</guid>

					<description><![CDATA[<p>DMC recently provided remote support for one of our customers. We made critical updates to their PLC code as they were commissioning their machine internationally. Unfortunately, our client didn’t have TIA Portal software available at the time. They were afraid that this made it impossible to download the new version of the code to the [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/24475/how-to-update-a-siemens-plc-without-tia-portal-using-the-simatic-automation-tool/">How to Update a Siemens PLC without TIA Portal using the SIMATIC Automation Tool</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">DMC recently provided remote support for one of our customers. We made critical updates to their PLC code as they were commissioning their machine internationally.</p>



<p class="wp-block-paragraph">Unfortunately, our client didn’t have <a href="https://www.siemens.com/global/en/home/products/automation/industry-software/automation-software/tia-portal.html" target="_blank" rel="noreferrer noopener">TIA Portal</a> software available at the time. They were afraid that this made it impossible to download the new version of the code to the PLC in the field.</p>



<p class="wp-block-paragraph">Fortunately, Siemens offers the SIMATIC Automation Tool as a <a href="https://support.industry.siemens.com/cs/document/98161300/simatic-automation-tool-the-commissioning-and-service-operation-tool-for-simatic-modules?dti=0&amp;lc=en-WW" target="_blank" rel="noreferrer noopener">free download</a> (just sign up for an account first) on their website. The SIMATIC Automation Tool was perfect for our client&#8217;s situation. It allowed them to seamlessly download the updated PLC code and commission the machine on schedule. </p>



<p class="wp-block-paragraph">This blog will walk you through the entire process of downloading a new PLC program to an S7-1200 or S7-1500 CPU using the SIMATIC&nbsp;Automation Tool.</p>



<p class="wp-block-paragraph">First, you will learn how to connect a computer to the same network as the PLC. I will then show you how to save the PLC program in a format that the SIMATIC Automation Tool can use. Next, I will walk through using the SIMATIC Automation Tool itself. Finally, I&#8217;ll review some of the other capabilities of the SIMATIC Automation Tool.&nbsp;</p>



<p class="wp-block-paragraph"><strong>0. Connect your computer to the same network as the PLC</strong></p>



<p class="wp-block-paragraph">Connect an Ethernet cable directly from the S7-1200 or S7-1500 PLC to your computer. Next, set your computer’s IP address to be on the same network as the PLC. In order to do this, click the Start button&nbsp;and search for <strong>Network and Sharing Center</strong>. Open the Network and Sharing Center. On the left, there should be an option that says <strong>Change Adapter Settings</strong>. Click that.</p>



<p class="wp-block-paragraph"><p style="margin-left: 0.25in;"></p></p>



<p class="wp-block-paragraph"><p style="margin-left: 0.25in;">Now you should see a connection that says <strong>Ethernet</strong>&nbsp;or <strong>Local Area Connection</strong>. Double click on it.</p></p>



<p class="wp-block-paragraph"><p style="margin-left: 0.25in;"></p></p>



<p class="wp-block-paragraph"><p style="margin-left: 0.25in;">In the dialog box that opens, click Properties</p></p>



<p class="wp-block-paragraph"><p style="margin-left: 0.25in;"></p></p>



<p class="wp-block-paragraph">In the next dialog box that comes up, there will be an option that says <strong>Internet Protocol Version 4 (TCP/IPv4)</strong>. Double click on this option.&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/IPV4.png" alt="Screenshot of selecting Internet Protocol Version 4 (TCP/IPv4) option"/></figure>



<p class="wp-block-paragraph">In the next dialog box, select <strong>Use the Following IP Address</strong>. You need to enter an IP address that is on the same network as the PLC you are going to connect to.</p>



<p class="wp-block-paragraph">This means the first three numbers of your computer’s IP Address must be the same as the first three numbers of the PLC’s IP Address. In this case, our PLC IP Address is&nbsp;192.168.0.1, so we assign our computer to be 192.168.0.100. In the subnet mask field, 255.255.255.0 is typically used. Click ok.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/IP-Address.png" alt="Screenshot of IP Address and Subnet Mask field in internet protocol properties "/></figure>



<p class="wp-block-paragraph"><strong>1. Generate the S7S File using TIA Portal</strong></p>



<p class="wp-block-paragraph">In order to download to a PLC using the SIMATIC Automation Tool, you need the PLC program in an S7S File Format. Whoever wrote the PLC program should follow these steps using TIA Portal to generate the S7S File for you to use.</p>



<p class="wp-block-paragraph">First, map a file directory on the TIA Portal computer to a <strong>Card Reader/USB Memory</strong>&nbsp;location. To do this, open the PLC project in TIA Portal and click <strong>Project -&gt; Card Reader/USB Memory -&gt; Add user-defined Card Reader</strong>:</p>



<p class="wp-block-paragraph">&nbsp;</p>



<p class="wp-block-paragraph">Select your desired file location in the dialog box that follows.&nbsp;</p>



<p class="wp-block-paragraph">Once you have mapped the Card Reader/USB Location, select the PLC in the project tree.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/SelectPLC.png" alt="Screenshot of selecting PLC in project tree "/></figure>



<p class="wp-block-paragraph">Then click <strong>Project -&gt; Card Reader/USB memory -&gt; Write to memory card</strong>&#8230;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Write-to-Memory-Card.png" alt="Screenshot of selecting writing to memory card from card reader/ USB memory"/></figure>



<p class="wp-block-paragraph">Select the file location you mapped earlier and press the green check mark.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Select-Memory-Card.png" alt="Screenshot of selecting the file location that was mapped to"/></figure>



<p class="wp-block-paragraph">Click Load:&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Load.png" alt="Screenshot of clicking load in the portal"/></figure>



<p class="wp-block-paragraph">Send the resulting S7S File to the computer that is running SIMATIC Automation Tool.</p>



<p class="wp-block-paragraph"><strong>2. Using the SIMATIC Automation Tool&nbsp;</strong></p>



<p class="wp-block-paragraph">On the SIMATIC Automation Tool computer, save the S7S File in the following directory:&nbsp;</p>



<p class="wp-block-paragraph"><strong>C:\ProgramData\Siemens\SIMATIC Automation Tool\Programs</strong></p>



<p class="wp-block-paragraph">In our situation, DMC simply emailed the S7S file to our client and they saved it in the proper location on their computer.&nbsp;</p>



<p class="wp-block-paragraph">Now that your computer is connected to the same network as the PLC and the new program is saved in the correct location, launch the SIMATIC Automation Tool.</p>



<p class="wp-block-paragraph">Scan for the PLC by clicking <strong>Network -&gt; Scan</strong>:&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Scan.png" alt="Screenshot of performing a scan in the SIMATIC Automation tool "/></figure>



<p class="wp-block-paragraph">If everything is configured correctly, you will find the PLC and the SIMATIC Automation Tool should look like this:&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Found-PLC_1.png" alt="Screenshot of correctly configured PLC and SIMATIC Automation Tool  "/></figure>



<p class="wp-block-paragraph">Now select the Program Update Tab. In the Program Update area, open the dropdown and you should see the name of the folder that you saved the S7S File in. Select that:&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Program-Update.png" alt="Screenshot of selecting program update in SIMATIC Automation Tool "/></figure>



<p class="wp-block-paragraph">Now check the box next to the PLC, and then select <strong>Network -&gt; Download</strong>:&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Download.png" alt="Screenshot of selecting download under the network tab in the SIMATIC Automation Tool. "/></figure>



<p class="wp-block-paragraph">The program will take a minute or two to download to the PLC. Once it is done downloading, the PLC will be in STOP mode. To put the PLC back into RUN mode, select <strong>Network -&gt; RUN</strong>.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Run.png" alt="Screenshot of selecting run under network in SIMATIC Automation Tool "/></figure>



<p class="wp-block-paragraph">The PLC should now be running the newest version of the program!&nbsp;</p>



<p class="wp-block-paragraph"><strong>3. Other Functions of the SIMATIC Automation Tool</strong></p>



<p class="wp-block-paragraph">According to the <a href="https://support.industry.siemens.com/cs/document/98161300/simatic-automation-tool-the-commissioning-and-service-operation-tool-for-simatic-modules?dti=0&amp;lc=en-WW" target="_blank" rel="noreferrer noopener">Siemens website</a>, the SIMATIC Automation Tool can also perform the following functions: </p>



<ul class="wp-block-list">
<li>Assign addresses (IP, subnet, gateway) and station name (PROFINET device)</li>



<li>Set the time in a CPU to the current time in your PG/PC</li>



<li>Backup/Restore CPU data to/from a backup file (no failsafe)</li>



<li>Flash the lights on a CPU to help physically locate the CPU</li>



<li>Upload fault information from a CPU</li>



<li>Read the diagnostic log from a CPU</li>



<li>Reset a CPU to factory default settings</li>



<li>Update firmware in a CPU and attached modules</li>
</ul>



<p class="wp-block-paragraph">These functions make the SIMATIC Automation Tool a useful asset for any facility running an S7-1200 or S7-1500 PLC. It allows you to perform basic&nbsp;maintenance functions in a simple interface.&nbsp;</p>



<p class="wp-block-paragraph">Learn more about&nbsp;<a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming">DMC&#8217;s PLC Programming services</a>&nbsp;and&nbsp;<a href="https://static.dmcinfo.com/contact">contact us</a>&nbsp;to get started on your next PLC Programming project.</p>
<p>The post <a href="https://static.dmcinfo.com/blog/24475/how-to-update-a-siemens-plc-without-tia-portal-using-the-simatic-automation-tool/">How to Update a Siemens PLC without TIA Portal using the SIMATIC Automation Tool</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Multiplexing Arrays of UDTs in TIA Portal V14</title>
		<link>https://static.dmcinfo.com/blog/24835/multiplexing-arrays-of-udts-in-tia-portal-v14/</link>
		
		<dc:creator><![CDATA[Jason Mayes]]></dc:creator>
		<pubDate>Tue, 06 Dec 2016 10:00:49 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[User Interface Design]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[Siemens]]></category>
		<category><![CDATA[UI/UX]]></category>
		<category><![CDATA[WinCC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/24835/multiplexing-arrays-of-udts-in-tia-portal-v14/</guid>

					<description><![CDATA[<p>It&apos;s back! When V13 SP1 was first released, one of the features I was most excited about was the ability to multiplex arrays of custom UDTs on a PLC using a simple index tag on an HMI. This feature allowed me to use a single faceplate or screen to display or modify data from multiple [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/24835/multiplexing-arrays-of-udts-in-tia-portal-v14/">Multiplexing Arrays of UDTs in TIA Portal V14</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">It&apos;s back!</p>

<p class="wp-block-paragraph">When V13 SP1 was first released, one of the features I was most excited about was the ability to multiplex arrays of custom UDTs on a PLC using a simple index tag on an HMI. This feature allowed me to use a single faceplate or screen to display or modify data from multiple objects by simply changing a single tag. I was so excited, I even <a href="https://static.dmcinfo.com/latest-thinking/blog/id/9136/linking-plc-udt-tags-to-hmi-faceplates-and-pop-ups-in-tia-portal-v13-sp1">wrote a blog post </a>about it then! Unfortunately, it was a feature to be short lived&nbsp;and, due&nbsp;to some unexpected consequences, mysteriously disappeared with the release of&nbsp;Update 3.</p>

<p class="wp-block-paragraph">Now that <a href="https://support.industry.siemens.com/cs/document/109740158/simatic-step-7-(tia-portal)-v14-trial-download?dti=0&amp;lc=en-WW">TIA Portal V14 </a>has been released, the very first thing I did was look to see if it was back. And I&apos;m in luck!</p>

<p class="wp-block-paragraph">While I&apos;ve gone into some detail in my previous <a href="https://static.dmcinfo.com/latest-thinking/blog/id/9136/linking-plc-udt-tags-to-hmi-faceplates-and-pop-ups-in-tia-portal-v13-sp1">blog</a>, and all of the same information is relevant, here&apos;s a really quick demo to set up multiplexing of an array of UDTs from your HMI.</p>

<p class="wp-block-paragraph">First, I&apos;ve created a really simple project with a S7-1200 (FW v4.0) and a TP700 Comfort panel (Version 14.0.0.0). To make things simple, I&apos;ve grabbed a UDT (<em>udtHMI_VFD_Control</em>) from the <a href="http://openplclibrary.com/">Siemens Open Library</a>, and added it as a type to my Project Library (this will allow me to use it within a faceplate later), and then copied from my Project Library to my PLC (under PLC Data Types). Next, create a new data block on your PLC &#8211; I&apos;ve called mine &quot;<strong><em>dbDemo</em></strong>.&quot; Inside of my Data Block I&apos;ve created a single array of VFD&apos;s.</p>

<figure class="wp-block-image"><img decoding="async" alt="Multiplexing PLC Data Types" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/UDT-Array-Creation.png"  /></figure>

<p class="wp-block-paragraph">Next, open up the Default Tag Table on the HMI. Add a new internal tag called &quot;<em><strong>Index</strong></em>&quot; of type &quot;UINT.&quot; Now, in your project tree, select the DB you previously created, and from the details view, drag any one item from your array of VFDs into your tag table to create a new tag of type &quot;<em>udtHMI_VFD_Control</em>&quot; &#8211; you can use the blue &apos;tag&apos; icon that shows up in the detail view to grab the tag. I&apos;ve named mine &quot;<em><strong>Indexed_VFD</strong></em>.&quot;</p>

<figure class="wp-block-image"><img decoding="async" alt="Multiplex Array of UDTs" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/HMI-Tag-Creation.jpg"  /></figure>

<p class="wp-block-paragraph">Note that as of right now, this tag is linked directly to a fixed item within your array &#8211; in my case, &quot;<em><strong>dbDemo.VFD[1</strong></em>].&quot; We want to modify this so that our &quot;<em><strong>Index</strong></em>&quot; tag will change which item in the array we want the tag to link to so we can multiplex this tag across multiple VFDs from our HMI. To do this, select the &quot;Address&quot; dropdown under the properties of the tag. For &quot;Index Tag,&quot; change the selection to &quot;HMI Tag&quot; and choose the &quot;<em><strong>Index</strong></em>&quot; tag we created earlier.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Multiplex-Step-1.jpg"  /></figure>

<p class="wp-block-paragraph">Notice that in your tag table the address has changed to indicate the position in the array is defined by our&quot;<em><strong>Index</strong></em>&quot; tag.&nbsp; And that&apos;s it! Now, we can change &quot;<em><strong>Index</strong></em>,&quot; either through a script or by a control on the HMI, and our multiplexed tag will look at a different item in our array. In the screenshot below, note that our &quot;<em><strong>Indexed_VFD</strong></em>&quot; is now linked to any VFD in our array using the &quot;<em><strong>Index</strong></em>&quot; tag.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Multiplex-Step-2.jpg"  /></figure>

<p class="wp-block-paragraph">To take this a step further in your quest for object oriented programming, take another look at my previous <a href="https://static.dmcinfo.com/latest-thinking/blog/id/9136/linking-plc-udt-tags-to-hmi-faceplates-and-pop-ups-in-tia-portal-v13-sp1">blog</a>. It will take you through linking your multiplexed tag to faceplates and popups &#8211; which is where this feature will really help you develop better, more powerful, HMIs.</p>

<p class="wp-block-paragraph">One more helpful hint &#8211; you will find that your index on the HMI will be zero based, regardless of the way you define your array on the PLC. For example, if I defined my array (on the PLC) to be [1 .. 20], an &quot;<em><strong>Index</strong></em>&quot; of 0 will actually access the first element, [1], in my array.</p>

<p class="wp-block-paragraph">Enjoy!</p>

<p class="wp-block-paragraph">Learn more about&nbsp;<a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming">DMC&apos;s PLC Programming services</a>&nbsp;and&nbsp;<a href="https://static.dmcinfo.com/contact">contact us</a>&nbsp;to get started on your next PLC Programming project.</p>
<p>The post <a href="https://static.dmcinfo.com/blog/24835/multiplexing-arrays-of-udts-in-tia-portal-v14/">Multiplexing Arrays of UDTs in TIA Portal V14</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
