Projecte Final

Tema 10 · Aplicació completa – Sistema SCADA Web

Introducció

En aquest projecte integrador aplicaràs totes les eines del trimestre per construir un sistema SCADA web (Supervisory Control And Data Acquisition). Un SCADA permet supervisar i controlar processos industrials des d'una interfície web. Integraràs HTML5, CSS, JavaScript, DOM, Chart.js, APIs i LocalStorage en una sola aplicació.

Objectiu

Simular el funcionament d'un sistema real de monitorització industrial completament funcional al navegador.

Requisits del Projecte

  • Interfície amb HTML5 i CSS Grid/Flexbox responsive
  • Targetes KPI amb indicadors en temps real (simulats amb setInterval)
  • Gràfics interactius amb Chart.js (línies, barres, sectors)
  • Registre d'alarmes amb persistència a LocalStorage
  • Consulta a una API externa (meteorològica, preu elèctric...) per a dades contextuals
  • Càlculs d'enginyeria en JavaScript (consums, rendiments, etc.)
  • Exportació de dades a JSON/CSV

Arquitectura de l'aplicació

ComponentTecnologiesDescripció
Interfície (UI)HTML5, CSS GridDisposició de targetes, gràfics i taules
Lògica de negociJavaScript, DOMSimulació de sensors, càlculs, alarmes
VisualitzacióChart.jsGràfics d'històric i distribució
PersistènciaLocalStorage, JSONRegistre d'alarmes i configuració
Dades externesAPI fetch()Temperatura ambient real o preu de l'energia

Exemple integrador: generació de dades i alarmes

// Simulador de sensors amb generació d'alarmes
class SensorSimulator {
  constructor(nom, unitat, minNormal, maxNormal) {
    this.nom = nom;
    this.unitat = unitat;
    this.minNormal = minNormal;
    this.maxNormal = maxNormal;
    this.valor = (minNormal + maxNormal) / 2;
  }
  actualitzar() {
    // Variació aleatòria controlada
    this.valor += (Math.random() - 0.5) * (this.maxNormal - this.minNormal) * 0.1;
    this.valor = Math.round(this.valor * 100) / 100;
    return this.valor;
  }
  estaForaDeRang() {
    return this.valor < this.minNormal || this.valor > this.maxNormal;
  }
}

// Ús
const sensorTemp = new SensorSimulator('Temperatura', '°C', 15, 28);
setInterval(() => {
  const valor = sensorTemp.actualitzar();
  document.getElementById('kpi-temp').textContent = valor;
  if (sensorTemp.estaForaDeRang()) {
    registrarAlarma(sensorTemp.nom, valor, sensorTemp.unitat);
  }
}, 2000);

Checklist del Projecte Final

HTML5 semàntic i responsive
CSS Grid / Flexbox
Targetes KPI dinàmiques
Gràfics amb Chart.js (≥3)
Registre d'alarmes (LocalStorage)
Consulta API externa
Càlculs d'enginyeria (consums, rendiments)
Exportació de dades (JSON/CSV)

Projecte Final – Sistema SCADA Web per a una planta industrial

Cada alumne desenvoluparà un sistema SCADA per a un tipus de planta diferent:

· Planta solar· Planta eòlica· Central hidroelèctrica · Depuradora d'aigües· Línia d'envasat· Forn industrial · Sistema de climatització· Planta de biogàs· Subestació elèctrica · Fàbrica de ciment· Planta química· Centre de dades · Planta de reciclatge· Xarxa de distribució· Taller automatitzat

L'aplicació ha d'incloure:

  • Dashboard principal amb almenys 4 indicadors KPI i 3 gràfics.
  • Simulació realista de sensors (temperatura, pressió, cabal, potència, nivell... segons el tipus de planta).
  • Sistema d'alarmes amb registre persistent (LocalStorage) i notificació visual.
  • Connexió a una API externa per a dades complementàries (meteorologia, preu elèctric...).
  • Secció de configuració on es puguin ajustar els llindars d'alarma.
  • Exportació de l'històric d'alarmes a un fitxer descarregable.
  • Codi ben comentat i organitzat en funcions reutilitzables.

Lliuraments: fitxer HTML únic autocontingut + breu documentació (README) explicant el funcionament.

Tema 9 Índex Fi del curs