---
id: flusso-comunicazione
sidebar_position: 5
title: Flusso di Scambio Dati (PLC-HMI-SCADA)
sidebar_label: Flusso di Comunicazione
pagination_prev: null
hide_table_of_contents: true
---

# Flusso di Scambio Dati (PLC-HMI-SCADA)

## Panoramica

Questo documento descrive la logica e la sequenza dinamica di "handshake" utilizzate per la comunicazione tra il PLC, l'interfaccia operatore (HMI) e il sistema di supervisione (SCADA). L'obiettivo è garantire uno scambio dati robusto e a prova di errore per le operazioni critiche come il cambio produzione e il monitoraggio della connessione.

## Processo Principale: Cambio Ricetta/Produzione

Il processo di cambio ricetta è l'interazione più complessa e viene gestito da una macchina a stati (`S60_RecipeManagement`) nel PLC per garantire che ogni passo venga eseguito nella sequenza corretta.

### Sequenza di Scambio Dati

Il "dialogo" tra i tre sistemi segue questi passaggi:

1.  **Abilitazione (HMI):** L'operatore abilita il controllo remoto sull'HMI.
    * `HMI -> PLC`: Imposta `MachineAnalytics.HMI_Interface.RemoteControlEn = TRUE`.

2.  **Richiesta (SCADA):** Lo SCADA invia i dati per la nuova produzione (Indice Ricetta, Codice Lotto, etc.) e imposta il bit di richiesta.
    * `SCADA -> PLC`: Imposta `ScadaInterface.Ingress.ProductionChangeRequest = TRUE`.

3.  **Ack a SCADA (PLC):** Il PLC valida la richiesta. Se è corretta, risponde immediatamente:
    * `PLC -> SCADA`: Invia la conferma di ricezione (`Egress.AckChangeRecipe = TRUE`).

4.  **Completamento Handshake (SCADA):** Lo SCADA, non appena riceve l'Ack, sa che il PLC ha preso in carico la richiesta e **abbassa subito** il suo bit di richiesta.
    * `SCADA -> PLC`: Imposta `Ingress.ProductionChangeRequest = FALSE`.

5.  **Completamento Handshake (PLC):** Il PLC, vedendo che la richiesta è stata abbassata, abbassa a sua volta il suo `AckChangeRecipe`. L'handshake iniziale è concluso e il PLC procede autonomamente.

6.  **Attivazione Pop-up (PLC):** Il PLC attiva il flag per l'apertura del pop-up sull'HMI.
    * `PLC -> HMI`: Imposta `HMI_Interface.AckChangeRecipeToHMI = TRUE`.

7.  **Visualizzazione (HMI):** L'HMI mostra il pop-up di conferma all'operatore con i dati della ricetta richiesta.

8.  **Risposta (Operatore):** L'operatore sceglie una delle opzioni sul pop-up:
    * **ACCETTA:** L'HMI imposta `HMI_Interface.RecipeChangeOk = TRUE`. Il PLC esegue l'azione (carica la ricetta, aggiorna i dati) e invia l'esito positivo allo SCADA (`Egress.RecipeChangeOK = TRUE` per 2 secondi).
    * **RIFIUTA (o preme X):** L'HMI imposta `HMI_Interface.RejectRecipeChange = TRUE` (o `CloseMESWindow`). Il PLC invia l'esito negativo allo SCADA (`Egress.RecipeChangeReject = TRUE` per 2 secondi).
    * **POSTICIPA:** L'HMI imposta `HMI_Interface.BatchChangePopupDismiss = TRUE`. Il PLC invia lo stato di attesa allo SCADA (`Egress.RecipeChangePostpone = TRUE`), avvia un timer (30 secondi) e, alla scadenza, torna al **Passo 6** per far riapparire il pop-up.

---

## Handshake di Base: Watchdog (Heartbeat)

Per garantire che la comunicazione sia sempre attiva, è implementato un meccanismo di "heartbeat" a bit alternato.

-   **Dal PLC allo SCADA:** Il PLC inverte il valore del bit `ScadaInterface.Egress.PlcHeartbeat_Toggle` ogni secondo.
-   **Dallo SCADA al PLC:** Lo SCADA deve leggere `PlcHeartbeat_Toggle` e ricopiarne il valore nel bit `ScadaInterface.Ingress.ScadaHeartbeat_Echo`.
-   **Controllo del PLC:** Se `PlcHeartbeat_Toggle` e `ScadaHeartbeat_Echo` rimangono diversi per più di un tempo di timeout (es. 3 secondi), il PLC imposta a `VERO` il flag `ScadaInterface.Egress.MesCommunicationFault`.