Presentation is loading. Please wait.

Presentation is loading. Please wait.

8th IMA International Conference on Modelling in Industrial Maintenance and Reliability Jacob T. Ormerod Vero Beach, Florida, USA

Similar presentations


Presentation on theme: "8th IMA International Conference on Modelling in Industrial Maintenance and Reliability Jacob T. Ormerod Vero Beach, Florida, USA"— Presentation transcript:

1 8th IMA International Conference on Modelling in Industrial Maintenance and Reliability Jacob T. Ormerod Vero Beach, Florida, USA Oxford University July 10, 2014

2 Jacob T. Ormerod Vero Beach, Florida, USA A word about OpenReliability.org Currently developing in the R Statistical Programming environment. Weibull Analysis – Abernethy Reliability Methods, package abrem (formerly package weibulltoolkit) Stochastic Simulator for Reliability Analysis, package stosim Spare Parts Analysis – Multi-Eshelon Techniques for Recoverable Item Control (METRIC, MOD-METRIC, VARI-METRIC,...)

3 Jacob T. Ormerod Vero Beach, Florida, USA The Example Problem Simple enough for my 87 year old mother to understand. Sophisticated enough that solution without stochastic approach is too difficult. Completely implemented in the R system. (commercial software not required) This paper describes the development of useful contributed package functions. In this environment we call a collection of useful functions that can be made to work together a “toolkit”. This is not intended to be the development of a mindless user application.

4 Multi-train Feed Inventory Primary Reactor

5 Charge Unit 1A Charge Unit 1BCharge Unit 1C Charge Unit 2ACharge Unit 2BCharge Unit 2C Charge Unit 3ACharge Unit 3BCharge Unit 3C Accumulator Storage Discharge Primary Reactor Charge Storage Example Problem RBD

6 Example Problem Statement The charge storage has a capacity for 16 hours of replacement time for a single charge train. An accumulator unit operation has the ability to replenish the complete storage inventory in 2weeks, but will be operated to attempt to top off the tank after any consumption. It is assumed that the accumulator operates on excess capacity from the charge feed system and does not reduce flow available to the primary reactor. The storage discharge unit has a capacity for replacement of a single charge train. The primary reactor system requires 3 days to restart upon any sudden, partial loss of charge flow. However, it can be turned down to 60% of production given an hour’s notice. The operators of this unit need to have a policy that will enable them to optimize total production from the primary reactor. This is expected to be accomplished by establishing a reserve inventory to be held in storage, which should then trigger turndown of the primary reactor to avoid damaging shutdown.

7 EventIDFDFP1RDRP1RP2 fail rate/yrMTTR UnavailAvailability 101 E 2,000 L Subsys A E 3,500 N Subsys B E 10,000 W 962Subsys C Input Table ValuesAnalytical Summary 2 oo3 trains down sequentially(3 * 0.02) * (2 * 7.6) =0.912 Single Train Operational Data

8 SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC for( row in 1:nrow(Train1)) { set.seed(Train1$Seed[row]) TTF<-rexp(NumRands,1/Train1$FP1[row]) if(row==1) { TTR<-rlnorm(NumRands, Train1$RP1[row], Train1$RP2[row]) }else{ if(row==2) { TTR<-rnorm(Normand, Train1$RP1[row], Train1$RP2[row]) }else{ TTR<-rweibull(NumRands,Train1$RP2[row], Train1$RP1[row]) }} TTFmat<-rbind(TTFmat,TTF) TTRmat<-rbind(TTRmat,TTR) } Times To FailureTimes To Repair Getting Random Values for a Simulated History

9 Times To FailureTimes To Repair Building the Simulated History SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC Simulated History Event Queue TimeDurationOpLineEventID 3, , , TimeDurationOpLineEventID 3, Pull the first event for the Simulation History from the Queue

10 Times To FailureTimes To Repair Building the Simulated History SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC Simulated History Event Que TimeDurationOpLineEventID 3, TimeDurationOpLineEventID 4, , Delay the history time for remaining events in the Queue by repair time of last event

