In theory, programming a PLC to turn on a motor contactor is easy.
If a button is pressed, then engage the contactor’s coil.
Of course, during the hardware video we saw that in most systems there really IS a lot
more to it.
Here’s our ladder code whish list: We want a Circuit Breaker Status Indicator
We want to be able to Trip the circuit breaker on a button press
We want an Overload Indicator On Forward button press, we want to start
the motor in forward direction IF - The motor is not coasting
- If the motor stop button is not being pressed - If the reverse contactor isn’t engaged
- If the circuit breaker is on - If the overload is not tripped
- And we’ll want the Forward Indicator lit while motor is running
The reverse button has the exact same requirements except it doesn’t start the motor if the
forward contactor is engaged.
We want the Stop indicator to flash when motor is coasting and to be on when motor is stopped.
I’ve already allocated the memory addresses and installed some tag names to save us some
time.
You may notice there aren’t any physical button inputs, that’s because we’re using
a C-more HMI to control this system.
So instead of looking at PLC inputs we’ll be using these memory addresses that are being
updated when the user presses the virtual buttons on the C-more screen.
The stop button is set to start active because it’s a normally closed pushbutton.
Ok, let’s do it.
Let’s get the motor running in the forward direction.
So on a button press – our virtual C-more HMI button in this example - enable the forward
contactor which is output Y202 in our setup.
And once that forward contactor is engaged, the aux contact closes so we can use that
to keep the motor running even after the momentary Forward button is released.
We call this sealing or latching the contact.
I should mention that we will be using a lot of short cuts to expedite the typing of this
code.
So if something appears on a rung and you’re not sure how it got there, then checkout Click
help topic CL198 – it lists all the keyboard shortcuts.
We need a way to stop the motor so we’ll add the stop button.
Stop buttons are normally closed, so this is active all the time until you press the
STOP button which opens this contact, which releases the contactor, which releases the
aux contact and breaks the seal or latching action of this circuit.
We only want the motor to be started if the motor is NOT coasting – we’ll create that
in a minute – and we want to make sure the reverse contactor is not engaged.
We don’t want to run the motor if the overload is tripped.
And finally we don’t want the motor to be enabled if there is no power.
This serves as a handy reminder to check the power of course, but more importantly, it
makes sure the motor can’t be latched or sealed in while the power is off.
If we didn’t check the circuit breaker status, then there is nothing to prevent this ladder
code from energizing the contactor, which enables the aux contact and latches or seals
in the circuit.
So when the power is applied, the motor will already be enabled and will jump to life.
Normally you won’t want that to happen, so adding this contact to prevent the circuit
from latching while the power is off it is a really important safety feature.
And we’ll add the comment for that rung.
The reverse motor circuit is exactly the same except it uses the Reverse virtual button
to start things, doesn’t run if the forward contactor is engaged and latches on the reverse
aux contact.
Let’s update that comment too.
We need a 5 second timer for the motor spin down, so we’ll watch both contactors aux
contacts and if either of these gets released, we’ll start an off delay timer.
That starts a timer after the input has been released and sets the T1 bit while it is counting
the 5 seconds.
We’ll use the T1 bit to tell us when the motor is coasting.
Now we can use that motor coasting bit to create the flashing STOP indicator.
If the reverse and the forward contactor are not active, but the motor is Coasting we’ll
set a bit to indicate the motor is still active.
If we add the system 100ms bit here it will make the light flash.
This will drive the STOP button indicator which is just the inverted version of this.
We also want to turn on the MOTOR_ACTIVE bit if either contactor is active.
This will turn off the stop button indicator.
Finally, we need for the circuit breaker shunt trip button to trip the breaker which is at
Y201.
And lets add some comments for all of these rungs.
It’s important to understand that with the addition of this code, we are now protecting
our control system with triple redundancy: To prevent the motor from running in one direction
if it is already running in the other direction he have fail safes; here in the code, here
in the wiring and mechanically with the Interlock block.
That creates a super reliable, fault tolerant system.
Changing this over to a system that uses mechanical buttons instead of the virtual C-more HMI
buttons is easy.
Let’s assume the Forward button comes in on X105, Reverse on X106, and Stop on X107.
Just replace this with X105, this with X106 and these with X107.
Don’t forget to make sure the Forward and Reverse are momentary normally open push buttons,
and Stop button is a momentary normally closed pushbutton.
And don’t forget that the CLICK PLC requires an end.
We’ll, let’s try it.
Save our work, and transfer the project to the PLC.
If we turn on status monitoring, then these blue highlights mean these contacts are active.
When all the contacts between the left and right side are lit – then power is flowing
to the output coil.
So this tells us that the forward button is not being pressed, the motor’s not coasting,
the normally closed stop button hasn’t broken the circuit, the reverse contactor is not
active and the power and overload are good to go.
If we press the Overload test button, we see that go inactive, and if we flip the motors
circuit breaker off, we see its aux contact open up.
Great, looks like things are working.
So when we press the forward button, we now have all the contacts on this rung active
and power flows to the output coil and starts the motor spinning.
Once the contactor engages, its aux contact will also engage – which is this contact
right here.
So when we release the momentary Forward button this aux contact will keep the motor running
– we call that sealing or latching the circuit.
Pressing the stop button will open this contact and disable the contactor which kills power
to the motor.
It also starts the 5 second timer for the flashing stop button, which was off screen
when we did it, so let’s start the motor again, and scroll down to the timer section
of the code.
This time, when we press the stop button, we should see this off delay timer count down
for 5 seconds which will turn this Motor Coasting Bit on.
And this aux contact will go inactive which will light up this contact.
Then, every time this system 100ms bit is active, this Motor Active bit will turn on.
The Stop Button indicator light is just the inverse of this motor active bit so if the
motor is NOT active, the stop button will be lit.
Of course, if either contactor is active, then the motor will also be active which again
will turn off the stop button indicator.
Let’s try it.
When we press the stop button, the timer counts down, the motor coasting but goes active,
aux contact releases, and sure enough, the stop button indicator flashes.
Perfect.
Let’s start the reverse direction – which works exactly the same as the forward circuit
– but this time we’ll press the Overload test button and sure enough, it deactivates
this contact which disables the contactor and his aux contact which kills power to the
motor.
Exactly what we expected.
The circuit breaker aux contact would work the same way.
Finally, let’s make sure the shunt trip kills the branch circuit breaker and shuts
down the motor.
Start the motor in the forward direction, hit the shunt trip and no surprise here – when
we kill power to the motor it stops.
More importantly, this also breaks the sealing action of the ladder code so when power is
re-applied the motor won’t jump back to life and surprise someone – that would be
an accident waiting to happen … Well, this all looks great, there is a potential
problem.
What happens if the user presses both the forward and reverse buttons at exactly the
same time or even just real close to the same time?
Well, power will flow through all of these contacts on both the forward and reverse rungs
because their respective aux contacts won’t have closed yet – it can take an aux contact
10 to 20 milliseconds to close which means we won’t see that feedback until many scans
later.
Which means BOTH of these outputs will fire, which will engage both contactors, which will
short out the power mains.
And that’s a bad thing, Right?
Well, not really because it physically can’t happen in this system.
Remember, in the hardware video we installed a MECHANICAL interlock to prevent just this
scenario.
It physically won’t allow two contactors to engage at the same time.
Because of that, one of the aux contacts can’t close so that circuit will never seal or latch.
Let’s prove it.
Let’s engage both contactors on the same Forward button press.
Now they are guaranteed to start at exactly the same time.
Save that change, and write it out to the PLC.
Sure enough, if we press the Forward button, both circuits light up, but then the reverse
circuit turns back off because the mechanical interlock wouldn’t allow the reverse aux
contact to close.
So now you see why it was so important to add that extra mechanical interlock in the
hardware video.
And since it just snapped in place and it’s only two dollars and fifty cents – why wouldn’t
you add the extra insurance to make sure you have an idiot proof, super reliable system?
One side note: you could add another contact here that says don’t reverse the motor if
the forward contactor is active, and the opposite here, but since the mechanical interlock already
has it covered we didn’t add that in this example – but if you don’t have access
to a mechanical interlock, this is the next best thing.
Well, that’s it.
All the wiring diagrams, parts used and PLC AND HMI code are available at these links.
And as always, if you have any questions or need any help, please don’t hesitate to
contact Automation Directs free award winning tech support – they will be happy to help
you.
And don’t forget the forums – there are lots of folks there that love to share their
years of experience.
Just don’t post support questions there, tech support doesn’t monitor the forums
on a regular basis.