Download this file
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
FUNCTION_BLOCK FB_TripBlockHandler VAR_INPUT c_tsProt : TS_PROT_C; END_VAR VAR_IN_OUT tsTripBSW : TS_PROT_TRIP_BSW; tsResetTrip : TS_PROT_TRIP; tsResetBlock : TS_PROT_BLOCK; tsProt : TS_PROT; VAR_OUTPUT o_tsTrip : TS_PROT_TRIP; // Active trip o_tsBlock : TS_PROT_BLOCK; // Active block o_tuBlockSettings : TU_PROT_BLOCK_INT; VAR _tuResetTrip : TU_PROT_TRIP; _tuResetBlock : TU_PROT_BLOCK; _tuTrip : TU_PROT_TRIP; _tuTripBSW : TU_PROT_TRIP_BSW; _tuBlock : TU_PROT_BLOCK; ltTimer : LTIME; _bInit : BOOL := TRUE; _lrTs : LREAL; _lrSysTime : LREAL := 0.0; _fbTimerArray : TTB.FB_DynamicArray; idx : DINT; IF _bInit THEN _bInit := FALSE; // establish sample time of task _lrTs := TTB.F_lrGetSampleTime(); // triple size: // 1: occurrence timer // 2: auto reset timer // 3: block restart timer _fbTimerArray.uiSize:= DINT_TO_UINT(c_tsProt.diNBlock)*3; END_IF _tuTripBSW.ts := tsTripBSW; _tuResetTrip.ts := tsResetTrip; _tuResetBlock.ts := tsResetBlock; // handle BSW trips SetTripBSW(tsProt:= tsProt); // set trip bits SetTrip(tsProt:= tsProt); // deal with reset signal ResetTrip(tsProt:= tsProt); // detect up trigger of fault edge detection BlockTimer(tsProt:= tsProt); // step timer Timer(bStep:= TRUE, bReset := FALSE); // toggle tsProt.bToggleCycle := NOT tsProt.bToggleCycle;