Reliability — growth model (Crow-AMSAA)
Reliability growth on a fielded fleet, fitted as a non-homogeneous Poisson process with a power-law intensity — Crow-AMSAA, IEC 61710. Typed FlowScript for reliability engineering. Keywords: FMEA, failure mode, RPN, reliability.
Make it your own.
// Reliability growth on a fielded fleet, fitted as a non-homogeneous
// Poisson process with a power-law intensity — Crow-AMSAA, IEC 61710.
//
// Cumulative failures against cumulative operating hours for the pitch
// system across eighteen offshore turbines. The slope beta is the whole
// argument: below 1 the failure intensity is falling and the retrofit
// programme is working; at 1 nothing has changed; above 1 the fleet is
// getting worse. Here beta comes out near 0.50, which is strong growth.
//
// The fit below is the two-point graphical (Duane) estimate through the
// first and last observations, so it is visibly a derivation of the data
// rather than an output nobody can reproduce. The maximum-likelihood
// estimate over all 45 failure times is 0.51, which agrees to two places.
growth_model pitch_growth {
title: "Pitch-system reliability growth — Dogger Bank B"
fleet: "18 x 8.4 MW turbines, blade pitch drives, hydraulic accumulators and pitch bearings"
model: "Crow-AMSAA power law, N(T) = lambda x T^beta"
period: "2025-04 to 2026-02"
programme: "Test-analyse-and-fix: accumulator seal retrofit, pitch-bearing grease change, encoder shielding"
data_source: "SCADA operating hours reconciled against the CMMS work-order history"
target_mtbf: 2000 h
// Fitted from the first and last cumulative points.
beta: = ln(point_6.cumulative_failures / point_1.cumulative_failures) / ln(point_6.cumulative_hours / point_1.cumulative_hours)
beta_mle: 0.51 source "MLE over 45 failure times, time-terminated"
growth_rate: = 1 - beta
mtbf_cumulative: = point_6.cumulative_hours / point_6.cumulative_failures
// The instantaneous MTBF is what the fleet is achieving NOW, and it is
// the cumulative MTBF divided by beta. Quoting the cumulative figure to
// a customer understates a growing system by a factor of two here.
mtbf_instantaneous: = mtbf_cumulative / beta
// Divided by the hours AS A NUMBER (the "/ 1[h]" idiom) rather than by
// the hours themselves. Both give the same figure — failures per
// operating hour — but the second carries a reciprocal-hour unit into
// everything downstream, and anything that multiplies it back up by a
// duration then has to be written to cancel it.
failure_intensity: = beta * point_6.cumulative_failures / (point_6.cumulative_hours / 1[h])
failures_per_1000_hours: = 1000 * failure_intensity
// One turbine runs about 4500 hours a year, so at the current intensity
// it will see this many pitch failures. It is the figure the operations
// manager asks for and the only one on this block with no h in it.
failures_per_turbine_year: = 4500 * failure_intensity
// Projection: instantaneous MTBF grows as T^(1-beta), so reaching the
// target needs the operating hours below.
hours_to_target: = point_6.cumulative_hours * (target_mtbf / mtbf_instantaneous) ^ (1 / (1 - beta))
additional_hours: = hours_to_target - point_6.cumulative_hours
fleet_hours_per_month: 12000 h
months_to_target: = additional_hours / fleet_hours_per_month
}
growth_point point_1 {
of: pitch_growth
cumulative_hours: 1000 h
cumulative_failures: 8
note: "First month of commercial operation; four accumulator seal failures"
}
growth_point point_2 {
of: pitch_growth
cumulative_hours: 2000 h
cumulative_failures: 11
}
growth_point point_3 {
of: pitch_growth
cumulative_hours: 4000 h
cumulative_failures: 16
note: "Accumulator seal retrofit begins across the fleet"
}
growth_point point_4 {
of: pitch_growth
cumulative_hours: 8000 h
cumulative_failures: 23
}
growth_point point_5 {
of: pitch_growth
cumulative_hours: 16000 h
cumulative_failures: 32
note: "Encoder shielding modification embodied on all 18 turbines"
}
growth_point point_6 {
of: pitch_growth
cumulative_hours: 32000 h
cumulative_failures: 45
}
// What the failures were, so the growth claim can be checked against a
// physical change rather than against a curve fit.
failure_class accumulator_seals {
of: pitch_growth
description: "Nitrogen accumulator seal extrusion"
failures_before_fix: 14
failures_after_fix: 2
fix: "Replaced with PTFE-backed seals, 2025-08"
}
failure_class encoder_faults {
of: pitch_growth
description: "Pitch encoder signal loss in humid conditions"
failures_before_fix: 11
failures_after_fix: 3
fix: "Shielded harness and drain modification, 2025-11"
}
failure_class bearing_grease {
of: pitch_growth
description: "Pitch bearing grease starvation at low duty"
failures_before_fix: 9
failures_after_fix: 6
fix: "Grease interval halved, 2025-09; further work open"
}
// The growth curve is a consequence of a programme of fixes, and a
// reliability growth report that shows only the curve invites the reader
// to believe the fleet improved on its own. The dates below are the ones
// the curve bends at.
project taaf_programme {
title: "Pitch-system test-analyse-and-fix programme"
start: "2025-04-01"
end: "2026-12-31"
owner: "Reliability engineering, offshore O&M"
}
milestone first_power {
date: "2025-04-01"
title: "Fleet at first power — growth tracking starts"
status: "done"
}
milestone seal_embodiment {
date: "2025-08-29"
title: "Accumulator seal retrofit embodied on all 18 turbines"
status: "done"
}
milestone encoder_embodiment {
date: "2025-11-14"
title: "Encoder shielding modification embodied on all 18 turbines"
status: "done"
}
milestone warranty_review {
date: "2026-09-30"
title: "Warranty reliability review — 2000 h instantaneous MTBF required"
status: "planned"
}
task seal_root_cause {
title: "Accumulator seal extrusion — root cause and seal redesign"
start: "2025-05-06"
end: "2025-07-25"
assignee: "Hydraulics"
status: "done"
}
task seal_retrofit {
title: "Seal retrofit across the fleet, two turbines per weather window"
start: "2025-07-28"
end: "2025-08-29"
depends: [seal_root_cause]
assignee: "Offshore technicians"
status: "done"
}
task encoder_investigation {
title: "Encoder signal loss — humidity ingress investigation"
start: "2025-08-04"
end: "2025-10-10"
assignee: "Controls"
status: "done"
}
task encoder_retrofit {
title: "Shielded harness and drain modification"
start: "2025-10-13"
end: "2025-11-14"
depends: [encoder_investigation]
assignee: "Offshore technicians"
status: "done"
}
task grease_trial {
title: "Pitch-bearing grease interval trial on six turbines"
start: "2025-09-01"
end: "2026-03-31"
assignee: "Mechanical"
status: "in-progress"
}
task grease_rollout {
title: "Grease regime rollout, subject to the trial result"
start: "2026-04-01"
end: "2026-06-30"
depends: [grease_trial]
assignee: "Offshore technicians"
status: "planned"
}
task growth_review {
title: "Reliability growth re-fit and warranty submission"
start: "2026-07-01"
end: "2026-09-30"
depends: [grease_rollout]
assignee: "Reliability engineering"
status: "planned"
}
cite iec61710 {
key: "iec61710"
title: "IEC 61710:2013 — Power law model. Goodness-of-fit tests and estimation methods"
publisher: "International Electrotechnical Commission"
year: 2013
type: "guideline"
of: pitch_growth
}
note projection_caveat {
text: "The projection assumes the programme keeps finding and fixing at the rate it has. It is a plan, not a forecast: a Crow-AMSAA extrapolation past about twice the observed hours has been wrong often enough that IEC 61710 warns about it explicitly."
anchor: pitch_growth
}
view programme: gantt(taaf_programme)
caption programme_caption {
of: programme
title: "Test-analyse-and-fix programme behind the growth curve"
text: "The two embodiment milestones are where the cumulative failure plot changes slope. Growth is a consequence of the work on this chart, not a property of the fleet."
source: "CMMS work orders and the offshore access log."
style: journal
}