<?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>Casimir Smith, Author at DMC, Inc.</title>
	<atom:link href="https://static.dmcinfo.com/blog/author/casimirs/feed/index.xml" rel="self" type="application/rss+xml" />
	<link></link>
	<description></description>
	<lastBuildDate>Fri, 14 Aug 2026 19:31:10 +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>Casimir Smith, Author at DMC, Inc.</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>DMC Presents at ICC: Optimizing Load Times in Ignition Perspective</title>
		<link>https://static.dmcinfo.com/blog/15963/dmc-presents-at-icc-optimizing-load-times-in-ignition-perspective/</link>
		
		<dc:creator><![CDATA[Casimir Smith]]></dc:creator>
		<pubDate>Wed, 25 Sep 2024 11:18:19 +0000</pubDate>
				<category><![CDATA[HMI and SCADA]]></category>
		<category><![CDATA[Ignition]]></category>
		<category><![CDATA[MES]]></category>
		<category><![CDATA[Ignition Perspective]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/15963/dmc-presents-at-icc-optimizing-load-times-in-ignition-perspective/</guid>

					<description><![CDATA[<p>At the Ignition Community Conference, Elizabeth Hill Reed and Casimir Smith presented a series of helpful tips for improving perceived load times in Ignition Perspective. We were excited to see how many people were excited about our findings, so we’ve released our notes here on our blog! Types of Performance Fundamental Principles for Improving Perceived [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/15963/dmc-presents-at-icc-optimizing-load-times-in-ignition-perspective/">DMC Presents at ICC: Optimizing Load Times in Ignition Perspective</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">At the Ignition Community Conference, Elizabeth Hill Reed and Casimir Smith presented a series of helpful tips for improving perceived load times in Ignition Perspective. We were excited to see how many people were excited about our findings, so we’ve released our notes here on our blog!</p>



<h2 id="h-types-of-performance" class="wp-block-heading">Types of Performance</h2>



<ul class="wp-block-list">
<li><strong>Perceived Performance:</strong> How long do pages feel to load, our focus</li>



<li><strong>Responsiveness:</strong> How long between user action and result</li>



<li><strong>Resource Usage:</strong> How much RAM or CPU is being used</li>
</ul>



<h2 id="h-fundamental-principles-for-improving-perceived-performance" class="wp-block-heading">Fundamental Principles for Improving Perceived Performance</h2>



<ul class="wp-block-list">
<li>Reduce amount of data and calculation</li>



<li>Reduce layout recalculations</li>



<li>Reduce initial load actions</li>



<li>Reduce heavyweight components</li>
</ul>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Improving-Perceived-Performance.png" alt="Improving Perceived Performance"/></figure>



<h2 id="h-reduce-amount-of-data-and-calculation" class="wp-block-heading">Reduce Amount of Data and Calculation</h2>



<h3 id="h-binding-efficiency" class="wp-block-heading">Binding Efficiency</h3>



<p class="wp-block-paragraph">Some binding and transform types are more efficient than others. Make sure you choose the correct type intentionally, especially when you can accomplish the same task with a more efficient type.</p>



<p class="wp-block-paragraph"><strong>Binding Ranking (best to worst)</strong></p>



<ul class="wp-block-list">
<li>Direct tag binding</li>



<li>Indirect tag binding</li>



<li>runScript() expression</li>



<li>tag() expression</li>
</ul>



<p class="wp-block-paragraph"><strong>Transform Efficiency Ranking (best to worst)</strong></p>



<ul class="wp-block-list">
<li>Format transform</li>



<li>Map transform</li>



<li>Expression transform</li>



<li>Script transform (much slower than others)</li>
</ul>



<p class="wp-block-paragraph">Note that transforms always add additional processing time, so runScript() can be a faster way to run a Python script compared to script transforms. Also remember that when reading multiple tag values, using separate custom properties with indirect tag bindings is better than trying to read multiple tags using tag().</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Binding-Efficiency.png" alt="Binding Efficiency"/></figure>



<h3 id="h-query-efficiency" class="wp-block-heading">Query Efficiency</h3>



<ul class="wp-block-list">
<li>Always include a range limiter on queries that select from large tables
 
 
<ul class="wp-block-list">
<li>Time-based or count-based</li>
</ul>
</li>



<li>Avoid polling
 
 
<ul class="wp-block-list">
<li>Use a refresh button that calls refreshBinding() instead</li>
</ul>
</li>



<li>Use named queries with caching enabled</li>



<li>Use database tools to troubleshoot query performance
 
 
<ul class="wp-block-list">
<li>For Microsoft SQL, use execution plan monitoring and event tracing</li>



<li>For PostgreSQL, use tools like pgwatch, pgdash, and datadog</li>
</ul>
</li>
</ul>



<h3 id="h-scripting-efficiency" class="wp-block-heading">Scripting Efficiency</h3>



<ul class="wp-block-list">
<li><strong>Focus on reducing use of scripting unless necessary</strong></li>



<li>Don’t sacrifice readability or maintainability for performance</li>



<li>Combine tag read/write into one bulk call</li>



<li>Avoid repeating logic in a loop</li>
</ul>



<h2 id="h-reduce-layout-recalculation" class="wp-block-heading">Reduce Layout Recalculation</h2>



<p class="wp-block-paragraph">The browser performs reflow operations to set the position and layout of the page. When bindings or scripts alter the layout of your page, this forces the browser to recalculate, which slows down your page. Avoid unnecessary use of bindings that alter page layout, such as:</p>



<ul class="wp-block-list">
<li>Binding that sets the basis property</li>



<li>Binding that sets the display property</li>



<li>Binding that sets the instances property of a flex repeater directly</li>



<li>Binding that alters margin, padding, or border width</li>
</ul>



<h3 id="h-use-persistence-to-set-starting-layout" class="wp-block-heading">Use Persistence to Set Starting Layout</h3>



<ul class="wp-block-list">
<li>Change a bound property to “persistent” to save the starting value instead of initializing to null.</li>



<li>Use persistence to set starting layout.</li>



<li>Use persistence to avoid red overlays on initial load.</li>
</ul>



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



<h3 id="h-avoid-excessive-embedded-view-nesting" class="wp-block-heading">Avoid Excessive Embedded View Nesting</h3>



<ul class="wp-block-list">
<li>Avoid nesting more than 3 layers deep</li>



<li>Pass in tag paths as parameters, then use indirect tag bindings</li>



<li>Try both with-parent and after-parent loading</li>



<li>Balance the maintainability of core templates with the performance of fewer nesting layers</li>
</ul>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Nesting-Layers.gif" alt="Nesting Layers"/></figure>



<h2 id="h-reduce-initial-load-actions" class="wp-block-heading">Reduce Initial Load Actions</h2>



<p class="wp-block-paragraph">It’s best to limit the amount of actions that your page has to perform when it first loads. The best way to do this is by caching data in tags so it can be calculated on the gateway, instead of the session. This has several key advantages:</p>



<ul class="wp-block-list">
<li>The script only needs to run once on the gateway, instead of once per open session</li>



<li>The view has instant access to data, so pages load faster</li>



<li>Scripts run faster in gateway scope</li>
</ul>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Move-Calculations-to-Gateway-Scope.png" alt="Move Calculations to Gateway Scope"/></figure>



<h2 id="h-reduce-use-of-heavyweight-components" class="wp-block-heading">Reduce Use of Heavyweight Components</h2>



<p class="wp-block-paragraph">Some Ignition components import large libraries and can take longer to load the resource. Some key heavy components are the XY Chart, Gauge, and Markdown components. This performance is greatly improved by the use of React 18, introduced in Ignition 8.1.31.</p>



<p class="wp-block-paragraph">If you have many repeated uses of one item on-screen, you can consider replacing a component with a custom svg. The Ignition exchange has many examples of svg objects to replace Ignition ones.</p>



<p class="wp-block-paragraph"><strong>Slow Example: Built-in Ignition Gauge</strong></p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/ignition-react-gauge.gif" alt="Built-in Ignition Guage"/></figure>



<p class="wp-block-paragraph"><strong>Fast Example: DMC’s Lightweight SVG Gauge</strong></p>



<h2 id="h-advanced-technique-analyzing-load-time-with-chrome-devtools" class="wp-block-heading">Advanced Technique: Analyzing Load Time with Chrome DevTools</h2>



<p class="wp-block-paragraph">Chrome has a built-in DevTools option to help test page responsiveness and loading behavior. This can be used to quantitatively test behavior or compare different variants against each other.</p>



<h3 id="h-devtools-basics" class="wp-block-heading">DevTools Basics</h3>



<ul class="wp-block-list">
<li>Open your Perspective screen in Chrome and press F12 to open DevTools</li>



<li>Resize your window to test responsive design across device screen sizes</li>



<li>Throttle network speeds to simulate a slow connection</li>
</ul>



<h3 id="h-how-to-open-performance-monitor" class="wp-block-heading">How to Open Performance Monitor</h3>



<ol class="wp-block-list">
<li>Open Chrome DevTools</li>



<li>Switch the right sidebar to the “Performance” tab</li>



<li>Press the circle button to start recording</li>



<li>Navigate and perform actions on your page</li>



<li>Stop recording</li>
</ol>



<h3 id="h-how-to-interpret-performance-monitor" class="wp-block-heading">How to Interpret Performance Monitor</h3>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Analyze-Loading-Performace-Monitor.png" alt="Analyze Loading: Performance Monitor"/></figure>



<h2 id="h-how-to-hide-loading-with-fade-in-animations" class="wp-block-heading">How to Hide Loading with Fade-In Animations</h2>



<p class="wp-block-paragraph">Creating a fade-in style can make views feel more premium and hide dreaded pop-in effects. This often feels nicer even when the raw time is longer. Create style classes that animate to change the opacity from 0 to 1, and create multiple classes with different delays.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Edit-Style.png" alt="Edit Style"/></figure>



<p class="wp-block-paragraph"><strong>Fade-in Animation Example</strong></p>



<h2 id="h-balance-performance-vs-maintainability" class="wp-block-heading">Balance Performance vs Maintainability</h2>



<p class="wp-block-paragraph">Don’t forget that maintainability is even more important than performance. Many performance boosts introduce custom or duplicate code. You should always get user feedback, and THEN consider optimizing.</p>



<p class="wp-block-paragraph"><em>“Premature optimization is the root of all evil” – Donald Knuth</em></p>



<p class="wp-block-paragraph"><em>View or download&nbsp;the complete presentation:&nbsp;<strong><a href="https://static.dmcinfo.com/wp-content/uploads/2025/06/DMC-ICC-2024-Optimizing-Load-Time-in-Ignition-Perspective-1.pdf">Optimizing Load Time in Ignition Perspective</a></strong></em></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">Interested in Working with an Ignition Premier Integrator? See DMC at ICC!</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">As an <a href="https://static.dmcinfo.com/about/partners/ignition-premier-integrator/" target="_blank" rel="noreferrer noopener">Ignition Premier Integrator</a>, DMC delivers cutting-edge <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/ignition-programming/" target="_blank" rel="noreferrer noopener">Ignition HMI</a> and SCADA solutions tailored to your needs. <a href="https://static.dmcinfo.com/contact/" target="_blank" rel="noreferrer noopener">Contact us</a> to unlock the full potential of your industrial automation with DMC!</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">&nbsp;</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://static.dmcinfo.com/blog/15963/dmc-presents-at-icc-optimizing-load-times-in-ignition-perspective/">DMC Presents at ICC: Optimizing Load Times in Ignition Perspective</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Optimizing Load Time in Ignition Perspective: Notes from ICC Table Talks</title>
		<link>https://static.dmcinfo.com/blog/17187/optimizing-load-time-in-ignition-perspective-notes-from-icc-table-talks/</link>
		
		<dc:creator><![CDATA[Casimir Smith]]></dc:creator>
		<pubDate>Fri, 29 Sep 2023 18:20:02 +0000</pubDate>
				<category><![CDATA[HMI and SCADA]]></category>
		<category><![CDATA[Ignition]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/17187/optimizing-load-time-in-ignition-perspective-notes-from-icc-table-talks/</guid>

					<description><![CDATA[<p>At this year&#8217;s Ignition Community Conference, DMC led a table talk discussing best practices to reduce load times and improve maintainability in Perspective applications. We were excited to share our expertise and hear from others in the community. Below are some notes and takeaways, organized by difficulty of implementation. Basic Intermediate Advanced Thanks to everyone [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/17187/optimizing-load-time-in-ignition-perspective-notes-from-icc-table-talks/">Optimizing Load Time in Ignition Perspective: Notes from ICC Table Talks</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">At this year&rsquo;s <a href="http://icc.inductiveautomation.com/" target="_blank">I</a><a href="https://icc.inductiveautomation.com/" target="_blank">gnition Community Conference</a>, DMC led a table talk discussing best practices to reduce load times and improve maintainability in Perspective applications.</p>

<p class="wp-block-paragraph">We were excited to share our expertise and hear from others in the community. Below are some notes and takeaways, organized by difficulty of implementation.</p>

<h2 class="wp-block-heading">Basic</h2>

<ul class="wp-block-list">
 <li>Avoid nesting embedded views more than three&nbsp;layers deep.
 <ul class="wp-block-list" style="list-style-type:circle;">
  <li>For reusable library components, create different versions of the same component without nesting base versions.</li>
  <li>For buttons, consider using a style class to gain consistency instead of an embedded view.</li>
 </ul>
 </li>
 <li>Avoid runScript expressions. Call scripts in other ways instead.</li>
 <li>Always include a range limiter on queries that select from large tables.</li>
 <li>Reduce repeated usage of heavyweight components like the XY chart.</li>
 <li>Understand when production environments can be slower than development:
 <ul class="wp-block-list" style="list-style-type:circle;">
  <li>HMI/tablet is slower than engineering PC</li>
  <li>More clients at one time</li>
  <li>More data in historical records</li>
 </ul>
 </li>
</ul>

<h2 class="wp-block-heading">Intermediate</h2>

<ul class="wp-block-list">
 <li>If a data script does not depend on user input, move it to a cyclically running gateway script, and store the result as a tag. This reduces performance load for multiple clients and has the added benefit of being visible from gateway diagnostics scripts.</li>
 <li>Use Chrome DevTools (Ctrl+Shift+i) to simulate resizing a window or throttling load speeds.</li>
 <li>Avoid cascading bindings that trigger and retrigger when parameters change: instead, package into a single binding or script.</li>
 <li>Use expression structures instead of separate single expressions when multiple properties need to retrigger a binding.</li>
 <li>Manually trigger updates using refreshBinding() instead of setting polling query bindings.</li>
 <li>Use messages, property change scripts, and events in place of binding script transforms. This benefits visibility and logging capabilities.</li>
</ul>

<h2 class="wp-block-heading">Advanced</h2>

<ul class="wp-block-list">
 <li>For high numbers of repeated objects, consider a custom lightweight visualization:
 <ul class="wp-block-list" style="list-style-type:circle;">
  <li>Custom SVG-based charts (<a href="https://inductiveautomation.com/exchange/2369/overview" target="_blank">see our build-a-thon project from last year</a>.)</li>
  <li>Use the circle or polygon layers in the Map component to display simple zoom/pannable statuses.</li>
 </ul>
 </li>
 <li>Experiment with viewing and analyzing the DOM (HTML document object model) using Chrome DevTools. Use Lighthouse to analyze load speeds.</li>
</ul>

<p class="wp-block-paragraph">Thanks to everyone that participated in ICC this year! We had a blast and will be back in full force next year for ICC 2024!</p>

<p class="wp-block-paragraph"><strong>Learn more about DMC&apos;s</strong> <a href="/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/ignition-programming"><strong>Ignition programming expertise</strong></a><strong>&nbsp;and <a href="/contact">contact us</a> for your next project.</strong></p>
<p>The post <a href="https://static.dmcinfo.com/blog/17187/optimizing-load-time-in-ignition-perspective-notes-from-icc-table-talks/">Optimizing Load Time in Ignition Perspective: Notes from ICC Table Talks</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Creating Dynamic Ignition Perspective Projects, Part 4: Parameters, Indirect Bindings, and Flex Repeaters</title>
		<link>https://static.dmcinfo.com/blog/19090/creating-dynamic-ignition-perspective-projects-part-4-parameters-indirect-bindings-and-flex-repeaters/</link>
		
		<dc:creator><![CDATA[Casimir Smith]]></dc:creator>
		<pubDate>Fri, 27 Aug 2021 12:27:37 +0000</pubDate>
				<category><![CDATA[HMI and SCADA]]></category>
		<category><![CDATA[Ignition]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[MES]]></category>
		<category><![CDATA[flex repeater]]></category>
		<category><![CDATA[ignition]]></category>
		<category><![CDATA[indirect]]></category>
		<category><![CDATA[parameter]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/19090/creating-dynamic-ignition-perspective-projects-part-4-parameters-indirect-bindings-and-flex-repeaters/</guid>

					<description><![CDATA[<p>One of the fastest-growing SCADA/HMI platforms today is Inductive Automation&apos;s Ignition. In addition to the well-known Vision visualization module, Ignition&#160;contains Perspective, a web-friendly visualization module&#160;which&#160;works in any web browser&#8212;even on mobile! Although most Ignition functions work the same across Perspective or Vision, there are some necessary adjustments to work better in a web-friendly environment. This [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/19090/creating-dynamic-ignition-perspective-projects-part-4-parameters-indirect-bindings-and-flex-repeaters/">Creating Dynamic Ignition Perspective Projects, Part 4: Parameters, Indirect Bindings, and Flex Repeaters</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">One of the fastest-growing SCADA/HMI platforms today is Inductive Automation&apos;s <a href="https://inductiveautomation.com/ignition/" target="_blank">Ignition</a>. In addition to the well-known <a href="https://inductiveautomation.com/ignition/modules/vision" target="_blank">Vision visualization module</a>, Ignition&nbsp;contains<a href="https://inductiveautomation.com/ignition/modules/perspective" target="_blank"> Perspective</a>, a web-friendly visualization module&nbsp;which&nbsp;works in any web browser&mdash;even on mobile!</p>

<p class="wp-block-paragraph">Although most Ignition functions work the same across Perspective or Vision, there are some necessary adjustments to work better in a web-friendly environment. This multi-part blog will serve as a guide to setting up dynamic Perspective screens that take full advantage of the powerful&nbsp;new features.</p>

<p class="wp-block-paragraph">In&nbsp;<a href="https://static.dmcinfo.com/latest-thinking/blog/id/10252/creating-dynamic-ignition-perspective-projects-part-3-embedded-views-and-flex-containers">part&nbsp;3</a>, we created a template view that controls an enable property and shows a numeric&nbsp;tag. In this part, we will go over how to add parameters to your embedded view, then use those parameters to drive indirect tag bindings. We can then use our parametrized template in a flex repeater to maximize our layout efficiency.</p>

<h2 class="wp-block-heading">Adding View Parameters</h2>

<p class="wp-block-paragraph">First, we will cover how to add a parameter to a view and change the tag binding based on that parameter. My example project has the following tag structure, where each TemperatureZone folder has an Enable tag and OutputTemp tag. We want the parameter to change which temperature zone&nbsp;the view displays.</p>

<figure class="wp-block-image"><img decoding="async" alt="We want our template to look at one of these tag folders" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/2_tag_folders.png"  /></figure>

<p class="wp-block-paragraph">First, open the flex container template view we created in&nbsp;<a href="https://static.dmcinfo.com/latest-thinking/blog/id/10252/creating-dynamic-ignition-perspective-projects-part-3-embedded-views-and-flex-containers">part 3</a>. Select the view in the project browser, which will open the view properties in the property editor. Press the blue &quot;Add View Parameter&quot; button to create a new param. Change the param name to &quot;TempZone&quot; and set the value to 1.</p>

<figure class="wp-block-image"><img decoding="async" alt="Create a parameter in the view property editor" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/4_create_view_param.png"  /></figure>

<p class="wp-block-paragraph">Next, we are going to adjust the button text to display the name of the current zone. Select the button and add an expression binding to the &quot;text&quot; property. Add the following expression, which will display the parameter value with the Zone prefix:</p>

<div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">&apos;Zone &apos; + {view.params.TempZone}</div>

<figure class="wp-block-image"><img decoding="async" alt="Add a binding to the button text to show name" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/4b_add_name_binding.png"  /></figure>

<h2 class="wp-block-heading">Indirect Tag Bindings</h2>

<p class="wp-block-paragraph">Next, we will change our temperature tag binding to an indirect tag binding. If you are creating an indirect binding from scratch&nbsp;the method is the same. Select the temperature label and change the tag binding type from Direct to Indirect. Next, delete the &quot;1&quot; index from the tag path (or whatever index distinguishes your tag folders or UDTs).</p>

<figure class="wp-block-image"><img decoding="async" alt="Change the tag binding to an indirect binding" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/5_select_indirect_binding.png"  /></figure>

<p class="wp-block-paragraph">Place your cursor where you wish to add the indirect reference (where the 1 used to be), then press the property reference button to the right of the tag path entry box. Find the TempZone parameter in the tree and press Ok to insert the TempZone param. The reference is now shown in both the tag path and the reference list. You will know that you&apos;ve configured the binding correctly when the Binding Preview shows the tag value, not an error.</p>

<figure class="wp-block-image"><img decoding="async" alt="Create an indirect reference in your binding" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/7_indirect_reference.png"  /></figure>

<p class="wp-block-paragraph">(Note: Previous guides did not explicitly cover binding the &quot;enable&quot; custom property to the enable tag. This can be accomplished with an&nbsp;indirect tag binding on the custom property. Don&apos;t forget to set the bidirectional checkbox so the property can write back to the tag!)</p>

<h2 class="wp-block-heading">Configuring Embedded View Parameters and Flex Repeaters</h2>

<p class="wp-block-paragraph">Once you have added a parameter to a view, you can add a value to that parameter on any embedded view instances. Select the embedded view, then find &quot;params&quot; in the property editor. Click &quot;Add Object Member&quot;, then find TempZone (input) in the parameters list. Once you add that parameter, it will appear in the parameters list and you can edit the value. Try changing the TempZone param to different values to see how the template reacts.</p>

<figure class="wp-block-image"><img decoding="async" alt="Add a parameter to the embedded view object" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/8_add_parameter_1.png"  /></figure>

<p class="wp-block-paragraph">One of the most common ways to embed templates is the flex repeater. This object works like a flex container, but it creates multiple instances of a single specified view. Drag a flex repeater from the toolbox to the main view.</p>

<figure class="wp-block-image"><img decoding="async" alt="Add a flex repeater to your view" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/9_add_flex_repeater.png"  /></figure>

<p class="wp-block-paragraph">Next, select the flex repeater and change its path property to the path of the template view. Under instances, click &quot;Add Array Element&quot; and add three instances of the template.</p>

<figure class="wp-block-image"><img decoding="async" alt="Add instances to your flex repeater" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/10_add_flex_instance.png"  /></figure>

<p class="wp-block-paragraph">The three instances will appear as array objects under the instances property. Each instance has an instanceStyle and instancePosition, but you will need to add the TempZone parameter. Click the grey plus button by the instance number and add TempZone (input) as a parameter.</p>

<figure class="wp-block-image"><img decoding="async" alt="Add parameters to your flex repeater instances" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/11_add_parameters.png"  /></figure>

<p class="wp-block-paragraph">Change each TempZone parameter to a different index. The objects inside the template will use that parameter value for display (Zone 1, Zone 2, Zone 3) and for their indirect tag bindings&nbsp;(note the different temperature values).</p>

<figure class="wp-block-image"><img decoding="async" alt="Flex repeater result" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/12_final_result_1.png"  /></figure>

<p class="wp-block-paragraph">In this guide, we&apos;ve learned how to create view parameters, use them to drive indirect bindings, and how to use flex repeaters to efficiently copy embedded views. In the next guide, we&apos;ll cover a more advanced flex repeater technique to allow for a variable number of instances.</p>

<p class="wp-block-paragraph"><strong>Learn more about DMC&apos;s&nbsp;<a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/ignition-designer-programming">Ignition expertise</a>.&nbsp;&nbsp;<a href="https://static.dmcinfo.com/contact">Contact us</a>&nbsp;to get started on your next <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming">HMI, SCADA</a>, or MES project.<br />
<br />
See other blogs in this series:&nbsp;</strong>Creating Dynamic Ignition Perspective Projects<br />
<a href="https://static.dmcinfo.com/latest-thinking/blog/id/10250/creating-dynamic-ignition-perspective-projects-part-one-bindings-and-transforms">Part 1: Bindings and Transforms</a><br />
<a href="https://static.dmcinfo.com/latest-thinking/blog/id/10251/creating-dynamic-ignition-perspective-projects-part-2-button-event-actions">Part 2: Button Event Actions</a><br />
<a href="https://static.dmcinfo.com/latest-thinking/blog/id/10252/creating-dynamic-ignition-perspective-projects-part-3-embedded-views-and-flex-containers">Part 3: Embedded Views and Flex Containers</a><br />
Part 4: View Parameters, Indirect Bindings, and Flex Repeaters<br />
Part 5: Flex Repeaters with Variable Number of Instances (coming soon)<br />
Part 6: Changing Colors and Other Properties (coming soon)</p>
<p>The post <a href="https://static.dmcinfo.com/blog/19090/creating-dynamic-ignition-perspective-projects-part-4-parameters-indirect-bindings-and-flex-repeaters/">Creating Dynamic Ignition Perspective Projects, Part 4: Parameters, Indirect Bindings, and Flex Repeaters</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Creating Dynamic Ignition Perspective Projects, Part 3: Embedded Views and Flex Containers</title>
		<link>https://static.dmcinfo.com/blog/19104/creating-dynamic-ignition-perspective-projects-part-3-embedded-views-and-flex-containers/</link>
		
		<dc:creator><![CDATA[Casimir Smith]]></dc:creator>
		<pubDate>Fri, 27 Aug 2021 11:11:11 +0000</pubDate>
				<category><![CDATA[HMI and SCADA]]></category>
		<category><![CDATA[Ignition]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[MES]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[ignition]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/19104/creating-dynamic-ignition-perspective-projects-part-3-embedded-views-and-flex-containers/</guid>

					<description><![CDATA[<p>One of the fastest growing SCADA/HMI platforms today is Inductive Automation&apos;s Ignition. In addition to the well-known Vision visualization module, Ignition&#160;contains Perspective, a web-friendly visualization module built from the ground up to work in any web browser &#8212;&#160;even on mobile! Although most Ignition functions work the same across Perspective or Vision, there are some adjustments&#160;to&#160;work&#160;better&#160;in [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/19104/creating-dynamic-ignition-perspective-projects-part-3-embedded-views-and-flex-containers/">Creating Dynamic Ignition Perspective Projects, Part 3: Embedded Views and Flex Containers</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">One of the fastest growing SCADA/HMI platforms today is Inductive Automation&apos;s <a href="https://inductiveautomation.com/ignition/" target="_blank">Ignition</a>. In addition to the well-known <a href="https://inductiveautomation.com/ignition/modules/vision" target="_blank">Vision</a> visualization module, Ignition&nbsp;contains <a href="https://inductiveautomation.com/ignition/modules/perspective">Perspective</a>, a web-friendly visualization module built from the ground up to work in any web browser &mdash;&nbsp;even on mobile!</p>

<p class="wp-block-paragraph">Although most Ignition functions work the same across Perspective or Vision, there are some adjustments&nbsp;to&nbsp;work&nbsp;better&nbsp;in a web-friendly environment. This multi-part blog will serve as a guide to setting up dynamic Perspective screens that take full advantage of the powerful new features.</p>

<p class="wp-block-paragraph">In the last two blogs, we created a status display to toggle an enable bit and display a numeric value. In this blog, we will combine&nbsp;those objects into an embedded view and use a flex repeater to create a dynamic layout.</p>

<h2 class="wp-block-heading">Creating a New Flex View</h2>

<p class="wp-block-paragraph">To create a new view, right click &quot;Views&quot; in the Project Browser then click &quot;New View&quot; In the popup. Be sure to change the root container type to &quot;Flex Container&quot;. The root container type cannot be changed once the view is created.</p>

<figure class="wp-block-image"><img decoding="async" alt="Create a new view with a flex root container" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/1_new_flex_view.png"  /></figure>

<p class="wp-block-paragraph">Next, select the view in the project browser and resize it using the width and height properties in the property editor. Change the dimensions to 400x100px.</p>

<figure class="wp-block-image"><img decoding="async" alt="Resize the view for it to be a template" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/2_resized_view.png"  /></figure>

<p class="wp-block-paragraph">Next, return to the main view and copy the toggle button, enable display, and numeric value display. Paste these three components into the new view&apos;s root container.</p>

<p class="wp-block-paragraph"><figure class="wp-block-image"><img decoding="async" alt="Copy your components from the main view" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/3_copy_from_main_view.png"  /></figure><figure class="wp-block-image"><img decoding="async" alt="Paste your components to the template view" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/4_paste_to_main_view.png"  /></figure></p>

<p class="wp-block-paragraph">The three views line up on top of each other in the flex container, which is not what we want. We need to configure the flex container and object position properties to best display our data.</p>

<h2 class="wp-block-heading">Configuring the Flex Container</h2>

<p class="wp-block-paragraph">The flex container has many different properties that determine how objects are displayed, the first is the direction. Switch this to &quot;row&quot; to change the orientation of the three objects.</p>

<figure class="wp-block-image"><img decoding="async" alt="Change the flex container direction" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/6_flex_container_props.png"  /></figure>

<p class="wp-block-paragraph">Now our objects are in a row, but they are not the correct size. We want the button, enable, and numeric display to take up different amounts of space. Luckily, there are position properties on each object that can achieve this exact behavior.</p>

<figure class="wp-block-image"><img decoding="async" alt="Row oriented flex container" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/7_row_flex_container.png"  /></figure>

<p class="wp-block-paragraph">Select the button object and find the position properties in the property editor. The basis determines how much space the object &quot;wants&quot; to take up. It can be in percent (%) or pixels (px). Set the button basis to 20%, the enable label basis to 30%, and the numeric label to 50%.</p>

<figure class="wp-block-image"><img decoding="async" alt="Change the basis in the object's position props" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/8_flex_position_props.png"  /></figure>

<p class="wp-block-paragraph">The other parameters are shrink, which decides if the object should shrink if there isn&apos;t enough space, and grow, which decides if the object should grow to take up unallocated space. We do not need to adjust these.</p>

<p class="wp-block-paragraph">After adjusting the basis, each object takes up the allotted percentage of space.&nbsp;There is one final tweak: adding a margin to the button so it is spaced away&nbsp;from the edges and other components.&nbsp;</p>

<figure class="wp-block-image"><img decoding="async" alt="With proper basis settings, the elements look better" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/9_spaced_flex.png"  /></figure>

<p class="wp-block-paragraph">Select the button and find the &quot;style&quot; property in the property editor. Press the plus button to add a new style entry. Name it &quot;margin&quot; and set the value to 5px. Alternatively, you can click the style card icon button to graphically view and edit style definitions.&nbsp;</p>

<figure class="wp-block-image"><img decoding="async" alt="Add a margin to the button to space it from other components" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/11_add_margin.png"  /></figure>

<p class="wp-block-paragraph">With a margin on the button, our flex container view looks ready to go! All that&apos;s left to do is to&nbsp;add it to our main view.</p>

<figure class="wp-block-image"><img decoding="async" alt="That is a nice looking flex container!" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/12_final_result.png"  /></figure>

<h2 class="wp-block-heading">Embedding in Another View</h2>

<p class="wp-block-paragraph">Embedding views within other views is easy. Just find your desired view in the project browser, then drag it into your current&nbsp;view. Alternatively, you can grab an &quot;Embedded View&quot; object from the toolbox, then set the path parameter to your view&apos;s path. The embedded view now acts as a singular object.</p>

<figure class="wp-block-image"><img decoding="async" alt="Drag your embedded view into the main view" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/13_drag_into_main_view.png"  /></figure>

<p class="wp-block-paragraph">In this blog, we learned how to create an embedded view template and add it to another view. <a href="https://static.dmcinfo.com/latest-thinking/blog/id/10253/creating-dynamic-ignition-perspective-projects-part-4-parameters-indirect-bindings-and-flex-repeaters">In the next blog</a>, we will add parameters to this template so we can create multiple instances to get data from different sources!</p>

<p class="wp-block-paragraph"><strong>Learn more about DMC&apos;s&nbsp;<a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/ignition-designer-programming">Ignition expertise</a>.&nbsp;&nbsp;<a href="https://static.dmcinfo.com/contact">Contact us</a>&nbsp;to get started on your next HMI, SCADA, or MES project.<br />
<br />
See other blogs in this series:&nbsp;</strong>Creating Dynamic Ignition Perspective Projects<br />
<a href="https://static.dmcinfo.com/latest-thinking/blog/id/10250/creating-dynamic-ignition-perspective-projects-part-one-bindings-and-transforms">Part 1: Bindings and Transforms</a><br />
<a href="https://static.dmcinfo.com/latest-thinking/blog/id/10251/creating-dynamic-ignition-perspective-projects-part-2-button-event-actions">Part 2: Button Event Actions</a><br />
Part 3: Embedded Views and Flex Containers<br />
Part 4: View Parameters,&nbsp;Indirect Bindings, and Flex Repeaters<br />
Part 5: Flex Repeaters with Variable Number of Instances (coming soon)<br />
Part 6: Changing Colors and Other Properties (coming soon)</p>
<p>The post <a href="https://static.dmcinfo.com/blog/19104/creating-dynamic-ignition-perspective-projects-part-3-embedded-views-and-flex-containers/">Creating Dynamic Ignition Perspective Projects, Part 3: Embedded Views and Flex Containers</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Creating Dynamic Ignition Perspective Projects, Part 2: Button Event Actions</title>
		<link>https://static.dmcinfo.com/blog/19118/creating-dynamic-ignition-perspective-projects-part-2-button-event-actions/</link>
		
		<dc:creator><![CDATA[Casimir Smith]]></dc:creator>
		<pubDate>Fri, 27 Aug 2021 10:28:32 +0000</pubDate>
				<category><![CDATA[HMI and SCADA]]></category>
		<category><![CDATA[Ignition]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[MES]]></category>
		<category><![CDATA[button]]></category>
		<category><![CDATA[ignition]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[script]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/19118/creating-dynamic-ignition-perspective-projects-part-2-button-event-actions/</guid>

					<description><![CDATA[<p>One of the fastest growing SCADA/HMI platforms today is Inductive Automation&apos;s Ignition. In addition to the well-known Vision visualization module, Ignition&#160;contains Perspective, a web-friendly visualization module built from the ground up to work in any web browser &#8212; even on mobile! Although most Ignition functions work the same across Perspective or Vision, there are some [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/19118/creating-dynamic-ignition-perspective-projects-part-2-button-event-actions/">Creating Dynamic Ignition Perspective Projects, Part 2: Button Event Actions</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">One of the fastest growing SCADA/HMI platforms today is Inductive Automation&apos;s <a href="https://inductiveautomation.com/ignition/" target="_blank">Ignition</a>. In addition to the well-known <a href="https://inductiveautomation.com/ignition/modules/vision" target="_blank">Vision</a> visualization module, Ignition&nbsp;contains <a href="https://inductiveautomation.com/ignition/modules/perspective" target="_blank">Perspective</a>, a web-friendly visualization module built from the ground up to work in any web browser &mdash; even on mobile!</p>

<p class="wp-block-paragraph">Although most Ignition functions work the same across Perspective or Vision, there are some adjustments to&nbsp;work better in a web-friendly environment. This multi-part blog will serve as a guide to setting up dynamic Perspective screens that take full advantage of its powerful new&nbsp;features.</p>

<p class="wp-block-paragraph">In this part, we will cover how to configure button presses to modify properties and tags in Perspective. Using Python scripting can be intimidating at first, but it is a key skill in creating HMI and SCADA systems that can send commands to other systems. This blog will teach you how to use button events to write to component properties and tags.</p>

<h2 class="wp-block-heading">Example 1: Toggling a Boolean Property</h2>

<p class="wp-block-paragraph">First, we will create a button and use it to toggle the enable/disable custom property that we created in the <a href="https://static.dmcinfo.com/latest-thinking/blog/id/10250/creating-dynamic-ignition-perspective-projects-part-one-bindings-and-transforms">last Perspective blog</a>. Drag a button from the component toolbox onto your view. Then change its text property to &quot;Toggle Enable&quot;</p>

<figure class="wp-block-image"><img decoding="async" alt="Add a button object to the view" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/1_add_button.png"  /></figure>

<p class="wp-block-paragraph">Right click your button and select &quot;Configure Events&quot; to open the event popup. You can also use the handy shortcut <strong>Ctrl+J</strong>.</p>

<figure class="wp-block-image"><img decoding="async" alt="Open the button's configure events popup" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/3_config_events_button.png"  /></figure>

<p class="wp-block-paragraph">The left-hand list shows all possible button events. Select &quot;onActionPerformed&quot;, which is triggered when the button is pressed. Then click the plus icon and add a script action for this event. There are many different actions, but scripts are used for manipulating properties and tags.</p>

<figure class="wp-block-image"><img decoding="async" alt="Configure a script action on the onActionPerformed event" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/4_script_action.png"  /></figure>

<p class="wp-block-paragraph">The runAction Python script is called when the button is pressed. We are going to write a short script to read the &quot;enable custom property&quot; value, toggle that value, then write back to the property. First, press the property reference button, find the property in the tree, and click Ok to add the reference to your script.<figure class="wp-block-image"><img decoding="async" alt="Find the custom property reference" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/5_property_reference.png"  /></figure></p>

<p class="wp-block-paragraph">Next, write the following script. The exact reference may change depending on your object names. First,&nbsp;assign the property value to &quot;input&quot;. Then,&nbsp;assign &quot;output = not input&quot; to toggle the bit. Finally, assign &quot;output&quot; back to the original property.</p>

<figure class="wp-block-image"><img decoding="async" alt="This script toggles the boolean property" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/6_toggle_script.png"  /></figure>

<p class="wp-block-paragraph">To test out your script, enter preview mode by clicking the Play Button icon. This simulates your view as it will run on the Ignition webpage. To exit preview mode and go back to editing, press the button again.</p>

<figure class="wp-block-image"><img decoding="async" alt="The preview button lets you test out your page" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/7_preview_button.png"  /></figure>

<p class="wp-block-paragraph">In preview mode, you can&nbsp;press the button to enable and disable the custom property.</p>

<figure class="wp-block-image"><img decoding="async" alt="The button toggles the enable/disable property" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/8_toggle_result.png"  /></figure>

<h2 class="wp-block-heading">Example 2: Incrementing a Numeric Tag</h2>

<p class="wp-block-paragraph">Next, we will learn how to use a button to update a tag value. The core workflow of using a script to manipulate a property is the same, but that property will now be&nbsp;bidirectionally bound to a tag.</p>

<p class="wp-block-paragraph">Create a new button, rename it&nbsp;&quot;counter&quot;, then add a custom property &quot;count&quot; to it. Next, add a tag binding to the custom property and navigate to an integer or float tag on your gateway.&nbsp;<strong>Make sure to select the bidirectional checkbox.</strong>&nbsp;This makes sure that the property can write back to the tag. For help with these steps, see &quot;Tag Binding&quot; in the <a href="https://static.dmcinfo.com/latest-thinking/blog/id/10250/creating-dynamic-ignition-perspective-projects-part-one-bindings-and-transforms">previous Prespective blog</a> installment.</p>

<figure class="wp-block-image"><img decoding="async" alt="Bind the integer counter tag to a custom button property" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/9_bind_int_tag.png"  /></figure>

<p class="wp-block-paragraph">Next, we will update the button text to display the current counter value. Add an expression binding to the button&apos;s text property. Insert the expression shown in the screenshot below. You can use the property reference button on the right side to find your custom property.&nbsp;</p>

<figure class="wp-block-image"><img decoding="async" alt="Bind the text property to the counter tag" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/10_bind_int_text.png"  /></figure>

<p class="wp-block-paragraph">We will now add a script to manipulate the custom property that is bound to the tag. Like the previous example, create a script action on the button&apos;s onActionPerformed event. Next, insert the property reference to your custom property. This script is even simpler than the last. Simply add &quot; += 1 &quot; to the end of your property reference to increment the value by one.</p>

<figure class="wp-block-image"><img decoding="async" alt="This script increments the counter" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/11_counter_increment_script.png"  /></figure>

<p class="wp-block-paragraph">Enter preview mode and click your new button to watch the counter increment on each press. This basic technique of creating a bidirectional tag binding and an event action script can be used for simple and complex behavior.&nbsp;</p>

<figure class="wp-block-image"><img decoding="async" alt="In preview mode, the button increments the counter" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/12_counter_preview.png"  /></figure>

<p class="wp-block-paragraph"><strong>Learn more about DMC&apos;s&nbsp;<a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/ignition-designer-programming">Ignition expertise</a>.&nbsp;&nbsp;<a href="https://static.dmcinfo.com/contact">Contact us</a>&nbsp;to get started on your next HMI, SCADA, or MES project.<br />
<br />
See other blogs in this series: </strong>Creating Dynamic Ignition Perspective Projects<br />
<a href="https://static.dmcinfo.com/latest-thinking/blog/id/10250/creating-dynamic-ignition-perspective-projects-part-one-bindings-and-transforms">Part 1: Bindings and Transforms</a><br />
Part 2: Button Event Actions<br />
<a href="https://static.dmcinfo.com/latest-thinking/blog/id/10252/creating-dynamic-ignition-perspective-projects-part-3-embedded-views-and-flex-containers">Part 3: Embedded Views and Flex Containers</a><br />
<a href="https://static.dmcinfo.com/latest-thinking/blog/id/10253/creating-dynamic-ignition-perspective-projects-part-4-parameters-indirect-bindings-and-flex-repeaters">Part 4: View Parameters, Indirect Bindings, and Flex Repeaters</a><br />
Part 5: Flex Repeaters with Variable Number of Instances (coming soon)<br />
Part 6: Changing Colors and Other Properties (coming soon)</p>
<p>The post <a href="https://static.dmcinfo.com/blog/19118/creating-dynamic-ignition-perspective-projects-part-2-button-event-actions/">Creating Dynamic Ignition Perspective Projects, Part 2: Button Event Actions</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Creating Dynamic Ignition Perspective Projects, Part One: Bindings and Transforms</title>
		<link>https://static.dmcinfo.com/blog/19135/creating-dynamic-ignition-perspective-projects-part-one-bindings-and-transforms/</link>
		
		<dc:creator><![CDATA[Casimir Smith]]></dc:creator>
		<pubDate>Thu, 26 Aug 2021 13:23:56 +0000</pubDate>
				<category><![CDATA[HMI and SCADA]]></category>
		<category><![CDATA[Ignition]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[MES]]></category>
		<category><![CDATA[binding]]></category>
		<category><![CDATA[ignition]]></category>
		<category><![CDATA[transform]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/19135/creating-dynamic-ignition-perspective-projects-part-one-bindings-and-transforms/</guid>

					<description><![CDATA[<p>One of the fastest-growing SCADA/HMI platforms today is Inductive Automation&#8217;s&#160;Ignition. In addition to the well-known&#160;Vision visualization module, Ignition also contains&#160;Perspective, a web-friendly visualization module&#160;that&#160;works in any web browser—even on mobile! Although most Ignition functions work the same across Perspective or Vision, there are some necessary adjustments to work better in a web-friendly environment. This multi-part [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/19135/creating-dynamic-ignition-perspective-projects-part-one-bindings-and-transforms/">Creating Dynamic Ignition Perspective Projects, Part One: Bindings and Transforms</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">One of the fastest-growing SCADA/HMI platforms today is Inductive Automation&#8217;s&nbsp;<a href="https://inductiveautomation.com/ignition/" target="_blank">Ignition</a>. In addition to the well-known&nbsp;<a href="https://inductiveautomation.com/ignition/modules/vision" target="_blank">Vision</a> visualization module, Ignition also contains&nbsp;<a href="https://inductiveautomation.com/ignition/modules/perspective" target="_blank">Perspective</a>, a web-friendly visualization module&nbsp;that&nbsp;works in any web browser—even on mobile!</p>



<p class="wp-block-paragraph">Although most Ignition functions work the same across Perspective or Vision, there are some necessary adjustments to work better in a web-friendly environment. This multi-part blog will serve as a guide to setting up dynamic Perspective screens that take full advantage of its&nbsp;new powerful features.</p>



<p class="wp-block-paragraph">To begin this series, we&#8217;ll&nbsp;focus on starting a Perspective view and creating bindings to tags and properties.&nbsp;We will then&nbsp;use&nbsp;binding transforms to display that information in the correct format.</p>



<h2 class="wp-block-heading" id="h-creating-a-perspective-view-and-label-object">Creating a Perspective View and Label Object</h2>



<p class="wp-block-paragraph">The first step of working with Perspective is creating a view. Views serve the same purpose as Vision windows, but they can also be embedded in other views to act like Vision templates. In the project browser, find Perspective/Views and select <strong>New View</strong>. Give your view a name and keep the container type as a <strong>Coordinate Container</strong>.</p>



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



<p class="wp-block-paragraph">When you open your view, the screen layout will switch to the Perspective view layout. The menu toolbar (1), project browser tree (2), and tag browser (3) are in their usual&nbsp;positions&nbsp;and the central designer panel shows the current view (4). However, the right side of the layout is a bit different. Instead of the Vision property editor in the bottom left, there is the Perspective property editor on the right side. There is also the Perspective component toolbox, which may need to be unhidden by pressing its button.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/3_perspective_layout_marked.png" alt="Perspective designer layout"/></figure>



<p class="wp-block-paragraph">First, create&nbsp;three&nbsp;label objects by dragging them&nbsp;from the toolbox to the view window. When you click on a label, the property editor will show all the properties of that object.&nbsp;Nearly all the properties can be edited, but for now,&nbsp;note the object name in the meta category&nbsp;and&nbsp;the text property that determines what text is displayed.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/4_label_props.png" alt="Label object properties"/></figure>



<h2 class="wp-block-heading" id="h-creating-a-property-binding">Creating a Property Binding</h2>



<p class="wp-block-paragraph"><strong>Tag Binding</strong><br>
On the first label, we will create a tag binding to map the &#8220;text&#8221; property to a numeric tag.</p>



<p class="wp-block-paragraph">To create a binding, hover your mouse over the left side of the property, then click when you see the greyed-out chain symbol. This will open the Edit Binding Popup.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/5_add_label_binding.png" alt="Add binding to label object"/></figure>



<p class="wp-block-paragraph">To create a tag binding, select <strong>Tag</strong> as the binding type, then click the tag button to the right of the Tag Path input box. This will open a list of tags on the current gateway. I have configured a few sample tags already, but you can use any tags available on your gateway. Find the desired tag in the tag tree and click Ok to bind to that tag.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/6_config_label_binding.png" alt="Configure label binding"/></figure>



<p class="wp-block-paragraph"><strong>Property Binding</strong><br>
On our second label, we will create a custom boolean property then bind the &#8220;text&#8221; attribute to that property.</p>



<p class="wp-block-paragraph">Select the second label and add a custom property&nbsp;with the blue <strong>Add Custom Property</strong>&nbsp;button in the property editor. Name it &#8220;enabled&#8221; and&nbsp;set its value to true.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/7_add_custom_prop.png" alt="Add a custom property to the label"/></figure>



<p class="wp-block-paragraph">You can bind to this custom property just as easily as a tag binding. Add a binding to the text property, then select <strong>Property</strong> as the binding type and click the button to the right of the input box to open the property tree. Find your custom prop in<strong> view &gt; root &gt; {label name} &gt; custom &gt; enabled</strong>, then click Ok to add the property binding.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/8_property_binding.png" alt="Bind the text to the new custom property"/></figure>



<p class="wp-block-paragraph"><strong>Expression Binding</strong><br> On our third label, we will create an expression binding, which can use Ignition&#8217;s <a href="https://docs.inductiveautomation.com/docs/8.1/platform/expression-language-and-syntax" target="_blank" rel="noreferrer noopener">Expression language</a> to accomplish a wide variety of calculations.</p>



<p class="wp-block-paragraph">Create another label and add another binding to the text property. Select the <strong>Expression</strong> binding type.&nbsp;Type &#8220;now()&#8221; to return the current date and time, then click Ok to apply the binding to the label.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/9_expression_binding.png" alt="Create an expression binding to show the current date"/></figure>



<p class="wp-block-paragraph">The three labels you&#8217;ve created are now bound to a tag, a property, and an expression. However, these raw values (shown below) are not always what you want to display on your&nbsp;screen. To turn these bindings into more human-readable text, you can use binding transforms.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/10_untransformed.png" alt="The direct bindings are not always formatted as you wish"/></figure>



<h2 class="wp-block-heading" id="h-using-binding-transforms">Using Binding Transforms</h2>



<p class="wp-block-paragraph">Binding transforms take the results of a binding, then manipulate the value to become more useful for your application. This section will show you how to use expression, map, and format transforms.</p>



<p class="wp-block-paragraph"><strong>Expression Transform</strong><br>
Open the binding on the first label&#8217;s tag transform and click&nbsp;<strong>Add Transform</strong>, then select an expression transform. This transform lets you use the binding value as the input to an expression function. Type</p>


<pre>
<strong>&apos;Temperature: &apos; round({value}) + &apos; F&apos;</strong>
</pre>


<p class="wp-block-paragraph">to round the value to the nearest integer and add the label before and after it. You can look at the binding preview at the bottom of the popup to see how your value will be transformed.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/12_expression_transform.png" alt="Add an expression transform"/></figure>



<p class="wp-block-paragraph"><strong>Map Transform</strong><br>
We will use a map transform to change the enable/disable boolean to show enabled/disabled as text. Open the boolean property binding and add a Map Transform. Click the plus icon to add new maps for &#8220;true&#8221; and &#8220;false&#8221;, then type in the desired text for true and false. The map transform also works for integers&nbsp;and even ranges of numbers!</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/13_map_transform.png" alt="Add a map transform"/></figure>



<p class="wp-block-paragraph"><strong>Format Transform</strong><br>
The format transform is used to display numbers and dates in your&nbsp;desired format. Open the datetime expression binding and add a Format Transform. Select the datetime type and choose your desired datetime format. The preview will show how the date will be displayed on the label.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/14_format_transform.png" alt="Add a format transform"/></figure>



<p class="wp-block-paragraph">After we have applied our bindings and transforms, the labels now show tag data in an&nbsp;easy-to-read format.</p>



<p class="wp-block-paragraph"><br>
<br>
<strong>Learn more about DMC&#8217;s&nbsp;<a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/ignition-designer-programming">Ignition expertise</a>.&nbsp;&nbsp;<a href="https://static.dmcinfo.com/contact">Contact us</a>&nbsp;to get started on your next HMI, SCADA, or MES project.</strong><br>
&nbsp;</p>
<p>The post <a href="https://static.dmcinfo.com/blog/19135/creating-dynamic-ignition-perspective-projects-part-one-bindings-and-transforms/">Creating Dynamic Ignition Perspective Projects, Part One: Bindings and Transforms</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
