Description
The following method is used to calculate the mean life and its time to failure distribution for a component with more than one failure mode.
Method
- Identify the failure mode failure distributions for the component.
- Simulate 100,000 points for each failure mode distribution.
- Obtain the time to failure for each simulation using the minimum time of each simulated failure mode.
- Calculate the mean of the component failure time samples.
- Count failure times into histogram to identify failure shape.
Example
Consider the example of a tyre, which has two failure modes:
- Failure mode 1: tyre fails due to the tread wearing out. This is expected as the tyre is used. We might expect the tyre to have a characteristic life of η = 50,000 km and a shape parameter of β = 3. This gives a MTTF of 44,644 km.
- Failure mode 2: tyre fails due to puncture. This is a random event that does not occur very often. We might expect on average 1 puncture (due to a nail etc.) every 200,000 km per tyre. Since it is random we can say β = 1, and MTTF = η = 200,000 km.
To simulate, we generate a random variable for each failure based on the Weibull distribution for that failure mode. In this example there are two failure modes so we generate one random variable for the tyre wearing out, and one for the tyre receiving a puncture. The random variables are a simulated time to failure for each failure mode. Of the two variables, the lowest number corresponds to the failure mode that caused the failure. This simulation occurs many times to obtain a steady state solution.
The results of the first 10 simulations are shown in the table below. For each simulation, the minimum failure time out of the two failure modes represents the time to failure, and has been highlighted red. E.g. for simulation 6, the tyre received a puncture at 55,246 km, which was before the tyre wore out. The average of the failure times (i.e. the red cells) gives the mean life for the tyre.
Failure Mode 1 (km) | Failure Mode 2 (km) | |
---|---|---|
Simulation 1 | 45171 | 240741 |
Simulation 2 | 52271 | 240741 |
Simulation 3 | 27358 | 576366 |
Simulation 4 | 65229 | 98312 |
Simulation 5 | 40956 | 674859 |
Simulation 6 | 86851 | 55246 |
Simulation 7 | 47404 | 170499 |
Simulation 8 | 73245 | 120562 |
Simulation 9 | 76037 | 328402 |
Simulation 10 | 42210 | 611274 |
The more simulations, the less variance there will be from a steady solution. The graphic below shows the mean life versus the number of simulations for this example. It can be seen that the mean life estimate approaches a number between 39,000 and 40,000 km. The analytical solution is 39,486 km.
While the dominant failure mode has a MTTF of 50,000 km, the effect of the less frequent failure mode brings the mean life estimate to under 40,000 km.
If you have an improvement to this code, please post below.
Function [ daML daBinCounts ] = mixedwblML(dAlpha, dBeta, daBinRanges) ' mixedwblML is used to determine the mean life for a component that has ' more than one failure mode. It takes the failure distribution for each ' failure mode (assumed to be a 2-parameter Weibull distribution), ' simulates the times to failure for each failure mode, and takes the ' minimum of these simulations as the simulated life. Repeating this for ' many simulations, and taking the average, will give mean life of the ' component. The inputs are the eta and beta parameters for each failure ' mode, and the 'bins' used in plotting the histogram ' Author: Adam Norvill <adam.norvill@relken.com> ' Date: 25 Aug 2014 ' Copyright: 2014 Relken Engineering ' Number of simulations sims = 1000; ' Prepare Input Variables warning('off', 'all'); daA = repmat(EnsureHorizontal( dAlpha ), sims, 1); daB = repmat(EnsureHorizontal( dBeta ), sims, 1); warning('on', 'all'); ' Create Random Samples for each failure mode R = wblrnd(daA,daB); ' MATLAB function that generates random Weibull distributed variables ' Obtain the life (i.e. minimum value) for each simulation, and calculate ' the average Rmin = min(R,[],2); ' Minimum value for each simulation daML = mean(Rmin); ' Average of the minimum values ' Bins the results daBinCounts = histc(Rmin, daBinRanges);