Energy, utilities and offshoreMuvia Industrial
The storm, as the moorings felt it
Waves, platform motion and mooring tensions arrive every minute. A Python function computes the significant wave height and the fatigue of each line every half hour, so after a storm you know which mooring worked hardest, and by how much.
Illustrative scenario: it describes a typical case, not a customer project.
After a storm there is one question: how much did the moorings suffer?
On a platform the on-board recorder collects waves, motion and mooring-line tensions, but the data stays on board or reaches shore as files to be opened one by one. After a storm, finding out which line worked hardest means days of processing.
In Muvia the signals arrive from the platform's edge node, and a Python function your team writes computes sea state and fatigue for every window, with the method your team chooses. The report is ready when the sea calms down.
- Who it's for
- Structural integrity engineers, offshore operations managers and maintenance teams for platforms and floating installations.
In Muvia, step by step
Real product screens, recorded on a project with sample data.
The video · Waves, platform motion and mooring tensions arrive every minute. A Python function computes the significant wave height and the fatigue of each line every half hour, so after a storm you know which mooring worked hardest, and by how much.
What you get
- The report when the sea calms down
- Sea state and fatigue are already computed window by window: the report does not wait for processing on shore.
- The line that worked hardest
- Tension and fatigue per line tell you which mooring to inspect first.
- The method stays yours
- S-N curve, thresholds and windows are parameters of the function your team tunes.
- Every event has a note
- Fronts, inspections and interventions annotated on the signals explain the peaks to whoever reads later.
For the technical team
How it is built in Muvia
- 1
Connect the on-board recorder
On the platform's edge node you configure the drivers for the radar, the motion unit and the load cells. If the link to shore drops, the node keeps the readings in a local buffer and sends them when it comes back.
- 2
Clean the samples
A step query discards radar echoes and unpowered load cells and orders the samples in time: the clean base for the calculations.
- 3
Compute sea state and fatigue
A Python function computes, every 30 minutes, the significant wave height, the RMS of the motion, each line's maximum tension and the fatigue damage from the tension cycles. A flow runs it every hour and saves the result to a table.
- 4
Read the storm in Analysis
The XY view puts each line's tension against wave height; the trend shows the days of the storm with the front's annotations.
- 5
Write the report
A notebook gathers maximum wave, tensions and cumulative fatigue day by day, and prints to PDF for whoever decides on the inspection.
Python function
import numpy as np
import pandas as pd
def ranges(x, threshold):
"""Ranges of the half cycles between two successive reversals of the tension."""
d = np.diff(x)
reversals = x[np.r_[True, d[1:] * d[:-1] < 0, True]]
r = np.abs(np.diff(reversals))
return r[r >= threshold]
def transform(inputs, params, ctx):
d = inputs["rows"].sort_values("ts")
d["start"] = pd.to_datetime(d["ts"]).dt.floor(f"{params['window_minutes']}min")
rows = []
for start, w in d.groupby("start"):
r = ranges(w["tension_l3_kn"].to_numpy(), params["cycle_threshold_kn"])
rows.append({
"start": start,
"hs_m": 4 * w["wave_m"].std(ddof=0),
"roll_rms_deg": float(np.sqrt(np.mean(w["roll_deg"] ** 2))),
"max_tension_l3_kn": w["tension_l3_kn"].max(),
"damage_l3": 0.5 * float(np.sum(r ** params["sn_exponent"])),
})
out = pd.DataFrame(rows)
out["cumulative_damage_l3"] = out["damage_l3"].cumsum()
return {"rows": out}- The data it needs
- Wave elevation from the radar and platform motion (heave, pitch, roll) over OPC UA
- Tension on the four mooring lines from the load cells, over Modbus TCP
- Compressor vibration from its Siemens S7 PLC
- Fronts, inspections and interventions, annotated on the signals
More cases in this line
All use cases- Anomalies and predictive maintenanceVibration, temperature and current read from the PLC become a deviation from normal, a health index and, if you want, a score from a model of your own, in the cloud or on the node next to the machine. When a signal drifts, an alarm goes off and maintenance hears about it.
- Energy use per line and per pieceMeters and power analysers read over Modbus TCP, joined with the pieces produced and the orders in the ERP: how much energy each line, each shift and each piece takes, with an alarm when consumption looks out of the ordinary.
- The pumping station in 3DPump hall, sump, headers and tanks in the 3D model, every machine carrying its asset's name and its signals alongside. You search for a pump by name, see it in the model and read its vibration against the manual's limits, next to that of its twin.
Tell us which machines you run. We'll tell you how to read them.
PLC brand, protocol, how the floor is connected: with those three answers, in a demo with one of our engineers, we show you how Muvia Industrial puts line data next to the rest of the business.