{"id":100299,"date":"2026-02-15T20:32:33","date_gmt":"2026-02-15T20:32:33","guid":{"rendered":"https:\/\/vibromera.eu\/?post_type=calculator&#038;p=100299"},"modified":"2026-02-15T20:32:33","modified_gmt":"2026-02-15T20:32:33","slug":"vibration-trend-remaining-life","status":"publish","type":"calculator","link":"https:\/\/vibromera.eu\/nb\/calculators\/vibration-trend-remaining-life\/","title":{"rendered":"Gjenv\u00e6rende levetid fra vibrasjonstrend | RUL-estimator"},"content":{"rendered":"\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"WebApplication\",\"name\":\"Remaining Life from Vibration Trend\",\"alternateName\":[\"RUL Estimator\",\"Vibration Trend Predictor\",\"Remaining Useful Life Calculator\"],\"description\":\"Free online tool to estimate remaining useful life from vibration trending data. Supports linear, exponential, and power law growth models to project time to alarm and danger levels.\",\"url\":\"https:\/\/vibromera.eu\/calculators\/vibration-trend-remaining-life\/\",\"applicationCategory\":\"Engineering Calculator\",\"operatingSystem\":\"Any (Web Browser)\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"EUR\"},\"creator\":{\"@type\":\"Organization\",\"name\":\"Vibromera\",\"url\":\"https:\/\/vibromera.eu\/\"},\"datePublished\":\"2025-01-01\",\"dateModified\":\"2025-02-15\",\"inLanguage\":\"en\",\"isAccessibleForFree\":true,\"featureList\":[\"Linear growth model\",\"Exponential growth model\",\"Power law growth model\",\"Time to alarm prediction\",\"Time to danger prediction\",\"30\/60\/90 day projections\",\"Growth rate calculation\"],\"keywords\":\"remaining useful life, vibration trend, predictive maintenance, condition monitoring\"}\n<\/script>\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[\n{\"@type\":\"Question\",\"name\":\"How reliable is vibration trending for predicting remaining life?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Vibration trending provides a reasonable estimate when the fault mechanism produces a consistent growth pattern. Bearing degradation typically follows an exponential curve. Accuracy improves with more data points, consistent measurement conditions, and understanding of the failure mode. Estimates should be treated as guidance, not precise predictions.\"}},\n{\"@type\":\"Question\",\"name\":\"What is the difference between linear and exponential vibration growth?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Linear growth means vibration increases at a constant rate over time (e.g., +0.5 mm\/s per month). Exponential growth means the rate of increase accelerates over time - common in bearing degradation where damage creates more damage. Exponential growth is more dangerous because the final failure can be sudden.\"}},\n{\"@type\":\"Question\",\"name\":\"When should I take action based on vibration trends?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Action should be planned when vibration enters Zone C (per ISO 20816\/10816) or reaches the alarm level. Schedule maintenance before the danger level is reached. As a rule of thumb, plan corrective action when vibration has increased by 50% above baseline, and take urgent action at 100% increase or when approaching alarm limits.\"}},\n{\"@type\":\"Question\",\"name\":\"What affects the accuracy of vibration trend predictions?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Key factors: consistency of measurement point and direction, sensor mounting quality, operating conditions (load, speed, temperature), measurement interval regularity, and the assumption that the growth mechanism remains unchanged. External events (impacts, process changes) can alter the trend.\"}},\n{\"@type\":\"Question\",\"name\":\"How often should vibration measurements be taken for trending?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Frequency depends on criticality: continuous monitoring for critical machines, monthly for important machines, quarterly for general. When a rising trend is detected, increase frequency: weekly or daily as alarm levels approach. The P-F interval (time from detectable fault to functional failure) determines the minimum monitoring frequency.\"}}\n]}\n<\/script>\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[\n{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/vibromera.eu\/\"},\n{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Calculators\",\"item\":\"https:\/\/vibromera.eu\/calculators\/\"},\n{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Remaining Life Estimator\",\"item\":\"https:\/\/vibromera.eu\/calculators\/vibration-trend-remaining-life\/\"}\n]}\n<\/script>\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,400&#038;family=JetBrains+Mono:wght@400;500;600&#038;family=Fraunces:opsz,wght@9..144,700;9..144,800&#038;display=swap\" rel=\"stylesheet\">\n\n<link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/katex@0.16.11\/dist\/katex.min.css\">\n\n<style>\n:root {\n    --vc-bg: #f4f1ec;\n    --vc-surface: #ffffff;\n    --vc-surface-alt: #f8f6f2;\n    --vc-ink: #1a1a1a;\n    --vc-ink-secondary: #5a5650;\n    --vc-ink-muted: #8a857e;\n    --vc-accent: #c85a2a;\n    --vc-accent-hover: #b04d22;\n    --vc-accent-light: #fdf0ea;\n    --vc-blue: #2a5c8c;\n    --vc-blue-light: #eaf1f8;\n    --vc-green: #2a7a4b;\n    --vc-green-light: #eaf8ef;\n    --vc-yellow: #a67c00;\n    --vc-yellow-light: #fef9e8;\n    --vc-red: #b91c1c;\n    --vc-red-light: #fef2f2;\n    --vc-border: #d9d4cc;\n    --vc-border-light: #e8e4dd;\n    --vc-shadow: 0 1px 3px rgba(26,26,26,0.06), 0 4px 12px rgba(26,26,26,0.04);\n    --vc-shadow-lg: 0 4px 12px rgba(26,26,26,0.08), 0 16px 40px rgba(26,26,26,0.06);\n    --vc-radius: 8px;\n    --vc-radius-lg: 12px;\n    --vc-font: 'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    --vc-mono: 'JetBrains Mono', 'Consolas', 'Monaco', monospace;\n    --vc-display: 'Fraunces', Georgia, serif;\n}\n\n.vc-calculator {\n    font-family: var(--vc-font);\n    font-size: 15px;\n    line-height: 1.65;\n    color: var(--vc-ink);\n    max-width: 960px;\n    margin: 0 auto;\n    padding: 20px 16px 40px;\n    -webkit-font-smoothing: antialiased;\n}\n.vc-calculator *, .vc-calculator *::before, .vc-calculator *::after { box-sizing: border-box; }\n\n\/* -- HEADER -- *\/\n.vc-header { text-align: center; padding: 48px 24px 40px; position: relative; }\n.vc-header::after { content:''; position:absolute; bottom:0; left:50%; transform:translateX(-50%); width:80px; height:3px; background:var(--vc-accent); border-radius:2px; }\n.vc-header-eyebrow { font-family:var(--vc-mono); font-size:11px; font-weight:500; letter-spacing:0.15em; text-transform:uppercase; color:var(--vc-accent); margin:0 0 12px; }\n.vc-header-title { font-family:var(--vc-display); font-size:clamp(24px,4vw,36px); font-weight:800; line-height:1.15; color:var(--vc-ink); margin:0 0 16px; letter-spacing:-0.02em; }\n.vc-header-subtitle { font-size:15px; color:var(--vc-ink-secondary); margin:0 auto 20px; max-width:600px; }\n.vc-badges { display:inline-flex; gap:8px; flex-wrap:wrap; justify-content:center; }\n.vc-badge { font-family:var(--vc-mono); font-size:11px; font-weight:500; padding:4px 10px; border-radius:4px; background:var(--vc-surface); border:1px solid var(--vc-border); color:var(--vc-ink-secondary); }\n\n\/* -- CARD -- *\/\n.vc-card { background:var(--vc-surface); border:1px solid var(--vc-border); border-radius:var(--vc-radius-lg); box-shadow:var(--vc-shadow); overflow:hidden; margin-top:32px; }\n\n\/* -- FORM -- *\/\n.vc-form { padding:24px; }\n.vc-form-grid { display:grid; grid-template-columns:1fr 1fr; gap:18px; }\n@media(max-width:600px) { .vc-form-grid { grid-template-columns:1fr; } }\n.vc-field { display:flex; flex-direction:column; }\n.vc-field-full { grid-column: 1 \/ -1; }\n.vc-label { font-size:12px; font-weight:600; letter-spacing:0.04em; text-transform:uppercase; color:var(--vc-ink-secondary); margin-bottom:6px; }\n.vc-label-hint { font-weight:400; text-transform:none; letter-spacing:0; color:var(--vc-ink-muted); font-size:11px; }\n.vc-select, .vc-input { width:100%; padding:10px 12px; border:1.5px solid var(--vc-border); border-radius:6px; font-family:var(--vc-font); font-size:14px; color:var(--vc-ink); background:var(--vc-surface); transition:border-color 0.15s, box-shadow 0.15s; }\n.vc-select { padding-right:36px; appearance:none; -webkit-appearance:none; cursor:pointer; background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' fill='none' stroke='%235a5650' stroke-width='2'%3E%3Cpath d='M4 6l4 4 4-4'\/%3E%3C\/svg%3E\"); background-repeat:no-repeat; background-position:right 10px center; }\n.vc-select:focus, .vc-input:focus { outline:none; border-color:var(--vc-accent); box-shadow:0 0 0 3px rgba(200,90,42,0.12); }\n.vc-select:hover, .vc-input:hover { border-color:var(--vc-ink-muted); }\n\n\/* -- PRESETS -- *\/\n.vc-presets { display:flex; flex-wrap:wrap; gap:8px; margin-top:18px; padding-top:18px; border-top:1px solid var(--vc-border-light); }\n.vc-presets-label { font-family:var(--vc-mono); font-size:11px; font-weight:500; letter-spacing:0.1em; text-transform:uppercase; color:var(--vc-ink-muted); width:100%; margin-bottom:2px; }\n.vc-preset-btn { padding:5px 12px; font-family:var(--vc-font); font-size:12px; font-weight:500; border:1px solid var(--vc-border); border-radius:6px; background:var(--vc-surface-alt); color:var(--vc-ink-secondary); cursor:pointer; transition:all 0.15s; }\n.vc-preset-btn:hover { border-color:var(--vc-accent); color:var(--vc-accent); background:var(--vc-accent-light); }\n\n\/* -- RESULTS -- *\/\n.vc-results { border-top:1px solid var(--vc-border-light); background:var(--vc-surface-alt); padding:0; max-height:0; overflow:hidden; transition:max-height 0.5s cubic-bezier(0.4,0,0.2,1), padding 0.3s; }\n.vc-results.vc-visible { max-height:5000px; padding:24px; }\n.vc-results-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:18px; }\n.vc-results-title { font-family:var(--vc-display); font-size:20px; font-weight:700; color:var(--vc-ink); margin:0; }\n.vc-copy-btn { display:inline-flex; align-items:center; gap:5px; padding:6px 12px; border:1px solid var(--vc-border); border-radius:6px; background:var(--vc-surface); font-family:var(--vc-font); font-size:12px; font-weight:500; color:var(--vc-ink-secondary); cursor:pointer; transition:all 0.15s; }\n.vc-copy-btn:hover { border-color:var(--vc-accent); color:var(--vc-accent); }\n.vc-copy-btn.vc-copied { background:var(--vc-green-light); border-color:var(--vc-green); color:var(--vc-green); }\n\n.vc-result-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-bottom:20px; }\n@media(max-width:500px) { .vc-result-grid { grid-template-columns:1fr; } }\n.vc-rcard { background:var(--vc-surface); border:1px solid var(--vc-border-light); border-radius:var(--vc-radius); padding:16px; transition:transform 0.2s; }\n.vc-rcard:hover { transform:translateY(-1px); }\n.vc-rcard-primary { border-color:var(--vc-accent); border-width:2px; background:linear-gradient(135deg, #fdf6f2 0%, var(--vc-surface) 100%); grid-column:1 \/ -1; }\n.vc-rcard-label { font-family:var(--vc-mono); font-size:10px; font-weight:500; letter-spacing:0.1em; text-transform:uppercase; color:var(--vc-ink-muted); margin-bottom:4px; }\n.vc-rcard-value { font-family:var(--vc-mono); font-size:22px; font-weight:600; color:var(--vc-ink); line-height:1.2; }\n.vc-rcard-primary .vc-rcard-value { font-size:30px; color:var(--vc-accent); }\n.vc-rcard-unit { font-size:14px; font-weight:400; color:var(--vc-ink-secondary); }\n.vc-rcard-danger .vc-rcard-value { color:var(--vc-red); }\n.vc-rcard-warn .vc-rcard-value { color:#b8860b; }\n\n\/* Projection table *\/\n.vc-proj-table { width:100%; border-collapse:collapse; margin:14px 0; font-size:13px; }\n.vc-proj-table th, .vc-proj-table td { padding:10px 12px; border:1px solid var(--vc-border-light); text-align:center; }\n.vc-proj-table th { background:var(--vc-surface-alt); font-size:11px; font-weight:600; text-transform:uppercase; letter-spacing:0.05em; color:var(--vc-ink-secondary); }\n.vc-proj-table tr:nth-child(even) { background:var(--vc-surface-alt); }\n.vc-proj-warn { color:#b8860b; font-weight:600; }\n.vc-proj-danger { color:var(--vc-red); font-weight:600; }\n\n\/* -- COLLAPSIBLE SECTIONS -- *\/\n.vc-section { margin-top:24px; border:1px solid var(--vc-border); border-radius:var(--vc-radius-lg); background:var(--vc-surface); box-shadow:var(--vc-shadow); overflow:hidden; }\n.vc-section-toggle { width:100%; display:flex; align-items:center; justify-content:space-between; padding:18px 24px; border:none; background:transparent; cursor:pointer; font-family:var(--vc-font); text-align:left; transition:background 0.15s; }\n.vc-section-toggle:hover { background:var(--vc-surface-alt); }\n.vc-section-toggle-text { display:flex; align-items:center; gap:10px; }\n.vc-section-icon { font-size:20px; line-height:1; }\n.vc-section-title { font-family:var(--vc-display); font-size:18px; font-weight:700; color:var(--vc-ink); margin:0; }\n.vc-section-chevron { width:20px; height:20px; color:var(--vc-ink-muted); transition:transform 0.3s; flex-shrink:0; }\n.vc-section.vc-open .vc-section-chevron { transform:rotate(180deg); }\n.vc-section-body { max-height:0; overflow:hidden; transition:max-height 0.4s cubic-bezier(0.4,0,0.2,1); }\n.vc-section.vc-open .vc-section-body { max-height:20000px; }\n.vc-section-inner { padding:0 24px 24px; border-top:1px solid var(--vc-border-light); }\n\n\/* -- THEORY -- *\/\n.vc-theory h3 { font-family:var(--vc-display); font-size:17px; font-weight:700; color:var(--vc-ink); margin:28px 0 10px; }\n.vc-theory h3:first-child { margin-top:20px; }\n.vc-theory p { font-size:14px; color:var(--vc-ink-secondary); margin:0 0 10px; }\n.vc-theory ul, .vc-theory ol { font-size:14px; color:var(--vc-ink-secondary); margin:0 0 12px 18px; padding:0; }\n.vc-theory li { margin-bottom:5px; }\n.vc-formula-box { background:var(--vc-surface-alt); border:2px solid var(--vc-border); border-radius:6px; padding:14px 20px; font-family:var(--vc-mono); font-size:16px; font-weight:500; text-align:center; margin:14px 0; color:var(--vc-ink); overflow-x:auto; }\n.vc-info-box { background:var(--vc-blue-light); border-left:3px solid var(--vc-blue); padding:14px 16px; border-radius:0 6px 6px 0; margin:14px 0; }\n.vc-info-box p { margin:0; font-size:14px; color:var(--vc-ink-secondary); }\n.vc-warning-box { background:var(--vc-yellow-light); border-left:3px solid var(--vc-yellow); padding:14px 16px; border-radius:0 6px 6px 0; margin:14px 0; }\n.vc-example-box { background:var(--vc-surface-alt); border:1px solid var(--vc-border-light); border-radius:6px; padding:16px; margin:14px 0; }\n.vc-example-title { font-family:var(--vc-mono); font-size:13px; font-weight:600; color:var(--vc-accent); margin-bottom:8px; }\n.vc-table { width:100%; border-collapse:collapse; margin:14px 0; font-size:13px; }\n.vc-table th, .vc-table td { padding:10px 12px; border:1px solid var(--vc-border-light); text-align:left; }\n.vc-table th { background:var(--vc-surface-alt); font-size:11px; font-weight:600; text-transform:uppercase; letter-spacing:0.05em; color:var(--vc-ink-secondary); }\n.vc-table tr:nth-child(even) { background:var(--vc-surface-alt); }\n@media(max-width:600px) { .vc-table { font-size:12px; } .vc-table th, .vc-table td { padding:8px; } }\n\n\/* -- FAQ -- *\/\n.vc-faq-list { display:flex; flex-direction:column; gap:8px; margin-top:20px; }\n.vc-faq-item { border:1px solid var(--vc-border-light); border-radius:6px; overflow:hidden; }\n.vc-faq-q { width:100%; display:flex; align-items:center; justify-content:space-between; gap:12px; padding:14px 16px; border:none; background:var(--vc-surface-alt); cursor:pointer; font-family:var(--vc-font); font-size:15px; font-weight:600; color:var(--vc-ink); text-align:left; transition:background 0.15s; }\n.vc-faq-q:hover { background:#ede9e3; }\n.vc-faq-chevron { width:16px; height:16px; color:var(--vc-ink-muted); flex-shrink:0; transition:transform 0.25s; }\n.vc-faq-item.vc-open .vc-faq-chevron { transform:rotate(180deg); }\n.vc-faq-a { max-height:0; overflow:hidden; transition:max-height 0.35s; }\n.vc-faq-item.vc-open .vc-faq-a { max-height:1200px; }\n.vc-faq-a-inner { padding:14px 16px; border-top:1px solid var(--vc-border-light); font-size:14px; color:var(--vc-ink-secondary); }\n.vc-faq-a-inner p { margin:0 0 8px; }\n.vc-faq-a-inner p:last-child { margin-bottom:0; }\n.vc-faq-a-inner ul { margin:4px 0 8px 16px; padding:0; }\n.vc-faq-a-inner li { margin-bottom:3px; }\n\n\/* -- RELATED -- *\/\n.vc-related { display:flex; flex-wrap:wrap; gap:10px; margin-top:16px; }\n.vc-related-link { display:inline-block; padding:8px 16px; font-family:var(--vc-font); font-size:13px; font-weight:600; background:var(--vc-surface-alt); color:var(--vc-ink-secondary); border:1px solid var(--vc-border); border-radius:var(--vc-radius); text-decoration:none; transition:all 0.15s; }\n.vc-related-link:hover { border-color:var(--vc-accent); color:var(--vc-accent); background:var(--vc-accent-light); }\n\n\/* -- PROMO -- *\/\n.vc-promo { margin-top:24px; padding:20px; background:linear-gradient(135deg, var(--vc-accent-light), var(--vc-surface)); border:1px solid var(--vc-border); border-radius:var(--vc-radius-lg); display:flex; align-items:center; gap:16px; }\n.vc-promo-text { flex:1; font-size:14px; color:var(--vc-ink-secondary); }\n.vc-promo-text strong { color:var(--vc-ink); }\n.vc-promo-link { padding:8px 20px; font-size:13px; font-weight:700; color:#fff; background:var(--vc-accent); border-radius:var(--vc-radius); text-decoration:none; white-space:nowrap; transition:background 0.15s; }\n.vc-promo-link:hover { background:var(--vc-accent-hover); }\n\n\/* -- FOOTER -- *\/\n.vc-footer { text-align:center; padding:32px 16px; font-size:13px; color:var(--vc-ink-muted); }\n.vc-footer a { color:var(--vc-accent); text-decoration:none; }\n.vc-footer a:hover { text-decoration:underline; }\n.vc-footer-links { margin-top:8px; font-size:12px; }\n.vc-footer-links a { margin:0 8px; }\n\n\/* -- PRINT -- *\/\n@media print {\n    .vc-section-body { max-height:none!important; }\n    .vc-faq-a { max-height:none!important; }\n    .vc-results { max-height:none!important; padding:24px!important; }\n    .vc-copy-btn, .vc-section-chevron, .vc-faq-chevron, .vc-presets, .vc-promo { display:none!important; }\n}\n<\/style>\n\n<div class=\"vc-calculator\" id=\"vc-remaining-life\">\n\n<!-- Header -->\n<header class=\"vc-header\">\n    <p class=\"vc-header-eyebrow\">Free Engineering Tool #034<\/p>\n    <h1 class=\"vc-header-title\">Remaining Life from Vibration Trend<\/h1>\n    <p class=\"vc-header-subtitle\">Estimate remaining useful life (RUL) based on vibration trending data. Project time to alarm and danger levels using linear, exponential, or power law growth models.<\/p>\n    <div class=\"vc-badges\">\n        <span class=\"vc-badge\">RUL Estimator<\/span>\n        <span class=\"vc-badge\">Predictive Maintenance<\/span>\n        <span class=\"vc-badge\">Trend Analysis<\/span>\n    <\/div>\n<\/header>\n\n<!-- Calculator Card -->\n<div class=\"vc-card\">\n    <form class=\"vc-form\" id=\"vc-form\" autocomplete=\"off\">\n        <div class=\"vc-form-grid\">\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-vbase\">Baseline Vibration V<sub>baseline<\/sub> <span class=\"vc-label-hint\">(mm\/s RMS)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-vbase\" inputmode=\"decimal\" step=\"any\" min=\"0.01\" placeholder=\"e.g. 2.5\" value=\"2.5\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-vcurr\">Current Vibration V<sub>current<\/sub> <span class=\"vc-label-hint\">(mm\/s RMS)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-vcurr\" inputmode=\"decimal\" step=\"any\" min=\"0.01\" placeholder=\"e.g. 4.2\" value=\"4.2\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-elapsed\">Time Since Baseline <span class=\"vc-label-hint\" id=\"vc-time-unit-hint\">(days)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-elapsed\" inputmode=\"decimal\" step=\"any\" min=\"0.1\" placeholder=\"e.g. 90\" value=\"90\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-timeunit\">Time Unit<\/label>\n                <select class=\"vc-select\" id=\"vc-timeunit\">\n                    <option value=\"days\" selected>Days<\/option>\n                    <option value=\"hours\">Hours<\/option>\n                <\/select>\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-valarm\">Alarm Level V<sub>alarm<\/sub> <span class=\"vc-label-hint\">(mm\/s RMS)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-valarm\" inputmode=\"decimal\" step=\"any\" min=\"0.01\" placeholder=\"e.g. 7.1\" value=\"7.1\">\n            <\/div>\n            <div class=\"vc-field\">\n                <label class=\"vc-label\" for=\"vc-vdanger\">Danger Level V<sub>danger<\/sub> <span class=\"vc-label-hint\">(mm\/s RMS)<\/span><\/label>\n                <input class=\"vc-input\" type=\"number\" id=\"vc-vdanger\" inputmode=\"decimal\" step=\"any\" min=\"0.01\" placeholder=\"e.g. 11.2\" value=\"11.2\">\n            <\/div>\n            <div class=\"vc-field vc-field-full\">\n                <label class=\"vc-label\" for=\"vc-model\">Growth Model<\/label>\n                <select class=\"vc-select\" id=\"vc-model\">\n                    <option value=\"linear\">Linear &mdash; V(t) = V_base + rate &times; t<\/option>\n                    <option value=\"exponential\" selected>Exponential &mdash; V(t) = V_base &times; e^(k&times;t)<\/option>\n                    <option value=\"power\">Power Law &mdash; V(t) = V_base &times; (1 + t\/t0)^p<\/option>\n                <\/select>\n            <\/div>\n        <\/div>\n\n        <!-- Presets -->\n        <div class=\"vc-presets\">\n            <div class=\"vc-presets-label\">Quick presets<\/div>\n            <button type=\"button\" class=\"vc-preset-btn\" data-vb=\"2.5\" data-vc=\"4.2\" data-t=\"90\" data-tu=\"days\" data-va=\"7.1\" data-vd=\"11.2\" data-m=\"exponential\">Pump: 2.5&#8594;4.2 in 90d, alarm 7.1<\/button>\n            <button type=\"button\" class=\"vc-preset-btn\" data-vb=\"1.8\" data-vc=\"3.0\" data-t=\"60\" data-tu=\"days\" data-va=\"4.5\" data-vd=\"7.1\" data-m=\"exponential\">Motor: 1.8&#8594;3.0 in 60d, alarm 4.5<\/button>\n            <button type=\"button\" class=\"vc-preset-btn\" data-vb=\"3.5\" data-vc=\"5.0\" data-t=\"30\" data-tu=\"days\" data-va=\"8.5\" data-vd=\"11.2\" data-m=\"linear\">Turbine: 3.5&#8594;5.0 in 30d, alarm 8.5<\/button>\n        <\/div>\n    <\/form>\n\n    <!-- Results -->\n    <div class=\"vc-results\" id=\"vc-results\">\n        <div class=\"vc-results-head\">\n            <h2 class=\"vc-results-title\">Results<\/h2>\n            <button type=\"button\" class=\"vc-copy-btn\" id=\"vc-copy-btn\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\"\/><\/svg>\n                Copy\n            <\/button>\n        <\/div>\n        <div class=\"vc-result-grid\">\n            <div class=\"vc-rcard vc-rcard-primary\">\n                <div class=\"vc-rcard-label\">Remaining Time to Alarm<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-talarm\">&mdash;<\/div>\n            <\/div>\n            <div class=\"vc-rcard vc-rcard-danger\">\n                <div class=\"vc-rcard-label\">Remaining Time to Danger<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-tdanger\">&mdash;<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Growth Rate<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-rate\">&mdash;<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Growth Model<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-model\">&mdash;<\/div>\n            <\/div>\n            <div class=\"vc-rcard\">\n                <div class=\"vc-rcard-label\">Vibration Increase<\/div>\n                <div class=\"vc-rcard-value\" id=\"vc-r-increase\">&mdash;<\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Projection Table -->\n        <h3 style=\"font-family:var(--vc-display);font-size:17px;font-weight:700;margin:0 0 12px;\">Projected Vibration Levels<\/h3>\n        <div id=\"vc-proj-table-wrap\"><\/div>\n\n        <!-- Confidence Note -->\n        <div class=\"vc-warning-box\" style=\"margin-top:14px;\">\n            <p style=\"margin:0;font-size:14px;color:var(--vc-ink-secondary);\"><strong>&#9888;&#65039; Confidence Note:<\/strong> This estimate assumes the current growth pattern continues unchanged. Actual remaining life depends on fault mechanism, operating conditions, load changes, and maintenance actions. Use as guidance for planning &mdash; not as a guarantee. More data points and consistent measurement conditions improve accuracy.<\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Theory & Reference -->\n<div class=\"vc-section vc-open\" id=\"vc-sec-theory\">\n    <button type=\"button\" class=\"vc-section-toggle\" aria-expanded=\"true\">\n        <span class=\"vc-section-toggle-text\">\n            <span class=\"vc-section-icon\">&#128216;<\/span>\n            <span class=\"vc-section-title\">Theory &amp; Formulas<\/span>\n        <\/span>\n        <svg class=\"vc-section-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"vc-section-body\">\n        <div class=\"vc-section-inner vc-theory\">\n            <h3>Linear Growth Model<\/h3>\n            <p>Assumes vibration increases at a constant rate:<\/p>\n            <div class=\"vc-formula-box\" id=\"vc-katex-1\"><\/div>\n            <div class=\"vc-formula-box\" id=\"vc-katex-2\"><\/div>\n            <p>Linear model is appropriate for gradual wear processes like unbalance growth from erosion or buildup.<\/p>\n\n            <h3>Exponential Growth Model<\/h3>\n            <p>Assumes vibration growth rate is proportional to current level (damage accelerates):<\/p>\n            <div class=\"vc-formula-box\" id=\"vc-katex-3\"><\/div>\n            <div class=\"vc-formula-box\" id=\"vc-katex-4\"><\/div>\n            <p>Exponential model best represents bearing degradation and fatigue crack propagation where damage creates more damage.<\/p>\n\n            <h3>Power Law Model<\/h3>\n            <p>Generalized model that can represent both sub-linear and super-linear growth:<\/p>\n            <div class=\"vc-formula-box\" id=\"vc-katex-5\"><\/div>\n            <p>Power law is useful for mixed degradation modes. The exponent p determines growth behavior: p&lt;1 is decelerating, p=1 is linear, p&gt;1 is accelerating.<\/p>\n\n            <h3>Which Model to Choose?<\/h3>\n            <table class=\"vc-table\">\n                <thead><tr><th>Model<\/th><th>Best For<\/th><th>Behavior<\/th><\/tr><\/thead>\n                <tbody>\n                    <tr><td>Linear<\/td><td>Gradual wear, erosion, buildup<\/td><td>Constant rate of change<\/td><\/tr>\n                    <tr><td>Exponential<\/td><td>Bearing damage, crack growth<\/td><td>Accelerating &mdash; most conservative<\/td><\/tr>\n                    <tr><td>Power Law<\/td><td>Mixed\/unknown mechanisms<\/td><td>Flexible &mdash; adapts to data shape<\/td><\/tr>\n                <\/tbody>\n            <\/table>\n\n            <h3>Practical Example<\/h3>\n            <div class=\"vc-example-box\">\n                <div class=\"vc-example-title\">Example &mdash; Pump Bearing Degradation<\/div>\n                <p><strong>Given:<\/strong> V_baseline = 2.5 mm\/s, V_current = 4.2 mm\/s, elapsed = 90 days, alarm = 7.1 mm\/s<\/p>\n                <p><strong>Exponential model:<\/strong><\/p>\n                <p>k = ln(4.2 \/ 2.5) \/ 90 = ln(1.68) \/ 90 = 0.5188 \/ 90 = <strong>0.00577 \/day<\/strong><\/p>\n                <p>Time to alarm: t_alarm = ln(7.1 \/ 2.5) \/ 0.00577 = 1.0438 \/ 0.00577 = <strong>181 days from baseline<\/strong><\/p>\n                <p>Remaining = 181 &#8211; 90 = <strong>91 days<\/strong> from now to alarm level<\/p>\n            <\/div>\n\n            <div class=\"vc-info-box\">\n                <p><strong>P-F Interval:<\/strong> The time between detectable fault initiation (P) and functional failure (F) determines how much warning you get. For rolling element bearings, the P-F interval is typically 1&ndash;9 months depending on speed, load, and lubrication conditions.<\/p>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Related Calculators -->\n<div class=\"vc-section\" id=\"vc-sec-related\">\n    <button type=\"button\" class=\"vc-section-toggle\" aria-expanded=\"false\">\n        <span class=\"vc-section-toggle-text\">\n            <span class=\"vc-section-icon\">&#128279;<\/span>\n            <span class=\"vc-section-title\">Related Calculators<\/span>\n        <\/span>\n        <svg class=\"vc-section-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"vc-section-body\">\n        <div class=\"vc-section-inner\">\n            <div class=\"vc-related\">\n                <a class=\"vc-related-link\" href=\"\/calculators\/vibration-velocity\/\">Vibration Velocity (ISO 10816)<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/vibration-source-identifier\/\">Vibration Source Identifier<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/shaft-vibration-iso7919\/\">Shaft Vibration (ISO 7919)<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/bearing-load\/\">Bearing Life L10<\/a>\n                <a class=\"vc-related-link\" href=\"\/calculators\/bearing-defect-frequencies\/\">Bearing Defect Frequencies<\/a>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- FAQ -->\n<div class=\"vc-section\" id=\"vc-sec-faq\">\n    <button type=\"button\" class=\"vc-section-toggle\" aria-expanded=\"false\">\n        <span class=\"vc-section-toggle-text\">\n            <span class=\"vc-section-icon\">&#10067;<\/span>\n            <span class=\"vc-section-title\">Frequently Asked Questions<\/span>\n        <\/span>\n        <svg class=\"vc-section-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n    <\/button>\n    <div class=\"vc-section-body\">\n        <div class=\"vc-section-inner\">\n            <div class=\"vc-faq-list\" id=\"vc-faq-list\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Promo -->\n<div class=\"vc-promo\">\n    <div class=\"vc-promo-text\">\n        <strong>Vibromera &mdash; Portable Balancing &amp; Vibration Analysis<\/strong><br>\n        Professional vibration monitoring with trending and alarm management. Predict failures before they happen. Used in 50+ countries.\n    <\/div>\n    <a class=\"vc-promo-link\" href=\"https:\/\/vibromera.eu\/\" target=\"_blank\" rel=\"noopener\">Learn More<\/a>\n<\/div>\n\n<!-- Footer -->\n<footer class=\"vc-footer\">\n    <p>&copy; 2024&ndash;2025 <a href=\"https:\/\/vibromera.eu\/\">Vibromera<\/a> &mdash; Engineering Calculators<\/p>\n    <p style=\"font-size:12px;margin-top:4px;\">Predictive maintenance trending tool. Last updated: February 2025<\/p>\n    <div class=\"vc-footer-links\">\n        <a href=\"\/calculators\/engineering-calculators\/\">All Calculators<\/a>\n        <a href=\"https:\/\/vibromera.eu\/contacts\/\">Contact<\/a>\n    <\/div>\n<\/footer>\n\n<\/div>\n\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/katex@0.16.11\/dist\/katex.min.js\"><\/script>\n<script>\n(function() {\n    'use strict';\n\n    var SLUG = 'vibration-trend-remaining-life';\n\n    function $(id) { return document.getElementById(id); }\n    function fmt(n, d) { if(isNaN(n)||!isFinite(n)) return '\\u2014'; var f=n.toFixed(d===undefined?2:d); return f.replace(\/(\\.\\d*?)0+$\/,'$1').replace(\/\\.$\/,''); }\n\n    \/* -- CALCULATION -- *\/\n    function calculate() {\n        var vBase = parseFloat($('vc-vbase').value);\n        var vCurr = parseFloat($('vc-vcurr').value);\n        var tElapsed = parseFloat($('vc-elapsed').value);\n        var vAlarm = parseFloat($('vc-valarm').value);\n        var vDanger = parseFloat($('vc-vdanger').value);\n        var model = $('vc-model').value;\n        var timeUnit = $('vc-timeunit').value;\n        var unitLabel = timeUnit === 'hours' ? 'hours' : 'days';\n\n        if (!vBase || vBase <= 0 || !vCurr || vCurr <= 0 || !tElapsed || tElapsed <= 0 || !vAlarm || vAlarm <= 0) {\n            $('vc-results').classList.remove('vc-visible');\n            return;\n        }\n        if (vCurr <= vBase) {\n            $('vc-results').classList.remove('vc-visible');\n            return;\n        }\n\n        var tAlarmFromBase, tDangerFromBase, rateStr, modelStr;\n        var projFn; \/\/ function to project V at time t from baseline\n\n        if (model === 'linear') {\n            var rate = (vCurr - vBase) \/ tElapsed;\n            tAlarmFromBase = vAlarm > vBase ? (vAlarm - vBase) \/ rate : 0;\n            tDangerFromBase = (vDanger && vDanger > vBase) ? (vDanger - vBase) \/ rate : Infinity;\n            rateStr = '+' + fmt(rate, 4) + ' mm\/s per ' + (timeUnit === 'hours' ? 'hour' : 'day');\n            modelStr = 'Linear';\n            projFn = function(t) { return vBase + rate * t; };\n        } else if (model === 'exponential') {\n            var k = Math.log(vCurr \/ vBase) \/ tElapsed;\n            tAlarmFromBase = vAlarm > vBase ? Math.log(vAlarm \/ vBase) \/ k : 0;\n            tDangerFromBase = (vDanger && vDanger > vBase) ? Math.log(vDanger \/ vBase) \/ k : Infinity;\n            rateStr = 'k = ' + fmt(k, 5) + ' \/' + (timeUnit === 'hours' ? 'hr' : 'day');\n            modelStr = 'Exponential';\n            projFn = function(t) { return vBase * Math.exp(k * t); };\n        } else { \/\/ power law\n            \/\/ V(t) = vBase * (1 + t\/t0)^p, with two unknowns we set p=2 (accelerating) and solve for t0\n            var p = 2;\n            var ratio = vCurr \/ vBase;\n            var t0 = tElapsed \/ (Math.pow(ratio, 1\/p) - 1);\n            tAlarmFromBase = vAlarm > vBase ? t0 * (Math.pow(vAlarm \/ vBase, 1\/p) - 1) : 0;\n            tDangerFromBase = (vDanger && vDanger > vBase) ? t0 * (Math.pow(vDanger \/ vBase, 1\/p) - 1) : Infinity;\n            rateStr = 'p=' + p + ', t\\u2080=' + fmt(t0, 1) + ' ' + unitLabel;\n            modelStr = 'Power Law (p=' + p + ')';\n            projFn = function(t) { return vBase * Math.pow(1 + t \/ t0, p); };\n        }\n\n        var tAlarmRemaining = tAlarmFromBase - tElapsed;\n        var tDangerRemaining = tDangerFromBase - tElapsed;\n        var increase = ((vCurr - vBase) \/ vBase * 100);\n\n        \/\/ Display\n        if (tAlarmRemaining <= 0) {\n            $('vc-r-talarm').innerHTML = '<span style=\"color:var(--vc-red)\">EXCEEDED<\/span> <span class=\"vc-rcard-unit\">(alarm already reached)<\/span>';\n        } else {\n            $('vc-r-talarm').innerHTML = fmt(tAlarmRemaining, 0) + ' <span class=\"vc-rcard-unit\">' + unitLabel + ' remaining<\/span>';\n        }\n\n        if (vDanger && vDanger > 0) {\n            if (tDangerRemaining <= 0) {\n                $('vc-r-tdanger').innerHTML = '<span style=\"color:var(--vc-red)\">EXCEEDED<\/span>';\n            } else if (!isFinite(tDangerRemaining)) {\n                $('vc-r-tdanger').innerHTML = '\\u2014 <span class=\"vc-rcard-unit\">(no danger level set)<\/span>';\n            } else {\n                $('vc-r-tdanger').innerHTML = fmt(tDangerRemaining, 0) + ' <span class=\"vc-rcard-unit\">' + unitLabel + ' remaining<\/span>';\n            }\n        } else {\n            $('vc-r-tdanger').innerHTML = '\\u2014 <span class=\"vc-rcard-unit\">(not set)<\/span>';\n        }\n\n        $('vc-r-rate').innerHTML = rateStr;\n        $('vc-r-model').innerHTML = modelStr;\n        $('vc-r-increase').innerHTML = '+' + fmt(increase, 1) + ' <span class=\"vc-rcard-unit\">% from baseline<\/span>';\n\n        \/\/ Projection table\n        var projDays = timeUnit === 'hours' ? [168, 336, 720, 1440, 2160] : [30, 60, 90, 120, 180];\n        var projLabels = timeUnit === 'hours' ? ['+1 week', '+2 weeks', '+1 month', '+2 months', '+3 months'] : ['+30 days', '+60 days', '+90 days', '+120 days', '+180 days'];\n        var projHTML = '<table class=\"vc-proj-table\"><thead><tr><th>Time from Now<\/th><th>Total Time<\/th><th>Projected V (mm\/s)<\/th><th>Status<\/th><\/tr><\/thead><tbody>';\n        for (var i = 0; i < projDays.length; i++) {\n            var tProj = tElapsed + projDays[i];\n            var vProj = projFn(tProj);\n            var status = '';\n            var statusClass = '';\n            if (vDanger && vProj >= vDanger) { status = 'DANGER'; statusClass = 'vc-proj-danger'; }\n            else if (vProj >= vAlarm) { status = 'ALARM'; statusClass = 'vc-proj-warn'; }\n            else { status = 'OK'; statusClass = ''; }\n            projHTML += '<tr><td>' + projLabels[i] + '<\/td><td>' + fmt(tProj, 0) + ' ' + unitLabel + '<\/td><td class=\"' + statusClass + '\">' + fmt(vProj, 2) + '<\/td><td class=\"' + statusClass + '\">' + status + '<\/td><\/tr>';\n        }\n        projHTML += '<\/tbody><\/table>';\n        $('vc-proj-table-wrap').innerHTML = projHTML;\n\n        $('vc-results').classList.add('vc-visible');\n\n        \/\/ URL params\n        var u = new URL(window.location);\n        u.searchParams.set('vbase', vBase);\n        u.searchParams.set('vcurr', vCurr);\n        u.searchParams.set('elapsed', tElapsed);\n        u.searchParams.set('valarm', vAlarm);\n        if (vDanger) u.searchParams.set('vdanger', vDanger);\n        u.searchParams.set('model', model);\n        u.searchParams.set('timeunit', timeUnit);\n        history.replaceState(null, '', u.toString());\n\n        \/\/ History\n        saveHistory({\n            vBase: vBase, vCurr: vCurr, elapsed: tElapsed, alarm: vAlarm, danger: vDanger, model: model,\n            _summary: fmt(vBase,1) + '\\u2192' + fmt(vCurr,1) + ' mm\/s in ' + tElapsed + ' ' + unitLabel + ', alarm in ' + fmt(tAlarmRemaining, 0) + ' ' + unitLabel\n        });\n    }\n\n    \/* -- TIME UNIT -- *\/\n    $('vc-timeunit').addEventListener('change', function() {\n        $('vc-time-unit-hint').textContent = '(' + this.value + ')';\n        calculate();\n    });\n\n    \/* -- PRESETS -- *\/\n    document.querySelectorAll('.vc-preset-btn').forEach(function(btn) {\n        btn.addEventListener('click', function(e) {\n            e.preventDefault();\n            $('vc-vbase').value = this.getAttribute('data-vb');\n            $('vc-vcurr').value = this.getAttribute('data-vc');\n            $('vc-elapsed').value = this.getAttribute('data-t');\n            $('vc-timeunit').value = this.getAttribute('data-tu');\n            $('vc-valarm').value = this.getAttribute('data-va');\n            $('vc-vdanger').value = this.getAttribute('data-vd');\n            $('vc-model').value = this.getAttribute('data-m');\n            $('vc-time-unit-hint').textContent = '(' + this.getAttribute('data-tu') + ')';\n            calculate();\n        });\n    });\n\n    \/* -- AUTO-CALCULATE -- *\/\n    $('vc-form').addEventListener('input', calculate);\n    $('vc-form').addEventListener('change', calculate);\n\n    \/* -- COPY -- *\/\n    $('vc-copy-btn').addEventListener('click', function() {\n        var text = 'Remaining Life from Vibration Trend\\n' +\n            '\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\n' +\n            'Baseline: ' + $('vc-vbase').value + ' mm\/s\\n' +\n            'Current: ' + $('vc-vcurr').value + ' mm\/s\\n' +\n            'Elapsed: ' + $('vc-elapsed').value + ' ' + $('vc-timeunit').value + '\\n' +\n            'Model: ' + $('vc-r-model').textContent + '\\n' +\n            'Growth rate: ' + $('vc-r-rate').textContent + '\\n' +\n            'Alarm level: ' + $('vc-valarm').value + ' mm\/s\\n' +\n            'Time to alarm: ' + $('vc-r-talarm').textContent + '\\n' +\n            'Time to danger: ' + $('vc-r-tdanger').textContent + '\\n' +\n            '\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\u2501\\n' +\n            'vibromera.eu\/calculators\/vibration-trend-remaining-life\/';\n\n        if (navigator.clipboard) {\n            navigator.clipboard.writeText(text).then(function() {\n                var btn = $('vc-copy-btn');\n                btn.classList.add('vc-copied');\n                btn.innerHTML = '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg> Copied!';\n                setTimeout(function() {\n                    btn.classList.remove('vc-copied');\n                    btn.innerHTML = '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"\/><path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\"\/><\/svg> Copy';\n                }, 2000);\n            });\n        }\n    });\n\n    \/* -- COLLAPSIBLE SECTIONS -- *\/\n    document.querySelectorAll('.vc-section-toggle').forEach(function(btn) {\n        btn.addEventListener('click', function() {\n            var section = this.closest('.vc-section');\n            var isOpen = section.classList.contains('vc-open');\n            section.classList.toggle('vc-open');\n            this.setAttribute('aria-expanded', !isOpen);\n        });\n    });\n\n    \/* -- FAQ -- *\/\n    var faqData = [\n        { q: 'How reliable is vibration trending for predicting remaining life?', a: '<p>Vibration trending provides a reasonable estimate when the fault mechanism produces a consistent growth pattern. Key factors for reliability:<\/p><ul><li>More data points over a longer period improve accuracy<\/li><li>Consistent measurement conditions (same point, direction, load, speed)<\/li><li>Understanding the failure mode helps select the right growth model<\/li><li>Bearing degradation typically follows exponential growth<\/li><li>Gradual wear (erosion, buildup) tends to follow linear growth<\/li><\/ul><p>Treat estimates as planning guidance, not precise predictions. Always err on the side of caution.<\/p>' },\n        { q: 'What is the difference between linear and exponential vibration growth?', a: '<p><strong>Linear growth:<\/strong> Vibration increases at a constant rate (e.g., +0.5 mm\/s per month). The time to reach any level is easy to predict. Common for gradual wear processes.<\/p><p><strong>Exponential growth:<\/strong> The rate of increase accelerates over time. Early stages show slow change; later stages show rapid deterioration. Common for bearing damage and fatigue crack propagation.<\/p><p><strong>Why it matters:<\/strong> Exponential growth is more dangerous because it can appear stable for a long time, then deteriorate rapidly. The \"hockey stick\" curve means the window between detectable change and failure can be short.<\/p>' },\n        { q: 'When should I take action based on vibration trends?', a: '<p>General guidelines based on ISO 20816 \/ ISO 10816 philosophy:<\/p><ul><li><strong>Plan action<\/strong> when vibration reaches Zone B\/C boundary (alarm level) or has increased 50% above baseline<\/li><li><strong>Schedule maintenance<\/strong> when trend projection shows alarm will be reached within the next planned shutdown window<\/li><li><strong>Urgent action<\/strong> when vibration reaches Zone C\/D boundary (danger level) or has doubled from baseline<\/li><li><strong>Immediate shutdown<\/strong> when danger level is exceeded or sudden step change occurs<\/li><\/ul><p>The key principle: schedule corrective action while you still have time to plan, source parts, and execute safely.<\/p>' },\n        { q: 'What affects the accuracy of vibration trend predictions?', a: '<p>Factors that reduce prediction accuracy:<\/p><ul><li><strong>Inconsistent measurement:<\/strong> Different probe positions, mounting methods, or sensor types<\/li><li><strong>Variable operating conditions:<\/strong> Load, speed, or temperature changes between measurements<\/li><li><strong>Step changes:<\/strong> Sudden events (impacts, process upsets) that shift the baseline<\/li><li><strong>Wrong growth model:<\/strong> Using linear when actual growth is exponential, or vice versa<\/li><li><strong>Insufficient data:<\/strong> Fewer than 3\\u20134 data points makes trend fitting unreliable<\/li><li><strong>Multiple fault mechanisms:<\/strong> If more than one fault is developing, the combined trend may not follow a simple model<\/li><\/ul>' },\n        { q: 'How often should vibration measurements be taken for trending?', a: '<p>Recommended measurement intervals based on machine criticality:<\/p><ul><li><strong>Critical machines:<\/strong> Continuous online monitoring (24\/7)<\/li><li><strong>Important machines:<\/strong> Weekly to monthly route-based measurements<\/li><li><strong>General machines:<\/strong> Monthly to quarterly<\/li><\/ul><p><strong>When a trend is rising:<\/strong><\/p><ul><li>Zone A\\u2192B transition: Increase to weekly<\/li><li>Approaching alarm: Increase to daily or install temporary online monitoring<\/li><li>Above alarm: Continuous monitoring until maintenance<\/li><\/ul><p>The measurement interval must be shorter than the P-F interval (time from detectable fault to functional failure) divided by at least 3, to ensure you capture the trend and have time to act.<\/p>' }\n    ];\n\n    var faqList = $('vc-faq-list');\n    faqData.forEach(function(faq) {\n        faqList.innerHTML += '<div class=\"vc-faq-item\"><button type=\"button\" class=\"vc-faq-q\"><span>' + faq.q + '<\/span><svg class=\"vc-faq-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg><\/button><div class=\"vc-faq-a\"><div class=\"vc-faq-a-inner\">' + faq.a + '<\/div><\/div><\/div>';\n    });\n    faqList.addEventListener('click', function(e) {\n        var btn = e.target.closest('.vc-faq-q');\n        if (!btn) return;\n        btn.closest('.vc-faq-item').classList.toggle('vc-open');\n    });\n\n    \/* -- HISTORY -- *\/\n    function saveHistory(entry) {\n        var key = 'vc_history_' + SLUG;\n        var arr = [];\n        try { arr = JSON.parse(localStorage.getItem(key)) || []; } catch(e) {}\n        entry._ts = new Date().toISOString();\n        arr.unshift(entry);\n        if (arr.length > 10) arr = arr.slice(0, 10);\n        try { localStorage.setItem(key, JSON.stringify(arr)); } catch(e) {}\n    }\n\n    \/* -- URL PARAMS -- *\/\n    function loadParams() {\n        var p = new URLSearchParams(window.location.search);\n        if (p.has('vbase')) $('vc-vbase').value = p.get('vbase');\n        if (p.has('vcurr')) $('vc-vcurr').value = p.get('vcurr');\n        if (p.has('elapsed')) $('vc-elapsed').value = p.get('elapsed');\n        if (p.has('valarm')) $('vc-valarm').value = p.get('valarm');\n        if (p.has('vdanger')) $('vc-vdanger').value = p.get('vdanger');\n        if (p.has('model')) $('vc-model').value = p.get('model');\n        if (p.has('timeunit')) {\n            $('vc-timeunit').value = p.get('timeunit');\n            $('vc-time-unit-hint').textContent = '(' + p.get('timeunit') + ')';\n        }\n    }\n\n    \/* -- KATEX -- *\/\n    function renderFormulas() {\n        try {\n            katex.render('V(t) = V_{base} + r \\\\times t, \\\\quad r = \\\\frac{V_{current} - V_{base}}{t_{elapsed}}', $('vc-katex-1'), { displayMode: true, throwOnError: false });\n            katex.render('t_{alarm} = \\\\frac{V_{alarm} - V_{base}}{r}', $('vc-katex-2'), { displayMode: true, throwOnError: false });\n            katex.render('V(t) = V_{base} \\\\times e^{k \\\\cdot t}, \\\\quad k = \\\\frac{\\\\ln(V_{current} \/ V_{base})}{t_{elapsed}}', $('vc-katex-3'), { displayMode: true, throwOnError: false });\n            katex.render('t_{alarm} = \\\\frac{\\\\ln(V_{alarm} \/ V_{base})}{k}', $('vc-katex-4'), { displayMode: true, throwOnError: false });\n            katex.render('V(t) = V_{base} \\\\times \\\\left(1 + \\\\frac{t}{t_0}\\\\right)^p', $('vc-katex-5'), { displayMode: true, throwOnError: false });\n        } catch(e) {}\n    }\n\n    \/* -- INIT -- *\/\n    function init() {\n        loadParams();\n        renderFormulas();\n        calculate();\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', init);\n    } else {\n        init();\n    }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Gratis nettbasert verkt\u00f8y for \u00e5 estimere gjenv\u00e6rende levetid (RUL) fra vibrasjonstrenddata. Bruker line\u00e6re, eksponensielle og potenslovsbaserte vekstmodeller for \u00e5 projisere tid til alarm- og fareniv\u00e5er.<\/p>","protected":false},"featured_media":0,"template":"","meta":{"ai_generated_summary":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-100299","calculator","type-calculator","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vibromera.eu\/nb\/wp-json\/wp\/v2\/calculator\/100299","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vibromera.eu\/nb\/wp-json\/wp\/v2\/calculator"}],"about":[{"href":"https:\/\/vibromera.eu\/nb\/wp-json\/wp\/v2\/types\/calculator"}],"version-history":[{"count":1,"href":"https:\/\/vibromera.eu\/nb\/wp-json\/wp\/v2\/calculator\/100299\/revisions"}],"predecessor-version":[{"id":100607,"href":"https:\/\/vibromera.eu\/nb\/wp-json\/wp\/v2\/calculator\/100299\/revisions\/100607"}],"wp:attachment":[{"href":"https:\/\/vibromera.eu\/nb\/wp-json\/wp\/v2\/media?parent=100299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vibromera.eu\/nb\/wp-json\/wp\/v2\/categories?post=100299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vibromera.eu\/nb\/wp-json\/wp\/v2\/tags?post=100299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}