I am looking for ideas to solve a potential problem.
Basically at the moment in one of the SIS Modules we have a standard Cause and Effect Block with numerous causes and numerous effects.
One of the effects is wired to a Digital Output block which fires off a annunciator panel.
The problem is, if another trip condition was to come in whilst a trip is already activated/standing there would be no alert to the operators via the annunciator panel.
I have been playing around trying to think of ways to reset the standing trip for a couple of seconds when another trip (cause) condition activates using timed pulses/logic etc but just cant seem to solve it. any ideas? Thanks.
Off the top of my head (i.e. has not been tested)
1. Wire the output of the CEM to an AND block
2. Wire the output of the AND block to the DO
3. Define a CALC block as follows (psuedo code - have not looked at correct syntax)
a. If (prev_causes = active_causes_n ) // look at the active causes for effect n of the CEM
b. OUT1:=1
c Else
d. OUT1:=0
e. Endif
f. prev_causes := active_causes_n
4. Wire OUT1 of the CALC block to a On DElay Block
5. Wire the On Delay Blockj to the AND block in step 1.
This will detect a change in the active causes for the desired effect and if changed set the OUT1 OFF for 1 scan
This will then turn OFF the On Delay
This will turn off the AND block output till after the On Delay time
i.e. Will Pulse the Annunciator OFF for DElay Time then re-arm it
In reply to Gary Law:
Forgot to mention - Needs a NOT between the CEM and the AND block
Assuming you want to turn the DO on upon a trip so th eannunciator lights
Gary,
Is (prev_causes) a parameter within the CEM block?
Thank you for your help.
In reply to Mambo:
prev_causes = active_causes_n // look at the active causes for effect n of the CEM
In reply to Roman Kostuniak:
apologies can anyone explain in laymans terms.
For example your DO was wired do LSCEM1/EFFECT1.
In LSCALC use internal reference to LSCEM1/ACTIVE_CAUSES1.
Write code as Mr Gary
If (prev_causes = active_causes_n )
--->"prev_causes" means previous causes
--->"active_causes_n" means current causes in your EFFECT1;
for example CAUSE1=false; CAUSE2=false; these 2 are for EFFECT1
then "active_causes_n"=3
logic
prev_causes = active_causes_n=3
OUT1:=1
something change
CAUSE1=true; CAUSE2=false; these 2 are for EFFECT1
then "active_causes_n"=2
"prev_causes=3" not equal "active_causes_n"=2
OUT1:=0
Roman - Thanks for your help.
Little problem though;
If the values for (previous_cause) and (active_cause_n) are being compared, when the initial causes clear or go healthy this will bring in the alarm again (have the reverse effect) as it will see a difference, would it not?
Thanks
Problem solved.
Thanks for all the help.