Safety Considerations Guide for Trident v2 Systems - TUV ...
Safety Considerations Guide for Trident v2 Systems - TUV ...
Safety Considerations Guide for Trident v2 Systems - TUV ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
86 Appendix C <strong>Safety</strong>-Critical Function Blocks<br />
* Application<br />
* The APP parameter <strong>for</strong> a module selects the effect of a fault<br />
* on the vote mode outputs of the shutdown function blocks.<br />
* APP:=RELAY with RELAY_OK:=true<br />
* A sinlge fault (even a voter fault) degrades the mode to DUAL.<br />
* The relay provides a third channel <strong>for</strong> shutdown,<br />
* so if an output voter fails, there are still<br />
* two independent channels that can de-energize the output,<br />
* i.e., the relay and the other output voter channel.<br />
* APP:=RELAY with RELAY_OK:=false, or<br />
* APP:=DE_ENERGIZED<br />
* A voter fault degrades the mode to SINGLE.<br />
* A non-voter fault degrades the mode to DUAL.<br />
*<br />
* Runtime Errors<br />
* EBADPARAM Bad parameter<br />
* CO=FALSE indicates a programming error.<br />
* See ERROR number parameter <strong>for</strong> details.<br />
*=F===============================================================================<br />
*)<br />
IF RESET THEN<br />
CO := TRUE ;<br />
TMR := TRUE ;<br />
GE_DUAL := TRUE ;<br />
GE_SINGLE := TRUE ;<br />
NO_VOTER_FLTS := TRUE ;<br />
ELSIF PREVIOUS_RESET THEN<br />
; (* No operation. *)<br />
ELSIF CI AND CO THEN<br />
IO( CI := CI, IOP := IOP, SLOT := SLOT );<br />
IF NOT IO.CO THEN<br />
ERROR := IO.ERROR_NUM ;<br />
U := ReportBadParam(0) ;<br />
CO := FALSE ;<br />
END_IF ;<br />
IF CO THEN<br />
TMR := TMR AND IO.TMR ;<br />
GE_DUAL := GE_DUAL AND IO.GE_DUAL ;<br />
GE_SINGLE := GE_SINGLE AND IO.GE_SINGLE ;<br />
NO_VOTER_FLTS := NO_VOTER_FLTS AND IO.NO_VOTER_FLTS ;<br />
IF APP = RELAY AND RELAY_OK THEN<br />
TMR := TMR AND IO.NO_VOTER_FLTS ;<br />
ELSIF APP = DE_ENERGIZED OR APP = RELAY AND NOT RELAY_OK THEN<br />
TMR := TMR AND IO.NO_VOTER_FLTS ;<br />
GE_DUAL := GE_DUAL AND IO.NO_VOTER_FLTS ;<br />
ELSE<br />
ERROR := -5 ; (* Application number is invalid *)<br />
U := ReportBadParam(0) ;<br />
CO := FALSE ;<br />
END_IF ;<br />
END_IF ;<br />
END_IF ;<br />
IF ERROR = 0 AND NOT CO THEN<br />
ERROR := -6 ; (* Not initialized *)<br />
U := ReportBadParam(0) ;<br />
END_IF ;<br />
IF NOT CO THEN<br />
TMR := FALSE ;<br />
GE_DUAL := FALSE ;<br />
GE_SINGLE := FALSE ;<br />
NO_VOTER_FLTS := FALSE ;<br />
<strong>Safety</strong> <strong>Considerations</strong> <strong>Guide</strong> <strong>for</strong> <strong>Trident</strong> <strong>v2</strong> <strong>Systems</strong>