11 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue TimeDurationOpLineEventID 3, SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC Event Clock Time 3, TimeDurationOpLineEventID 4, , , Add the new event TTF to current EventClock time to get history time for new random event.

12 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue TimeDurationOpLineEventID 4, , , TimeDurationOpLineEventID 3, , Sort the Queue, then Pull the next event for the Simulation History from the Queue SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC

13 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Que TimeDurationOpLineEventID 3, , Delay the history time for remaining events in the Queue by repair time of last event SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC TimeDurationOpLineEventID 4, ,

14 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue Add the new event TTF to current EventClock time to get history time for new random event. TimeDurationOpLineEventID 3, , Event Clock Time 4,718.4 SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC TimeDurationOpLineEventID 4, , ,

15 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC Sort the Queue, then Pull the next event for the Simulation History from the Queue TimeDurationOpLineEventID 4, , , TimeDurationOpLineEventID 3, , ,

16 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue SysASysBSysC TimeDurationOpLineEventID 3, , , Delay the history time for remaining events in the Queue by repair time of last event SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 TimeDurationOpLineEventID 7, ,

17 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue TimeDurationOpLineEventID 3, , , SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 Add the new event TTF to current EventClock time to get history time for new random event. SysASysBSysC Event Clock Time 4,949.1 TimeDurationOpLineEventID 7, , ,

18 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 Continue Building the Simulated History SysASysBSysC TimeDurationOpLineEventID 7, , , TimeDurationOpLineEventID 3, , , ,

19 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue Continue Building the Simulated History SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC TimeDurationOpLineEventID 3, , , , , TimeDurationOpLineEventID 8, , ,

20 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue Continue Building the Simulated History SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC TimeDurationOpLineEventID 3, , , , , , TimeDurationOpLineEventID 9, , ,

21 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue Continue Building the Simulated History SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC TimeDurationOpLineEventID 3, , , , , , , TimeDurationOpLineEventID 9, , ,

22 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue Continue Building the Simulated History TimeDurationOpLineEventID 3, , , , , , , , TimeDurationOpLineEventID 10, , , SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC

23 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue Continue Building the Simulated History TimeDurationOpLineEventID 10, , , TimeDurationOpLineEventID 3, , , , , , , , , SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC

24 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue Continue Building the Simulated History SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC TimeDurationOpLineEventID 3, , , , , , , , , , TimeDurationOpLineEventID 14, , ,

25 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue Continue Building the Simulated History SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC TimeDurationOpLineEventID 3, , , , , , , , , , , TimeDurationOpLineEventID 14, , ,

26 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue Continue Building the Simulated History SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC TimeDurationOpLineEventID 3, , , , , , , , , , , , TimeDurationOpLineEventID 14, , ,

27 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue Continue Building the Simulated History SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC TimeDurationOpLineEventID 14, , , TimeDurationOpLineEventID 3, , , , , , , , , , , , ,

28 Times To FailureTimes To Repair Building the Simulated History Simulated History Event Queue SysASysBSysC 3, , , , , , , , , , , , , , , , , , , , , ,473.7 SysASysBSysC TimeDurationOpLineEventID 3, , , , , , , , , , , , , , TimeDurationOpLineEventID 15, , ,

29 Creating the OpLine Detail Sim Histories Train1Train2Train3 Time Duration , , , , , , , , , , , , , , Time Duration 4, , , , , , , , , , , , , , , Time Duration , , , , , , , , , , , , , , Time DurationTrain 1Train 2Train , , , , , , , , , , , , , , , , , , , , OpLine Detail

