<?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>Oil and Gas Archives | DMC, Inc.</title>
	<atom:link href="https://static.dmcinfo.com/blog/tag/oil-and-gas/feed/index.xml" rel="self" type="application/rss+xml" />
	<link></link>
	<description></description>
	<lastBuildDate>Thu, 23 Jul 2026 14:46:33 +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>Oil and Gas Archives | DMC, Inc.</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<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>Siemens Decentralized Motion Control with SINA_POS</title>
		<link>https://static.dmcinfo.com/blog/25328/siemens-decentralized-motion-control-with-sina-pos/</link>
		
		<dc:creator><![CDATA[Otto Gottlieb]]></dc:creator>
		<pubDate>Fri, 05 Aug 2016 16:58:25 +0000</pubDate>
				<category><![CDATA[Allen Bradley PLC]]></category>
		<category><![CDATA[HMI and SCADA]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[FactoryTalk]]></category>
		<category><![CDATA[Oil and Gas]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/25328/siemens-decentralized-motion-control-with-sina_pos/</guid>

					<description><![CDATA[<p>In a previous blog I discussed programming motion control with a S7-1500 with Technology Objects in TIA Portal. This is a very popular method of doing the motion control on the PLC. We can&#160;also offload&#160;the motion control to the drive control unit&#160;using Siemens’ library motion blocks such as SINA_POS and allow the PLC to control [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/25328/siemens-decentralized-motion-control-with-sina-pos/">Siemens Decentralized Motion Control with SINA_POS</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In a previous blog I discussed programming motion control with a <a href="https://static.dmcinfo.com/latest-thinking/blog/id/8969/motion-control-solutions-with-technology-objects-in-siemens-tia-portal" rel="no follow" target="_blank">S7-1500 with Technology Objects in TIA Portal</a>. This is a very popular method of doing the motion control on the PLC.</p>



<p class="wp-block-paragraph">We can&nbsp;also offload&nbsp;the motion control to the drive control unit&nbsp;using Siemens’ library motion blocks such as SINA_POS and allow the PLC to control more drives. The Siemens library motion blocks are also available for S7-300 PLCs, which do not support the same Technology Objects as S7-1500 PLCs.</p>



<h2 class="wp-block-heading">How to Do Motion Control with SINA_POS</h2>



<ol class="wp-block-list">
<li>Add the DO Servo Module to the control unit.
 
 
<p class="wp-block-paragraph"><p style="text-align: center;"><img decoding="async" alt="Sinamics-S120-CU Configuration" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/01-DO-Servo-Module-Resized_1.png"></p></p>
</li>



<li>Add Telegram 111.&nbsp;
 
 
<p class="wp-block-paragraph"><p style="text-align: center;"><img decoding="async" alt="Siemens telegram 111" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/02-Telegram-111-Resized.png"></p></p>
</li>



<li>For a 1200 or 1500 CPU note the HW identifier in the System Constants when Telegram 111 is selected. For a 300 or 400 CPU note the I address and Q address.
 

 

 

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



<p class="wp-block-paragraph"><p style="text-align: center;"><img decoding="async" alt="S7-1200/1500 HW Identifier" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/03-Telegram-111-HW-Identifier-Resized.png"></p></p>



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



<p class="wp-block-paragraph"><p style="text-align: center;"><img decoding="async" alt="S7-300/400 HW Identifier" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/04-Telegram-111-IQ-Address.png"></p></p>
</li>



<li>In the Global Libraries find the EPOS function blocks.
 
 
<p class="wp-block-paragraph"><p style="text-align: center;"><img decoding="async" alt="Siemens EPOS Library Blocks" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/05-Library-Blocks-Resized.png"></p></p>
</li>



<li>Pull the desired motion block into your code. In this case, we created fbPositionAxis and we pulled in SINA_POS. We made SINA_POS a Multiple instance block so that it will be static memory in fbPositionAxis.
 
 
<p class="wp-block-paragraph"><p style="text-align: center;"><img decoding="async" alt="SINA_POS Function Block Default" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/06-SINA_POS-start-in-fbPositionAxis-Resized.png"></p></p>
</li>



<li>I added a few inputs to the fbPositionAxis function block to simplify the Axis control. I chose to include basic jogging, absolute moves, setting a zero home position, and interrupting a move with the fast stop.
 
 
<p class="wp-block-paragraph"><p style="text-align: center;"><img decoding="async" alt="SINA_POS Wrapper Function Block" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/fbPositionAxis-Finished-Resized.png"></p></p>
</li>



<li>Based on the inputs to fbPositionAxis I set the ModePos input of SINA_POS. You can see how I use the other inputs and the axis status to control the axis.
 
 
<p class="wp-block-paragraph"><p style="text-align: center;"><img decoding="async" alt="SINA_POS Function Block Finalized" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/SINA_POS-Finished-Resized_1.png"></p></p>
</li>
</ol>



<p class="wp-block-paragraph"><strong>A few important points:</strong></p>



<ul class="wp-block-list">
<li>The Velocity input of SINA_POS affects the absolute position move, but it does not change the speeds of Jog1 or Jog2. Those parameters must be changed in the STARTER/SCOUT configuration or by using the SINA_PARA or SINA_PARA_S function blocks.</li>



<li>My example above only uses 3 of the 8 SINA_POS operating modes, so there are functions that this example does not demonstrate.</li>



<li>SINA_POS&nbsp;uses Telegram 111 whereas SINA_SPEED uses&nbsp;Telegram 1.</li>
</ul>



<p class="wp-block-paragraph"><a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming"><strong>Learn more about DMC&#8217;s Siemens PLC programming services.&nbsp;</strong></a></p>
<p>The post <a href="https://static.dmcinfo.com/blog/25328/siemens-decentralized-motion-control-with-sina-pos/">Siemens Decentralized Motion Control with SINA_POS</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>DMC to Present at Siemens Oil &#038; Gas Conference</title>
		<link>https://static.dmcinfo.com/blog/25842/dmc-to-present-at-siemens-oil-gas-conference/</link>
		
		<dc:creator><![CDATA[DMC]]></dc:creator>
		<pubDate>Tue, 01 Mar 2016 17:16:04 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Houston]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[Oil and Gas]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/25842/dmc-to-present-at-siemens-oil-gas-conference/</guid>

					<description><![CDATA[<p>Siemens will be hosting their Oil &amp; Gas Conference in Houston on March 30 and 31. The two-day event brings together over 700 Siemens customers, executives, technology leaders, and industry experts to explore innovative technologies and new challenges facing the Oil and Gas Industry. If you&apos;re attending the Oil and Gas conference, stop by DMC&apos;s [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/25842/dmc-to-present-at-siemens-oil-gas-conference/">DMC to Present at Siemens Oil &#038; Gas Conference</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">Siemens will be hosting their <a href="http://www.industry.usa.siemens.com/automation/us/en/events/oil-gas-conference" target="_blank">Oil &amp; Gas Conference </a>in Houston on March 30 and 31. The two-day event brings together over 700 Siemens customers, executives, technology leaders, and industry experts to explore innovative technologies and new challenges facing the Oil and Gas Industry.</p>

<p class="wp-block-paragraph">If you&apos;re attending the Oil and Gas conference, stop by DMC&apos;s booth and don&apos;t miss the three presentations we&apos;ll be leading.</p>

<p class="wp-block-paragraph"><strong>Using TIA Portal and the S7-1200 for Simplified, Distributed Control &#8211; Jason Mayes</strong><br />
<span style="line-height: 1.6;">PATCO Machine and Fab, Inc., a Houston based machine design and fabrication facility specializing in oilfield products, recently patented the world&rsquo;s first automated electro-pneumatic Hose and Cable Reel Management Control System for use on offshore drilling ships. DMC worked with AWC Inc. and PATCO to design and implement an ATEX/IECEx Zone 1 rated, Siemens based, distributed control system. By leveraging the tools available in TIA Portal, DMC was able to deliver a flexible, expandable, and cost-effective automation solution that will allow PATCO to better serve their clients. In this session we&rsquo;ll discuss the advantages and differentiators that made Siemens the best choice as an automation platform.</span></p>

<p class="wp-block-paragraph"><strong>Decreased Cost, Increased Performance of a LACT Skid Using the S7-1200 &#8211; John Sullivan</strong><br />
Why would an OEM that has been installing the same hardware for a long time would want to switch? The answer is always the same: to reduce the cost. The existing LACT skid was utilizing a MicroLogix PLC and PanelView HMI, and when oil prices significantly decreased, management was looking to reduce overall costs of each machine, and the S7-1200 and Comfort Panel appeared to be most cost-effective.</p>

<p class="wp-block-paragraph">This presentation will cover the features of a LACT Skid. We will discuss some of the strategies of conversion, as well as ways to decrease the cost and increase return on investment.</p>

<p class="wp-block-paragraph"><strong>Powerful SCADA Solutions: Is WinCC Open Architecture Right for Me? &#8211; John Sullivan</strong><br />
<span style="line-height: 1.6;">WinCC OA is a step away from traditional SCADA and has a variety of added benefits. This is especially true when it comes to geographically distributed oil and gas applications, as well as infrastructure applications. WinCC OA uses an open architecture with object oriented concepts, is SIL 3 Certified, and provides nearly unlimited scalability with seamless redundancy. This presentation will cover some advantages and cases of use for WinCC OA in oil and gas applications. It will also help identify areas where WinCC OA can provide a strong benefit over traditional SCADA systems. Specific case study examples will be presented and parallels will be drawn to solutions that could be provided in the oil and gas industry.</span></p>

<p class="wp-block-paragraph"><strong>Learn more about DMC&apos;s <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/oil-and-gas-engineering">Oil and Gas solutions</a>.</strong></p>
<p>The post <a href="https://static.dmcinfo.com/blog/25842/dmc-to-present-at-siemens-oil-gas-conference/">DMC to Present at Siemens Oil &#038; Gas Conference</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WinCC OA Presentation at the Rocky Mountain Oil and Gas Conference</title>
		<link>https://static.dmcinfo.com/blog/26392/wincc-oa-presentation-at-the-rocky-mountain-oil-and-gas-conference/</link>
		
		<dc:creator><![CDATA[DMC]]></dc:creator>
		<pubDate>Thu, 13 Aug 2015 13:59:25 +0000</pubDate>
				<category><![CDATA[Denver]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Special Events]]></category>
		<category><![CDATA[Oil and Gas]]></category>
		<category><![CDATA[WinCC OA]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/26392/wincc-oa-presentation-at-the-rocky-mountain-oil-and-gas-conference/</guid>

					<description><![CDATA[<p>I recently had the pleasure of presenting at the Siemens Rocky Mountain Oil and Gas Conference in Denver. This was Siemens&apos; first year holding the conference in Denver and there was an enthusiastic response of over 120 attendees.&#160; The goal of the day-long event on July 28 was to promote discovery and discussion around the [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/26392/wincc-oa-presentation-at-the-rocky-mountain-oil-and-gas-conference/">WinCC OA Presentation at the Rocky Mountain Oil and Gas Conference</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">I recently had the pleasure of presenting at the Siemens <a href="http://www.industry.usa.siemens.com/automation/us/en/events/mobile-showcase/pages/oil_gas_conference.aspx" target="_blank">Rocky Mountain Oil and Gas Conference</a> in Denver. This was Siemens&apos; first year holding the conference in Denver and there was an enthusiastic response of over 120 attendees.&nbsp;</p>

<p class="wp-block-paragraph">The goal of the day-long event on July 28 was to promote discovery and discussion around the Oil and Gas industry&apos;s emerging automation and controls trends. All the presentations were well attended, offering a great opportunity to network in the area and learn about developing Oil and Gas technologies.&nbsp;</p>

<p class="wp-block-paragraph">My presentation,&nbsp;P<strong>owerful SCADA solutions: Is WinCC OA right for me?</strong>, demonstrated use cases for Siemens WinCC OA in Oil and Gas applications. The audience was excited by the idea of putting more configuration tools in the hands of their operators without having an integrator onsite.&nbsp;</p>

<p class="wp-block-paragraph">Check out my <a href="http://www.slideshare.net/DMCChicago/improving-and-scaling-scada-systems-is-wincc-oa-right-for-me" target="_blank">presentation</a> below and feel free to contact me at <a href="mailto:james.condon@localhost">james.condon@localhost</a> with any questions.</p>

<p class="wp-block-paragraph"><iframe allowfullscreen="" frameborder="0" height="420" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/key/HrMNrWrz9TXFz3" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" width="510"></iframe></p>

<div style="margin-bottom:5px"><a href="/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/wincc-open-architecture-development"><b>Learn more about DMC&apos;s WinCC OA solutions.&nbsp;</b></a></div>
<p>The post <a href="https://static.dmcinfo.com/blog/26392/wincc-oa-presentation-at-the-rocky-mountain-oil-and-gas-conference/">WinCC OA Presentation at the Rocky Mountain Oil and Gas Conference</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>DMC to Present at the Rocky Mountain Oil and Gas Conference</title>
		<link>https://static.dmcinfo.com/blog/26467/dmc-to-present-at-the-rocky-mountain-oil-and-gas-conference/</link>
		
		<dc:creator><![CDATA[DMC]]></dc:creator>
		<pubDate>Fri, 24 Jul 2015 13:45:59 +0000</pubDate>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Denver]]></category>
		<category><![CDATA[Special Events]]></category>
		<category><![CDATA[Oil and Gas]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/26467/dmc-to-present-at-the-rocky-mountain-oil-and-gas-conference/</guid>

					<description><![CDATA[<p>Update: View my presentation.  Siemens&#8217; mobile showcase will be stopping by Denver on July 28 for the Rocky Mountain Oil and Gas Conference. This free event offers a&#160;day of discovery and dialogue on the latest emerging trends around automation, instrumentation, and controls for the Oil and Gas industry.&#160;Register here.&#160; If you&#8217;re planning to attend the [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/26467/dmc-to-present-at-the-rocky-mountain-oil-and-gas-conference/">DMC to Present at the Rocky Mountain Oil and Gas Conference</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Update: <a href="https://static.dmcinfo.com/blog/26392/wincc-oa-presentation-at-the-rocky-mountain-oil-and-gas-conference/" type="link" id="https://static.dmcinfo.com/blog/26392/wincc-oa-presentation-at-the-rocky-mountain-oil-and-gas-conference/">View my presentation</a>. </strong></p>



<p class="wp-block-paragraph">Siemens&#8217; mobile showcase will be stopping by Denver on July 28 for the <a href="http://www.industry.usa.siemens.com/automation/us/en/events/mobile-showcase/pages/oil_gas_conference.aspx" target="_blank">Rocky Mountain Oil and Gas Conference</a>. This free event offers a&nbsp;day of discovery and dialogue on the latest emerging trends around automation, instrumentation, and controls for the Oil and Gas industry.&nbsp;<a href="http://www.industry.usa.siemens.com/automation/us/en/events/mobile-showcase/pages/oil_gas_conference.aspx" target="_blank">Register here</a>.&nbsp;</p>



<p class="wp-block-paragraph">If you&#8217;re planning to attend the conference stop by DMC&#8217;s booth and don&#8217;t miss my presentation:&nbsp;<strong>Powerful SCADA solutions: Is WinCC OA right for me?</strong></p>



<p class="wp-block-paragraph"><p style="margin-left: 40px;">WinCC OA is a step away from traditional SCADA and has a variety of added benefits. This is especially true when it comes to geographically distributed oil and gas applications, as well as infrastructure applications. WinCC OA uses an open architecture with object-oriented concepts, is SIL 3 Certified, and provides nearly unlimited scalability with seamless redundancy. This presentation will cover some advantages of and present use cases for WinCC OA in oil and gas applications. It will also help identify areas where WinCC OA can provide a strong benefit over traditional SCADA systems. Specific case study examples will be presented, and parallels will be drawn to solutions that could be provided in the oil and gas industry.</p></p>



<p class="wp-block-paragraph"><strong>I&#8217;ll be presenting on July 28, 2015 at 10:30 a.m. in Grand Mesa F.</strong>&nbsp;I hope to see you in Denver!</p>



<p class="wp-block-paragraph"><a href="/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming/wincc-open-architecture-development">Learn more about DMC&#8217;s Wincc OA services.</a></p>
<p>The post <a href="https://static.dmcinfo.com/blog/26467/dmc-to-present-at-the-rocky-mountain-oil-and-gas-conference/">DMC to Present at the Rocky Mountain Oil and Gas Conference</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>DMC Attends 2015 Offshore Technology Conference</title>
		<link>https://static.dmcinfo.com/blog/26470/dmc-attends-2015-offshore-technology-conference/</link>
		
		<dc:creator><![CDATA[Jason Mayes]]></dc:creator>
		<pubDate>Thu, 23 Jul 2015 12:33:13 +0000</pubDate>
				<category><![CDATA[Houston]]></category>
		<category><![CDATA[Special Events]]></category>
		<category><![CDATA[Oil and Gas]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/26470/dmc-attends-2015-offshore-technology-conference/</guid>

					<description><![CDATA[<p>DMC recently attended the 2015 Offshore Technology Conference (OTC) held May 4 &#8211; 7 in Houston. Over 94,700 attendees in offshore energy from around the world gathered at NRG Park to exchange ideas and opinions advancing scientific and technical knowledge for the safe, environmentally friendly and sustainable development of offshore oil and gas resources. DMC opened a Houston office [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/26470/dmc-attends-2015-offshore-technology-conference/">DMC Attends 2015 Offshore Technology Conference</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">DMC recently attended the 2015 <span id="div_libentrypagetitle" style="box-sizing: border-box;">Offshore Technology Conference (OTC) </span>held May 4 &#8211; 7 in Houston. Over 94,700 attendees in offshore energy from around the world gathered at NRG Park to exchange ideas and opinions advancing scientific and technical knowledge for the safe, environmentally friendly and sustainable development of offshore oil and gas resources.</p>



<p class="wp-block-paragraph">DMC opened a <a href="/contact/dmc-houston">Houston office</a> this year, making this conference especially valuable. Ryan Taylor and I spent a day at the conference learning more about Oil and Gas technologies, including jackup rigs and underwater ROVs.</p>



<p class="wp-block-paragraph">We also had the opportunity to volunteer manning National Instruments&#8217; booth at the conference along with other <a href="https://static.dmcinfo.com/about/partners/ni-integration-partner/">NI Alliance Partners</a>. This was a great way to learn more about NI&#8217;s presence in Houston and meet the people who work with NI&#8217;s Texas team.</p>



<p class="wp-block-paragraph">Our partners from <a href="/about/partners/siemens-solution-partner">Siemens</a> were also represented at the conference. Ryan and I spent some time stopping by the Siemens booth to say hello and enjoyed margaritas with our Siemens friends at their Cinco de Mayo networking event.&nbsp;</p>



<p class="wp-block-paragraph">Overall, the OTC was a fun way to network with our existing partners and get a further introduction to the Oil and Gas industry and our Houston neighbors.</p>
<p>The post <a href="https://static.dmcinfo.com/blog/26470/dmc-attends-2015-offshore-technology-conference/">DMC Attends 2015 Offshore Technology Conference</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>DMC Presents at the 2015 Siemens Oil &#038; Gas Conference</title>
		<link>https://static.dmcinfo.com/blog/26495/dmc-presents-at-the-2015-siemens-oil-gas-conference/</link>
		
		<dc:creator><![CDATA[Kristie Shea]]></dc:creator>
		<pubDate>Tue, 21 Jul 2015 17:15:39 +0000</pubDate>
				<category><![CDATA[Houston]]></category>
		<category><![CDATA[Oil and Gas]]></category>
		<category><![CDATA[WinCC OA]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/26495/dmc-presents-at-the-2015-siemens-oil-gas-conference/</guid>

					<description><![CDATA[<p>DMC was recently invited to speak at the 2015&#160;Siemens Oil &amp; Gas Conference in Houston, TX. The conference is an opportunity for industry partners to share knowledge on how Siemens delivers&#160;efficiency and reliability to the upstream, midstream and downstream sectors of oil production and explore solutions that do more with less. Since DMC opened an [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/26495/dmc-presents-at-the-2015-siemens-oil-gas-conference/">DMC Presents at the 2015 Siemens Oil &#038; Gas Conference</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">DMC was recently invited to speak at the <a href="http://www.industry.usa.siemens.com/automation/us/en/events/oil-gas-conference/Pages/Agenda.aspx" target="_blank">2015&nbsp;Siemens Oil &amp; Gas Conference</a> in Houston, TX. The conference is an opportunity for industry partners to share knowledge on how Siemens delivers&nbsp;<span style="line-height: 1.6;">efficiency and reliability to the upstream, midstream and downstream sectors of oil production and explore solutions that do more with less.</span></p>

<p class="wp-block-paragraph">Since DMC <a href="/contact/dmc-houston">opened an office in Houston</a> this year, the conference was a perfect opportunity to meet more people in the area. Jason Mayes and I attended and had a great time connecting with partners and distributors. We attended a presentation every session and found the conference to be an insightful introduction to the area.</p>

<p class="wp-block-paragraph">I had the privilege of delivering a presentation titled&nbsp;<strong>Improving and Scaling SCADA Systems: Is WinCC OA Right for Me?&nbsp;</strong>The presentation covered a case study from a DMC distributed architecture project that was a good use case for WinCC OA. For our project, we did this with generators. The presentation paralleled these features as they would apply to similar features within Oil &amp; Gas. I shared how our WinCC OA application might apply to distributed well sites, frack site trucks and skids, and pipelines.&nbsp;</p>

<p class="wp-block-paragraph">View the slide deck from my presentation below and feel free to <a href="mailto:kristie.shea@localhost">contact me</a> with any questions.</p>

<p class="wp-block-paragraph"><iframe allowfullscreen="" frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/key/9XuWEn3FlJTK9G" style="border: 1px solid rgb(204, 204, 204); border-image: none; margin-bottom: 5px; max-width: 100%;" width="425"></iframe></p>

<p class="wp-block-paragraph"><a href="/services/manufacturing-automation-and-intelligence/oil-and-gas-engineering"><b>Learn more about DMC&apos;s Oil and Gas Engineering services.</b></a></p>
<p>The post <a href="https://static.dmcinfo.com/blog/26495/dmc-presents-at-the-2015-siemens-oil-gas-conference/">DMC Presents at the 2015 Siemens Oil &#038; Gas Conference</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
