Skip to content

Repository files navigation

🏭 TP2 - Maintenance Connectée - Zone 3

Projet de supervision industrielle pour la Mini-Usine (Zone 3)

Auteurs : MORON Axel & RAHARINJATOVO Lucien (Groupe Z4) Client : M. Olivier BOUZY (UniLaSalle Amiens)


📋 Contexte & Objectifs

Ce projet met en œuvre une application de supervision temps réel liée à un capteur de température sans fil (Banner QM42VT1 + passerelle DX80N2Q45VT) pour détecter un échauffement anormal dans la Zone 3 de la Mini-Usine.

Fonctionnalités réalisées

  1. Lecture Modbus TCP depuis l'automate M580 (172.16.1.24) :

    • Température sur %MF706 (float 32 bits, 2 registres holding FC03).
    • Cycle auto Zone 3 sur %M704 (coil FC01 — false = ARRÊTÉ, true = LANCÉ).
  2. Historisation en base de données MariaDB (schéma relationnel) :

    • Table capteurs : référentiel des capteurs (température, cycle auto).
    • Table mesures : toutes les valeurs lues, liées à leur capteur (id_capteur FK).
    • Table seuil : historique de chaque modification des 4 seuils, liée au capteur température.
    • Table alarmes : journal de tous les déclenchements et disparitions d'alarmes.
    • Export CSV de traçabilité (seuils.csv, alarmes.csv).
  3. Interface Web temps réel (http://localhost:6777) :

    • Affichage numérique et courbe de température (Chart.js).
    • État du cycle automatique Zone 3.
    • Colonne lumineuse virtuelle (rouge/orange/vert).
    • Configuration dynamique des 4 seuils (Très Haut, Haut, Bas, Très Bas).
    • Journal des alarmes : 20 par page, pagination, suppression individuelle.
  4. Alarmes Process (4 niveaux) :

    • > Seuil très haut → Voyant rouge clignotant (%M702)
    • > Seuil haut → Voyant rouge fixe (%M702)
    • Plage normale → Voyant orange fixe (%M701)
    • < Seuil bas → Voyant vert fixe (%M703)
    • < Seuil très bas → Voyant vert clignotant (%M703)
  5. Maintenance Prédictive :

    • Estimation du temps avant franchissement d'un seuil critique ou de sortie d'alarme.
    • Méthode : Régression linéaire (moindres carrés) calculée sur l'historique récent.
    • Voir la section détaillée Méthode de maintenance prédictive ci-dessous.

📈 Méthode de maintenance prédictive — Régression linéaire

Le service predictiveService.js utilise la méthode des moindres carrés (régression linéaire simple) pour estimer l'évolution future de la température.

1. Collecte des données

À chaque cycle de lecture (toutes les 3 secondes par défaut), la mesure est ajoutée à un buffer circulaire des 10 dernières valeurs : [ (t₀, T₀), (t₁, T₁), ..., (t₉, T₉) ] (temps en secondes, température en °C)

2. Calcul de la pente (dérivée)

Sur ces N points, on calcule la droite de régression T = a·t + ba est la pente (°C/seconde). La formule des moindres carrés :

        N·Σ(tᵢ·Tᵢ) − Σtᵢ · ΣTᵢ
a = ─────────────────────────────────
         N·Σ(tᵢ²) − (Σtᵢ)²

Les temps sont normalisés (relatifs au premier point du buffer) pour éviter les grands nombres flottants. La pente a est exprimée en °C/seconde, affichée en °C/min dans l'interface.

3. Estimation du temps avant franchissement

Une fois la pente connue, on calcule le temps restant avant d'atteindre un seuil avec une simple règle de trois :

           seuil_cible − T_actuelle
t_restant = ─────────────────────────
                      a

Exemple : température à 28°C, pente = +0.05°C/s, seuil très haut = 30°C → t = (30−28) / 0.05 = 40 secondes

4. Logique de décision (zones)

Zone Condition Pente Message affiché
Déjà au-dessus de TH T > tres_haut + ⚠️ Seuil très haut dépassé — en hausse
Déjà au-dessus de TH T > tres_haut - Retour sous TH dans X sec
Entre H et TH haut < T ≤ tres_haut + Risque d'atteinte TH dans X sec
Entre H et TH haut < T ≤ tres_haut - Sortie du seuil haut dans X sec
Entre TB et B tres_bas ≤ T < bas - Risque d'atteinte TB dans X sec
Déjà en-dessous de TB T < tres_bas - ⚠️ Seuil très bas dépassé — en baisse
Zone normale bas ≤ T ≤ haut Température stable

ℹ️ La prédiction n'est active que si le cycle auto est lancé (inutile de prédire si la machine est arrêtée).

Limites de la méthode

  • Fiable sur des tendances courtes et linéaires (montée en température progressive).
  • Moins précise si la température oscille ou change brutalement de direction.
  • Nécessite au minimum 3 points avant de produire un résultat (les premières secondes affichent "Calcul en cours...").
  • Une pente inférieure à 0.001°C/s est considérée comme nulle (température stable) pour éviter les faux positifs.

  1. Connexion Power BI :
    • Connecteur MySQL sur localhost:6778, base tp2_maintenance_z4.
    • Tables importables : capteurs, mesures, seuil, alarmes.
    • Relations : mesures[id_capteur]capteurs[id], seuil[id_capteur]capteurs[id].

🛠️ Architecture Technique

Couche Technologie
Backend Node.js 18 + Express
ORM Sequelize 6 (driver mysql2)
Base de données MariaDB 10.6 (conteneur Docker)
Protocole industriel Modbus TCP (modbus-serial)
Frontend HTML5 / CSS3 / JavaScript Vanilla + Chart.js
Conteneurisation Docker + Docker Compose

🚀 Lancement avec Docker (méthode recommandée)

Prérequis : Docker Desktop installé et démarré.

# Premier lancement (ou après modification du code)
docker compose down -v
docker compose build --no-cache
docker compose up

# Relance normale (sans changement de code)
docker compose up

Accès :

⚠️ Le -v au premier lancement supprime l'ancien volume pour recréer les tables proprement à partir de init.sql.


⚙️ Configuration Modbus (automate M580)

Description Type Adresse Remarque
IP de l'automate TCP 172.16.1.24:502 Réseau WiFi API
Température Holding Register FC03 %MF706 (MW706+MW707) Float 32 bits, Little Endian Word Swap
Cycle Auto Zone 3 Coil FC01 %M704 0 = ARRÊTÉ, 1 = LANCÉ
Voyant Rouge Coil FC05 %M702 Clignotant = très haut, fixe = haut
Voyant Orange Coil FC05 %M701 Fixe = plage normale
Voyant Vert Coil FC05 %M703 Clignotant = très bas, fixe = bas
Heartbeat Coil FC05 %M700 Bascule 1 Hz — signale la présence de la supervision

🗄️ Schéma de la base de données

capteurs (id, designation)
    │                  │
    ▼                  ▼
mesures              seuil
(id,                 (id,
 valeur,              tres_haut, haut,
 id_capteur FK,       bas, tres_bas,
 temps)               id_capteur FK,
                      temps)

alarmes  [indépendante]
(id, type_evenement, niveau, message, temperature, timestamp)

Capteurs seedés au démarrage :

  • id=1 → Température Zone 3
  • id=2 → Cycle Auto Zone 3

📂 Organisation du code

tp2-moron-axel/
├── backend/
│   ├── config/
│   │   └── db.js               # Connexion Sequelize (mysql2)
│   ├── models/
│   │   ├── Capteur.js           # Table capteurs
│   │   ├── Mesure.js            # Table mesures (FK → capteurs)
│   │   ├── Seuil.js             # Table seuil   (FK → capteurs)
│   │   └── Alarme.js            # Table alarmes
│   ├── routes/
│   │   └── api.js               # Endpoints REST (GET, POST, DELETE)
│   ├── services/
│   │   ├── modbusService.js     # Lecture/écriture Modbus TCP
│   │   ├── scheduler.js         # Cycle de lecture périodique (cron)
│   │   ├── alarmService.js      # Évaluation des alarmes
│   │   ├── predictiveService.js # Régression linéaire prédictive
│   │   └── csvService.js        # Export CSV traçabilité
│   ├── Dockerfile
│   ├── server.js                # Point d'entrée Express
│   └── package.json
├── frontend/
│   ├── index.html               # Dashboard web complet
│   └── style.css
├── init.sql                     # Initialisation BDD au premier démarrage
├── docker-compose.yml           # Orchestration des conteneurs
├── .env                         # Variables d'environnement (ne pas commiter)
├── .env.example                 # Template des variables
└── README.md

🔌 Variables d'environnement (.env)

Variable Valeur par défaut Description
PORT 3000 Port interne du serveur Node.js
DB_HOST db Hôte MariaDB (nom du service Docker)
DB_PORT 3306 Port interne MariaDB
DB_USER root Utilisateur MariaDB
DB_PASSWORD root Mot de passe MariaDB
DB_NAME tp2_maintenance_z4 Nom de la base de données
MODBUS_IP 172.16.1.24 IP de l'automate M580
MODBUS_PORT 502 Port Modbus TCP
REGISTRE_TEMPERATURE 706 Registre holding %MF706
REGISTRE_CYCLE_AUTO 704 Coil %M704
FREQUENCE_LECTURE 3 Fréquence de lecture en secondes

About

interface web pour lecture d'un registre de température et ecriture vers PLC

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages