<?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>Joshua Zimmerle, Author at DMC, Inc.</title>
	<atom:link href="https://static.dmcinfo.com/blog/author/joshuas/feed/index.xml" rel="self" type="application/rss+xml" />
	<link></link>
	<description></description>
	<lastBuildDate>Wed, 08 Jul 2026 19:17:18 +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>Joshua Zimmerle, Author at DMC, Inc.</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Can You Branch PROFIBUS?</title>
		<link>https://static.dmcinfo.com/blog/20364/can-you-branch-profibus/</link>
		
		<dc:creator><![CDATA[Joshua Zimmerle]]></dc:creator>
		<pubDate>Fri, 17 Jan 2020 12:15:07 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/20364/can-you-branch-profibus/</guid>

					<description><![CDATA[<p>PROFIBUS is a common two-wire serial communication method and standard for fieldbus communications in automation. Originally developed in 1989, it remains one of the simplest and cheapest communication methods used in industrial automation. However, with its simplicity comes some quirks and unique best practices. In this blog, I&#8217;ll cover how to properly structure PROFIBUS lines [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/20364/can-you-branch-profibus/">Can You Branch PROFIBUS?</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">PROFIBUS is a common two-wire serial communication method and standard for fieldbus communications in automation. Originally developed in 1989, it remains one of the simplest and cheapest communication methods used in industrial automation. However, with its simplicity comes some quirks and unique best practices. In this blog, I&rsquo;ll cover how to properly structure PROFIBUS lines and why it&rsquo;s important to do so.</p>

<h2 class="wp-block-heading">PROFIBUS Cables</h2>

<p class="wp-block-paragraph">PROFIBUS DP generally has one master and up to 31(or more with expanders) slaves. These are connected by two twisted wires in a shielded cable and signals are sent by alternating the differential voltage, nominally 24V, across the two wires. The cable is terminated at each end with a series of resistors that help maintain, particularly in very long cables, the signal&rsquo;s quality.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/PROFIBUS_diagrams-1.png"  /></figure>

<p class="wp-block-paragraph">Most PROFIBUS connectors have a built-in switch to terminate the cable. Ideally, a PROFIBUS system will have one length of PROFIBUS cable that is terminated on both ends with devices connected along the cable. If one end is left unterminated, the capacitance and inductance of the wire acts as a pulse forming network where the alternating voltage propagates through the wire and creates ripples.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Termination_Switch-1.png"  /></figure>

<p class="wp-block-paragraph">Early radar systems used long twisted pairs of wires to form high voltage pulses. However, this phenomenon, referred to as signal reflection, is often more destructive than useful or intentional.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/PROFIBUS_diagrams-2_1.png"  /></figure>

<p class="wp-block-paragraph">The above two photos show two different PROFIBUS signals at work on a cable about three meters long. The left photo shows the signal in a properly terminated PROFIBUS cable where the signal is very clean and has sharp rise and fall edges. In contrast, the right shows the signal on the same cable but without termination. The noise introduced by unterminated lines is proportional to the length of the cable, so the longer the cable the worse the noise. Even at 12Mbps, the fastest most PROFIBUS systems use, both PROFIBUS signals still work.</p>

<h2 class="wp-block-heading">Branching</h2>

<p class="wp-block-paragraph">Branching PROFIBUS cables is possible, although it&rsquo;s generally not advisable. The longer a branch of PROFIBUS cable, the more noise it will introduce with a higher chance of it interfering with the signal.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/PROFIBUS_diagrams-3.png"  /></figure>

<p class="wp-block-paragraph">In this case, a one meter branch out from an already terminated PROFIBUS cable is not as bad as an unterminated cable end. The signal is still workable, but it does introduce a very noticeable amount of noise.</p>

<p class="wp-block-paragraph">For short cable lengths, and electromagnetically quiet environments, this noise is minimal and acceptable. For larger systems, however, it can interfere with devices ability to communicate. If a PROFIBUS cable must be branched the terminations should be placed as far away from each other as possible with the unterminated branches as short as possible.</p>

<p class="wp-block-paragraph">When setting up critical PROFIBUS systems were noise is a concern, keep in mind that electromagnetically noise is rarely constant. Daily and yearly cycles, as well as acute events like power outages, can greatly alter the magnitude and frequency of electromagnetic noise. Also, always make sure the PROFIBUS cable&rsquo;s shielding is grounded to help minimize noise in the signal.</p>

<h2 class="wp-block-heading">Adding Terminating Resistors</h2>

<p class="wp-block-paragraph">If unterminated lengths of cable introduced more noise and reflection, would adding terminations to each branch reduce the problem? Kind of. The more terminating resistors and the lower their resistance, the less reflection we&rsquo;ll see between the two wires in the PROFIBUS cable. Lowing this residence means that the devices on the network will output more current, take longer to rise and fall, and not see as high of voltage between the wires.</p>

<p class="wp-block-paragraph">Most systems and devices will likely tolerate a third termination in the system. Although&nbsp;it&rsquo;s still not advisable since the extra current and lower voltages may stress devices or cause signals to be unreliable in extremely long cables.</p>

<p class="wp-block-paragraph">In addition to this, long cables with low resistance will have increased rise and fall times. Longer rise and fall times mean that the devices will have to communicate at a slower speed.</p>

<figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/PROFIBUS_diagrams-4.png"  /></figure>

<p class="wp-block-paragraph">The left photo shows the rise time on the same PROFIBUS network as above, and the right shows the rise time with the addition of a third terminating resistor. With only two terminations, the system can rise and fall (10%-90%) in about 5ns. In contrast, the third terminating resistor brings this time up to over 40ns. Three terminations may work for a low transmission rate networks, but faster networks may become unreliable.</p>

<h2 class="wp-block-heading">Conclusion</h2>

<p class="wp-block-paragraph">Properly structuring and understanding PROFIBUS can save significant time and money while increasing reliability. If you need help architecting or implementing PROFIBUS, or any industrial automation system, contact DMC. Hopefully this helps you understand how PROFIBUS works a little more.</p>
<p>The post <a href="https://static.dmcinfo.com/blog/20364/can-you-branch-profibus/">Can You Branch PROFIBUS?</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Finite and (Almost-) Infinite State Machines</title>
		<link>https://static.dmcinfo.com/blog/21062/finite-and-almost-infinite-state-machines/</link>
		
		<dc:creator><![CDATA[Joshua Zimmerle]]></dc:creator>
		<pubDate>Mon, 26 Aug 2019 14:21:42 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[State Machines]]></category>
		<category><![CDATA[TIA Portal]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/21062/finite-and-almost-infinite-state-machines/</guid>

					<description><![CDATA[<p>What is a state machine, and why should I use one? State machines are a way of organizing code into situations, or states, and transitions so that the code is easier to follow and read. A state represents what the code and/or physical machine is currently doing, and transitions represent ways for the system to [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/21062/finite-and-almost-infinite-state-machines/">Finite and (Almost-) Infinite State Machines</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">What is a state machine, and why should I use one? <strong>State machines</strong> are a way of organizing code into situations, or states, and transitions so that the code is easier to follow and read. A state represents what the code and/or physical machine is currently doing, and transitions represent ways for the system to move between states. In this overview, I’ll cover some of the basics of using state machines to control industrial machines.</p>



<h2 class="wp-block-heading" id="h-states">States</h2>



<p class="wp-block-paragraph">First, we should contrast the two most common types of state machines, <strong>Moore and Mealy</strong>. Moore state machines set outputs based on only the current state. By contrast, Mealy state machines set outputs according to the current state and current inputs into the system. The most significant difference is where decision logic is located within the state machine. Moore state machines place the decision logic in the transitions while Mealy state machines place the logic in the states.</p>



<p class="wp-block-paragraph">Functionally both Moore and Mealy state machines can both accomplish the same tasks, the only difference is how readable the state machine will be. We&#8217;ll focus on&nbsp;Moore state machines here, because I find them to generally be more readable in most situations.&nbsp;</p>



<p class="wp-block-paragraph">For machine control, the controller dictates a system’s state. It’s often essential to have the controller verify that the state it’s in matches the physical system, particularly when recovering from power cycles or manual operation. Some systems do this exclusively with sensors, while others rely on the assistance of human inspection. For example, robotic arms typically have sensors that ensure the area is locked off for safety and then ask the operator to confirm that the area is clear before moving.&nbsp;</p>



<p class="wp-block-paragraph">Another special case worth mentioning is when states have internal properties. These setpoints allow a single step to count or output a user-defined value. These properties are very useful for a system that needs to count the number of times something has happened or want to use a user-defined set point.</p>



<h2 class="wp-block-heading" id="h-transitions">Transitions</h2>



<p class="wp-block-paragraph">Transitions connect states. Each transition has a direction and set of conditions that have the be met to transition into the next state. Once a transition&#8217;s conditions are met, the state machine transitions states and begins setting outputs for the new state. Individual states can also have multiple leaving transitions, each with different conditions.</p>



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



<h2 class="wp-block-heading" id="h-sequencers">Sequencers</h2>



<p class="wp-block-paragraph">Sequencers are a subset of state machines that consist of states that each have only one transition. This means that sequencers do not have any logic to pick from multiple states and always execute the same states in the same order. Sequencers are some of the simplest state machines and are often used to help organize larger state machines, compressing multiple steps into a single step.</p>



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



<h2 class="wp-block-heading" id="h-finite-state-machines">Finite State Machines</h2>



<p class="wp-block-paragraph">More complex state machines have branching transitions that allow the system to transition to different states depending on situational conditions. State machines are far from the only method of doing this but are one of the most structured and readable methods. This fact is a valuable and often overlooked aspect of programming. Readable code with clearly organized structure is easier and faster to commission and debug, as well as easier to add to latter logic if more functionality is needed.</p>



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



<h2 class="wp-block-heading" id="h-near-infinite-state-machines">Near Infinite State Machines</h2>



<p class="wp-block-paragraph">More complex state machines may allow the operator to order individual steps to form more complicated processes. These state machines use an intermediate step that selects the next step based on the operator’s selection and can have near limitless configurations. The ability to define new sequences of steps on the fly and pass differing parameters to steps make these state machines, and the machines they control as versatile as possible.</p>



<p class="wp-block-paragraph">Each step in the process is treated as a single state, even if functionally, it has many individual steps within it. Each step is treated as a single date because these states have only one or two possible outcomes: successful completion and/or unsuccessful completion. When a step is completed successfully, the systems will execute the next step, and so on until all the defined steps are complete. If a step fails, the system will transition to a fault handling state, pausing the machine and communicating the error to the operator.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/near-infinitie-state-machine.png" alt="near infinite state machines"/></figure>



<p class="wp-block-paragraph">The difficulty in designing this type of state machine and still making it easy to use lies in structuring each step so that it can follow any other step. Special care must be taken to disable or prevent potentially dangerous actions from executing when they could cause damage to the machine or operator.</p>



<p class="wp-block-paragraph">Hopefully, this information helps you understand a little more about how state machines and the systems they control work. Developing a proper state machine early on can save a lot of time and effort, as well as preventing a costly bug in the program. Also if you’re programming in <a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming/">Siemens’ TIA Portal</a>, check out the Sequencer block in the <a href="https://openplclibrary.com/" target="_blank" rel="noreferrer noopener">Siemens Open Library</a>, it’s great for designing sequences and state machines.</p>



<p class="wp-block-paragraph"><strong>Learn more about our <a href="/services/manufacturing-automation-and-intelligence/plc-programming">PLC Programming expertise</a>. <a href="/contact">Contact us</a> for any project inquiries.&nbsp;</strong></p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://static.dmcinfo.com/blog/21062/finite-and-almost-infinite-state-machines/">Finite and (Almost-) Infinite State Machines</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PLC Cycle Time</title>
		<link>https://static.dmcinfo.com/blog/21150/plc-cycle-time/</link>
		
		<dc:creator><![CDATA[Joshua Zimmerle]]></dc:creator>
		<pubDate>Mon, 12 Aug 2019 14:26:39 +0000</pubDate>
				<category><![CDATA[Allen Bradley PLC]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[Cycle Time]]></category>
		<category><![CDATA[PLC Programming]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/21150/plc-cycle-time/</guid>

					<description><![CDATA[<p>Modern PLCs are fast, but with only a few exceptions, they can only do one thing at a time. This is because PLCs are built around single-core processors. In this post, I&#8217;ll go over some of the low-level PLC concepts that both make PLCs versatile and limited in their capabilities. Cyclic vs. Interrupt Code Code [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/21150/plc-cycle-time/">PLC Cycle Time</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">Modern PLCs are fast, but with only a few exceptions, they can only do one thing at a time. This is because PLCs are built around single-core processors. In this post, I&rsquo;ll go over some of the low-level PLC concepts that both make PLCs versatile and limited in their capabilities.</p>

<h2 class="wp-block-heading">Cyclic vs. Interrupt Code</h2>

<p class="wp-block-paragraph">Code on a PLC is called either cyclically or by an interrupt. Cyclic code runs start to finish repeatedly as fast as possible, so long as the CPU is not interrupted by an interrupt call. Interrupts pause the code currently running on CPU, call the interrupt code, and then once the interrupt code is complete, resume what the CPU was doing. Most PLCs can tie interrupts to cyclic timers, startup, value changes, and/or errors. Interrupts can also interrupt other interrupts if they are of a higher priority.</p>

<figure class="wp-block-image"><img decoding="async" alt="plc cpu" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/plc-cpu.png"  /></figure>

<p class="wp-block-paragraph">The&nbsp;diagram above shows what a PLC&rsquo;s CPU spends its time doing. The pink represents cyclic code that would take the CPU 5ms to complete if it weren&rsquo;t interrupted. The green represents the communication load on the CPU taking up to 0.15ms of every 1ms, and blue is the motion control code called every 5ms by a cyclic interrupt. In this example, the motion control interrupt is the highest priority, meaning it can interrupt communication and cyclic code.</p>

<p class="wp-block-paragraph">Cyclic code is commonly referred to as the main PLC code. Siemens refers to cyclic code as a <strong>program cycle</strong> or <strong>OB1, </strong>and <a href="/services/manufacturing-automation-and-intelligence/plc-programming/allen-bradley-plc-programming">Allen-Bradley</a> calls it a <strong>continues task</strong>. Interrupts, other organizational blocks in Siemens or event tasks in Allen-Bradley, allow the designer to specify precisely when the interrupt code should run in relation to an event or a timer.</p>

<p class="wp-block-paragraph">For example, high-speed counters are typically tied to hardware interrupts, allowing a hardware input to increase the count in the PLC immediately. <a href="/latest-thinking/blog/id/9826/using-a-high-speed-counters-hardware-interrupt-to-peripherally-write-to-an-output-on-a-siemens-1200-plc">View this blog</a> for examples of high-speed counters. This means that the high-speed counter can count multiple inputs before the PLCs main code has completed a full cycle. Similarly, PID control loops and motion control code are offend tied to cyclic interrupts, with varying cycle times. Physical systems that are slow to respond can be tied to cyclic interrupts with long cycles. This, in turn, reduces the CPU load. Systems that are quick to respond can be tied to much faster cycles allowing for tighter control, at the cost of CPU load.</p>

<h2 class="wp-block-heading">Cycle Time</h2>

<p class="wp-block-paragraph"><strong>PLC cycle time</strong> is defined as the time it takes to run the cyclic code start to finish once with interrupts. Because of the number and frequency of interrupts between cycles, cycle times also very. In most cases, we are concerned with the maximum cycle time since this corresponds to how long it will take the PLC to respond. A general rule of thumb is to assume that the PLC could take as long as twice the maximum cycle time to respond. This means if we have a running signal indicator light, it could be up to twice the max cycle time between when the PLC gets the running signal and the light turns on.</p>

<p class="wp-block-paragraph">Most PLCs monitor the cycle time and will alarm if the cycle time exceeds a maximum threshold. The specific threshold should be configured based on the application and the maximum acceptable response time of the PLC. Cycle times are particularly important in safety applications where the PLC&rsquo;s response time can add to the response times of other components.</p>

<h2 class="wp-block-heading">Reducing Cycle Time</h2>

<p class="wp-block-paragraph">There are a few methods to decrease the PLC&apos;s response time if cycle times must be reduced. Firstly, consider if the PLC&rsquo;s CPU can be upgraded. A faster CPU will execute code faster and reduce the overall cycle time. This method is particularly effective for projects that have a lot of motion control and PID control loops, as these functions are generally very CPU intensive.</p>

<p class="wp-block-paragraph"><strong>Siemens 1511 CPU (14.9ms Cycle Time)</strong></p>

<p class="wp-block-paragraph"><strong><figure class="wp-block-image"><img decoding="async" alt="siemens 1511 cpu" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/siemens-1511-cpu.png"  /></figure></strong></p>

<p class="wp-block-paragraph"><strong>Siemens 1517 CPU (6.3ms Cycle Time)</strong></p>

<p class="wp-block-paragraph"><strong><figure class="wp-block-image"><img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/siemens-1517-cpu.png"  /></figure></strong></p>

<p class="wp-block-paragraph">The next aspect to consider is the communication load. Communication load is defined as how much of the CPU&rsquo;s time is spent communicating with other devices, and typically ranges from 15% to 50%. Upgrading the CPU can help reduce the communication load some, but for the most part, reducing communication load is a function of the communication method(s) and quantity. Consolidating the number of devices the PLC must communicate with and/or using communication methods with less overhead can both help but are often harder to implement.</p>

<p class="wp-block-paragraph">Another method for reducing cycle time is optimizing the code itself. Moving pieces of code that do not have to run every cycle into cyclic or other interrupts can help reduce mean cycle times, but may not have much effect on the maximum cycle time. Moving code into interrupts can also make testing the cycle time more difficult as the interrupts may or may not occur in every cycle.</p>

<h2 class="wp-block-heading">Monitoring Cycle Time</h2>

<p class="wp-block-paragraph"><u><strong>Siemens&apos; S7 TIA Portal PLCS:</strong></u></p>

<p class="wp-block-paragraph">TIA Portal has a built-in tool that allows you to monitor the cycle time of a physical PLC or a simulation of the PLC. To monitor the cycle time, first, go online with the PLC, upload the PLCs code, and then open <strong>Online &amp; Diagnostics</strong>. Under <strong>Diagnostics&gt;Cycle time</strong>, you&rsquo;ll see a bar chart with the current PLC cycle time. The light blue box represents the allowable cycle time, and a red bar indicates that cycle time has exceeded the maximum. This is shown in the diagram below.&nbsp;</p>

<figure class="wp-block-image"><img decoding="async" alt="tia portal cycle time" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/tia-portal-cycle-time.png"  /></figure>

<p class="wp-block-paragraph">To change the allowable cycle time, open the <strong>PLC&rsquo;s Device configuration </strong>and under <strong>General&gt;Cycle</strong>, update the maximum cycle time. You will have to be offline with the PLC to change this value and then redownload to the PLC for the change to take effect. Remember that the max observed cycle time may not be the actual max cycle time. This can happen if the code running on the PLC has many interrupts, or long and looping pieces of code called by interrupts.</p>

<p class="wp-block-paragraph"><u><strong>Allen-Bradley and Other PLCs:</strong></u></p>

<p class="wp-block-paragraph">Finding the cycle time of other PLCs can be done more manually, although it&rsquo;s no less relevant or useful for developing well-optimized code. The simplest way is to check the system time at the start of each cyclic call and compare the current system time to the previous system time. This method will include the overhead time the PLC takes to communicate and scan I/O. With a little more logic, you can easily find the min, max, and mean cycle times.</p>

<p class="wp-block-paragraph">Understanding cycle time, cyclic calls, and interrupt calls is key to architecting successful PLC code and just one of the areas DMC excels at. Good architecture early on in a project can save time and allow the uses of more cost-effective hardware, while still meeting project requirements explicit and implicit.</p>

<p class="wp-block-paragraph">Learn more about <a href="/services/manufacturing-automation-and-intelligence/plc-programming">DMC&apos;s PLC Programming services</a> and <a href="/contact">contact us</a> to get started on your next PLC Programming project.</p>
<p>The post <a href="https://static.dmcinfo.com/blog/21150/plc-cycle-time/">PLC Cycle Time</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>A Primer on Signal Types and Serial Communication</title>
		<link>https://static.dmcinfo.com/blog/21341/a-primer-on-signal-types-and-serial-communication/</link>
		
		<dc:creator><![CDATA[Joshua Zimmerle]]></dc:creator>
		<pubDate>Fri, 28 Jun 2019 11:36:37 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[Signal Communication]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/21341/a-primer-on-signal-types-and-serial-communication/</guid>

					<description><![CDATA[<p>Whether you&#8217;re working with a PLC, a PC or an Arduino, odds are you&#8217;re going to need to send and receive signals. In this blog, I&#8217;ll go over some basic signal types and communication methods as well as why these signals may be used. The hope is that this will help you select sensors, I/O [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/21341/a-primer-on-signal-types-and-serial-communication/">A Primer on Signal Types and Serial Communication</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">Whether you&rsquo;re working with a PLC, a PC or an Arduino, odds are you&rsquo;re going to need to send and receive signals. In this blog, I&rsquo;ll go over some basic signal types and communication methods as well as why these signals may be used. The hope is that this will help you select sensors, I/O cards, and devices that work best in your application.</p>

<h2 class="wp-block-heading">Digital</h2>

<p class="wp-block-paragraph">Perhaps the most straightforward signal is a <strong>digital signal.</strong> Digital signals have two states, on and off, sometimes called true and false, high and low, closed and open, or one and zero. Digital inputs and outputs have four key voltages.</p>

<p class="wp-block-paragraph">These voltages are the absolute maximum and minimum voltages. The minimum voltage is considered high, while the maximum voltage is considered low. Outputs also have a max supply current that must be greater than the max sink current for an input. For most digital devices these voltages have been standardized.</p>

<figure class="wp-block-image"><img decoding="async" alt="digital signal types" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/digital-signal-types.png"  /></figure>

<p class="wp-block-paragraph">In the case of <strong>TTL</strong> (Transistor-Transistor Logic) the nominal voltage is 5 volts, but anything greater than 2 volts on an input is considered high, and similarly, anything less than 0.8 volts on an input is considered low. This allows for some error/residual voltage from the output as well as some noise in the wires transmitting the signal.</p>

<p class="wp-block-paragraph">In practice, most signals will be very close to 0.0 or 5.0 volts. However, in extreme cases where signal wires run exceedingly long distances, left unshielded in electromagnetically noisy environments, or draw more current then the output can supply, can push voltages outside of these ranges causing problems.</p>

<figure class="wp-block-image"><img decoding="async" alt="PLC wire diagram" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/wire-diagram.png"  /></figure>

<p class="wp-block-paragraph">For a simple example, let&rsquo;s look at a PLC reading in a button and flashing light when the button is pressed. The button connects a +24V rail to the PLC&rsquo;s input, and the light connects the PLC&rsquo;s output to the ground. When the button is open, the PLC will see zero volts plus or minus some noise on the line and the input should read low, or open.</p>

<p class="wp-block-paragraph">When pressed, the button closes sending 24V, minus some small loss in the wires, to the PLC and the PLC&rsquo;s input should then read high or closed. When the PLC&rsquo;s output is low, there will be no difference in voltage across the light, and when the output is high, the light will turn on. This assumes the PLC&rsquo;s output can supply enough current to the light, without burning out or dropping in voltage. If the PLC&rsquo;s output cannot provide enough current, we would have to add an amplifier, relay or MOSFET, to drive the light.</p>

<h2 class="wp-block-heading">Analog Signals</h2>

<p class="wp-block-paragraph">Analog signals come in two main varieties: voltage and current. Analog voltage signals vary the voltage across an input while analog current signals vary the current running through the circuit. Functionally, they both communicate a value between 0 and 100%, plus or minus some error. Many modern PLC input cards can accept either voltage or current signals.</p>

<p class="wp-block-paragraph">Voltage signals are easy to troubleshoot and probably work with the broadest range of devices, including many low-cost microcontrollers like Arduinos. However, voltage signals are prone to picking up noise and interference from objects such as motors, contractors, and long thin wires. Because of this, it&rsquo;s essential to consider the environment the sensor and wires will be in and shield or separate the wires accordingly.</p>

<p class="wp-block-paragraph">By contrast, current signals are more difficult to debug and are not entirely as widely used (yet). Nonetheless, they are less affected by noise and wire length.</p>

<p class="wp-block-paragraph">Additionally, 4 to 20 milliamp current signals have some built-in fault detection that, unlike voltage signals, can differentiate wire breaks and other problems from the regular operation. Finally, most current sensors only require two wires while many voltage sensors require three, a minimal consideration but worth keeping in mind when designing or updating a system.</p>

<h2 class="wp-block-heading">I2C, SPI, and UART</h2>

<p class="wp-block-paragraph">I2C, SPI, and UART are all low-level serial communication methods capable of transmitting variable data&nbsp;bidirectionally. Essentially, serial communication uses digital inputs and outputs to send strings of ones and zeros that represent analog and digital values. They are often used in favor of individual analog and/or digital signals that would require many individual wires as well as many input and output points.</p>

<figure class="wp-block-image"><img decoding="async" alt="i2c communication" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/i2c-signal.png"  /></figure>

<figure class="wp-block-image"><img decoding="async" alt="signal conditions" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/condition-signal.png"  /></figure>

<p class="wp-block-paragraph"><strong>I2C communication</strong> can have one or more masters and one or more slave devices, connected to that master via a common ground, SCL, and SDA. The SDA wire indicates the value of each bit and the SCL wire determines when to read each bit, rising from zero to one to indicate the next bit is ready. Because of this structure, the master and slave do not have to have a common baud rate or clock speed, and only one device can communicate at a time.</p>

<p class="wp-block-paragraph">To initiate communication, the master sends out a start condition, followed by the address of the slave device, and a read or write bit. When writing data to the slave device, the master controls the SDA line, and if reading from the slave device, the slave device controls the SDA line. In effect, whichever device is sending data controls the SDA line.</p>

<p class="wp-block-paragraph"><strong>SPI communication</strong> always involves exactly one master and one or more slave devices. Slaves are connected to the master by a common ground: SCK, MISO, MOSI, and a SS. Each slave device has its own SS pin, often expressed as SS1, SS2&#8230;SSn. Slaves are selected, or enabled when the master pulls their corresponding SS line and begins sending data.</p>

<p class="wp-block-paragraph">Like I2C, the SCK line indicates when to read the MISO and MOSI lines to get specific bit values. MISO stands for Master In Slave Out and MOSI stands for Master Out Slave In. By having two data lines, MISO and MOSI, SPI can send and receive from a slave simultaneously.</p>

<figure class="wp-block-image"><img decoding="async" alt="spi communication" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/spi-communication.png"  /></figure>

<p class="wp-block-paragraph"><strong>UART</strong> stands for Universal Asynchronous Receiver Transmitter. Without specialized hardware or more complex architectures, UART only supports two devices. There is also no clock line connecting devices. Instead, the devices communicate using a predetermined baud rate based on their internal clocks. At any time, either device can initiate communication and send data to the other. This means that only three lines are connecting the two devices common ground, TX, and RX.</p>

<figure class="wp-block-image"><img decoding="async" alt="uart communiation" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/uart-communication.png"  /></figure>

<h2 class="wp-block-heading">Ethernet</h2>

<p class="wp-block-paragraph">Ethernet is an even more general term used to refer to a very broad subset of serial communication protocols including Ethernet/IP, EtherCAT, PROFINET Modbus TCP and many more. In contrast to I2C, SPI, and UART, these communication methods typically support many more devices networked together and provide some built-in fault detection and handling. This makes Ethernet communications the go-to method for most long distance and industrial applications.</p>

<p class="wp-block-paragraph">Understanding the full range of communication methods and standards is just one of the ways DMC can help design robust and reliable systems. Whether you&rsquo;re designing a <a href="/services/embedded-development-and-embedded-programming/embedded-systems-platforms">small microcontroller</a> or a massive network of PCs and PLC, understanding the basics of input-output communication will save you time and money.</p>

<p class="wp-block-paragraph">Learn more about DMC&apos;s <a href="/services/manufacturing-automation-and-intelligence">Manufacturing Automation and Intelligence services</a>&nbsp;and <a href="/contact">contact us</a> for additional support.</p>
<p>The post <a href="https://static.dmcinfo.com/blog/21341/a-primer-on-signal-types-and-serial-communication/">A Primer on Signal Types and Serial Communication</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Commission an Allen Bradley PowerFlex VFD</title>
		<link>https://static.dmcinfo.com/blog/21678/how-to-commission-an-allen-bradley-powerflex-vfd/</link>
		
		<dc:creator><![CDATA[Joshua Zimmerle]]></dc:creator>
		<pubDate>Wed, 01 May 2019 13:36:32 +0000</pubDate>
				<category><![CDATA[Allen Bradley PLC]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[How To]]></category>
		<category><![CDATA[Logix Designer]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/21678/how-to-commission-an-allen-bradley-powerflex-vfd/</guid>

					<description><![CDATA[<p>PowerFlex VFDs are very adept drives capable of interfacing with a lot of options for control, configuration, and monitoring. However, this range of capabilities can be daunting and confusing for those unfamiliar with industrial VFDs, or new to PowerFlex drives. This tutorial will demonstrate how to set the IP address of a PowerFlex VFD drive [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/21678/how-to-commission-an-allen-bradley-powerflex-vfd/">How to Commission an Allen Bradley PowerFlex VFD</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">PowerFlex VFDs are very adept drives capable of interfacing with a lot of options for control, configuration, and monitoring. However, this range of capabilities can be daunting and confusing for those unfamiliar with industrial VFDs, or new to PowerFlex drives.</p>

<p class="wp-block-paragraph">This tutorial will demonstrate how to set the IP address of a PowerFlex VFD drive and how to uses Logix Designer to configure drive and motor parameters needed for commissioning.</p>

<h2 class="wp-block-heading">Setting the IP Address Using BootP</h2>

<p class="wp-block-paragraph">Perhaps the simplest way to configure the IP address of a new PowerFlex drive is to uses BootP. BootP is a free DHCP tool that allows you to quickly set the IP address of a device using the device&rsquo;s MAC address. Each PowerFlex drive will have a unique MAC address that can be found somewhere on the physical drive. For PowerFlex 523, 525, and 527s it&rsquo;s located under the drive&rsquo;s terminal cover on the left side of the case.</p>

<ol class="wp-block-list">
 <li style="margin-bottom:20px;">Once you have the MAC address for the drive&nbsp;you want to configure, <strong>open BootP</strong>. If prompted, select the network interface that&rsquo;s connected to the same network as the drive.</li>
 <li style="margin-bottom:20px;">Once BootP has found the drive, you should see the drive&rsquo;s MAC address in BootP. Double click the MAC address and enter the desired IP address. (It may be a good idea first to try and ping the IP address to confirm that no other devices are already using the IP address.)<br />
 <img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/1-bootp-ethernet-addresses.png"  /></li>
 <li style="margin-bottom:20px;">Now, right-click on the device and select <strong>Disable BootP/DHCP.</strong>&nbsp;If this does not work you may have to open RSLinx Classic and choose <strong>Disable DHCP</strong> on the drive.<br />
 <img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/2-disable-bootp-dhcp.png"  /></li>
</ol>

<h2 class="wp-block-heading">Setting the IP Address on the Drive&rsquo;s Faceplate</h2>

<p class="wp-block-paragraph">You can also set the IP address of a drive using the keypad. This process is useful if DHCP mode is disabled, and you don&rsquo;t know the drive&rsquo;s IP address, or you are having trouble connecting to the drive over the network due to an IP conflict or similar problem.</p>

<p class="wp-block-paragraph"><strong>Note:</strong> these parameter numbers are for PowerFlex 520s (523, 525, 527) drives and may differ for other PowerFlex drives. Check your drive&rsquo;s manual for parameter numbers.</p>

<ol class="wp-block-list">
 <li style="margin-bottom:20px;">Starting on the main speed display on the drive press <strong>enter</strong>, and then <strong>press up</strong> until you see the letter C followed by a three-digit number.</li>
 <li style="margin-bottom:20px;">Press <strong>enter </strong>as well as <strong>&apos;up and down&apos;</strong> until you arrive at C128, and press <strong>enter</strong> again. (C stands for communications, and 128 is the start of the IP address configuration we need to set to configure the drive for Ethernet IP communication)<br />
 <img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/3-c-128-set-ethernet.png"  /></li>
 <li style="margin-bottom:20px;">By default, C128 is set to 2, which <strong>enables DHCP</strong> and <strong>disables Ethernet IP</strong>, press <strong>down </strong>to set C128 to 1 and then enter and escape.</li>
 <li style="margin-bottom:20px;">Now set C129 to the first octet of the desired IP address and C130-C132 to the second, third and fourth octet. For example, 192.168.1.55<br />
 <img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/4-c-129-ethernet-ip.png"  /></li>
 <li style="margin-bottom:20px;">Set C133-C136 with the desired subnet mask, typically 255.255.255.0.</li>
 <li style="margin-bottom:20px;">Set C137-C140 with the default gateway, typically whatever the IP address was with the last octet replaced with 1.</li>
 <li style="margin-bottom:20px;">Now power cycle the drive and check that the IP address is accessible. (The easiest way to open the command line and type &ldquo;ping xxx.xxx.xxx.xxx&rdquo;, substituting in the drives IP address.)</li>
</ol>

<h2 class="wp-block-heading">Configuring Drive Parameters from Logix Designer</h2>

<p class="wp-block-paragraph">Drive parameters are stored in both the VFD and Logix Designer and can be changed directly on the drive or through Logix Designer. This makes it quick and easy to upload or download parameters between drives. The one exception to this is that there must first be a known ethernet IP address for the drive before Logix Designer can connect to the drive.</p>

<ol class="wp-block-list">
 <li style="margin-bottom:20px;">To add a VFD drive to Logix Designer, under <strong>I/O Configuration</strong> right click your network interface and select <strong>add module</strong>, then find the <strong>catalog number</strong> matching your drive and <strong>double click</strong> it.<br />
 <img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/5-selecting-new-ethernet-module.png" /></li>
 <li style="margin-bottom:20px;">Now enter the <strong>drives name, IP address, rating, </strong>and <strong>other parameters</strong>. Click &apos;<strong>Ok</strong>.&apos; The drive should be added to the I/O Configuration.</li>
 <li style="margin-bottom:20px;">Under I/O Configuration, <strong>double click</strong> on the drive and <strong>select parameters</strong>. Here you can enter all the motor and drive parameters including motor speed, current, voltage, fault signaling, and control.</li>
 <li style="margin-bottom:20px;">Once all the parameters are correct, click on <strong>connect </strong>in the top right corner and hit <strong>download</strong>. This will download the project parameters onto the drive. (If prompted select the drive from the list of devices.)<br />
 <img decoding="async" alt="" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/6-download-the-powerflex.png"  /></li>
</ol>

<p class="wp-block-paragraph">PowerFlex VFDs are very capable drives that with a little know-how can quickly be set up and commissioned. I hope this information helps you understand the process of commissioning a PowerFlex drive and some of the options for the setup that PowerFlex drives offer.</p>

<p class="wp-block-paragraph">Learn more about DMC&apos;s <a href="/services/manufacturing-automation-and-intelligence/plc-programming/allen-bradley-plc-programming">Allen Bradley PLC Programming</a> services and <a href="/contact">contact us</a> to get started on your next project.</p>
<p>The post <a href="https://static.dmcinfo.com/blog/21678/how-to-commission-an-allen-bradley-powerflex-vfd/">How to Commission an Allen Bradley PowerFlex VFD</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Make a Dynamically Linking Faceplate in Siemens&#8217; TIA Portal</title>
		<link>https://static.dmcinfo.com/blog/21684/how-to-make-a-dynamically-linking-faceplate-in-siemens-tia-portal/</link>
		
		<dc:creator><![CDATA[Joshua Zimmerle]]></dc:creator>
		<pubDate>Wed, 01 May 2019 07:56:59 +0000</pubDate>
				<category><![CDATA[HMI and SCADA]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[TIA Portal]]></category>
		<category><![CDATA[Visual Basic Scripting]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/21684/how-to-make-a-dynamically-linking-faceplate-in-siemens-tia-portal/</guid>

					<description><![CDATA[<p>Thanks to TIA Portals development environment, laying out and linking a few objects on an HMI screen doesn’t take very much time. Though, this process starts to become tedious when there are many objects with many individual tag connections for visibility, location, and process values. Organizing HMI objects into faceplates simplifies and organizes the process [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/21684/how-to-make-a-dynamically-linking-faceplate-in-siemens-tia-portal/">How to Make a Dynamically Linking Faceplate in Siemens&#8217; 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">Thanks to <a href="/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming/">TIA Portals</a> development environment, laying out and linking a few objects on an HMI screen doesn’t take very much time. Though, this process starts to become tedious when there are many objects with many individual tag connections for visibility, location, and process values.</p>



<p class="wp-block-paragraph">Organizing HMI objects into faceplates simplifies and organizes the process but doesn’t help reduce the amount of PLC side logic or tag connections needed, for complex animations. This situation led me to use one of TIA Portal’s most powerful features,&nbsp;scripts,&nbsp;to take faceplates one step further and create a faceplate that can dynamically relink tags to HMI objects.</p>



<h2 class="wp-block-heading" id="h-why-faceplates">Why Faceplates?</h2>



<p class="wp-block-paragraph">First, allow me to describe the situation that led to the need for a completely dynamic faceplate. A client gave DMC a project that needed an HMI interface that allowed operators to add, remove and edit steps in a user-defined sequence. Each step in the sequence had a type and several Boolean, integer, and floating-point values that the operator alters to change setpoints for that step. Because only some of the settings were used in each step type, and there were a lot of settings, we decided that it would be simplest if the HMI displayed only the parameters relevant to the selected step type.</p>



<p class="wp-block-paragraph">The <strong>solution</strong> was to create a faceplate that interpreted a step’s mode dynamically, thus reducing the need for PLC side logic and linking countless individual tags to the ten steps we displayed on the screen.</p>



<h2 class="wp-block-heading" id="h-hmi-structure">HMI Structure</h2>



<p class="wp-block-paragraph">At a high level, think of the dynamic faceplate as a junction box that connects the HMI objects to different PLC tags, depending on the step type. The faceplate contains 21 objects, seven switches, seven drop-down menus, and seven IO fields, that are all linked to tags internal to the faceplate. The faceplate also has 15 interface connections, four Boolean, three Integer and eight Real, that can connect to PLC tags.</p>



<p class="wp-block-paragraph">When the faceplate receives a new mode, it pulls the values from the PLC tags and places those values in the corresponding HMI objects. When the value in an HMI object is changed, the faceplate pushes that value to the PLC’s corresponding tag.</p>



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



<p class="wp-block-paragraph">The <strong>step type is a 32bit integer</strong> (it uses the lower 28 bits) that the faceplate interprets as seven, four bit, nibs. Each nib contains a number from 0-15 that corresponds to either a blank space or one of the 15 interface connections.</p>



<p class="wp-block-paragraph">So, for each zero&nbsp;the face plate receives it will display a blank space, and each number greater than zero it will display an HMI object corresponding that interface’s data type, IO fields for reals, dropdowns for integers, and switches for Booleans.</p>



<p class="wp-block-paragraph">The abbreviated code snippet below controls the visibility of the screen objects and passes the data from the screen object to the connection tag.</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">VBScript</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 SortField7()

Dim place 
place = SmartTags("diPlace8")
Dim bVBSwitch, bSwitch, bVBTitle, sTitle
Dim bVBDropDown, iDropDown, bVBIOField, rIOField

Select Case place: ' Switch1, DropDown1, IOField1
	Case 1:	'Bool 1
		bVBSwitch = 1 								'Show Switch 1
		bSwitch = SmartTags("Properties\bBool1")		'Move Switch 1 to Bool 1
		bVBTitle = 1									'Show Title 1
		sTitle = SmartTags("Properties\sBoolTitle1")	'Move Bool Title 1 to Title 1
		
	Case 2: 'Bool 2
		bVBSwitch = 1 
		bSwitch = SmartTags("Properties\bBool2") 		'Move Switch 1 to Bool 2
		bVBTitle = 1									'Show Title 1
		sTitle = SmartTags("Properties\sBoolTitle2")	'Move Bool Title 2 to Title 1
		
	'case3-4 Bool
		
	Case 5: 'Int 1
		bVBDropDown = 1
		iDropDown = SmartTags("Properties\iInt1")			' Move DrowDown 1 to Int 1
		bVBTitle = 1										'Show Title 1
		sTitle = SmartTags("Properties\sDropDownTitle1")	'Move Int Title 1 to Title 1
		
	'case6-7 Int
		
	Case 8: 'Real 1
		bVBIOField = 1
		rIOField =  SmartTags("Properties\rReal1")		' Move IOField 1 to Real 1
		bVBTitle = 1										'Show Title 1
		sTitle = SmartTags("Properties\sIOFieldTitle1")	'Move Real Title 1 to Title 1
		
	'case9-11 Real

End Select

SmartTags("bVBSwitch7") = CBool(bVBSwitch)
SmartTags("bSwitch7") = CBool(bSwitch)
SmartTags("bVBDropDown7") = CBool(bVBDropDown)
SmartTags("iDropDown7") = CInt(iDropDown)
SmartTags("bVBIOField7") = CBool(bVBIOField)
SmartTags("rIOfield7") = CDbl(rIOField)
SmartTags("bVBTitle7") = CBool(bVBTitle)
SmartTags("sTitle7") = CStr(sTitle)

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">SortField7</span><span style="color: #D4D4D4">()</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">Dim</span><span style="color: #9CDCFE"> place </span></span>
<span class="line"><span style="color: #9CDCFE">place</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;diPlace8&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #569CD6">Dim</span><span style="color: #9CDCFE"> bVBSwitch, bSwitch</span><span style="color: #D4D4D4">,</span><span style="color: #9CDCFE"> bVBTitle</span><span style="color: #D4D4D4">,</span><span style="color: #9CDCFE"> sTitle</span></span>
<span class="line"><span style="color: #569CD6">Dim</span><span style="color: #9CDCFE"> bVBDropDown, iDropDown</span><span style="color: #D4D4D4">,</span><span style="color: #9CDCFE"> bVBIOField</span><span style="color: #D4D4D4">,</span><span style="color: #9CDCFE"> rIOField</span></span>
<span class="line"></span>
<span class="line"><span style="color: #C586C0">Select</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Case</span><span style="color: #D4D4D4"> place: </span><span style="color: #6A9955">&apos; Switch1, DropDown1, IOField1</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #C586C0">Case</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">:	</span><span style="color: #6A9955">&apos;Bool 1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #9CDCFE">bVBSwitch</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> 								</span><span style="color: #6A9955">&apos;Show Switch 1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #9CDCFE">bSwitch</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Properties\bBool1&quot;</span><span style="color: #D4D4D4">)		</span><span style="color: #6A9955">&apos;Move Switch 1 to Bool 1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #9CDCFE">bVBTitle</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">									</span><span style="color: #6A9955">&apos;Show Title 1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #9CDCFE">sTitle</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Properties\sBoolTitle1&quot;</span><span style="color: #D4D4D4">)	</span><span style="color: #6A9955">&apos;Move Bool Title 1 to Title 1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #C586C0">Case</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4">: </span><span style="color: #6A9955">&apos;Bool 2</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #9CDCFE">bVBSwitch</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #9CDCFE">bSwitch</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Properties\bBool2&quot;</span><span style="color: #D4D4D4">) 		</span><span style="color: #6A9955">&apos;Move Switch 1 to Bool 2</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #9CDCFE">bVBTitle</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">									</span><span style="color: #6A9955">&apos;Show Title 1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #9CDCFE">sTitle</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Properties\sBoolTitle2&quot;</span><span style="color: #D4D4D4">)	</span><span style="color: #6A9955">&apos;Move Bool Title 2 to Title 1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #6A9955">&apos;case3-4 Bool</span></span>
<span class="line"><span style="color: #D4D4D4">		</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #C586C0">Case</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4">: </span><span style="color: #6A9955">&apos;Int 1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #9CDCFE">bVBDropDown</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #9CDCFE">iDropDown</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Properties\iInt1&quot;</span><span style="color: #D4D4D4">)			</span><span style="color: #6A9955">&apos; Move DrowDown 1 to Int 1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #9CDCFE">bVBTitle</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">										</span><span style="color: #6A9955">&apos;Show Title 1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #9CDCFE">sTitle</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Properties\sDropDownTitle1&quot;</span><span style="color: #D4D4D4">)	</span><span style="color: #6A9955">&apos;Move Int Title 1 to Title 1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #6A9955">&apos;case6-7 Int</span></span>
<span class="line"><span style="color: #D4D4D4">		</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #C586C0">Case</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">8</span><span style="color: #D4D4D4">: </span><span style="color: #6A9955">&apos;Real 1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #9CDCFE">bVBIOField</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #9CDCFE">rIOField</span><span style="color: #D4D4D4"> =  </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Properties\rReal1&quot;</span><span style="color: #D4D4D4">)		</span><span style="color: #6A9955">&apos; Move IOField 1 to Real 1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #9CDCFE">bVBTitle</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">										</span><span style="color: #6A9955">&apos;Show Title 1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #9CDCFE">sTitle</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Properties\sIOFieldTitle1&quot;</span><span style="color: #D4D4D4">)	</span><span style="color: #6A9955">&apos;Move Real Title 1 to Title 1</span></span>
<span class="line"><span style="color: #D4D4D4">		</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #6A9955">&apos;case9-11 Real</span></span>
<span class="line"></span>
<span class="line"><span style="color: #C586C0">End Select</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;bVBSwitch7&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #DCDCAA">CBool</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">bVBSwitch</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;bSwitch7&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #DCDCAA">CBool</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">bSwitch</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;bVBDropDown7&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #DCDCAA">CBool</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">bVBDropDown</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;iDropDown7&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #DCDCAA">CInt</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">iDropDown</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;bVBIOField7&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #DCDCAA">CBool</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">bVBIOField</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;rIOfield7&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #DCDCAA">CDbl</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">rIOField</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;bVBTitle7&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #DCDCAA">CBool</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">bVBTitle</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #DCDCAA">SmartTags</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;sTitle7&quot;</span><span style="color: #D4D4D4">) = </span><span style="color: #DCDCAA">CStr</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">sTitle</span><span style="color: #D4D4D4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">End Sub</span></span></code></pre></div>



<h2 class="wp-block-heading" id="h-visual-basic-scripts">Visual Basic Scripts</h2>



<p class="wp-block-paragraph">The faceplate uses <strong>two event-driven</strong>&nbsp;Visual Basic scripts. The first script, shown above, runs when the current step type changes and the second script runs when any of the HMI objects values&#8217; change. It’s important to note that the drop-down used to store the step type must be tied to a tag in the faceplate, not the interface tag tied to the PLC’s tag. If it’s tied to an interface tag, and the Visual Basic script uses the interface tag, then when a change event runs the script, the connection tag will have the old value from before the change.</p>



<p class="wp-block-paragraph"><strong>The key </strong>is to tie the HMI object’s Process Value to an interface tag for connection to the PLC as well as to a tag in the faceplate for uses in the faceplate.</p>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/HMI-objects-TIA.png" alt="plc to hmi objects in tia portal"/></figure>



<p class="wp-block-paragraph">As mentioned, the first Visual Basic script runs when the step types&#8217; tag changes. It masks and shifts each nib to the left giving seven location modes each ranging from 0 to 15. Each location value is then passed into a switch case structure that hides the unused HMI objects, shows the used object (assuming there is one) and moves the current interface value into the HMI object’s process value.</p>



<p class="wp-block-paragraph">The second Visual Basic script, run when any of the HMI objects’ tags change, move the HMI objects’ process values into the interface tags, updating the PLC tags.</p>



<h2 class="wp-block-heading" id="h-uses">Uses</h2>



<p class="wp-block-paragraph">Because each of the seven locations on the HMI can be linked to any one of 15 different tags or left blank, there are a lot of possible modes, 268,435,456 in fact. Finding the desired modes and copying those into a project is not a trivial task.</p>



<p class="wp-block-paragraph">To simplify the process, I generated a spreadsheet, seen below,&nbsp;that can convert layouts into and back from step type numbers. To create a list of step types you have to fill in each row with the tags you want to appear on the HMI, and then copy the list of types and names into an HMI text list.</p>



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



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



<p class="wp-block-paragraph">This dynamic faceplate demonstrates how using Visual Basic scripts within faceplates can further increase faceplates versatility and capability, reducing project-specific complexity and needed PLC logic. With this tutorial, you should have all the ideas and information you need to make your own dynamically linked faceplate for specific or general applications speeding up complex HMI development.</p>



<p class="wp-block-paragraph"><a href="/contact">Contact</a> DMC for more information on our <a href="/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming/">Siemens TIA Portal</a> Expertise.</p>



<p class="wp-block-paragraph">Learn more about our <a href="/services/manufacturing-automation-and-intelligence/hmi-and-scada-programming">HMI &amp; SCADA Services</a>.</p>
<p>The post <a href="https://static.dmcinfo.com/blog/21684/how-to-make-a-dynamically-linking-faceplate-in-siemens-tia-portal/">How to Make a Dynamically Linking Faceplate in Siemens&#8217; TIA Portal</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Automation with an Arduino, PLC, or Custom Embedded Controls?</title>
		<link>https://static.dmcinfo.com/blog/22182/automation-with-an-arduino-plc-or-custom-embedded-controls/</link>
		
		<dc:creator><![CDATA[Joshua Zimmerle]]></dc:creator>
		<pubDate>Fri, 25 Jan 2019 14:17:58 +0000</pubDate>
				<category><![CDATA[Allen Bradley PLC]]></category>
		<category><![CDATA[Beckhoff PLC]]></category>
		<category><![CDATA[Embedded Development & Programming]]></category>
		<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<category><![CDATA[Beckhoff and TwinCAT]]></category>
		<category><![CDATA[Hardware]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/22182/automation-with-an-arduino-plc-or-custom-embedded-controls/</guid>

					<description><![CDATA[<p>Automation and control come in a lot of different varieties and flavors. On the surface, Arduinos, PLCs, and embedded controls all appear to do the same function. So how do you determine which is best for your application? In this post, I’ll detail some of the pros and cons, as well as the typical applications [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/22182/automation-with-an-arduino-plc-or-custom-embedded-controls/">Automation with an Arduino, PLC, or Custom Embedded Controls?</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Automation and control come in a lot of different varieties and flavors. On the surface, Arduinos, PLCs, and embedded controls all appear to do the same function. So how do you determine which is best for your application?</p>



<p class="wp-block-paragraph">In this post, I’ll detail some of the pros and cons, as well as the typical applications of Arduino microcontrollers, PLCs and custom embedded projects.</p>



<h2 class="wp-block-heading" id="h-what-s-the-difference">What&#8217;s the Difference?</h2>



<p class="wp-block-paragraph"><a href="/latest-thinking/blog/id/9484/arduino-programming-with-vscode">Arduino</a> is a common brand of microcontroller with built-in digital and analog, inputs and outputs. Their specific performance, memory, and input/output (IO) capabilities vary from model to model, making it easy to switch from one to another as changes are needed.</p>



<p class="wp-block-paragraph">The tremendous number of tutorials for Arduino platforms also make them a great choice for learning programming and quickly prototyping early design. For this reason, Arduino’s an excellent choice for rapid prototyping and small-scale hobby projects.</p>



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



<p class="wp-block-paragraph"><a href="/services/manufacturing-automation-and-intelligence/plc-programming">PLC</a> stands for Programmable Logic Controller. PLC manufacturers include <a href="/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming">Siemens</a>, <a href="/services/manufacturing-automation-and-intelligence/plc-programming/allen-bradley-plc-programming">Allen-Bradley</a>, Honeywell, <a href="/services/manufacturing-automation-and-intelligence/plc-programming/other-plc-platforms">Omron</a>, <a href="/services/manufacturing-automation-and-intelligence/plc-programming/beckhoff-and-twincat-3-programming">Beckhoff</a>, and countless others. Like Arduino, the performance memory and IO capabilities all vary from model to model, but, unlike Arduinos, most PLCs have little to no built-in IO.</p>



<p class="wp-block-paragraph">Instead, most PLCs use IO cards that add digital and analog, inputs and outputs. These features contribute to PLCs for being known as more rugged then Arduinos since individual parts can be replaced as they wear out or are damaged. In general, PLCs are the solution of choice for rugged environments like factories, where reliability is paramount.</p>



<p class="wp-block-paragraph">Custom hardware solutions, often called <a href="/services/embedded-development-and-embedded-programming">embedded solutions</a>, is a generic name given to custom hardware and software designs made for specific applications. As a whole, it’s the most versatile of the three groups presented here, but individually each solution is typically tailored to do only one particular task. Because the processor(s), and hardware are largely designed specifically for the project the performance, memory, and IO can all be adjusted independently to suit the project’s needs.</p>



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



<h2 class="wp-block-heading" id="h-why-are-these-devices-used">Why are these Devices Used?</h2>



<p class="wp-block-paragraph">Arduino provides a free IDE (Integrated Develop Environment), that uses a slight variation of the common C programming language, making it a good starting point for new and experienced programmers alike. Most Arduino hardware is based on TTL (Transistor-Transistor Logic), with voltages of 5V or less (relative to ground), and current sourcing and sinking abilities of a few hundred milliamps total. This makes Arduinos well suited for battery or&nbsp;<a href="/services/embedded-development-and-embedded-programming/low-power-embedded-design">low power applications</a>, although it limits their ability to control relays, motors, and solenoids.</p>



<p class="wp-block-paragraph">Below is an example of a text based language used by Arduinos and most embedded projects.&nbsp;</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">C++</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>void ShowSplashScreen(){
  display.clearDisplay();   // clears the screen and buffer
  display.setTextSize(2);
  display.setTextWrap(true);
  display.setTextColor(WHITE);
  display.setCursor(15,5);
  DisplayString("DMC inc.", 8);
  display.setCursor(4,23);
  DisplayString("Do-Dad Box", 10);
  display.setTextSize(1);
  display.setCursor(19,43);
  DisplayString("(303) 223-1801", 14);
  display.display();
}</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">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">ShowSplashScreen</span><span style="color: #D4D4D4">(){</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">display</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">clearDisplay</span><span style="color: #D4D4D4">();</span><span style="color: #6A9955">   // clears the screen and buffer</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">display</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">setTextSize</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">display</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">setTextWrap</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">display</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">setTextColor</span><span style="color: #D4D4D4">(WHITE);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">display</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">setCursor</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">15</span><span style="color: #D4D4D4">,</span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #DCDCAA">DisplayString</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;DMC inc.&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">8</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">display</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">setCursor</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4">,</span><span style="color: #B5CEA8">23</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #DCDCAA">DisplayString</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Do-Dad Box&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">display</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">setTextSize</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">display</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">setCursor</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">19</span><span style="color: #D4D4D4">,</span><span style="color: #B5CEA8">43</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #DCDCAA">DisplayString</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;(303) 223-1801&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">14</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">display</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">display</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span></code></pre></div>



<p class="wp-block-paragraph">Below is an example of Ladder Logic used by most PLCs.&nbsp;</p>



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



<h2 class="wp-block-heading" id="h-arduinos-vs-plcs">Arduinos vs. PLCs</h2>



<p class="wp-block-paragraph">The most striking difference between Arduinos and PLCs is the size. PLCs have been ruggedized to work in industrial environments to work at higher voltages (typically 12V-24V) and use differential voltages to reduce noise and interference on communication lines. The output cards also have the capability of sourcing or sinking multiple amps, specifically for relays.</p>



<p class="wp-block-paragraph">Most PLC applications are expected to work for years if not decades without interruption, and for the most part, they do. Programming PLCs is mostly done in Ladder Logic, an easy to read and modifiable language based off relay wiring. Combined with the visualization tools most modern IDEs have, it’s relatively easy to identify and fix faulty wires, sensors, and actuators.</p>



<p class="wp-block-paragraph">While&nbsp;Arduinos and PLCs are prebuilt controllers, with pre-selected processors and IO capabilities, embedded projects have a near limitless variety of processor, IO, and hardware. This variety makes <a href="/services/embedded-development-and-embedded-programming">custom embedded projects</a> the solution of choice for large volume or consumer goods, where even small savings on part costs can quickly add up to significant overall savings. The downside to embedded programming is the longer development time. Every aspect that is designed custom takes time and upfront cost.</p>



<p class="wp-block-paragraph">Whether you’re using an Arduino, a PLC, or designing everything from scratch, it’s important to know your tools and be able to select the best tool for the job.</p>



<p class="wp-block-paragraph">DMC provides solutions for all three of these controls. <a href="/contact">Contact us</a> today to learn about how we can help you with your automation and control project.&nbsp;</p>



<p class="wp-block-paragraph"><a href="/services/manufacturing-automation-and-intelligence">Learn more about DMC&#8217;s Manufacturing Automation and Intelligence Services.</a></p>



<p class="wp-block-paragraph"><a href="/services/embedded-development-and-embedded-programming">Learn more about DMC&#8217;s Embedded Development and Embedded Programming Services.</a></p>
<p>The post <a href="https://static.dmcinfo.com/blog/22182/automation-with-an-arduino-plc-or-custom-embedded-controls/">Automation with an Arduino, PLC, or Custom Embedded Controls?</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Downgrading Siemens PLC Projects From V15 to V14 SP1</title>
		<link>https://static.dmcinfo.com/blog/22695/downgrading-siemens-plc-projects-from-v15-to-v14-sp1/</link>
		
		<dc:creator><![CDATA[Joshua Zimmerle]]></dc:creator>
		<pubDate>Mon, 17 Sep 2018 09:50:08 +0000</pubDate>
				<category><![CDATA[Manufacturing Automation & Intelligence]]></category>
		<category><![CDATA[PLC]]></category>
		<category><![CDATA[Siemens PLC]]></category>
		<guid isPermaLink="false">https://static.dmcinfo.com/blog/22695/downgrading-siemens-plc-projects-from-v15-to-v14-sp1/</guid>

					<description><![CDATA[<p>Siemen’s TIA Portal provides quite a few useful features that make it very easy to update and maintain code. Updating projects&#160;from one version to the next is as easy as opening the project in the newer version of Portal. However, there are times when you want to revert a project&#160;to an older version of TIA [&#8230;]</p>
<p>The post <a href="https://static.dmcinfo.com/blog/22695/downgrading-siemens-plc-projects-from-v15-to-v14-sp1/">Downgrading Siemens PLC Projects From V15 to V14 SP1</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Siemen’s TIA Portal provides quite a few useful features that make it very easy to update and maintain code. Updating projects&nbsp;from one version to the next is as easy as opening the project in the newer version of Portal. However, there are times when you want to revert a project&nbsp;to an older version of TIA Portal, something that Portal cannot do. That’s where TIA Portal Openness can help.</p>



<p class="wp-block-paragraph">For those looking to revert projects from V15 to V14, this post will outline the process of using TIA Portal Openness to automatically revert a project from TIA Portal V15 to V14 SP1 (note that due to large changes in the XML format, this will not work for versions earlier than V14 SP1).</p>



<h2 class="wp-block-heading" style="margin: 0in 0in 8pt;">Overview:</h2>



<p class="wp-block-paragraph">Many parts of TIA Portal projects,&nbsp;like PLC/HMI tags and HMI alarms, can already be exported and imported as .xlsx files between TIA Portal versions, but some parts, like ladder logic and HMI screens can’t be easily exported and reimported to older versions.&nbsp;It&#8217;s possible to export these as a source, assuming the code can be first converted into structured text language (STL).</p>



<p class="wp-block-paragraph">This process is time-consuming and incomplete since it misses much if the block&#8217;s metadata and some blocks can&#8217;t automatically convert into STL. Openness, and specifically this post, are geared towards saving time and effort by exporting and&nbsp;importing:</p>



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



<li>Screens with faceplates</li>



<li>Program blocks</li>



<li>Program blocks with arrays of data blocks</li>
</ul>



<p class="wp-block-paragraph">TIA Portal Openness can import and export more than this, but these items&nbsp;cover most of what you would otherwise have to recreate manually, and some of the&nbsp;special cases you are likely to run into.</p>



<h2 class="wp-block-heading" style="margin: 0in 0in 8pt;">Exporting:</h2>



<ol class="wp-block-list">
<li>Download <a href="https://support.industry.siemens.com/cs/document/108716692/tia-portal-openness%3A-introduction-and-demo-application?dti=0&amp;lc=en-WW">TiaPortalOpennessDemo </a>Version 15 and 14 SP1</li>



<li>Create a new V14 SP1 project with the same hardware and device configuration as your V15 project, in TIA Portal V14 SP1</li>



<li>Start Openness V15 by navigating to the.exe file inside TiaPortalOpennessDemo_V15\TiaPortalOpennessDemo\bin\Release</li>



<li>Use Openness to open your V15 Project &#8211; this will require a working version of TIA Portal V15</li>



<li>Select what device or devices&nbsp;you want to export and click &#8216;export.&#8217; By default, this will export all the code on that device as .xml files into c:\Temp</li>
</ol>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/TIA-Portal-Openness-Opening-a-Project_1.png" alt="TIA Portal Openness opening a project for export"/></figure>



<p class="wp-block-paragraph">These .xml files contain all the information from your TIA Portal blocks and screens as structured XML code. Before we can re-import these into V14 SP1, we have to change a few parameters. I like to use Notepad++ since it can find and replace in any number of files in one shot, but you can use any text editor to make these changes.</p>



<ul class="wp-block-list">
<li>Replace all&nbsp;<code>V15 </code>with<tt> </tt><code>V14 SP1</code></li>



<li>Replace all&nbsp;<code>FlgNet/V2 </code>with <code>FlgNet/V1</code></li>



<li>Replace all&nbsp;<code>SW/Interface/V3 </code>with <code>SW/Interface/V2</code></li>



<li>Remove all <code>&lt;SetENOAutomatically&gt;False&lt;/SetENOAutomatically&gt;</code></li>



<li>Remove all <code>AccessModifier=”Array”</code></li>
</ul>



<figure class="wp-block-image"><img decoding="async" src="https://static.dmcinfo.com/wp-content/uploads/2025/05/Notepad__-find-and-replace-in-files_1.png" alt="Notepad++ find and replace for multiple files"/></figure>



<h2 class="wp-block-heading" id="h-importing-program-blocks-and-screens">Importing (Program Blocks and Screens):</h2>



<ol class="wp-block-list">
<li>Start Openness V14 SP1 by navigating to the.exe file inside TiaPortalOpennessDemo_V14SP1\TiaPortalOpennessDemo\bin\Release</li>



<li>Uses Openness to open your V14 SP1 project &#8211; this will require a working version of TIA Portal V14 SP1</li>



<li>Select a destination such as; Program blocks, PLC tags, PLC data types, screens, templates, HMI tags, etc.</li>



<li>Click import and select your .xml files with the corresponding code</li>
</ol>



<p class="wp-block-paragraph">Now you can save the project and close Openness.</p>



<h2 class="wp-block-heading" id="h-screens-with-faceplates-and-program-blocks-with-arrays-of-data-blocks">Screens with Faceplates and<br>
Program Blocks with Arrays of Data Blocks:</h2>



<p class="wp-block-paragraph">Importing a screen with a faceplate that is not already in the project library will crash Openness and TIA Portal without any error message. However, it&#8217;s still possible to import these screens. To import screens with faceplates, first import, or recreate, a matching project library and make sure that the library file structure and versioning exactly match the structure and versioning of the original library. Then import the screens one at a time saving in between each import in case any library differences persist.</p>



<p class="wp-block-paragraph">Similarly, importing program blocks with arrays of data blocks will throw an error due to differences in formatting and syntax in the interaction of XML and TIA Portal. Working around this error is more difficult and time-consuming. We found the quickest solution was to replace the arrayed data block references in the .xml file with a placeholder string and then manually reenter the arrayed data block’s references in TIA Portal. This method does require a solid understanding of both .xml and regular expression to find and then replace all the arrayed data block references but can be made to&nbsp;work in most situations.</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">XML</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>  &lt;Part Name="TON" Version="1.0" UId="44">
      &lt;Instance Scope="GlobalVariable" UId="45">
        &lt;Component Name="AlarmTimers" />
        &lt;Component Name="Timer" >
          &lt;Access Scope="LiteralConstant">
            &lt;Constant>
              &lt;ConstantType>DInt&lt;/ConstantType>
              &lt;ConstantValue>252&lt;/ConstantValue>
            &lt;/Constant>
          &lt;/Access>
        &lt;/Component>
      &lt;/Instance>
      &lt;TemplateValue Name="time_type" Type="Type">Time&lt;/TemplateValue>
    &lt;/Part>

    &lt;Part Name="TON" Version="1.0" UId="44">
      &lt;Instance Scope="GlobalVariable" UId="45">
        &lt;Component Name="AlarmTimers" />
      &lt;/Instance>
      &lt;TemplateValue Name="time_type" Type="Type">Time&lt;/TemplateValue>
    &lt;/Part> </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: #D4D4D4">  </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">Part</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Name</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;TON&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Version</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;1.0&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">UId</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;44&quot;</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">Instance</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Scope</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;GlobalVariable&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">UId</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;45&quot;</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">Component</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Name</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;AlarmTimers&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #808080">/&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">Component</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Name</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;Timer&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">          </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">Access</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Scope</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;LiteralConstant&quot;</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">Constant</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">              </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">ConstantType</span><span style="color: #808080">&gt;</span><span style="color: #D4D4D4">DInt</span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">ConstantType</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">              </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">ConstantValue</span><span style="color: #808080">&gt;</span><span style="color: #D4D4D4">252</span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">ConstantValue</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">Constant</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">          </span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">Access</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">Component</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">Instance</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">TemplateValue</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Name</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;time_type&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Type</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;Type&quot;</span><span style="color: #808080">&gt;</span><span style="color: #D4D4D4">Time</span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">TemplateValue</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">Part</span><span style="color: #808080">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">Part</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Name</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;TON&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Version</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;1.0&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">UId</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;44&quot;</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">Instance</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Scope</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;GlobalVariable&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">UId</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;45&quot;</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">Component</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Name</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;AlarmTimers&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #808080">/&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">Instance</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">TemplateValue</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Name</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;time_type&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Type</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;Type&quot;</span><span style="color: #808080">&gt;</span><span style="color: #D4D4D4">Time</span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">TemplateValue</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">Part</span><span style="color: #808080">&gt;</span><span style="color: #D4D4D4"> </span></span></code></pre></div>



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



<p class="wp-block-paragraph">TIA Portal Openness is a great tool for reverting projects from TIA Portal V15 to V14 SP1 and has the potential to save a great deal of time for projects that require reverting versions.&nbsp;Openness adds&nbsp;beneficial and timesaving functions to TIA Portal&#8217;s already impressive version updating abilities. &nbsp;It’s not flawless and it can’t automatically import and export every code, but in combination with the import and export functionality native to TIA Portal, it can make reverting versions a breeze.</p>



<h5 class="wp-block-heading" id="h-learn-more-about-dmc-s-siemens-s-expertise"><strong><span style="color: rgb(51, 51, 51);">Learn more about DMC’s </span><a href="https://static.dmcinfo.com/services/manufacturing-automation-and-intelligence/plc-programming/siemens-s7-plc-programming"><span style="color: rgb(51, 153, 255);">Siemens&#8217;s expertise</span></a><span style="color: rgb(51, 51, 51);">.</span></strong></h5>



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



<p class="wp-block-paragraph">&nbsp;</p>
<p>The post <a href="https://static.dmcinfo.com/blog/22695/downgrading-siemens-plc-projects-from-v15-to-v14-sp1/">Downgrading Siemens PLC Projects From V15 to V14 SP1</a> appeared first on <a href="https://static.dmcinfo.com/">DMC, Inc.</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
