<?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>Jason Mayes, Author at DMC, Inc.</title>
	<atom:link href="https://static.dmcinfo.com/blog/author/jasonm/feed/index.xml" rel="self" type="application/rss+xml" />
	<link></link>
	<description></description>
	<lastBuildDate>Thu, 03 Sep 2026 20:38:48 +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>Jason Mayes, Author at DMC, Inc.</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Advancing Manufacturing with Intelligent Automation</title>
		<link>https://static.dmcinfo.com/blog/15931/advancing-manufacturing-with-intelligent-automation/</link>
		
		<dc:creator><![CDATA[Jason Mayes]]></dc:creator>
		<pubDate>Fri, 11 Oct 2024 14:08:43 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[Programmable Automation]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/15931/advancing-manufacturing-with-intelligent-automation/</guid>

					<description><![CDATA[<p>Manufacturing is increasingly reliant on intelligent automation. Recent events have proven that investments in automation can lead to competitive advantages—production can be scaled up or down quickly, rapid changes in the workforce can be more easily absorbed, flexible manufacturing can allow new or custom products to be produced without retooling,&#160; real-time data can be used [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/15931/advancing-manufacturing-with-intelligent-automation/">Advancing Manufacturing with Intelligent Automation</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Manufacturing is increasingly reliant on intelligent automation. Recent events have proven that investments in automation can lead to competitive advantages—production can be scaled up or down quickly, rapid changes in the workforce can be more easily absorbed, flexible manufacturing can allow new or custom products to be produced without retooling,&nbsp; real-time data can be used to quickly correct issues in quality and increase yield, and many more. So, as more and more companies are moving towards automation, what features and technologies should you be aware of to ensure that you maximize your ROI? Today, I&#8217;m going to share a few of my thoughts on the automation industry and some of the trends we&#8217;ve seen in the evolution of simple to <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence">intelligent manufacturing automation</a>.</p>



<h2 id="h-smart-manufacturing-and-intelligent-automation" class="wp-block-heading">Smart Manufacturing and Intelligent Automation</h2>



<p class="wp-block-paragraph">To get started, there are a lot of automation buzzwords out there that you may recognize: Artificial Intelligence (AI), <a href="https://static.dmcinfo.com/services/application-development/machine-learning">Machine Learning (ML)</a>, Augmented Reality (AR), Virtual Reality (VR), Blockchain, the Internet of Things (IoT), the <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/industrial-internet-of-things">Industrial Internet of Things (IIoT)</a>, Cobots, Integrated Robotics, Additive Manufacturing, <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/vision-inspection">Machine Vision</a>, Flexible Manufacturing, Smart Sensors, Digital Twins, Predictive Maintenance, Key Performance Indicators (KPIs), <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/mes-programming/oee-and-downtime-tracking">Overall Equipment Effectiveness (OEE)</a>, Automated Guided Vehicles (AGVs), Software as a Service (SaaS), the Edge, Edge Processing, Cloud…it goes on and on. The exciting thing to know is that each of these is, to some level, real, and each of these has its place and can be used independently or additively to add intelligence to a system.</p>



<p class="wp-block-paragraph">As an automation system adds technologies, there are additional buzzwords used to describe the result such as Industry 4.0, Smart Factory, Smart Manufacturing, and Intelligent Automation. I like the last two because they do the best job of holistically describing the technology-driven approach of utilizing connected machinery, software, and tools to identify and improve manufacturing performance. Smart Manufacturing is not an off-the-shelf technology but is instead the combination of multiple technologies to enable the use of live data for real-time optimization of plant operations.</p>



<h2 id="h-data-and-connectivity" class="wp-block-heading">Data and Connectivity</h2>



<p class="wp-block-paragraph">Data is the backbone of smart manufacturing, enabling a more connected, efficient, and responsive automation system. Real-time communication between machines, sensors, and central systems allows for immediate monitoring of equipment performance and production processes, leading to faster response times to any issues that arise. And with that data comes enhanced efficiency through the reduction of downtime and optimization of processes.</p>



<p class="wp-block-paragraph">But a smart manufacturing system is more than just the automation controller (usually a programmable logic controller known as a PLC). Sharing data across different levels of the Automation Pyramid—from the plant floor to the cloud—opens up new ways to streamline operations and connect the information technology (IT) and operational technology (OT) worlds. This data connectivity can link both enterprise systems and manufacturing equipment to provide better visibility into production, increase efficiency by flexibly manufacturing exactly what you need, and reduce cost by minimizing waste and optimizing resource usage.</p>



<h2 id="h-isa-95-and-the-automation-pyramid" class="wp-block-heading">ISA-95 and the Automation Pyramid</h2>



<p class="wp-block-paragraph">I mentioned the Automation Pyramid as it&#8217;s an important part of an Intelligent Automation system. ISA-95, an international standard for integrating enterprise and control systems, provides a model and terminology for aligning manufacturing operations with business processes. The standard offers a layered approach to manufacturing operations often referred to as the Automation Pyramid. This pyramid breaks operations into distinct levels, each building on top of the other, and provides a structured approach to data flow through a common data exchange framework.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Automation-Pyramid-DMC.png" alt="Automation pyramid or layered manufacturing operations"/></figure>



<p class="wp-block-paragraph">The bottom of the Automation Pyramid (Level 0) is the physical process and the Field Level sensors that interact with it. Building upon that is the Control Level (Level 1), where inputs are being monitored, decisions are made, and outputs are controlled. The Supervisory Level (Level 2) sits on top of the Control Level. This is where <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming">Human-Machine Interfaces (HMI) and Supervisory Control and Data Acquisition (SCADA)</a> applications lie to oversee operations and provide operators with the necessary information needed to monitor and control the process. Level 4 adds Manufacturing Operations Management (MOM) and <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/mes-programming">Manufacturing Execution Systems (MES)</a> to optimize the manufacturing process, integrate quality control, and provide visibility into the production process to facilitate the efficient execution of manufacturing tasks. It is also the layer that interfaces with the top layer of the pyramid, the Enterprise layer (Layer 5), which includes business planning, inventory, logistics, and other ERP functions. If followed when architecting and implementing a Smart Manufacturing system, the Automation Pyramid provides consistent and interoperable data exchange across all levels of manufacturing operations.</p>



<p class="wp-block-paragraph">Advances in the tools and technologies available at all layers of the pyramid have led to making it much easier to implement Smart Manufacturing systems that follow the ISA-95 model.</p>



<h3 id="h-field-devices" class="wp-block-heading">Field Devices</h3>



<p class="wp-block-paragraph">In the past decade, there has been an explosion in the number of available sensors, actuators, and drives. Smaller form factors and better electronics provide more sensing options in challenging environments. Smart sensors and actuators are doing more processing at the device level, increased adoption of AS-i and IO-Link makes sensors easier than ever to connect, and the increased data available provides more in-depth diagnostics and configuration options. Sensors can now be found with Wi-Fi, Bluetooth, Zigbee, and even cellular connections to allow for direct MQTT communication with IoT platforms running in the Cloud or wireless connectivity to more traditional control systems. Variable Frequency Drives (VFDs) are including built-in data to feed AI/ML models, like those integrated into <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/rockwell-factorytalk">Rockwell&#8217;s FactoryTalk</a> Analytics <a href="https://www.rockwellautomation.com/en-us/products/software/factorytalk/maintenancesuite/factorytalk-analytics-guardianai.html">Guardian AI</a>, to turn drives into sensors and provide predictive maintenance functionality. Low-cost VFDs, like the Siemens G120C series, allow for simple commissioning and diagnostics over Wi-Fi using only a cell phone. More data, easier integration, and better reliability mean the intelligent manufacturing automation systems being built today will provide better long-term value.</p>



<h3 id="h-control-devices" class="wp-block-heading">Control Devices</h3>



<p class="wp-block-paragraph"><a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming">PLCs</a> have long been the workhorse of the factory—designed for use in less-than-ideal operating conditions, running 24/7 for years at a time, and providing flexibility for expansion. While improvements in hardware continue to occur, it&#8217;s been improvements in software that have really led to smarter applications. Motion controllers have largely disappeared, replaced by integrated motion in controllers like the <a href="https://static.dmcinfo.com/latest-thinking/blog/id/9391/siemens-s7-1500-plc-troubleshooting-tips-and-tricks">Siemens S7-1500T</a>, which can support up to 128+ axis. Rockwell&#8217;s Integrated Robotics now allows robots to be directly integrated with ControlLogix PLCs, and unified machine control allows OEMs to more easily integrate, control, and coordinate advanced motion technologies. Both of these solutions simplify machine operation and maintenance for the end user, who must only understand and support one system. Soft PLCs (PC-based PLCs), like those developed by <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/beckhoff-and-twincat-3-programming">Beckhoff</a>, can now turn almost any PC into a real-time control system while integrating web-based HMIs like TwinCAT HMI on the same hardware. Increased adoption of global communication standards, like OPC-UA, by all manufacturers means it&#8217;s easier than ever to communicate between devices.</p>



<p class="wp-block-paragraph">While traditional <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/motion-control-engineering-and-servo-systems">motion control</a> applications have been absorbed into PLCs, incredible <a href="https://static.dmcinfo.com/latest-thinking/blog/id/9786/automation-with-an-arduino-plc-or-custom-embedded-controls">new technologies</a> have arisen to provide faster, more flexible, and easier-to-program smart conveyance systems. Rockwell&#8217;s <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/magnemotion-programming">MagneMotion</a> Lite and QuickStick platforms provide a modular and scalable material handling solution with precise positioning, routing, traffic control, and no maintenance. Beckhoff&#8217;s XPlanar allows for 2D transport and six (!!) degrees of freedom motion that can open up new worlds for machine and process designers.</p>



<p class="wp-block-paragraph">Across all of these, improvements in development IDEs allow companies like DMC to reduce time and cost by leveraging more reusable code and providing more flexible solutions with increasingly modular architectures. Improved simulation software allows for advanced simulation and even virtual commissioning, ensuring that machine and factory start-ups go smoothly and on schedule. New advances allow for better collaboration on multi-developer projects, facilitate code reviews and merges, and integrate with third-party source control tools like GIT.</p>



<h3 id="h-supervision-hmi-amp-scada" class="wp-block-heading">Supervision (HMI &amp; SCADA)</h3>



<p class="wp-block-paragraph">HMI systems have long been hardware-based—you bought a physical device and programmed it to communicate with a PLC or controller. While this can be convenient, and hardware-based HMIs are still being used, the modern trend has seen the evolution of web-based applications that can turn any computer, phone, or tablet into a cutting-edge HMI. Openness and extensibility are the name of the game, as platforms such as Rockwell&#8217;s FT Optix, <a href="https://static.dmcinfo.com/latest-thinking/blog/id/10322/getting-started-with-wincc-unified">Siemens WinCC Unified</a>, and Beckhoff&#8217;s TwinCAT HMI allow for HMI development that can be deployed to an almost limitless number of targets. Object-oriented designs, web-based tools, simulation testing, and more powerful scripting mean development times can be reduced while delivering more advanced applications.</p>



<p class="wp-block-paragraph">In the world of SCADA, we&#8217;ve seen Inductive Automation&#8217;s <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/ignition-programming">Ignition</a> eat up market share as it continues to evolve. Its versatile, scalable, and modular architectures allow users to scale applications up as needed, while its cross-platform compatibility and support of industry standards like OPC UA, MQTT, and RESTful APIs facilitate integration with a wide array of devices and systems. However, the combination of its user-friendly development environment and transparent and cost-effective pricing model have really been the drivers of its strong growth. Despite all of that, the traditional players are still forging forward with continuous improvements. Aveva (formerly Wonderware), Iconics, Siemens WinCC, and Rockwell FactoryTalk SE continue to see wide use, and each offers its own compelling advantages. For example, <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/wincc-open-architecture-development">Siemens&#8217; WinCC OA platform</a> offers incredible flexibility and scalability, being used for some of the largest and most important systems in the world due to its performance and reliability.</p>



<p class="wp-block-paragraph">Regardless of the platform, the trend is the same. More open communication with devices and systems, tighter integration with enterprise databases like Oracle and SQL, and cross-platform web-based options for access and control. As these platforms become more powerful and new tools and features are released, we see the increased movement of traditional MES and MOM features into the SCADA layer (things like OEE, for example).</p>



<h3 id="h-management-mes" class="wp-block-heading">Management (MES)</h3>



<p class="wp-block-paragraph">At the top of the OT space, the MES layer is the bridge between our traditional factory <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence"><strong>automation systems</strong></a> and business systems. Need to integrate inventory tracking with your manufacturing process? Do FDA regulations require detailed track and trace capabilities to tie raw ingredients to finished products? Want to optimize your production schedule based on your real-time orders to minimize waste? This is where MES (Manufacturing Execution Systems) comes in. They are often highly customized based on the organization and the toolchains in use but provide configurable models and frameworks to solve the most common problems. At DMC, we have frequently utilized <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/mes-programming/sepasoft-programming">Sepasoft</a>, Tulip, and <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/mes-programming/simatic-it-services">Simatic IT</a> to build problem-solving MES systems for our clients.</p>



<p class="wp-block-paragraph">Advances in the MES world continue to follow the same trends we see elsewhere:</p>



<ol class="wp-block-list">
<li><strong>Smoother integration with external systems and smart devices.</strong> MES systems are increasingly integrating with IoT devices and smart sensors to collect real-time data from the shop floor. This integration enhances data visibility and allows for better monitoring and control of the manufacturing process. Additionally, the use of edge computing in MES helps process data closer to the source, reducing latency and providing improved analytics and decision-making.</li>



<li><strong>Advanced data analytics and AI.</strong> Predictive analytics, machine learning, and AI are being integrated to better analyze the huge amounts of data available, optimize production schedules, and improve decision-making processes.</li>



<li><strong>Expanded API support.</strong> Modern platforms are continuing to improve already robust APIs and web services for integration into even more enterprise systems, data sources, and third-party applications.</li>



<li><strong>Moving to the cloud.</strong> Cloud-based systems provide better scalability without the need for significant infrastructure improvements. Cloud MES deployments can pull data from multiple sites to allow for enterprise-level reporting and also be a central repository for reusable code across all MES deployments.</li>



<li><strong>Security.</strong> Cybersecurity should have been mentioned at every level of the pyramid, but with the level of data available in MES systems, continued security updates to protect from cyber threats.</li>



<li><strong>Digitalization.</strong> Replacing pieces of paper, excel documents, etc., with things like digital forms, digital work instructions, or CAD drawings through the MES screen. To eliminate the need for manually typing data from paper into a database or Excel for analysis, the information is directly entered into a system that both stores and analyzes it, providing valuable insights for decision-making.</li>
</ol>



<h3 id="h-enterprise-erp" class="wp-block-heading">Enterprise (ERP)</h3>



<p class="wp-block-paragraph">Finally, we&#8217;re at the top of the pyramid! ERP is a software system used to manage and integrate an organization&#8217;s core business processes. ERP systems facilitate the flow of information between all business functions within the organization, providing a unified view of operations and enabling better decision-making. In most cases, these systems are outside of the OT domain, although we frequently integrate with them to facilitate a truly smart manufacturing system.</p>



<h2 id="h-the-benefits-of-intelligent-automation" class="wp-block-heading">The Benefits of Intelligent Automation</h2>



<p class="wp-block-paragraph">So, what&#8217;s the big deal? Why move beyond simple automation? This is a good question and not one with a universal answer. For some organizations, smart manufacturing and intelligent automation may not be necessary. There can be a high level of upfront investment, and the ROI may not be there to justify the business case. But for the others, the benefits can be huge. Increased efficiency, reduced downtime, better visibility in the manufacturing process, the ability to scale production to meet demand, flexibility to allow for new products and features, catching out-of-tolerance products earlier, and tweaking the process to eliminate scrap…the list can go on.</p>



<p class="wp-block-paragraph">I&#8217;ve worked with customers to build smart manufacturing cells linked to <a href="https://static.dmcinfo.com/latest-thinking/case-studies/view/id/460/automated-tire-storage-and-retrieval-control-system">their inventory and ordering systems</a>. Through intelligent automation, we can flexibly manufacture products as they are sold— shipping custom-ordered products within two hours of order placement—without a need for multiple production lines and with significantly reduced labor costs. We&#8217;ve implemented <a href="https://static.dmcinfo.com/latest-thinking/case-studies/view/id/351/factorytalk-metrics-oee-reporting-and-production-monitoring">OEE tracking systems</a> to identify where and when bottlenecks occur so resources can be properly allocated and efficiency can be maximized. By utilizing the diagnostics available, we developed lines that allow for quick troubleshooting so that downtime can be minimized and systems can be repaired quickly. We&#8217;ve developed <a href="https://static.dmcinfo.com/latest-thinking/case-studies/view/id/604/sepasoft-mes-solution-for-food-processing-facility">track-and-trace applications</a> in the food and beverage industry that allow manufacturers to precisely identify which products need to be recalled in the event of discovered contamination. With the ever-evolving technologies, the ever-growing availability of data, improving software, and a large team of automation experts, DMC can help you achieve the results you are looking for.</p>



<h2 id="h-what-we-can-do-for-you" class="wp-block-heading">What We Can Do For You</h2>



<p class="wp-block-paragraph">This month marks my 14th anniversary at DMC and with it, 14 years in the Automation Industry. In that time, I have had the opportunity to be a part of some truly amazing projects and to work with some incredible clients. Looking back, it&#8217;s fun to think about the transformation and growth I&#8217;ve been involved with as our clients have used increasingly more advanced technologies to meet their business needs. While the intrinsic satisfaction of seeing our clients reach new levels of success provides a lot of motivation, 2024 has been a fun year due to the level of national recognition DMC has received for being a leader in the Automation and Controls industry.</p>



<p class="wp-block-paragraph">In March, DMC was awarded the national <a href="https://static.dmcinfo.com/latest-thinking/blog/id/10579/dmc-receives-the-2024-rockwell-system-integrator-innovation-award">Rockwell Automation System Integrator Innovation Award</a>. The turnkey design/build project for which DMC was recognized provided our client with a truly flexible manufacturing cell capable of producing customized products from 100+ base SKUs with minimal operator involvement. This step helped our client move from simple automation to smart manufacturing overnight and delivered immediate results to their bottom line.</p>



<p class="wp-block-paragraph">&#8220;The System Integrator Innovation Award recognizes DMC for demonstrating an innovation solution for their customer that helped solve and address business problems, drove transformation, and delivered meaningful and measurable business outcomes using best-in-breed technologies,&#8221; Amy L. Graff, North America Partner Marketing Manager at Rockwell Automation, said.</p>



<p class="wp-block-paragraph">Shortly after, DMC was named the <a href="https://static.dmcinfo.com/latest-thinking/blog/id/10607/dmc-recognized-as-csia-2024-integrator-member-of-the-year">2024 Control System Integrator Association Integrator of the Year Award</a>. This award recognizes DMC&#8217;s significant contributions to the advancement of the association and the automation industry as a whole.</p>



<p class="wp-block-paragraph">So, whether you are just starting your journey toward automation or looking to take the next step toward smart manufacturing, contact us and see what DMC can do for you.</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>Connect Every Layer of Intelligent Manufacturing</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> solutions for integrating plant-floor controls, <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/ignition-programming/" data-type="page" data-id="509">SCADA</a>, MES, IIoT, and real-time production data.</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/15931/advancing-manufacturing-with-intelligent-automation/">Advancing Manufacturing with Intelligent Automation</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Visit DMC at AWC Best Fest This October</title>
		<link>https://static.dmcinfo.com/blog/20836/visit-dmc-at-awc-best-fest-this-october/</link>
		
		<dc:creator><![CDATA[Jason Mayes]]></dc:creator>
		<pubDate>Mon, 07 Oct 2019 10:11:03 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Houston]]></category>
		<category><![CDATA[Locations]]></category>
		<category><![CDATA[Special Events]]></category>
		<category><![CDATA[Tilt Table Demo]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/20836/visit-dmc-at-awc-best-fest-this-october/</guid>

					<description><![CDATA[<p>DMC is excited to exhibit&#160;at this fall&apos;s AWC Best Fest on October 24, 2019. This event will take place at St. Arnolds Brewery in Houston, TX from 5 p.m. to 9 p.m. AWC&apos;s Best Fest will include seven different tech seminars, a technology innovations tradeshow, and entertainment including a beer hall, brewery tours, and prize [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/20836/visit-dmc-at-awc-best-fest-this-october/">Visit DMC at AWC Best Fest This October</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">DMC is excited to exhibit&nbsp;at this fall&apos;s <a href="https://www.bestfest.us/" target="_blank">AWC Best Fest</a> on <strong>October 24, 2019.</strong> This event will take place at <strong><a href="https://www.saintarnold.com/" target="_blank">St. Arnolds Brewery</a> in Houston, TX from 5 p.m. to 9 p.m.</strong></p>

<p class="wp-block-paragraph">AWC&apos;s Best Fest will include seven different tech seminars, a technology innovations tradeshow, and entertainment including a beer hall, brewery tours, and prize giveaways. This event is an excellent opportunity to network with other industry professionals and learn how digitalization can help you engineer safer, faster, cheaper, and better.</p>

<p class="wp-block-paragraph">Come check out DMC&apos;s table at this event and network with our engineers. Our <a href="/latest-thinking/blog/id/9850/dmc-rolls-out-new-tilt-table-demos">Tilt Table Demo</a> will be live at our table!&nbsp;</p>

<h2 class="wp-block-heading">Event Details:</h2>

<p class="wp-block-paragraph"><a href="https://www.google.com/maps/place/Saint+Arnold+Brewing+Company/@29.771119,-95.3507547,17z/data=!3m1!4b1!4m5!3m4!1s0x8640bed4ee07bf45:0x22bbfc598ec6fabb!8m2!3d29.771119!4d-95.348566" target="_blank">St. Arnolds Brewing Company<br />
2000 Lyons Avenue<br />
Houston, TX 77020</a></p>

<p class="wp-block-paragraph"><strong>October 24, 2019<br />
5:00pm &#8211; 9:00pm</strong></p>

<p class="wp-block-paragraph"><iframe allowfullscreen="" frameborder="0" height="450" src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3463.2255494993815!2d-95.35075468489129!3d29.77111898198252!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x8640bed4ee07bf45%3A0x22bbfc598ec6fabb!2sSaint%20Arnold%20Brewing%20Company!5e0!3m2!1sen!2sus!4v1570542590524!5m2!1sen!2sus" style="border:0;" width="100%"><!--cke_bookmark_199S--><!--cke_bookmark_199E--><!--cke_bookmark_200S--><!--cke_bookmark_200E--></iframe></p>

<p class="wp-block-paragraph">&nbsp;</p>

<h2 class="wp-block-heading">DMC&apos;s Tilt Table Demo</h2>

<figure class="wp-block-image"><img decoding="async" alt="DMC's Tilt Table Demo Maze" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Tilt-Table-Demo-Maze-Setting.gif"  /></figure>

<p class="wp-block-paragraph">Learn more about our&nbsp;<a href="/about/partners/siemens-solution-partner">partnership with Siemens</a>&nbsp;and our work in&nbsp;<a href="/services/manufacturing-automation-and-intelligence/services/manufacturing-automation-and-intelligence">Manufacturing Automation and Intelligence</a>&nbsp;as well as the <a href="/about/industries-served/food-and-beverage-manufacturing-automation">food and beverage industry</a>.</p>

<p class="wp-block-paragraph">Feel free to&nbsp;<a href="/contact">contact us</a>&nbsp;with any questions.</p>
<p>The post <a href="https://static.dmcinfo.com/blog/20836/visit-dmc-at-awc-best-fest-this-october/">Visit DMC at AWC Best Fest This October</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>DMC at AWC Best Fest in San Antonio</title>
		<link>https://static.dmcinfo.com/blog/22046/dmc-at-awc-best-fest-in-san-antonio/</link>
		
		<dc:creator><![CDATA[Jason Mayes]]></dc:creator>
		<pubDate>Mon, 18 Feb 2019 09:56:04 +0000</pubDate>
				<category><![CDATA[Dallas]]></category>
		<category><![CDATA[Houston]]></category>
		<category><![CDATA[Special Events]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/22046/dmc-at-awc-best-fest-in-san-antonio/</guid>

					<description><![CDATA[<p>DMC is excited to exhibit&#160;at AWC Best Fest&#160;on February 21, 2019. This event will take place at Top Golf in San Antonio, Texas. DMC is proud to help sponsor this event. AWC&apos;s Best Fest will include four different tech seminars, a technology tradeshow, entertainment with a high-tech driving range and multiple games.&#160; Come check out [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/22046/dmc-at-awc-best-fest-in-san-antonio/">DMC at AWC Best Fest in San Antonio</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">DMC is excited to exhibit&nbsp;at <strong>AWC Best Fest&nbsp;on February 21, 2019</strong>. This event will take place at Top Golf in San Antonio, Texas. DMC is proud to help sponsor this event.</p>

<p class="wp-block-paragraph">AWC&apos;s Best Fest will include four different tech seminars, a technology tradeshow, entertainment with a high-tech driving range and multiple games.&nbsp;</p>

<p class="wp-block-paragraph">Come check out DMC&apos;s table at this event and network with our engineers. Our <a href="https://www.youtube.com/watch?v=GL9mLcfOm_k" target="_blank">Tilt Table Demo</a> will be live at our table.</p>

<h2 class="wp-block-heading">Event Details:</h2>

<p class="wp-block-paragraph"><strong>February 21, 2019<br />
3 p.m. &#8211; 8 p.m.&nbsp;</strong></p>

<p class="wp-block-paragraph"><strong>Top Golf<br />
5539 North Loop 1604 W<br />
San Antonio, Texas 78249</strong></p>

<h2 class="wp-block-heading">DMC&apos;s Tilt Table Demo</h2>

<p class="wp-block-paragraph"><iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/GL9mLcfOm_k" width="560"><!--cke_bookmark_225S--><!--cke_bookmark_225E--></iframe></p>

<p class="wp-block-paragraph">Learn more about our <a href="/about/partners/siemens-solution-partner">partnership with Siemens</a> and our work in <a href="/services/manufacturing-automation-and-intelligence/services/manufacturing-automation-and-intelligence">Manufacturing Automation and Intelligence.</a>&nbsp;</p>

<p class="wp-block-paragraph">Feel free to <a href="/contact">contact us</a> with any questions.</p>
<p>The post <a href="https://static.dmcinfo.com/blog/22046/dmc-at-awc-best-fest-in-san-antonio/">DMC at AWC Best Fest in San Antonio</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>DMC Cares About Houston</title>
		<link>https://static.dmcinfo.com/blog/23918/dmc-cares-about-houston/</link>
		
		<dc:creator><![CDATA[Jason Mayes]]></dc:creator>
		<pubDate>Thu, 07 Sep 2017 10:16:43 +0000</pubDate>
				<category><![CDATA[Houston]]></category>
		<category><![CDATA[DMC Cares]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/23918/dmc-cares-about-houston/</guid>

					<description><![CDATA[<p>Houston was hit hard by Hurricane Harvey last month. Thousands of homes were flooded&#160;and families are struggling to clean up before they can even begin to think about rebuilding. From headline stories about Mattress Mack, JJ Watt, and the Cajun Navy, to the smaller news stories that may go unnoticed, it&#8217;s been amazing to see the [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/23918/dmc-cares-about-houston/">DMC Cares About Houston</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Houston was hit hard by Hurricane Harvey last month. Thousands of homes were flooded&nbsp;and families are struggling to clean up before they can even begin to think about rebuilding.</p>



<p class="wp-block-paragraph">From headline stories about <a href="https://time.com/4922108/hurricane-harvey-mattress-mack-houston/" type="link" id="https://time.com/4922108/hurricane-harvey-mattress-mack-houston/" target="_blank" rel="noreferrer noopener">Mattress Mack</a>, <a href="http://abcnews.go.com/Entertainment/humanity-steps-jj-watt-raising-27-million-harvey/story?id=49661390" target="_blank">JJ Watt</a>, and the <a href="http://www.cnn.com/2017/08/29/us/harvey-cajun-navy/index.html" target="_blank">Cajun Navy</a>, to the smaller news stories that may go unnoticed, it&#8217;s been amazing to see the city band together and come to each other&#8217;s aid. In my neighborhood, we received 41.25&#8243; of rain in just over three days. While I was fortunate to stay dry, I had neighbors just blocks away with their homes entirely flooded.</p>



<p class="wp-block-paragraph">Throughout our neighborhood, everyone was out in boats, canoes, kayaks, jet skis, and even floating air mattresses down the streets to help those who were flooded get to safety. This wasn&#8217;t even after the hurricane left &#8211; this is while the rain was still falling. The picture below shows what our neighborhood (Meyerland/Westbury area of Houston) looked like Sunday morning (8/27).</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/20170827_122613-2.jpg" alt="Westbudy/Meyerland Area During Harvey"/></figure>



<p class="wp-block-paragraph">DMC was fortunate in that our Houston based team dodged the worst of it and came away largely unscathed, but we&#8217;ve all been finding ways to help out. However, with the Labor Day holiday&nbsp;now past and Houston largely heading back to work, the available pool of volunteers has been dropping fast, so DMC decided to shut down for the day, fill some of the voids, and help where we could.</p>



<h2 id="h-helping-out-with-harvey-relief-hub" class="wp-block-heading">Helping Out with Harvey Relief Hub</h2>



<p class="wp-block-paragraph">We were able to connect with the Harvey Relief Hub, a local volunteer-led hub for hurricane assistance that is based near our Houston office. While we were unsure of what we would be doing, they were in need of volunteers and said they could find a place for us to help out. We arrived at their donation intake center/distribution center at 7:30 am on September 6th&nbsp;and were immediately put to work.</p>



<p class="wp-block-paragraph">Harvey Relief Hub has had a steady stream of donations coming in and needed help sorting and distributing the items&nbsp;throughout the facility. They were using a warehouse to set up a temporary supply &#8216;store&#8217; (everything was free) where people affected by the hurricane could come in and &#8216;shop&#8217; for their needs. It was divided into sections: Cleaning Supplies, Food, Water, Toiletries, Diapers, Clothing, Household Items, etc.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/pic2.jpg" alt="Harvey Relief Hub headquarters in Houston"/></figure>



<p class="wp-block-paragraph">While there were a large number of families that came in to find what they needed, other groups emailed or phoned in their needs and volunteers pulled together the supplies to either be delivered or picked up. This included other relief distribution centers that had specific needs like &#8220;Size 1 Diapers and Wipes&#8221; or &#8220;Bleach, Flat Shovels, and Mosquito Repellent.&#8221;</p>



<h2 id="h-what-else-can-we-do" class="wp-block-heading">What Else Can We Do?</h2>



<p class="wp-block-paragraph">In addition to relief supplies, the Harvey Relief Hub also works to connect volunteers with community members in need. Anyone can send in a request through their website or through email and the Relief Hub will try to match up volunteers. One request they received was from a family in the Barker Cypress area of Houston in need of assistance to help clean out their home. They had been flooded during the hurricane and were unable to return, because of the high waters, for over a week. Without knowing much more, we volunteered&nbsp;to help and headed west on I-10.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/image2.jpg" alt="DMC on the road to help out"/></figure>



<h2 id="h-tearing-it-down-to-build-it-back-up" class="wp-block-heading">Tearing it Down to Build it Back Up</h2>



<p class="wp-block-paragraph">Upon arriving, it was easy to see the entire area had been flooded. Some buildings had been marked as &#8220;OK&#8221; by first responders as they had gone through the neighborhood making sure everyone was out. Most of the houses saw close to 3&#8242; of water&nbsp;and the home we arrived to clean out&nbsp;had 2-3&#8242; of water. However, we saw high water marks as high as 5&#8242; in some areas.</p>



<p class="wp-block-paragraph">The couple who owned the home had lived there for nearly 40 years and never before had any water damage, but were now in the process of pulling out every piece of furniture they owned out of the house to start cleaning it out.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/20170906_123117_resized_1.jpg" alt="Starting the Cleanup"/></figure>



<p class="wp-block-paragraph">Our team of six&nbsp;was able to pretty quickly tear out all of the carpet and carpet pads from the remaining&nbsp;inch or two of standing water in the house. This allowed the last of the water to start draining out. With some of us removing doors, door frames, baseboards, and drywall while others pulled wheel barrows and large trash cans of debris out to the curb, we were able to tear the house down to the studs in a matter of hours.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Cecilia-nand-JMF-Cleaning-up.jpg" alt="Cecilia and John Michael Frullo clean up after demolition of flood damaged house."/></figure>



<p class="wp-block-paragraph">While there&nbsp;was still an enormous amount of work to be done, even in this house, it did feel good to be able to help out a family that was left in such disarray. The best part of the day was taking a break from the demolition to drink some Gatorade and eat pizza with some Houstonians we had never before met. Even surrounded by 6 and 8-foot piles of drywall, furniture, and insulation, the family was able to take the time to share some stories and laughs with our team.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/20170906_1514450_resized_1.jpg" alt="New friends in Houston"/></figure>



<h2 id="h-dmc-cares" class="wp-block-heading">DMC Cares</h2>



<p class="wp-block-paragraph">We couldn&#8217;t have imagined that when we began our <a href="https://static.dmcinfo.com/latest-thinking/blog/id/9291/dmc-cares-guerrilla-giving-initiative">DMC Cares</a>&nbsp;and gift matching initiatives it would lead us to help clean up after a historic hurricane and rainfall.&nbsp;The program&nbsp;is part of DMC&#8217;s continued work to help qualified non-profit organizations that benefit the communities in which DMC employees live and work. While we couldn&#8217;t prepare for the rain, we can prepare to help and hope to continue to do so.</p>



<h2 id="h-how-you-can-help" class="wp-block-heading">How You Can Help</h2>



<p class="wp-block-paragraph">If you&#8217;re looking to provide help, either as a company or an individual, consider donating to one of the many relief organizations doing great work around Houston. We can personally vouch that the Harvey Relief Hub is doing good things. The <a href="https://www.redcross.org/donate/hurricane-harvey?scode=RSG00000E017&amp;utm_campaign=Harvey&amp;gclid=Cj0KCQjw3MPNBRDjARIsAOYU6x-EASyVv_NddFY55vhB7-jDcegLbIJDv9qj36xD_qmODacdEyrVMmsaAvSIEALw_wcB&amp;gclsrc=aw.ds&amp;dclid=CKSw6cXek9YCFYcMPwoddccAXw" target="_blank">Red Cross</a>, <a href="https://give.salvationarmyusa.org/give/164006/#!/donation/checkout" target="_blank" rel="noreferrer noopener">Salvation Army</a>, <a href="http://www.houstonfoodbank.org/get-involved/harvey-disaster-relief/" target="_blank">Houston Foodbank</a>, and <a href="https://www.youcaring.com/victimsofhurricaneharvey-915053" target="_blank">J.J. Watt </a>are all doing great things as well.</p>
<p>The post <a href="https://static.dmcinfo.com/blog/23918/dmc-cares-about-houston/">DMC Cares About Houston</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Set Up an MRP-based Ring Network in TIA Portal</title>
		<link>https://static.dmcinfo.com/blog/24074/how-to-set-up-an-mrp-based-ring-network-in-tia-portal/</link>
		
		<dc:creator><![CDATA[Jason Mayes]]></dc:creator>
		<pubDate>Fri, 21 Jul 2017 08:55:03 +0000</pubDate>
				<category><![CDATA[Houston]]></category>
		<category><![CDATA[Motion Control]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[Oil and Gas]]></category>
		<category><![CDATA[PROFINET]]></category>
		<category><![CDATA[WinCC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/24074/how-to-set-up-an-mrp-based-ring-network-in-tia-portal/</guid>

					<description><![CDATA[<p>One of the great, and underused, features in TIA Portal is the Network Topology tab of &#8220;Devices and Networks.&#8221; It can enable you to accomplish a number of advanced tasks while simultaneously providing more in-depth network diagnostics. Today, I want to quickly show you how you can use Network Topology to configure a MRP-based Ring [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/24074/how-to-set-up-an-mrp-based-ring-network-in-tia-portal/">How to Set Up an MRP-based Ring Network in TIA Portal</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 great, and underused, features in <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming/">TIA Portal</a> is the Network Topology tab of &#8220;Devices and Networks.&#8221; It can enable you to accomplish a number of <a href="https://static.dmcinfo.com/latest-thinking/blog/id/9380/optional-hardware-configuration-control-in-tia-portal">advanced tasks</a> while simultaneously providing more in-depth network diagnostics. Today, I want to quickly show you how you can use Network Topology to configure a MRP-based Ring Network in TIA Portal.</p>



<h2 class="wp-block-heading" id="h-why-ring-topology">Why Ring Topology?</h2>



<p class="wp-block-paragraph">There are many reasons why one might consider using a ring topology for your network. The most common one is to provide a semi-fault tolerant network that can handle the break or loss of any one leg of your network by utilizing redundant physical connection paths between network nodes. For a controls network, this can provide an additional layer of security and safety where machine availability is important.&nbsp;</p>



<p class="wp-block-paragraph">MRP (Media Redundancy Protocol) is a redundancy protocol supported by all Profinet capable devices that will allow a network to be configured in a ring topology. Since Profinet is an open standard, this means that MRP is a manufacturer independent protocol and can be used to form a ring with devices from different manufacturers (so long as all devices are fully IEC 62439 compliant). If you&#8217;re interested in the details of how it works, <a href="https://en.wikipedia.org/wiki/Media_Redundancy_Protocol">Wikipedia </a>has a good and short overview.</p>



<p class="wp-block-paragraph">In the example below, we will use MRP and the Network Topology tab to configure a ring topology for an automation network. While the most common scenario would be to add a switch into the mix (such as a SCALENCE&nbsp;switch), I don&#8217;t have one available for testing so I&#8217;m just going to use an S7-1516F-3PN PLC, S7-1510SP-1PN PLC, an IM155-6 PN remote I/O rack, and a 7&#8243; Comfort Panel. All of these devices have at least 2 switched ports and support MRP which will allow us to configure a small ring.&nbsp;</p>



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



<h2 class="wp-block-heading" id="h-step-1-configure-the-network-interfaces-of-all-the-devices">Step 1: Configure the Network Interfaces of All the Devices</h2>



<p class="wp-block-paragraph">In my project, I&#8217;ve already added all of my devices to my project. The first step will be to open up &#8220;Devices and Networks&#8221; to the Network tab and configure all of their interfaces. For this example, I&#8217;ll use the default IP addressing scheme.&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Network-Configuration.png" alt="Image of connected interfaces of all devices to create a common Profinet network"/></figure>



<p class="wp-block-paragraph">In your network view, connect the interfaces of all devices to create a common Profinet network. This will allow all of our devices to talk to one another. I&#8217;ve also added a DO card to my ET200SP I/O remote rack and created HMI connections for both PLCs to the TP700 Comfort Panel.</p>



<h2 class="wp-block-heading" id="h-step-2-configure-the-network-topology">Step 2: Configure the Network Topology</h2>



<p class="wp-block-paragraph">While it&#8217;s possible to configure MRP without using topology, I find it makes it much simpler and aids in troubleshooting in the event of a network fault. To do this, navigate to the Topology tab of the &#8220;Devices and Networks&#8221; view.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Topology-Configuration.png" alt="Image of configuring the topology to create a ring"/></figure>



<p class="wp-block-paragraph">Configure the topology to create a ring &#8211; I&#8217;ve used the port connections shown below, daisy chaining Port 2 from each device to Port 1 of the following and closing the loop back to the beginning.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Port-to-Port-Connections.png" alt="Image of module and partner port connections"/></figure>



<h2 class="wp-block-heading" id="h-step-3-configure-mrp-nbsp">Step 3: Configure MRP&nbsp;</h2>



<p class="wp-block-paragraph">Within an MRP ring, each device must be assigned a role. One device will be the MRP Manager and will be responsible for sending out test frames to detect for a network failure and for blocking network traffic on one port (except for the test frames) to prevent a network loop. The other devices must be assigned a Client role so they know how to handle the test frames.&nbsp;</p>



<p class="wp-block-paragraph">In this example, I will use the S7-1516F-3PN as my Manager, and will set all other devices to be Clients. You can assign roles in several ways &#8211; the easiest way for me is to go to the Device View for each device and look at the properties of the network interface. Under &#8220;Advanced Options,&#8221; look for Media Redundancy. Here you can select a role for the device (Manager or Client) and enable diagnostics interrupts. If you choose to enable diagnostic interrupts for all devices, note that you can now detect the status of your MRP ring within your program from OB82.&nbsp;</p>



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



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



<h2 class="wp-block-heading" id="h-step-4-download-and-configure-all-of-the-devices">Step 4: Download and Configure All of the Devices</h2>



<p class="wp-block-paragraph">Start by first connecting all but one link of your network (don&#8217;t close off the ring just yet until all of the devices are configured to handle it). In my case, I daisy chained the S7-1516F, IM155-6, TP700 and S7-1510SP together without connecting the S7-1510SP back to the S7-1516F. Download to each PLC and the HMI, and set the Profinet name of the IM155-6. Now, you are ready to close the loop to create your MRP ring.</p>



<h2 class="wp-block-heading" id="h-step-5-test">Step 5: Test</h2>



<p class="wp-block-paragraph">As a simple test, I enabled the Clock Bytes on both PLCs and configured the 1510SP to function as an I-Device. In my shared data area, I passed over the 1Hz Clock bit from the 1510SP to the 1516F PLC. Now, on the 1516F I added two simple rungs of logic to OB1 to pulse two outputs on the IM155-6PN &#8211; one pulsing from the 1Hz Clock bit of the 1516F and the other pulsing from the clock of the 1510SP. Finally, I added a System Diagnostics View to the HMI so I could monitor my network.&nbsp;</p>



<p class="wp-block-paragraph">After going online with the two PLCs (I&#8217;m connected through the third port on my 1510SP), I can verify on the Topology tab of &#8220;Devices and Networks&#8221; that my MRP ring is connected as configured. I can also watch the outputs on the remote I/O rack to verify that both outputs are pulsing as expected.&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Complete-Ring.png" alt="MRP Ring Topology in TIA Portal"/></figure>



<p class="wp-block-paragraph">Now let&#8217;s do some testing. Disconnect any one connection and verify that both outputs continue to function as expected. You can also note, from the integrated fault lights on the devices or from the Diagnostics Viewer on the HMI, that a downed network connection is detected and reported.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Broken-Links.png" alt="Network Topology Monitoring in TIA Portal"/></figure>



<p class="wp-block-paragraph"><br>
That&#8217;s about it &#8211; you now have a working MRP ring! I hope this is helpful! If you&#8217;re looking for help, please take a look at our <strong><a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming">Siemens PLC Programming Services</a></strong> or <strong><a href="https://static.dmcinfo.com/contact">Contact Us</a></strong>&nbsp;today!</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://static.dmcinfo.com/blog/24074/how-to-set-up-an-mrp-based-ring-network-in-tia-portal/">How to Set Up an MRP-based Ring Network in TIA Portal</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Optional Hardware Configuration Control in TIA Portal</title>
		<link>https://static.dmcinfo.com/blog/24616/optional-hardware-configuration-control-in-tia-portal/</link>
		
		<dc:creator><![CDATA[Jason Mayes]]></dc:creator>
		<pubDate>Thu, 02 Mar 2017 11:10:57 +0000</pubDate>
				<category><![CDATA[Houston]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[Oil and Gas]]></category>
		<category><![CDATA[PROFINET]]></category>
		<category><![CDATA[WinCC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/24616/optional-hardware-configuration-control-in-tia-portal-2/</guid>

					<description><![CDATA[<p>Even after many years of TIA Portal development, every now and then I come across another cool feature that I either was not aware of or have never had a chance to try. Recently, I had an opportunity to use Configuration Control &#8211; a way to configure a single project to use multiple different hardware [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/24616/optional-hardware-configuration-control-in-tia-portal/">Optional Hardware Configuration Control in TIA Portal</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Even after many years of TIA Portal development, every now and then I come across another cool feature that I either was not aware of or have never had a chance to try. Recently, I had an opportunity to use<a href="https://support.industry.siemens.com/cs/document/29430270/variants-management-with-simatic-s7?dti=0&amp;lc=en-WW"> Configuration Control</a> &#8211; a way to configure a single project to use multiple different hardware configurations.</p>



<p class="wp-block-paragraph">For OEM&#8217;s who produce and sell standard machines with a number of customer-selectable options, Configuration Control can allow a single project to be developed and maintained that is capable of supporting multiple options and configurations. The really cool part is that the hardware configuration can even be changed in the field without any program changes &#8211; even from an HMI.</p>



<p class="wp-block-paragraph">The ability to change hardware configuration in the field allows an OEM to use a single program for every machine&nbsp;built while only using&nbsp;the hardware required for the options selected, which can help to lower hardware costs while still allowing for expansion and upgrades. Hardware can be added in the field, and options can be turned on/off from either a configuration screen on the HMI or even a license key that can be provided and entered.</p>



<p class="wp-block-paragraph">If you haven&#8217;t worked with Configuration Control before, it&#8217;s worth noting that there are several different Configuration Control features available.</p>



<p class="wp-block-paragraph">I&#8217;m going to highlight two of them: Configuration Control at the Device Level and Configuration Control for IO Systems.</p>



<h2 class="wp-block-heading" id="h-configuration-control-at-the-device-level">Configuration Control at the Device Level</h2>



<p class="wp-block-paragraph">Within <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming/">TIA Portal</a>, Siemens provides the ability to configure, at run-time, the hardware modules used within an S7-1200, S7-1500, ET200SP Controller, or ET200SP (PN or DP) Remote I/O Rack. This means a single project can be created with a &#8220;Master Rack&#8221; configuration which defines a superset of all hardware that could be used and that a user can, at run-time, choose which modules to use and decide where in the rack they are located.</p>



<p class="wp-block-paragraph">As a simple example, imagine a machine designed to batch and mix ingredients in a system of tanks. As a machine builder, you provide an option to your customers to add a temperature monitoring function. Some customers may feel this feature is worth the extra cost, but it is not a standard feature on every machine built. With Configuration Control, you can add a Thermocouple module to your rack and define the module as &#8216;Optional.&#8217;</p>



<p class="wp-block-paragraph">Now, you can develop a single program which includes the temperature monitoring functionality and build the machine according to your customers&#8217; selected options. If they choose to add temperature monitoring, you can include the Thermocouple module in your hardware rack and activate that option. If not, you leave it out. Either way, the software (and hardware configuration defined in it) are identical.</p>



<p class="wp-block-paragraph"><span style="font-size:larger;"><em><strong>So how can you set up Configuration Control at the device level?</strong></em></span></p>



<p class="wp-block-paragraph">Let&#8217;s build a quick example. While we could use an S7-1200, S7-1500, or ET200SP I/O remote rack, I&#8217;m going to use an ET200SP Controller&nbsp; (S7-1510 1-PN) as I have one sitting on my desk. Additionally, I have one (1) DI 8x24VDC ST and one (1) DQ 8x24VDC/0.5A ST module. So, let&#8217;s assume I want to design a system with four possible configurations:</p>



<ul class="wp-block-list">
<li>Option A: Both DI (Slot 2) and DQ (Slot 3) Modules</li>



<li>Option B: DI Module Only (Slot 2)</li>



<li>Option C: DQ Module Only (Slot 2)</li>



<li>Option D: No Modules</li>
</ul>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Options-1.png" alt="Drawing of Option A: Both DI (Slot 2) and DQ (Slot 3) Modules, Option B: DI Module Only (Slot 2), Option C: DQ Module Only (Slot 2), and Option D: No Modules"/></figure>



<p class="wp-block-paragraph"><strong>Step 1 &#8211; Create a Master Rack</strong><br>
To start with, I&#8217;ve created a &#8220;Master Rack&#8221; in my hardware configuration containing all possible modules. The &#8220;Master Rack&#8221; should contain the maximum options available. In my case, it will include both the DI and DQ modules as shown below.</p>



<p class="wp-block-paragraph">After adding the modules, go to the properties of the PLC and, under Configuration Control, check the box for &#8220;<em>Allow to reconfigure the device via the user program</em>.&#8221;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Device-Configuration-1.png" alt="Configuration Control Setting in TIA Portal"/></figure>



<p class="wp-block-paragraph"><strong>Step 2 &#8211; Create a Configuration Control Record</strong><br>
Create a PLC Data Type (UDT) to define the hardware configuration. This UDT will be structured as follows:<br>
<br>
<em>Byte 1: Block Length</em> &#8211; the total number of bytes in the record. Header Length (4) + 2 * Number of Slots. In this example, there are four slots: Slot 1 is the CPU, Slot 2 is the DI module, Slot 3 is the DQ module, and Slot 4 is the server module. Note the default values I&#8217;ve given the UDT are the default positions assigned in the hardware configuration.<br>
<br>
<em>Byte 2: Block ID </em>&#8211; The data record number being written. For configuring hardware in a rack, it is 196.<br>
<br>
<em>Byte 3: Version</em> &#8211; This value is different depending on the type of hardware used. For the ET200SP, Version = 2. For an S7-1500, Version = 4. Additional documentation is available for both with help and online examples.<br>
<br>
<em>Byte 4: Subversion</em> &#8211; Zero for the ET200SP.<br>
<br>
<em>Byte 5: Slot 1</em> &#8211; For the ET200SP Controller, the CPU is always in slot 1 (where it is configured).<br>
<br>
<em>Byte 6: Additional Function for Slot 1</em> &#8211; Zero for the ET200SP CPU.<br>
<br>
<em>Byte 7: Slot 2</em> &#8211; The value of this specifies where the module configured in the hardware configuration is installed. If the module is used in the station option, this will be the slot in which it is installed. If a module is not used, put a 0 here. If the module is configured to be empty, enter the slot number of the module + 128.<br>
<br>
<em>Byte 8: Additional Function for Slot 2</em> &#8211; If you replace a dark colored base unit with a light colored base unit (new potential group), enter 1. Enter 0 if the base unit installed in this slot matches the hardware configuration.<br>
<br>
<em>Byte 9: Slot 3<br>
<br>
Byte 10: Additional Function for Slot 3<br>
<br>
Byte 11: Slot 4</em> &#8211; in this example, the Server Module<br>
<br>
<em>Byte 12: Additional Function for Slot 4</em></p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/CNTRL_REC-for-Device-Configuration-1.png" alt="Screenshot of the Control Record."/></figure>



<p class="wp-block-paragraph"><strong>Step 3 &#8211; Create Configuration Options</strong><br>
For this example, I&#8217;ve created a Global DB with an array of four (4) of the control records we just created and set values corresponding to the four possible configurations listed above.</p>



<p class="wp-block-paragraph">Note in the first that each module matches the configuration. The second removes the DQ module and moves the Server module up. The third option removes the DI module and moves the DQ and Server modules up. The final configuration eliminates both the DI and DQ modules and moves the Server module up to Slot 2.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/ConfigurationOptions-1.png" alt="Screenshot of the dbConfiguationControl selections."/></figure>



<p class="wp-block-paragraph"><strong>Step 4 &#8211; Add in OB100 (Start-up)</strong><br>
In the startup OB, you will need to write the configuration option record to define the hardware used.</p>



<p class="wp-block-paragraph">To do this, you can use the code below. Notice that I&#8217;ve created an &#8220;Index&#8221; tag to switch between the different options I&#8217;ve configured.&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/OB100-WRREC-1.png" alt="OB100 Startup Code to Load the Selected Hardware Configuration"/></figure>



<p class="wp-block-paragraph"><strong>Step 5 &#8211; Configuration from HMI</strong><br>
There are many ways you could do this, but I&#8217;ve created a simple HMI screen to allow a user to select which hardware option to use.</p>



<p class="wp-block-paragraph">It&#8217;s very simple &#8211; a selection of a configuration sets the &#8220;Index,&#8221; or a retained tag on the PLC, of the hardware option to be used.</p>



<p class="wp-block-paragraph">Note that to switch hardware configurations, the PLC needs to be stopped and started so that OB100 is executed.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/OptionSelection-1.png" alt="HMI Selection of Hardware Configuration"/></figure>



<p class="wp-block-paragraph">If you&#8217;re interested in learning more, Siemens provides a <a href="https://cache.industry.siemens.com/dl/files/293/58649293/att_863460/v1/et200sp_system_manual_en-US_en-US.pdf">thorough system manual</a> for the ET200SP Controller.</p>



<h2 class="wp-block-heading" id="h-configuration-control-for-i-o-systems">Configuration Control for I/O Systems</h2>



<p class="wp-block-paragraph">In addition to controlling the configuration (location and existence) of modules within a PLC or Remote I/O Rack, TIA Portal also provides the ability to configure an I/O system dynamically. This means you can create a &#8220;Master Configuration&#8221; with multiple remote I/O racks. You can then programmatically (at run-time) define the use and configuration of those racks.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/IO-System-Configuration-1.png" alt="Optional I/O Network Configuration"/></figure>



<p class="wp-block-paragraph">As another simple example, consider a machine with modular components such as a multi-cell vacuum press. As a machine builder, you can create and offer a system capable of controlling, for example, anywhere from 2-8 cells. Each of those cells may have their own control panel and remote I/O rack.</p>



<p class="wp-block-paragraph">With Configuration Control, you can develop a single project capable of controlling, for example, eight cells and define at runtime how many (and which) cells are in use. Furthermore, because it&#8217;s at runtime, your customer could choose to add an additional cell at a later date.</p>



<p class="wp-block-paragraph">Because of Configuration Control, you could deliver the new cell, connect the I/O rack to the PLC, and then from the HMI activate the cell &#8211; all without making any software changes. By using a single project, the need for maintaining and supporting multiple versions of control code is eliminated allowing you to provide a flexible, modular, and scalable product without the need for troubleshooting and testing of each combination.</p>



<p class="wp-block-paragraph"><span style="font-size:larger;"><strong><em>So how&nbsp;can you set up&nbsp;Configuration Control for IO Systems?</em></strong></span></p>



<p class="wp-block-paragraph">Let&#8217;s look at how simple it can be.</p>



<p class="wp-block-paragraph">First of all, there are a number of ways in which we can set this up. The TIA Portal Help Files contain some excellent application examples.</p>



<p class="wp-block-paragraph">Siemens product support also has <a href="https://support.industry.siemens.com/cs/document/29430270/variants-management-with-simatic-s7?dti=0&amp;lc=en-WW">application examples</a> for the different options. But I&#8217;m going to configure an ET200SP Profinet I/O rack (IM155-6 PN HF) to be an optional I/O device. While simple to configure the hardware, it is slightly more complex from a programming perspective.</p>



<p class="wp-block-paragraph"><strong>Step 1: Add an IM155-6 Rack to the Network Configuration</strong><br>
I added an ET200SP I/O rack with a single DI module. Under the properties of the interface module, expand the Profinet interface options and look under Advanced Options. Select &#8220;Optional IO-Device. This will define this device as optional and will only be used if programmatically added to the Profinet network.</p>



<p class="wp-block-paragraph">Note that if booting a PLC without any special code to activate this network device, it will not be automatically added to the I/O network.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Optional-IO-Device-1.png" alt="Defining a Remote Rack to be Optional"/></figure>



<p class="wp-block-paragraph"><strong>Step 2: Configure Topology</strong><br>
While we could do this in other ways, I&#8217;ve used Topology to simplify management of the Profinet network configuration for our Configuration Control demonstration. If you haven&#8217;t used Topology in the past, it is similar to your network configuration, but it defines&nbsp;specific port-to-port connections between devices.</p>



<p class="wp-block-paragraph">These connections must match the exact ports used when the hardware is networked together. While adding some complexity,&nbsp;there are a lot of cool things you can do with Topology &#8211; including automatic assignment of Profinet name and IP Address. Here, it will allow us to create a simpler configuration record in the next few steps.</p>



<p class="wp-block-paragraph">In this demo, I&#8217;ve defined a connection&nbsp;between&nbsp;P2 on the PLC and P1 on the IM155-6. I&#8217;ve left the others undefined &#8211; meaning they can use any network connection available.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Topology-1.png" alt="Defining network topology"/></figure>



<p class="wp-block-paragraph"><strong>Step 3: Create Network Configuration Options</strong><br>
In this example, I only have one optional device. So I will define two options: One with the IM155-6 and one without. The Control Records needed to reconfigure the I/O network are structured as follows:</p>



<p class="wp-block-paragraph"><em>Word 1 &#8211; Version</em>: For reconfiguring the I/O system, this is 16#0100.<br>
<br>
<em>Word 2 &#8211; Number of Optional Devices to be used:</em> The total number of optional devices that will be used in this configuration option.<br>
<br>
<em>Word 3 &#8211; Optional Device to Activate:</em> the hardware identifier of the device to be activated (HW_DEVICE). You can find this in the system constants of the default tag table. For this example, it is 262.</p>



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



<p class="wp-block-paragraph"><em>Word 4 -&gt; Word N-1:</em> <em>Optional Devices to Activate</em><br>
<br>
<em>Word N &#8211; Number of port interconnections</em>: Since we already defined the network topology, this is 0.</p>



<p class="wp-block-paragraph">For the two options (with and without the rack), my configuration records are shown below.</p>



<p class="wp-block-paragraph">Note that I&#8217;ve used a generic struct to define the configurations. Also, note that I&#8217;ve added an empty word to the end of the second configuration (WithoutRack) even though it isn&#8217;t needed. It will be apparent why a little later.</p>



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



<p class="wp-block-paragraph"><strong>Step 4: Write Logic to Reconfigure the I/O</strong><br>
The I/O network can be configured at any point without restarting the PLC, u<span style="background-color: rgb(245, 246, 245);">nlike the previous example of configuring hardware within a rack</span>. It just requires three steps:</p>



<p class="wp-block-paragraph"><br>
a) Call &#8220;ReconfigIOSystem&#8221; with Mode 1 to Deactivate all Optional I/O Devices.<br>
<br>
b) Call &#8220;ReconfigIOSystem&#8221; with Mode 2 (and the configuration record) to Reconfigure/Activate&nbsp;the used I/O Devices.<br>
<br>
c) Call &#8220;ReconfigIOSystem&#8221; with Mode 3 to Restart the I/O.</p>



<p class="wp-block-paragraph">For this demo, I wrote a simple state machine to sequence through the three steps off of a start command (from the HMI). The user can select a configuration and restart as needed.</p>



<h2 class="wp-block-heading" id="h-a-few-tricks-worth-nothing-nbsp">A Few Tricks Worth Nothing&#8230;&nbsp;</h2>



<p class="wp-block-paragraph">Then I&#8217;ll leave you with some demo code.</p>



<p class="wp-block-paragraph">First, the &#8220;ReconfigIOSystem&#8221; system function block requires writing the control record as an array of words.</p>



<p class="wp-block-paragraph">We could have defined our Configuration Records as an array, but I liked the Struct better. However, we do need to take the selected configuration and move it into an array.</p>



<p class="wp-block-paragraph">To do this, I created a static Array [0-3] of Words and a Struct CTRL_REC using an AT construct for the Array. Now I can move my Struct into CTRL_REC and still use the array of Words as the input to the block.</p>



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



<p class="wp-block-paragraph">be foundSecond, the Logical Address used (LADDR) on the &#8220;ReconfigureIOSystem&#8221; call is the Hardware Identifier of the PROFINET interface of the IO controller. Again,&nbsp;<span style="background-color: rgb(245, 246, 245);">this can&nbsp;</span>be found<span style="background-color: rgb(245, 246, 245);">&nbsp;in&nbsp;</span>the system constants tab of the default tag list .</p>



<p class="wp-block-paragraph">Finally, I played around with a few options (defining port connections vs. configured topology) and found the topology method easier to demonstrate. The other cool thing about this is that because the topology is defined, the IM155-6 PN does not need to be commissioned (Profinet name, IP Address assignment) in advance.</p>



<p class="wp-block-paragraph">The PLC will automatically assign a Profinet name and IP Address and autoconfigure the rack w<span style="background-color: rgb(245, 246, 245);">When the I/O system configuration&nbsp;</span>is updated<span style="background-color: rgb(245, 246, 245);">&nbsp;with the rack activated</span>! You can test this be resetting the rack to factory default and then reconfiguring the network to activate it. You&#8217;ll notice that since the topology matches what was defined, the IP Address and Profinet Name will be automatically assigned and the rack will be auto commissioned and activated.</p>



<h2 class="wp-block-heading" id="h-the-code">The Code</h2>



<p class="wp-block-paragraph">Here&#8217;s the code I used for my quick test. I am running this FB from OB1 and have buttons on the HMI for Starting/Resetting and selecting which configuration to use. This allows a user to, while the system is running, add or remove the remote I/O rack from the Profinet network.</p>



<p class="wp-block-paragraph">I hope this is helpful! Thanks for reading!</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Reconfigure-IO-Function-Block-1.png" alt=""/></figure>



<p class="wp-block-paragraph">For those of you who made it this far, I&#8217;ve <a href="https://static.dmcinfo.com/wp-content/uploads/2025/06/HardwareConfigDemo_20170302_1146.zip" target="_blank" rel="noreferrer noopener">attached </a>a sample project for you if you&#8217;d like to try it yourself!</p>



<p class="wp-block-paragraph"><a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming/">Learn more about DMC&#8217;s TIA Portal programming expertise</a>&nbsp;or <a href="https://static.dmcinfo.com/contact">Contact Us</a> to get started on a project today.</p>
<p>The post <a href="https://static.dmcinfo.com/blog/24616/optional-hardware-configuration-control-in-tia-portal/">Optional Hardware Configuration Control in TIA Portal</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Automatic HMI Connection Fail-over in TIA Portal with the S7-400H</title>
		<link>https://static.dmcinfo.com/blog/24627/automatic-hmi-connection-fail-over-in-tia-portal-with-the-s7-400h/</link>
		
		<dc:creator><![CDATA[Jason Mayes]]></dc:creator>
		<pubDate>Tue, 28 Feb 2017 15:33:49 +0000</pubDate>
				<category><![CDATA[HMI and SCADA]]></category>
		<category><![CDATA[Houston]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[Oil and Gas]]></category>
		<category><![CDATA[PROFINET]]></category>
		<category><![CDATA[WinCC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/24627/automatic-hmi-connection-fail-over-in-tia-portal-with-the-s7-400h/</guid>

					<description><![CDATA[<p>For anyone who has spent much time working with the SIMATIC S7-400H, it becomes quickly apparent that the devil is often in the details. You find that there are many small settings and &#8216;tricks&#8217; that you uncover while setting up redundancy, redundant Modbus communication, redundant communication interfaces for I/O, configuring hardware, etc., that you need [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/24627/automatic-hmi-connection-fail-over-in-tia-portal-with-the-s7-400h/">Automatic HMI Connection Fail-over in TIA Portal with the S7-400H</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">For anyone who has spent much time working with the SIMATIC S7-400H, it becomes quickly apparent that the devil is often in the details. You find that there are many small settings and &#8216;tricks&#8217; that you uncover while setting up redundancy, redundant Modbus communication, redundant communication interfaces for I/O, configuring hardware, etc., that you need to get things running. Sometimes those small details are hard to catch. In the words of my wise colleague <a href="https://static.dmcinfo.com/about/employee-bios/lillian-walker">Lillian Walker</a>, &#8220;The redundant thing about redundancy is that I have to read all of the documentation twice.&#8221; Oh, so true.</p>



<p class="wp-block-paragraph">Oftentimes, I will find those settings and tricks in a great blog, application example or help file. Over the years, I&#8217;ve built up a personal library of links and documents that I reference whenever I come back to an issue that I know I&#8217;ve seen before and have forgotten how we fixed it in the past. Today I&#8217;d like to share one of these examples that I&#8217;ve relied upon several times when working with the S7-400H and programming HMI&#8217;s in WinCC Advanced or WinCC Comfort&nbsp;<a href="https://support.industry.siemens.com/cs/document/96837136/connecting-simatic-hmi-panels-with-simatic-s7-400h-(wincc-v13-and-step-7-v5-5)?dti=0&amp;lc=en-ZM">configuring&nbsp;automatic connection fail-over</a>.&nbsp;</p>



<p class="wp-block-paragraph">If you&#8217;ve worked with TIA Portal and the 400H CPUs in the past, you probably know that Portal does not have any automatic fail-over mechanisms built in for WinCC Advanced or WinCC Comfort. Hopefully, when the S7-1500H is released, this functionality will be added as well. But for now, programming of the 400H system is completed in Step 7 v5.5; the station must be imported into Portal as a Proxy, and any connection fail-over must be manually added. Luckily, Siemens provides a great <a href="https://support.industry.siemens.com/cs/document/96837136/connecting-simatic-hmi-panels-with-simatic-s7-400h-(wincc-v13-and-step-7-v5-5)?dti=0&amp;lc=en-ZM">Application Example</a> to make the process easier. Nothing I&#8217;m sharing below is secret; you can easily <a href="https://support.industry.siemens.com/cs/document/96837136/connecting-simatic-hmi-panels-with-a-simatic-s7-400h-(wincc-v16-and-step-7-v5-6)?dti=0&amp;lc=en-WW" type="link" id="https://support.industry.siemens.com/cs/document/96837136/connecting-simatic-hmi-panels-with-a-simatic-s7-400h-(wincc-v16-and-step-7-v5-6)?dti=0&amp;lc=en-WW">learn from this information</a>. Yet&nbsp;for anyone who has already found this blog, I&#8217;ll walk you through configuring WinCC Advanced or WinCC Comfort to work with a redundant pair of S7-400H CPUs and automatically handle connection failover.</p>



<h2 id="h-step-1-import-your-400h-system-into-tia-portal" class="wp-block-heading">Step 1: Import your 400H system into TIA Portal</h2>



<p class="wp-block-paragraph">TIA Portal does not support programming of the 400H inside the Portal, but you can easily import a station from a Step7 v5.5 project into the Portal to make things easier. To do so, choose &#8220;Add a New Device&#8221;, select the type as &#8220;Controller,&#8221; and pick &#8220;Device Proxy.&#8221;&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Step-1-import-proxy-station.png" alt=" Import a station from a Step7 v5.5 project into TIA Portal "/></figure>



<p class="wp-block-paragraph">After the new station has been added to the Project, right-click the station in the project tree (or from Device View) and choose &#8220;Initialize Device Proxy.&#8221; Navigate to and select your Step7 v5.5 project and it will open a new dialog to allow you to choose which source device and what data you would like to add to your Proxy Station.&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Step1c-Import-400H.png" alt="Initialize TIA Portal Device Proxy"/></figure>



<h2 id="h-step-2-add-your-hmi" class="wp-block-heading">Step 2: Add your HMI</h2>



<p class="wp-block-paragraph">For the purpose of this demo, I will add a Comfort Panel to my project. But you can do the same with an Advanced Runtime application.</p>



<h3 id="h-step-3-create-a-connection-to-the-plc-station" class="wp-block-heading">Step 3: Create a Connection to the PLC Station</h3>



<p class="wp-block-paragraph">Open up the hardware configuration (network view) and add an HMI connection from your Proxy Station to the Comfort Panel. If you open up the Connections Editor from the HMI Project (in the Project Tree), you will see that a connection has automatically been created for you. I&#8217;ve renamed this Connection to &#8220;CPU_400H&#8221; and this will be the connection that we configure to switch been CPU&#8217;s (failover). This is the connection that will be used for all tags used for visualization and control on the HMI.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Step3-Create-a-connection.png" alt="Add an HMI connection from your Proxy Station to the Comfort Panel"/></figure>



<p class="wp-block-paragraph">What we will do, in order to provide automatic failover, is create three primary connections. The first will be a dynamic connection, capable of pointing to either processor in the redundant pair. We will use scripting and the control function &#8220;<em>ChangeConnection</em>&#8221; to switch the connection when a loss of communication is detected. All tags used for display on the HMI will use this connection. The other two connections will be static connections to each CPU for monitoring connection status.</p>



<h2 id="h-step-4-create-additional-connections-to-each-cpu" class="wp-block-heading">Step 4: Create Additional Connections to Each CPU</h2>



<p class="wp-block-paragraph">Next, we will create dedicated connections to each CPU. These connections will each be looking at a different CPU. Note that the two connections are configured for different CPU&#8217;s in the redundant pair (IP Address, Slot, Rack).&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Step4a-Create-direct-connection-to-CPU0.png" alt="Create dedicated connections to each CPU"/></figure>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Step4b-Create-direct-connection-to-CPU1.png" alt="Dedicated connections to each CPU"/></figure>



<h2 id="h-step-5-create-connection-monitoring-tags" class="wp-block-heading">Step 5: Create Connection Monitoring Tags</h2>



<p class="wp-block-paragraph">We will create two heartbeat tags, &#8216;<em>CPU_0_Trigger</em>&#8216; and &#8216;<em>CPU_1_Trigger</em>&#8216; &#8211; one for each CPU &#8211; and monitor them through the dedicated connections to the CPUs. Note that both trigger tags are looking at the same tag (in this case, at DB110.DBX429.3), but on different CPUs. That tag on the PLC is a heartbeat tied to the Clock Byte (1 Hz). Also, note that we&#8217;ve changed the tag acquisition mode to be Cyclic Continuous so that it will be constantly monitored for changes.</p>



<p class="wp-block-paragraph">Additionally, create three internal tags: &#8216;<em>CPU_0_ConnectionState</em>&#8216; and &#8216;<em>CPU_1_ConnectionState</em>&#8216; (both Integer tags used to keep and store an internal connection state) and &#8216;<em>CPU_ConnectedTo</em>&#8216; (a WString tag used to track which CPU we&#8217;re using for our active connection and can be displayed on the HMI).&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Step5-Create-connection-tags.png" alt="Connection tags to the redundant 500H redundant PLC"/></figure>



<h2 id="h-step-6-add-connection-monitoring-scripts" class="wp-block-heading">Step 6: Add Connection Monitoring Scripts</h2>



<p class="wp-block-paragraph">Create three new scrips: (1) <strong><em>CPU_O_Trigger</em></strong>, (2) <em><strong>CPU_1_Trigger</strong>,</em> and (3) <strong><em>CPU_Connection</em></strong>. You can grab the scripts from the <a href="https://support.industry.siemens.com/cs/document/96837136/connecting-simatic-hmi-panels-with-simatic-s7-400h-(wincc-v13-and-step-7-v5-5)?dti=0&amp;lc=en-ZM">Siemens application example</a> and edit as needed. But these scripts will do the following:</p>



<p class="wp-block-paragraph">1. <em><strong>CPU_0_Trigger</strong></em>: Will be triggered on a tag change of &#8216;<em>CPU_0_Trigger</em>.&#8217; On a heartbeat signal from CPU_0, it will reset &#8216;<em>CPU_0_ConnectionState</em>&#8216; to 1, and will increment &#8216;<em>CPU_1_ConnectionState</em>&#8216;. If &#8216;<em>CPU_1_ConnectionState</em>&#8216; ever exceeds our connection fault limit and our HMI Connection CPU_400H is currently assigned to connect to CPU_1, it will swap the connection to CPU_0.</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>Sub CPU_0_Trigger()

    Const IP_Address = "192.168.1.10"

    ' Initialize active connection
    If SmartTags("CPU_ConnectedTo") = "" Then
        SmartTags("CPU_ConnectedTo") = "CPU-0"
    End If

    ' Reset CPU-0 watchdog
    SmartTags("CPU_0_ConnectionState") = 1

    ' Increment CPU-1 watchdog counter
    If SmartTags("CPU_1_ConnectionState") &lt;= 10 Then
        SmartTags("CPU_1_ConnectionState") = _
            SmartTags("CPU_1_ConnectionState") + 1
    End If

    ' Switch to CPU-0 if CPU-1 has failed
    If SmartTags("CPU_1_ConnectionState") >= 11 Then

        If SmartTags("CPU_ConnectedTo") = "CPU-1" Then

            ChangeConnection "CPU_400H", IP_Address, 3, 0

            SmartTags("CPU_1_ConnectionState") = 100
            SmartTags("CPU_ConnectedTo") = "CPU-0"

        ElseIf SmartTags("CPU_ConnectedTo") = "CPU-0" Then

            SmartTags("CPU_1_ConnectionState") = 100

        End If

    End If

    ' Reintegrate after a complete communication loss
    If SmartTags("CPU_ConnectedTo") = "Connection Lost" Then

        ChangeConnection "CPU_400H", IP_Address, 3, 0

        SmartTags("CPU_1_ConnectionState") = 100
        SmartTags("CPU_ConnectedTo") = "CPU-0"

    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 style="color: #569CD6">Sub</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">CPU_0_Trigger</span><span style="color: #D4D4D4">()</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">Const </span><span style="color: #9CDCFE">IP_Address</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;192.168.1.10&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; Initialize active connection</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">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_ConnectedTo&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #CE9178">&quot;&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_ConnectedTo&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #CE9178">&quot;CPU-0&quot;</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; Reset CPU-0 watchdog</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_0_ConnectionState&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #B5CEA8">1</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; Increment CPU-1 watchdog counter</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">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_1_ConnectionState&quot;</span><span style="color: #D4D4D4">) &lt;= </span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_1_ConnectionState&quot;</span><span style="color: #D4D4D4">) =</span><span style="color: #9CDCFE"> _</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_1_ConnectionState&quot;</span><span style="color: #D4D4D4">) + </span><span style="color: #B5CEA8">1</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; Switch to CPU-0 if CPU-1 has failed</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">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_1_ConnectionState&quot;</span><span style="color: #D4D4D4">) &gt;= </span><span style="color: #B5CEA8">11</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: #C586C0">If</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_ConnectedTo&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #CE9178">&quot;CPU-1&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">            ChangeConnection </span><span style="color: #CE9178">&quot;CPU_400H&quot;</span><span style="color: #D4D4D4">,</span><span style="color: #9CDCFE"> IP_Address</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">0</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_1_ConnectionState&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #B5CEA8">100</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_ConnectedTo&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #CE9178">&quot;CPU-0&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">ElseIf</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_ConnectedTo&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #CE9178">&quot;CPU-0&quot;</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: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_1_ConnectionState&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #B5CEA8">100</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>
<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; Reintegrate after a complete communication loss</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">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_ConnectedTo&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #CE9178">&quot;Connection Lost&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        ChangeConnection </span><span style="color: #CE9178">&quot;CPU_400H&quot;</span><span style="color: #D4D4D4">,</span><span style="color: #9CDCFE"> IP_Address</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">0</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_1_ConnectionState&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #B5CEA8">100</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_ConnectedTo&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #CE9178">&quot;CPU-0&quot;</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>
<span class="line"><span style="color: #569CD6">End Sub</span></span></code></pre></div>



<p class="wp-block-paragraph">2. <em><strong>CPU_1_Trigger</strong></em>: Will be triggered on a tag change of &#8216;<em>CPU_1_Trigger</em>.&#8217; On a heartbeat signal from CPU_1, it will reset &#8216;<em>CPU_1_ConnectionState</em>&#8216; to 1, and will increment &#8216;<em>CPU_0_ConnectionState</em>&#8216;. If &#8216;<em>CPU_0_ConnectionState</em>&#8216; ever exceeds our connection fault limit and our HMI Connection CPU_400H is currently assigned to connect to CPU_0, it will swap the connection to CPU_1.</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>Sub CPU_1_Trigger()

    '***************************
    '**** Initialization ****
    '***************************

    Const IP_Address = "192.168.1.11"

    ' During initialization the default connection
    ' is stored in CPU_ConnectedTo.
    If SmartTags("CPU_ConnectedTo") = "" Then
        SmartTags("CPU_ConnectedTo") = "CPU-0"
    End If


    '*******************
    '**** Reset ****
    '*******************

    ' Reset CPU-1 connection watchdog
    SmartTags("CPU_1_ConnectionState") = 1


    '*****************************
    '**** Fault Detection ****
    '*****************************

    ' Increment CPU-0 watchdog
    If SmartTags("CPU_0_ConnectionState") &lt;= 10 Then
        SmartTags("CPU_0_ConnectionState") = _
            SmartTags("CPU_0_ConnectionState") + 1
    End If


    '**************************
    '**** Switch Over ****
    '**************************

    If SmartTags("CPU_0_ConnectionState") >= 11 Then

        If SmartTags("CPU_ConnectedTo") = "CPU-0" Then

            ChangeConnection "CPU_400H", _
                             IP_Address, _
                             3, _
                             1

            SmartTags("CPU_0_ConnectionState") = 100
            SmartTags("CPU_ConnectedTo") = "CPU-1"

        ElseIf SmartTags("CPU_ConnectedTo") = "CPU-1" Then

            SmartTags("CPU_0_ConnectionState") = 100

        End If

    End If


    '***************************
    '**** Reintegration ****
    '***************************

    If SmartTags("CPU_ConnectedTo") = "Connection Lost" Then

        ChangeConnection "CPU_400H", _
                         IP_Address, _
                         3, _
                         1

        SmartTags("CPU_0_ConnectionState") = 100
        SmartTags("CPU_ConnectedTo") = "CPU-1"

    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 style="color: #569CD6">Sub</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">CPU_1_Trigger</span><span style="color: #D4D4D4">()</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;***************************</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;**** Initialization ****</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;***************************</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">Const </span><span style="color: #9CDCFE">IP_Address</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;192.168.1.11&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; During initialization the default connection</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; is stored in CPU_ConnectedTo.</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">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_ConnectedTo&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #CE9178">&quot;&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_ConnectedTo&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #CE9178">&quot;CPU-0&quot;</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>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;*******************</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;**** Reset ****</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;*******************</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; Reset CPU-1 connection watchdog</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_1_ConnectionState&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #B5CEA8">1</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;*****************************</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;**** Fault Detection ****</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;*****************************</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; Increment CPU-0 watchdog</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">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_0_ConnectionState&quot;</span><span style="color: #D4D4D4">) &lt;= </span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_0_ConnectionState&quot;</span><span style="color: #D4D4D4">) =</span><span style="color: #9CDCFE"> _</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_0_ConnectionState&quot;</span><span style="color: #D4D4D4">) + </span><span style="color: #B5CEA8">1</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>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;**************************</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;**** Switch Over ****</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;**************************</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">If</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_0_ConnectionState&quot;</span><span style="color: #D4D4D4">) &gt;= </span><span style="color: #B5CEA8">11</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: #C586C0">If</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_ConnectedTo&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #CE9178">&quot;CPU-0&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">            ChangeConnection </span><span style="color: #CE9178">&quot;CPU_400H&quot;</span><span style="color: #D4D4D4">,</span><span style="color: #9CDCFE"> _</span></span>
<span class="line"><span style="color: #D4D4D4">                             IP_Address,</span><span style="color: #9CDCFE"> _</span></span>
<span class="line"><span style="color: #D4D4D4">                             </span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4">,</span><span style="color: #9CDCFE"> _</span></span>
<span class="line"><span style="color: #D4D4D4">                             </span><span style="color: #B5CEA8">1</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_0_ConnectionState&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #B5CEA8">100</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_ConnectedTo&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #CE9178">&quot;CPU-1&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">ElseIf</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_ConnectedTo&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #CE9178">&quot;CPU-1&quot;</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: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_0_ConnectionState&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #B5CEA8">100</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>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">End If</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;***************************</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;**** Reintegration ****</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;***************************</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">If</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_ConnectedTo&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #CE9178">&quot;Connection Lost&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        ChangeConnection </span><span style="color: #CE9178">&quot;CPU_400H&quot;</span><span style="color: #D4D4D4">,</span><span style="color: #9CDCFE"> _</span></span>
<span class="line"><span style="color: #D4D4D4">                         IP_Address,</span><span style="color: #9CDCFE"> _</span></span>
<span class="line"><span style="color: #D4D4D4">                         </span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4">,</span><span style="color: #9CDCFE"> _</span></span>
<span class="line"><span style="color: #D4D4D4">                         </span><span style="color: #B5CEA8">1</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_0_ConnectionState&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #B5CEA8">100</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_ConnectedTo&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #CE9178">&quot;CPU-1&quot;</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>
<span class="line"><span style="color: #569CD6">End Sub</span></span></code></pre></div>



<p class="wp-block-paragraph">3. <em><strong>CPU_Connection</strong></em>: This script will be configured to run as a scheduled task. Its purpose is a backup of the heartbeat/triggers. If no heartbeat triggers have been received from a CPU, it will disable the connection. If both connections are disabled, it will set the Connected CPU to &#8220;Connection Lost.&#8221;</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>Sub ConnectionCheck()

    '***************************
    '**** Deactivation ****
    '***************************

    ' If a connection has not reset its status tag
    ' back to 1, mark it as disabled.
    If SmartTags("CPU_0_ConnectionState") >= 5 Then
        SmartTags("CPU_0_ConnectionState") = 100
    End If

    If SmartTags("CPU_1_ConnectionState") >= 5 Then
        SmartTags("CPU_1_ConnectionState") = 100
    End If

    ' If both connections are disabled,
    ' indicate total communication loss.
    If SmartTags("CPU_0_ConnectionState") = 100 _
       And SmartTags("CPU_1_ConnectionState") = 100 Then

        SmartTags("CPU_ConnectedTo") = "Connection Lost"

    End If


    '********************************
    '**** Setting Fault Flag ****
    '********************************

    ' Every cycle, set the status tags to 5.
    ' The CPU trigger scripts must reset them to 1.
    If SmartTags("CPU_0_ConnectionState") &lt; 5 Then
        SmartTags("CPU_0_ConnectionState") = 5
    End If

    If SmartTags("CPU_1_ConnectionState") &lt; 5 Then
        SmartTags("CPU_1_ConnectionState") = 5
    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 style="color: #569CD6">Sub</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">ConnectionCheck</span><span style="color: #D4D4D4">()</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;***************************</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;**** Deactivation ****</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;***************************</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; If a connection has not reset its status tag</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; back to 1, mark it as disabled.</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">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_0_ConnectionState&quot;</span><span style="color: #D4D4D4">) &gt;= </span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_0_ConnectionState&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #B5CEA8">100</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">If</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_1_ConnectionState&quot;</span><span style="color: #D4D4D4">) &gt;= </span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_1_ConnectionState&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #B5CEA8">100</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 both connections are disabled,</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; indicate total communication loss.</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">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_0_ConnectionState&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #B5CEA8">100</span><span style="color: #D4D4D4"> _</span></span>
<span class="line"><span style="color: #D4D4D4">       And </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_1_ConnectionState&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #B5CEA8">100</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: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_ConnectedTo&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #CE9178">&quot;Connection Lost&quot;</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>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;********************************</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;**** Setting Fault Flag ****</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos;********************************</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; Every cycle, set the status tags to 5.</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; The CPU trigger scripts must reset them to 1.</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">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_0_ConnectionState&quot;</span><span style="color: #D4D4D4">) &lt; </span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_0_ConnectionState&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #B5CEA8">5</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">If</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_1_ConnectionState&quot;</span><span style="color: #D4D4D4">) &lt; </span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;CPU_1_ConnectionState&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #B5CEA8">5</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: #569CD6">End Sub</span></span></code></pre></div>



<h2 id="h-step-7-configure-scripts-to-be-executed" class="wp-block-heading">Step 7: Configure Scripts to be Executed</h2>



<p class="wp-block-paragraph">The <em><strong>CPU_0_Trigger </strong></em>script will be executed off of a value change event of the tag &#8216;<em>CPU_0_Trigger</em>&#8216;. In the properties of the tag, configure a Value Change event to call the script <em><strong>CPU_0_Trigger</strong></em>. For the tag &#8216;<em>CPU_1_Trigger</em>,&#8217;&nbsp;add the same Value Change event to call the script <em><strong>CPU_1_Trigger</strong></em>.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Step7a-Configure-trigger-script-execution.png" alt="Script execution off of tag change"/></figure>



<p class="wp-block-paragraph">For the <em><strong>ConnectionTest </strong></em>script, add a new Scheduled Task to run once per minute.&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Step7b-Schedule-task-for-connection-check.png" alt="Configure task to call script periodically"/></figure>



<p class="wp-block-paragraph">That&#8217;s it. Now if a CPU goes down, the lost heartbeat will cause the connection to fail-over to a working connection. These scripts are fairly generic. If you need a faster response rate you can change the heartbeat speed, the tag acquisition cycle, and the limits allowed before fail-over. It&#8217;s not a hardware solution and it is not instantaneous, but it will allow a Comfort Panel or WinCC Advanced HMI to work with a redundant 400H PLC system!</p>



<p class="wp-block-paragraph">Thanks!</p>
<p>The post <a href="https://static.dmcinfo.com/blog/24627/automatic-hmi-connection-fail-over-in-tia-portal-with-the-s7-400h/">Automatic HMI Connection Fail-over in TIA Portal with the S7-400H</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>
		<item>
		<title>Customizing HMI Alarm Text in TIA Portal</title>
		<link>https://static.dmcinfo.com/blog/25295/customizing-hmi-alarm-text-in-tia-portal/</link>
		
		<dc:creator><![CDATA[Jason Mayes]]></dc:creator>
		<pubDate>Tue, 16 Aug 2016 13:01:15 +0000</pubDate>
				<category><![CDATA[HMI and SCADA]]></category>
		<category><![CDATA[Houston]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[HMI]]></category>
		<category><![CDATA[SCADA]]></category>
		<category><![CDATA[WinCC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/25295/customizing-hmi-alarm-text-in-tia-portal/</guid>

					<description><![CDATA[<p>Recently, I found the need to create customizable text for&#160;some alarms in a TIA Portal project. In this particular case, I needed to include the name of the operator that was monitoring the machine for traceability, as well as some specific machine information (process tag value) when the alarm occurred. Knowing this must be possible, [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/25295/customizing-hmi-alarm-text-in-tia-portal/">Customizing HMI Alarm Text in TIA Portal</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">Recently, I found the need to create customizable text for&nbsp;some alarms in a TIA Portal project. In this particular case, I needed to include the name of the operator that was monitoring the machine for traceability, as well as some specific machine information (process tag value) when the alarm occurred. Knowing this must be possible, I set off to Google, the Siemens forums, and the TIA Portal help files. Surprisingly, I was not able to find very good documentation or examples online. However, the answer turned&nbsp;out to be incredibly simple so I thought it would be worth sharing in case anyone else is ever looking for the same information.</p>

<p class="wp-block-paragraph">For my example, I will demonstrate on a&nbsp;TP700 Comfort Panel, although the same basic procedure can be used for a Basic Panel or an Advanced Runtime system. To start things off, I&apos;ve created three internal HMI tags: An alarm word (<em>UInt</em>) for triggering of my example alarm, a <em>string </em>to contain the name of the logged in user, and a <em>real </em>tag for my process value example.<br />
<br />
<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/ExampleTags.png"  /></figure></p>

<p class="wp-block-paragraph">First, I&apos;ve written a short script to capture the name of the logged in user and created a task to call my script on any user change event. Obviously, this part of the demo is specific to WinCC Comfort or Advanced as the Basic panel will not support scripting, but it will not affect our alarm text demo. Next, I&apos;ve created&nbsp;several users&nbsp;to allow myself to log in to our example HMI.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/ScriptExample.png"  /></figure>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/TaskSetup.png"  /></figure>

<p class="wp-block-paragraph">Now I&apos;ve created a single discrete alarm, triggered off of Bit 0 of my alarm word with some simple static text, &quot;Max Speed Limit Exceeded.&quot;</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/StaticAlarmText.png"  /></figure>

<p class="wp-block-paragraph">Let&apos;s pretend for the moment, though, that we would like to include the actual limit in the alarm text for both display and posterity, as well as the operator that forced the system to exceed that limit. If the limit was not configurable, we could hard code it in the message. And if there were only a few users, we could potentially create an alarm for each user. However, if users can be created dynamically and the limit is a configurable parameter, there is no way of creating all of the possible alarm messages that may occur. Luckily, we can create dynamic alarm text.</p>

<p class="wp-block-paragraph">To create dynamic alarm text, select the alarm from the alarm list and view alarm properties. Now, right-click in the &quot;Alarm Text&quot; field and you will see two options: &quot;Insert tag field&#8230;&quot; and &quot;Insert text list field&#8230;&quot;</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/TextFieldOptions.png"  /></figure>

<p class="wp-block-paragraph">I&apos;m going to use &quot;Tag Field.&quot; Notice that when you select it, a dialog will open allowing you to configure the field. In this example, I will use the process value tag I previously created, and configure it to display as a decimal with length three. As you can see, it is also possible to use Text Lists directly within an alarm, which allows you to create even more dynamic alarms.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/ProcessTagSelection.png"  /></figure>

<p class="wp-block-paragraph">Next, I added in an additional tag to display the name of the operator.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/UserNameTagSelection.png"  /></figure>

<p class="wp-block-paragraph">That&apos;s it. Now I&apos;m going to set up a quick example screen with an alarm viewer and controls for setting my process tag and triggering my alarm, as well as displaying the currently logged in user. Now if I trigger my alarm, you can see that my alarm text is dynamically generated.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/MultipleAlarms.png"  /></figure>

<p class="wp-block-paragraph">I hope this is helpful!</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/25295/customizing-hmi-alarm-text-in-tia-portal/">Customizing HMI Alarm Text in TIA Portal</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The 2016 Houston Grand Opening Party</title>
		<link>https://static.dmcinfo.com/blog/25614/the-2016-houston-grand-opening-party/</link>
		
		<dc:creator><![CDATA[Jason Mayes]]></dc:creator>
		<pubDate>Fri, 03 Jun 2016 14:00:30 +0000</pubDate>
				<category><![CDATA[Culture]]></category>
		<category><![CDATA[Houston]]></category>
		<category><![CDATA[Special Events]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/25614/the-2016-houston-grand-opening-party/</guid>

					<description><![CDATA[<p>After opening our DMC&#8217;s Houston office last spring, we officially celebrated with a Grand Opening Party in May. The event marked the first official DMC Houston Party as well as the 20th anniversary of DMC!&#160;The night was filled with food, drinks, games and most importantly, Texas-sized fun. Despite the rainy weather, numerous guests came out [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/25614/the-2016-houston-grand-opening-party/">The 2016 Houston Grand Opening Party</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">After opening our DMC&#8217;s Houston office <a href="https://static.dmcinfo.com/latest-thinking/blog/id/8995/dmc-is-expanding-to-houston">last spring</a>, we officially celebrated with a Grand Opening Party in May. The event marked the first official DMC Houston Party as well as the 20th anniversary of DMC!<span style="line-height: 1.6;">&nbsp;The night was filled with food, drinks, games and most importantly, Texas-sized fun.</span></p>



<p class="wp-block-paragraph"><span style="line-height: 1.6;">Despite the rainy weather, numerous guests came out to celebrate with us. To kick off the evening, we had a ribbon-cutting ceremony to toast our Houston office!&nbsp;</span></p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/ribbon-use-this-.jpg" alt="ribbon ceremony"/></figure>



<p class="wp-block-paragraph">We had an excellent time playing with our visitors on the new office shuffleboard. It was a huge hit. We also enjoyed utilizing our new Texas-themed cornhole equipment. Things got pretty competitive, and we came to the conclusion that quadcopters do not mix well with bean bags. &nbsp;&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/shuffleboard-re.jpg" alt="Bags at houston "/></figure>



<p class="wp-block-paragraph">The food was amazing. We served foods from each city that DMC has offices in. Aside from the Texas BBQ brisket, our personal favorite was New York style pizza. As Ryan Landwehr said, &#8220;BBQ is always Texas, and Texas is synonymous with awesome.&#8221; The brisket was catered by <a href="https://rudysbbq.com/" target="_blank" rel="noreferrer noopener">Rudy&#8217;s BBQ</a>, which is said to serve the tastiest BBQ in all of Texas. The Texas shaped cookies were a big hit, which also shows how Texans love Texas. Leigh, being the Australian of the company, was the only one who tried the Boston Cream Pie. He said it was fantastic.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/texas-cookies-re.jpg" alt="Texas shaped cookies"/></figure>



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



<p class="wp-block-paragraph"><span style="line-height: 1.6;">Not only was the food great, but so were the drinks. We sampled all types of Texas beers from the newly installed kegerator. Houston is the home to many craft breweries, which makes having the beer even more fun. The majority of us came to the conclusion that Malort (a Chicago wormwood liquor) is terrible, but it was still a good experience to have at the party. It certainly has an interesting taste. </span></p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/IMG_0144-re.jpg" alt="Houston Party"/></figure>



<p class="wp-block-paragraph">When the party was over, we made our way over to Rebels, a bar in Houston, for an after party. All in all, the night was an excellent way to celebrate the success of our new Houston office, bond with coworkers and visitors, and of course, celebrate the 20th anniversary of DMC!</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/SWAG-at-houston-re.jpg" alt="Swag at houston"/></figure>
<p>The post <a href="https://static.dmcinfo.com/blog/25614/the-2016-houston-grand-opening-party/">The 2016 Houston Grand Opening Party</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
