Files
mht-siemens/solution/client
2026-06-24 12:59:37 +02:00
..
2026-06-24 09:15:16 +02:00
2026-06-24 09:15:16 +02:00

Siemens PLC Client (Python)

Questo progetto fornisce un client Python per la lettura di dati da un PLC Siemens S7 (es. S7-300/400/1500) utilizzando la libreria snap7. Include una dashboard visuale in linea di comando che mostra lo stato del sistema, i parametri di configurazione, le stringhe identificative e un grafico a barre dinamico dei dati di processo.

Funzionalità

  • Lettura DB100: Estrazione di parametri di configurazione, bit di stato e stringhe.
  • Lettura DB101: Acquisizione di un array di 40 valori REAL.
  • Dashboard Dinamica: Visualizzazione in tempo reale con colori (Verde/Rosso) e grafico a barre in ASCII.
  • Campionamento Adattivo: Passa automaticamente a 25ms in modalità "Acquisizione" e a 1s in modalità "Attesa".

Requisiti di Sistema

  • Python 3.8+
  • snap7 library: È necessaria la libreria nativa snap7.
    • Windows: Scarica snap7.dll e mettilo nella cartella del progetto o in PATH.
    • Linux: Installa tramite sudo apt-get install libsnap7-dev.

Installazione

Questo progetto utilizza uv per la gestione dell'ambiente virtuale e delle dipendenze.

  1. Installazione di uv (se non presente): Segui le istruzioni su astral.sh/uv

  2. Setup dell'ambiente: Esegui i seguenti comandi nella cartella del progetto:

    uv venv
    uv pip install python-snap7
    

Struttura Memoria PLC (Mapping)

Il client è configurato per leggere le seguenti aree di memoria:

Configurazione Attuale

Di seguito la mappa aggiornata delle DB impiegate: DB900, DB901, DB920

DB900 (Dati di Processo) - 16kb

Indirizzo Tipo Dati Descrizione
DBD0-4 1 DINT Numero di misure registrate nella DB (dimensione dell'array seguente di misure DINT)
DBD4-16387 4096 DINT Array variabile fino a 4096 valori DINT (dimensione effettiva definita nel DBD0) - misure espresse in micron

NB: probabilmente va letto il primo valore per determinare dimensione e successivamente letto per blocchi il set di misure completo.

DB901 (Configurazione e Stato) - 38 Byte

Indirizzo Tipo Dati Descrizione
DBD0 Bit Bit 0: Stato Ready | Bit 1: Acquisizione (1=ON) | Bit 2: Fine Acquisizione | Bit 3: Dati Pronti su DB900
DBD1 Bit ACK WRITE (da scrivere al PLC) per indicare lettura bit della cella precedente (stessa struttura interna)
DBD2 Word Sensore in uso: 1=Sensore SP1, 2=Sensore SP2, 3=Sensori SP1+SP2, 4=Sensori SP2-SP1
DBD4 Word Tipo di misura: 0=Rettilinietà 1=Rotondità
DBD6 REAL Freccia Bombatura: 0=Cilindro, >0=Bombatura Convessa, <0=Bombatura Concava
DBD10 Word Numero di misure di rotondità richieste
DBD12 Word Numero di misura attuale di rotondità
DBD14 REAL Lunghezza Pezzo totale
DBD18 REAL Lunghezza Misura pezzo
DBD22 DINT Valore Attuale Misura (real time) in Micron
DBD26 REAL Posizione longitudinale della misura Asse Z (real time)
DBD30 DINT Numero totale di punti misurati
DBD34 DINT Numero Pointer ultimo punto misurato

DB920 Gestione Certificato - 186 Byte

Indirizzo Tipo Dati Descrizione
DBD0 String(30) Nome Cliente
DBD32 String(30) Articolo Codice Pezzo
DBD64 String(30) Matricola Pezzo
DBD96 String(30) Nome Operatore
DBD128 String(30) Nome Supervisore
DBD160 DINT Codice Produzione PEP
DBD164 DINT Numero di Certificato
DBD168 DINT Massima Tolleranza Rettilinietà (micron)
DBD172 DINT Massima Tolleranza Rotondità (micron)
DBD176 DINT Errore Riscontrato di Rettilinietà (micron, max)
DBD180 DINT Errore Riscontrato di Rotondità (micron, max)
DBD184 Bit Bit 0: Attivazione Pagina Certificato (1=ON) | Bit 1: Richiesta salvataggio certificato (1=ON)
DBD185 Bit WRITE ACK (risposta a PLC per completamento azioni) Bit 0: Conferma Salvataggio Certificato Richiesta (1=ON)

Da valutare gestione in 2 blocchi, quello iniziale delle string e poi il resto di tipo misto

Versione Originale

DB100 (Configurazione e Stato) - 192 Byte

Indirizzo Tipo Dati Descrizione
DBD0 Bit Bit 0: Stato Acquisizione (1=ON) | Bit 8: Pronti (1=ON)
DBD4-44 REAL Parametri configurazione (Iniziale, Finale, Limiti, Tipo, etc.)
DBD56 REAL Valore LIVE X
DBD60 REAL Valore LIVE Y
DBD64 String(30) Commessa
DBD96 String(30) Articolo
DBD128 String(30) IdControllo
DBD160 String(30) Altro

DB101 (Dati di Processo) - 160 Byte

Indirizzo Tipo Dati Descrizione
DBD0-159 40 REAL Array di 40 valori REAL (Processo dinamico)

Utilizzo

Per avviare il client:

uv run python plc_client.py

Configurazione

Modifica le variabili all'inizio di plc_client.py:

  • PLC_IP: L'indirizzo IP del PLC.
  • RACK: Numero di rack (solitamente 0).
  • SLOT: Numero di slot (solitamente 1 per S7-300, potrebbe variare per S7-1500).