Vai al contenuto

Energia, utilities e offshoreMuvia Industrial

La mareggiata vista dagli ormeggi

Onda, moto della piattaforma e tensione degli ormeggi arrivano al minuto. Una funzione Python calcola ogni mezz'ora l'altezza d'onda significativa e la fatica di ogni linea, così dopo una mareggiata si sa quale ormeggio ha lavorato di più e quanto.

Scenario illustrativo: descrive un caso tipo, non il progetto di un cliente.

Dopo una mareggiata la domanda è una: quanto hanno sofferto gli ormeggi?

Su una piattaforma il registratore di bordo raccoglie onda, moto e tensioni delle linee d'ormeggio, ma i dati restano a bordo o arrivano a terra in file da aprire uno per uno. Dopo una mareggiata, sapere quale linea ha lavorato di più vuol dire giorni di elaborazioni.

In Muvia i segnali arrivano dal nodo edge della piattaforma, e una funzione Python scritta dal vostro team calcola stato del mare e fatica a ogni finestra, con il metodo che il team sceglie. Il resoconto è pronto quando il mare si calma.

Per chi
Ingegneri di integrità strutturale, responsabili delle operazioni offshore e della manutenzione di piattaforme e impianti galleggianti.
Schema: il radar d'onda e l'unità di moto via OPC UA, le celle di carico degli ormeggi via Modbus TCP e il PLC Siemens S7 del compressore mandano i segnali attraverso il nodo edge della piattaforma. Muvia produce stato del mare e fatica ogni 30 minuti, la tensione di ogni linea contro l'onda, il resoconto della mareggiata in un notebook e un allarme sulle tensioni.

In Muvia, passo per passo

Schermate vere del prodotto, registrate su un progetto con dati di esempio.

1 di 5

Il video · Onda, moto della piattaforma e tensione degli ormeggi arrivano al minuto. Una funzione Python calcola ogni mezz'ora l'altezza d'onda significativa e la fatica di ogni linea, così dopo una mareggiata si sa quale ormeggio ha lavorato di più e quanto.

Cosa ottieni

Il resoconto quando il mare si calma
Stato del mare e fatica sono già calcolati finestra per finestra: il resoconto non aspetta l'elaborazione a terra.
La linea che ha lavorato di più
Tensioni e fatica per linea dicono quale ormeggio ispezionare per primo.
Il metodo resta vostro
Curva S-N, soglie e finestre sono parametri della funzione che il vostro team mette a punto.
Ogni evento ha una nota
Fronti, ispezioni e interventi annotati sui segnali spiegano i picchi a chi legge dopo.

Per il team tecnico

Come si costruisce in Muvia

  1. 1

    Collega il registratore di bordo

    Sul nodo edge della piattaforma configuri i driver di radar, unità di moto e celle di carico. Se il collegamento con terra cade, il nodo tiene le letture in un buffer locale e le manda quando torna.

  2. 2

    Pulisci i campioni

    Una query a passi scarta gli echi del radar e le celle di carico senza alimentazione e ordina i campioni nel tempo: la base pulita per i calcoli.

  3. 3

    Calcola stato del mare e fatica

    Una funzione Python calcola ogni 30 minuti l'altezza d'onda significativa, il valore efficace del moto, la tensione massima di ogni linea e il danno a fatica dai cicli di tensione. Un flusso la esegue ogni ora e salva il risultato in una tabella.

  4. 4

    Leggi la mareggiata in Analisi

    La vista XY mette la tensione di ogni linea contro l'altezza d'onda; l'andamento mostra i giorni della mareggiata con le annotazioni del fronte.

  5. 5

    Scrivi il resoconto

    Un notebook raccoglie onda massima, tensioni e fatica cumulata giorno per giorno, e si stampa in PDF per chi decide l'ispezione.

Funzione Python

import numpy as np
import pandas as pd

def ampiezze(x, soglia):
    """Ampiezze dei semicicli tra due inversioni successive della tensione."""
    d = np.diff(x)
    inversioni = x[np.r_[True, d[1:] * d[:-1] < 0, True]]
    a = np.abs(np.diff(inversioni))
    return a[a >= soglia]

def transform(inputs, params, ctx):
    d = inputs["rows"].sort_values("ts")
    d["inizio"] = pd.to_datetime(d["ts"]).dt.floor(f"{params['finestra_minuti']}min")
    righe = []
    for inizio, w in d.groupby("inizio"):
        a = ampiezze(w["tensione_l3_kn"].to_numpy(), params["soglia_ciclo_kn"])
        righe.append({
            "inizio": inizio,
            "hs_m": 4 * w["onda_m"].std(ddof=0),
            "rollio_rms_deg": float(np.sqrt(np.mean(w["rollio_deg"] ** 2))),
            "tensione_max_l3_kn": w["tensione_l3_kn"].max(),
            "danno_l3": 0.5 * float(np.sum(a ** params["esponente_sn"])),
        })
    out = pd.DataFrame(righe)
    out["danno_l3_cumulato"] = out["danno_l3"].cumsum()
    return {"rows": out}
Altezza d'onda significativa, moto, tensione massima e danno a fatica della linea L3 con la regola di Miner, finestra per finestra. Il conteggio dei cicli qui è semplificato: il vostro può essere un rainflow completo.
I dati che servono
  • Elevazione dell'onda dal radar e moto della piattaforma (sollevamento, beccheggio, rollio) via OPC UA
  • Tensione delle quattro linee d'ormeggio dalle celle di carico, via Modbus TCP
  • Vibrazioni del compressore dal suo PLC Siemens S7
  • Fronti, ispezioni e interventi, annotati sui segnali

Dicci quali macchine hai. Ti diciamo come leggerle.

Marca del PLC, protocollo, connettività del reparto: con queste tre risposte, in una demo con un tecnico, ti mostriamo come Muvia Industrial porta i dati di linea accanto a quelli dell'azienda.