There is a debate over choosing to use Set/Reset coils or the traditional latch with strong opinions on both sides. This brief shows that the debate creates a false dichotomy, forcing people to stick to one logical approach, when it is more valuable to understand multiple ways to evaluate the same problem. When implementing a PLC latch, separating the Set and Reset conditions into their own internal bits is often easier to visualize and understand rather than collapsing everything into a single traditional latch rung. The logic is slightly longer, but the troubleshooting path is clearer.
For this brief, we use a representative logic example to clearly demonstrate the differences between each method. This logic application is more realistic than a simplistic start-stop circuit that is typically used for this type of argument.
- Set Condition: when
A_notANDB - Reset Condition: when
BANDCANDD_not
Key Takeaways
-
A PLC latch can be implemented using Set/Reset coils, a traditional latch, or a hybrid initiate/disable structure.
-
The hybrid method makes the two important latch decisions into variables: initiate and disable
-
The extra variables cost a few more rungs, but they make troubleshooting easier.
-
The clearest PLC logic is not always the shortest path. It’s vital to choose an approach that makes the function behavior easiest for the next programmer, technician, or engineer to understand.
This article is part of the DigiKey Field Guide for Industrial Automation
Location: Program It → PLC
Difficulty:
Student — difficulty levels explained
Author: Julia Alvarado
Last update: 11 Jun 2026
Hybrid Three-Rung Approach
This first approach provides, in my opinion, the most clarity by creating separate branches for the initiate and disable variables. These variables would then be utilized in a traditional latch structure. Choosing this route would not only keep the traditional latch structure that many programmers prefer, but it would also separate the initiate and disable logic into different rungs of your program in a more intuitive way. Despite the logic being slightly longer, it would be easier to identify during testing which area of logic is not working as expected. For example, if the #initiate variable is not behaving as expected in the latch, then you would immediately know to jump to the initiate logic and troubleshoot from there. While the current example is simple, this method should still work well even for more complicated applications.
Figure 1: Recommended 3-branch approach with intermediate initiate and disable variables
Set/Reset Approach
Set and Reset coils are something that everyone learning PLCs eventually encounters, as I did. This approach typically gives you the shortest structure since the process acts the same as the previously mentioned initiate/disable variables without ever needing to implement a traditional latch. Comparing Figures 1 and 2, it is evident that the initiate and set branches are identical, and the same goes for the disable and reset branches. The only difference in the structures is that the Set/Reset approach does not require an actual latch structure to be made. This seems easier, but this method becomes problematic once the desired function becomes complex to the point where the Set/Reset branches are no longer next to each other. The more separation between these branches, the easier it becomes to lose track of your logic. It could end up taking hours to identify problems in the program just because you lost track of where your reset logic is.
Figure 2: Set/Reset Approach
Traditional Latch Approach
The traditional seal-in latch uses the output contact to hold itself on after the initiate condition goes false. Using this method avoids the separation issues previously mentioned for Set/Reset, but implementing this type of latch is not very intuitive when the desired disable mechanism is more complex than one button. The structure for this latch looks a lot different than the others, but the logic is exactly the same. The main issue I found while implementing this is that the desired disable state must be inverted when making a traditional latch. From the two previous figures, you can see how the logic for the #initiate and #disable rungs are identical whether you choose to use it as a variable or directly to Set and Reset coils. The key difference is that in Figure 1, the disable input must be normally closed in the latch to work properly. This is not necessarily a problem, if you wanted to collapse the disable condition directly into the traditional latch rung, you would have to invert the entirety of your logic, essentially using DeMorgan’s laws.
Figure 3: Traditional Approach
DeMorgan’s laws in Ladder Logic
DeMorgan’s laws are a set of rules that state how the negation of OR turns into AND and vice versa. These laws allow you to make equivalent expressions via negation, in which each input is inverted, and the AND/OR relationships are swapped. For the latch in this example, the reset state should only break the latch when detected, so in the latch structure the #disable logic should be a Normally Closed contact. To implement this same functionality into a traditional latch, it requires you to take the negation of the expression and insert that into the latch structure. For this demonstration, applying DeMorgan’s Law to the Reset State gives:
BANDCANDD_not—>B_notORC_notORD
Figure 4: Visual Representation of DeMorgan’s law on the Reset State
Parting Thoughts
Although any method can work as long as the effort is there, it’s best to stick to what is more intuitive rather than struggle from attempting to stick to a certain implementation. Choosing to only use the traditional approach can result in a latch structure that is unnecessarily complicated and difficult to read, as Figure 3 alone begins to show. Using Set/Reset instead can lead to troubleshooting issues when the program gets too complicated and the Set/Reset branches begin to get too far apart to decipher properly. When it comes to implementing a latch or PLC programming in general, the best way to develop your code is in a way that provides the most clarity for you and everyone else that may look at your function. The approach on how to get the most clarity varies depending on the situation, but sticking to one approach, as in only the traditional latch or only Set/Reset coils, is definitely not the right way to go about it.