30 library(stosim) > Train1<-ChargeTrain data(ChargeTrain) OpLine EventID FD FP1 FP2 FP3 RD RP1 RP2 RP3 Seed Simulation_Years= E L Train1<-ChargeTrain E N Train2<-cbind(Train1[,-11],"Seed"=Train1[,11]+200) E W Train3<-cbind(Train2[,-11],"Seed"=Train2[,11]+200) sh1<-SimHistory(Train1,Simulation_Years) sh2<-SimHistory(Train2,Simulation_Years) dim(history) sh3<-SimHistory(Train3,Simulation_Years) > dim(history) ChargeSystem<-list(sh1, sh2, sh3) [1] history<-DetailOpLines(ChargeSystem) 7.6 events per yearstateMAT<-as.matrix(history[,4:6]) 2.0 lines per eventGenRate<-.rowSums(stateMAT,45441,3)/3 3.0 trains 45.6 expected linesGenRate[1:10] per year > GenRate[1:10] [1] [8] Availability<-sum(GenRate*history$Duration)/(8760*1000) Availability twodown<-GenRate[sapply(GenRate, function(x) x==1/3)] > Availabilitylength(twodown) [1] > length(twodown) [1] 929 alldown<-GenRate[sapply(GenRate, function(x) x==0)] length(alldown) > length(alldown) [1] years MTBF which(GenRate==0) > which(GenRate==0) [1] X Exploring the OpLine Detail

31 EventIDFDFP1RDRP1RP2 fail rate/yrMTTR UnavailAvailability 101 E 2,000 L Subsys A E 3,500 N Subsys B E 10,000 W 962Subsys C Input Table ValuesAnalytical Summary 2 oo3 trains down sequentially(3 * 0.02) * (2 * 7.6) =0.912

32 Exploring the OpLine Detail history[3610:3630,] > history[3610:3630,] PageTimeDurationTrain 1Train 2Train ,

33 model<-history[3610:3630,] > history[3610:3630,] reserveHrs<-5 TimeDurationTrain 1Train 2Train 3 EndInvMTwInv<-MultiTrainWithInventory( model,16,reserveHrs,336, 1,.6,1) > MTwInv TimeDurationProdRateDisCapExRunOut EmptyOn D , , , , Production History with Inventory Suport

34 Production History EntriesInventory Entries else Is GenRate is lower than last? At Failure Condition Was last condition an operational state?NoEND OF EVENT -record no change in inventory, path 101 Is current demand within discharge capability?NoEnter DischargeCapacityExceeded condition at beginning of train state. ProdRate = zero END OF EVENT -record no change in inventory, path 102 Is there any inventory in storage?NoEnter EmptyOnDemand condition at beginning of train state. ProdRate = zero END OF EVENT -record zero inventory, path 103 else Is the inventory sufficiently above Reserve? Inventory starts above reserve Will the end inventory reach Reserve? NoEND OF EVENT - only record end inventory for train state, path 104 Is the GenRate below TurndownLimit?NoEnter new ProdRate = GenRate condition at time reserve level was reached END OF EVENT - record end inventory at Reserve, path 105 YesEnter new ProdRate = TurndownLimit condition at time reserve level was reached Will operation at TurndownLimit run out inventory? NoEND OF EVENT - only record end inventory for train state, path 106 YesEnter RunOut condition at end of train state. ProdRate = zero END OF EVENT -record zero inventory, path 107 Logic for Production from Multi-Train system with Inventory

35 Inventory starts within Reserve elseWill duration of event permit full turndown? Will any inventory remain at end of TurndownTime? NoEnter RunOut condition before end ofturndown time. ProdRate = zero END OF EVENT -record zero inventory, path 108 Is the GenRate below TurndownLimit?NoEnter ProdRate = GenRate at end of turndown time END OF EVENT - only record end inventory for train state, path 109 YesEnter ProdRate = TurndownLimit condition at end of turndown time Will operation at TurndownLimit run out inventory? NoEND OF EVENT - only record end inventory for train state, path 110 YesEnter RunOut condition at end of train state. ProdRate = zero END OF EVENT -record zero inventory, path 111 Event Duration Less than Time for Turndown within Reserve Will operation at current rate cause RunOut?NoEND OF EVENT - only record end inventory for train state, path 112 YesEnter RunOut condition at end of train state. ProdRate = zero END OF EVENT -record zero inventory, path 113 Logic for Production from Multi-Train system with Inventory At Repair Condition else Is GenRate now equal to 1? Is ProdRate unchanged?NoProduction is fully restored. ProdRate = 1 add 2 to path Was there enough run time for refill to complete?NoEND OF EVENT -define inventory change according to RefillHrs capability, path 201/203 YesEND OF EVENT -inventory is now at CapacityHrs, path 202/204

