One of our design concepts that Ignition has enabled us to pursue is that of a time-sensitive color scheme for our operators alerts.
In a nutshell:
There are three states to our machine. Running, Idle and Faulted
Anything with a state of 1 is Running.
Anything with a state of 2 is Idle/Stopped
Anything with a state of >2 is Faulted (Not really but let’s carry on with this assumption )
Now with our original design from the early-mid 2000’s and late nineties. We had a predefined color for certain values. Anything with a fault was considered RED anything Idle/Stopped was Considered BLUE and Running was GREEN.
This was great, until messages with non-critical or time sensitive component came into play adding more colors. This creates a conundrum of flashing colors and the overload that arises from it.
The plan with Ignition is create a sort of color decay.
Anything that is a Shortstop (< 120 Seconds) Will be YELLOW
Anything greater than 120 Seconds will be considered a RED event.
What this does is it simplifies the color scheme. Anything actionable will be yellow, anything red will prioritize response.
tl;dr I need a timer that is unique to each machine’s state
My initial thought was to use the Production Model tag “Active Downtime Is a Short Stop”. This proved to have too much of a delay and was unreliable in properly indicating the Machines state in real time.
The Timer “Active Downtime Duration” was also subject to this delay, much to my chagrin.
The only other option I have considered is the following bit of Python code:
[code]#Timer Function that is a template for our New Messaging and color scheme
#Read the Machine’s Tag Value
#If the value is > 2 then we start counting
#Check the amount again at the end of timer and set appropriate bit
import time
interPoll = 0
TagValPoll1 = 3 #Preferably from the Modbus Value
BEGIN LOOP
if TagVal > 2: #If polled tag’s value is greater than 2, commence the countdown
for int in range(5):
time.sleep(2) #Sleep for X amount of seconds
TagValPoll2 = 3 #Pull again after X seconds
if TagValPoll2 > 2: #If we are still in a faulted state
print “2 Second triggered!” #Do Stuff, Most likely set a Boolean.
[/code]
Pardon the hack. The “clear” condition is not quite worked out in strict coding terms per se.
Now, Anyone figure out the best method for a triggerable, time counting mechanism unique to each machine?