36 Logic for Production from Multi-Train system with Inventory GenRate is not yet fully restored elseIs LastProdRate greater than GenRate? elseIs the inventory sufficiently above Reserve? Will the end inventory reach Reserve?NoEND OF EVENT - only record end inventory for train state, path 205 Is the GenRate below TurndownLimit?NoEnter new ProdRate = GenRate condition at time reserve level was reached END OF EVENT - record end inventory at Reserve, path 206 YesEnter new ProdRate = TurndownLimit condition at time reserve level was reached Will operation at TurndownLimit run out inventory? NoEND OF EVENT - only record end inventory for train state, path 207 YesEnter RunOut condition at end of train state. ProdRate = zero END OF EVENT -record zero inventory, path 208 Inventory starts within Reserve Is the GenRate below TurndownLimit?NoEnter ProdRate = GenRate immediatelyEND OF EVENT - no change to inventory, path 209 YesEnter ProdRate = TurndownLimit immediately Will any inventory remain at end of Train State? NoEND OF EVENT - only record end inventory for train state, path 210 YesEnter RunOut condition at end of turndown time. ProdRate = zero END OF EVENT -record zero inventory, path 211 no demand is occurring on storage Is GenRate now > = TurndownLimit?Nono change in ProdRate, which must be zeroEND OF EVENT -record no change in inventory, path 212 Is GenRate greater than Last ProdRate?Nono change in ProdRateEND OF EVENT -record no change in inventory, path 213 YesProduction is restored to GenRateEND OF EVENT -record no change in inventory, path 214

37 Completion of Model Analysis for(x in seq(1.5,15,by=.5)) { ChgTwInv<-MultiTrainWithInventory(ChargeTrainParallelHistory, 16,x,336, 1,.6,1) wid<-ChgTwInv[[1]] DischargeCapExceeded<-sum(wid$DisCapEx) RunOut=sum(wid$RunOut) EmptyOnDemand<-sum(wid$EmptyOnD) Reactor_Restarts<-DischargeCapExceeded+RunOut+EmptyOnDemand Availability<-sum(wid$Duration*wid$ProdRate)/(Simulation_Years*8760+Reactor_Restarts*72) thisDFline<-data.frame(ReserveHrs=x,DischargeCapExceeded=DischargeCapExceeded, RunOut=RunOut, EmptyOnDemand=EmptyOnDemand, Availability=Availability) ChargeTrain2PrimaryReactor<-rbind(ChargeTrain2PrimaryReactor,thisDFline) } Model<-ChargeTrain2PrimaryReactor Reserve_Hours<-Model$ReserveHrs Reactor_Availability<-Model$Availability plot(Reserve_Hours,Reactor_Availability,type="l") Usage MultiTrainWithInventory(model, CapacityHrs, ReserveHrs, RefillTime, DischargeCap=1, TurndownLimit=0.6, TurndownTime=1, ProgRpt=FALSE)

38 Expanded Considerations MulitiTrainWithInventory was designed to take restraining parameters of the example problem as variables. This enables its proactive use in design. What is the value of additional storage capacity? Is a single train discharge capability too limiting? What is an effective accumulator design?

39 Expanded Considerations With simulated history for the system so developed what other kind of questions can be posed? What does the distribution of annual availability look like? What is the confidence in meeting availability commitments? If the charge feed system crosses a contractual barrier, what might the effect of contract performance penalties be?

40 Expanded Considerations What other type of problems are suited to stochastic, discrete event modeling? Multiple supply systems of varied capacity and design. Service to multiple customers from a pipeline network. Distribution of available product to clients during curtailment. Account for compression and piping (pumping) limitations. Account for pressure drop in pipeline system. More Ideas???

41 Thank You


Download ppt "8th IMA International Conference on Modelling in Industrial Maintenance and Reliability Jacob T. Ormerod Vero Beach, Florida, USA"

Similar presentations


Ads by Google