Collegamento dei modelli Siemens S7-1200 / S7-1500 al cloud tramite Eziwan
Questa guida illustra la configurazione completa per collegare un controllore Siemens S7-1200 o S7-1500 alla piattaforma Eziwan. Comprende le configurazioni Modbus TCP (S7-1200 e S7-1500) e OPC-UA (solo S7-1500), le specifiche relative a ciascun modello di CPU e la risoluzione dei problemi più comuni.
Tabella di compatibilità per modello
Siemens S7-1200
| CPU | Firmware min. | Modbus TCP | OPC-UA | Note |
|---|---|---|---|---|
| CPU 1211C AC/DC/Relay | V4.0 | ✓ MB_SERVER | ✗ | 50 KB di programma, limitare a max 50 registri |
| CPU 1211C DC/DC/DC | V4.0 | ✓ | ✗ | — |
| CPU 1212C | V4.0 | ✓ | ✗ | 75 KB di programma |
| CPU 1212FC | V4.0 | ✓ | ✗ | Versione Fail-safe |
| CPU 1214C | V4.0 | ✓ | ✗ | 100 KB, consigliata per la supervisione |
| CPU 1214FC | V4.0 | ✓ | ✗ | Fail-safe |
| CPU 1215C | V4.0 | ✓ | ✗ | 125 KB, 2 porte Ethernet |
| CPU 1217C | V4.0 | ✓ | ✗ | 150 KB, I/O ad alta velocità |
Raccomandazione: per i progetti che richiedono un monitoraggio intensivo (> 50 variabili, polling ogni 1 s), utilizzare una CPU 1214C o superiore. La CPU 1211C, con i suoi 50 KB di memoria di programma, lascia poco spazio per i blocchi funzione MB_SERVER e i dati.
Siemens S7-1500
| CPU | Firmware min. | Modbus TCP | OPC-UA | Note |
|---|---|---|---|---|
| CPU 1511-1 PN | V2.0 | ✓ | ✓ V2.0 | Standard, 1 Mbit di programma |
| CPU 1513-1 PN | V2.0 | ✓ | ✓ | 300 KB di dati |
| CPU 1515-2 PN | V2.0 | ✓ | ✓ | 2 porte Ethernet fisiche |
| CPU 1516-3 PN/DP | V2.0 | ✓ | ✓ | Profibus DP integrato |
| CPU 1517-3 PN/DP | V2.0 | ✓ | ✓ | Alte prestazioni |
| CPU 1518-4 PN/DP | V2.0 | ✓ | ✓ | Top di gamma S7-1500 |
| CPU 1511F-1 PN | V2.0 | ✓ | ✓ | Fail-safe |
| ET 200SP CPU 1510SP | V2.0 | ✓ | ✓ | Compatta, per armadi di piccole dimensioni |
Vantaggio dell'OPC-UA rispetto all'S7-1500: nessun FB nel programma, nessun DB con accesso assoluto. Le variabili vengono pubblicate direttamente tramite lo spazio dei nomi OPC-UA — più semplice da configurare e più affidabile.
Siemens S7-300 e S7-400 (modelli precedenti)
| Modulo | Protocollo | Note |
|---|---|---|
| CPU 31x con CP 343-1 Advanced | Modbus TCP (opzione firmware) | Richiede CP 343-1 IT (6GK7343-1GX31) |
| CPU 41x con CP 443-1 Advanced | Modbus TCP | CP 443-1 IT (6GK7443-1GX30) |
| S7-300 con IM 153-2 | Modbus RTU tramite gateway RS-485 | Tramite porta RS-485 Eziwan |
| Tutti gli S7-300/400 | S7Comm (non sicuro) | Sconsigliato, non supportato da Eziwan |
Il protocollo S7Comm (porta 102) degli S7-300/400 non è supportato da Eziwan per motivi di sicurezza: S7Comm non prevede alcuna autenticazione ed è esposto ad attacchi noti. Utilizzare Modbus TCP tramite CP 343-1 o RS-485 Modbus RTU.
Configurazione Modbus TCP su S7-1200
Requisiti di rete
- Indirizzo IP statico sulla porta X1 della CPU
- Il gateway Eziwan sulla stessa sottorete (o instradamento inter-VLAN se le VLAN sono separate)
- Porta TCP 502 non bloccata tra il gateway e la CPU
Fase 1 — Configurare l'indirizzo IP della CPU in TIA Portal
- Albero del progetto → doppio clic sulla CPU
- Proprietà → scheda "Interfaccia PROFINET [X1]"
- "Indirizzi Ethernet" → disattivare il DHCP, inserire l'IP statico
- Esempio:
192.168.1.10 / 255.255.255.0 - Lasciare vuoto il campo del gateway se non è previsto il routing inter-VLAN
Fase 2 — Creare il Data Block per MB_SERVER
Creare un nuovo Data Block in TIA Portal:
// Parametri del database
Nom : "Eziwan_DB"
Numero: automatico (es. DB10)
Type : Global DB
Accesso ottimizzato: DISATTIVATO ← CRITICO
L'accesso ottimizzato deve essere disattivato. Nelle proprietà del database, deselezionare "Optimized block access". In caso contrario, l'accesso assoluto tramite indirizzo di memoria (necessario per MB_SERVER) non funziona. Questa è la causa principale degli errori durante la prima integrazione.
Struttura del database:
DATA_BLOCK "Eziwan_DB"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR
// Area dei registri di holding (500 parole da 16 bit)
// Accessibile tramite Modbus FC=03, indirizzi da 0 a 499
MB_HOLD_REG : ARRAY [0..499] OF WORD;
// Variables internes (non accessibles en Modbus)
MBStatus : WORD;
MBError : BOOL;
NewData : BOOL;
END_VAR
Fase 3 — Aggiungere MB_SERVER in OB1
// Blocco di connessione TCP (in un FC o direttamente in OB1)
// Tipo: TCON_IP_v4 (istanziare come variabile statica in un FB)
// o come database di connessione statica)
"ConnectDB".InterfaceId := 64; // Porta X1 = sempre 64 sull'S7-1200
"ConnectDB".ID := W#16#0001; // ID di connessione (da 1 a 0xFFF)
"ConnectDB".ConnectionType := 11; // 11 = TCP
"ConnectDB".ActiveEstablished := FALSE; // Server: in attesa di connessione
"ConnectDB".RemoteAddress.ADDR[1] := 0; // Accetta tutti gli indirizzi IP
"ConnectDB".RemoteAddress.ADDR[2] := 0;
"ConnectDB".RemoteAddress.ADDR[3] := 0;
"ConnectDB".RemoteAddress.ADDR[4] := 0;
"ConnectDB".RemotePort := 0; // Port source quelconque
"ConnectDB".LocalPort := 502; // Port Modbus TCP
// Chiamata della funzione MB_SERVER (istanza in un database di istanze)
"MB_SERVER_DB"(
DISCONNECT := FALSE, // TRUE per chiudere la connessione
MB_HOLD_REG := "Eziwan_DB".MB_HOLD_REG,
CONNECT := "ConnectDB",
NDR => "Eziwan_DB".NewData, // TRUE se sono stati ricevuti nuovi dati
DR => #DataReady,
ERROR => "Eziwan_DB".MBError,
STATUS => "Eziwan_DB".MBStatus
);
Fase 4 — Alimentare i registri dal programma
// In OB1 o in un OB ciclico (OB30, OB35...)
// Convenzione raccomandata:
// Registres 0-49 : variables analogiques
// Registri 50-99: contatori e accumulatori
// Registri 100-127: stati e codici di errore (bitfield)
// Valori analogici (×10 per 1 cifra decimale)
"Eziwan_DB".MB_HOLD_REG[0] := REAL_TO_UINT("GVL_Process".Temperature_Four * 10.0);
"Eziwan_DB".MB_HOLD_REG[1] := REAL_TO_UINT("GVL_Process".Debit_Ligne * 100.0);
"Eziwan_DB".MB_HOLD_REG[2] := REAL_TO_UINT("GVL_Process".Pressione * 100,0);
// Float a 32 bit su 2 registri (se la precisione decimale è sufficiente con il fattore ×10 sopra indicato)
// Utilizzare MOVE per copiare i byte
"Eziwan_DB".MB_HOLD_REG[10] := WORD("GVL_Analog".Debit_MSW); // Poids fort
"Eziwan_DB".MB_HOLD_REG[11] := WORD("GVL_Analog".Debit_LSW); // Poids faible
// Bitfield di stati (16 valori booleani in un unico registro)
"Eziwan_DB".MB_HOLD_REG[100] := 0; // Reset
IF "GVL_Status".Pompe_1_Marche THEN "Eziwan_DB".MB_HOLD_REG[100] OR= 16#0001; END_IF;
IF "GVL_Status".Pompe_2_Marche THEN "Eziwan_DB".MB_HOLD_REG[100] OR= 16#0002; END_IF;
IF "GVL_Alarms".Defaut_Thermique THEN "Eziwan_DB".MB_HOLD_REG[100] OR= 16#0004; END_IF;
IF "GVL_Status".Arret_Urgence THEN "Eziwan_DB".MB_HOLD_REG[100] OR= 16#0008; END_IF;
// Contatore di produzione (int32 su 2 registri)
"Eziwan_DB".MB_HOLD_REG[50] := INT_TO_WORD("GVL_Count".Pieces_SHR 16); // MSW
"Eziwan_DB".MB_HOLD_REG[51] := INT_TO_WORD("GVL_Count".Pieces_AND 16#FFFF); // LSW
Configurazione OPC-UA su S7-1500 (consigliata)
Il vantaggio dell'OPC-UA rispetto all'S7-1500: nessun FB nel programma. Le variabili vengono pubblicate direttamente dallo spazio dei nomi OPC-UA senza modificare il codice del PLC.
Attivare OPC-UA in TIA Portal V16+
- Proprietà CPU → "OPC UA" → "Server" → selezionare "Attiva server OPC UA"
- Porta: 4840 (standard OPC-UA, oppure 48010/48020 a seconda dei vincoli di rete)
- Sicurezza: selezionare "Basic256Sha256 - Sign & Encrypt" (livello SL2+ consigliato)
- Autenticazione: attivare "Nome utente/Password" o "Certificato" (disattivare "Anonimo")
Configurare le variabili esposte
In TIA Portal, creare degli OPC UA Access Points:
- Nel blocco dati o nei tag PLC → selezionare le variabili da esporre
- Clic destro → "Properties" → attivare "Accessible from HMI/OPC UA"
- Le variabili vengono visualizzate nello spazio di indirizzamento OPC UA sotto
ns=3;s=<NomVariable>
Configurazione in Eziwan per OPC-UA
Nella dashboard, creare l'apparecchiatura S7-1500 con protocollo OPC-UA:
equipement:
protocole: opc_ua
endpoint: "opc.tcp://192.168.1.10:4840"
securite: "Basic256Sha256"
authentification: "username"
identifiant: "eziwan"
mot_de_passe: "votre-mot-de-passe"
Test di connessione Modbus TCP
Test rapido in Python
from pymodbus.client import ModbusTcpClient
# Test S7-1200 avec MB_SERVER
client = ModbusTcpClient("192.168.1.10", port=502, timeout=3)
if client.connect():
# ID unità = 1 per S7-1200 con MB_SERVER
result = client.read_holding_registers(address=0, count=10, slave=1)
if not result.isError():
print(f"✓ Connexion OK. Registres 0-9 : {result.registers}")
else:
print(f"✗ Erreur Modbus : exception_code={getattr(result, 'exception_code', '?')}")
else:
print("✗ Connessione TCP impossibile — verificare l'IP e che il programma S7 sia in esecuzione")
client.close()
Verifica dello stato di MB_SERVER
In TIA Portal, monitorare le variabili di stato del database:
"Eziwan_DB".MBStatus = ?
Valeur Signification
0x0000 Nessuna connessione stabilita (in attesa)
0x7002 Connessione stabilita, in attesa di richiesta
0x7003 Richiesta in elaborazione
0x8XYZ Erreur (voir tableau codes erreur TIA Portal)
Risoluzione dei problemi
| Sintomo | Causa probabile | Soluzione |
|---|---|---|
| Connessione TCP rifiutata | Programma non caricato o CPU in modalità STOP | Impostare la CPU in modalità RUN, verificare che OB1 sia in esecuzione |
| MB_STATUS 0x8090 | Accesso ottimizzato al database attivato | Disattivare S7_Optimized_Access |
| Eccezione Modbus 01 | FB MB_SERVER non chiamato nel programma | Verificare che MB_SERVER sia presente in OB1 |
| Eccezione Modbus 02 | Indirizzo > dimensione dell'array MB_HOLD_REG | Aumentare la dimensione dell'array o verificare l'indirizzo |
| Tutti i valori a 0 | Variabili di processo non copiate in MB_HOLD_REG | Verificare la sezione di copia in OB1 |
| MB_STATUS 0x80C3 | ID di connessione già utilizzato | Modificare l’ID di connessione in TCON_IP_v4 |
| Valori REAL errati | Ordine dei byte errato | Provare float32_abcd anziché float32_cdab in Eziwan |
| Disconnessione casuale | Timeout impostato troppo breve | Aumentare il timeout nelle impostazioni di connessione |
| OPC-UA: certificato rifiutato | Certificato Eziwan non approvato | Approvare il certificato in TIA Portal > Server > Trusted Clients |
- Come collegare un S7 da remoto senza aprire porte — architettura VPN e sicurezza
- Guida Modbus TCP/IP — struttura del frame e codice Python
- Assistenza tecnica → — risposta entro 4 ore lavorative
Domande frequenti
Qual è la differenza tra S7-1200 e S7-1500 per quanto riguarda la connessione al cloud?
Entrambi supportano Modbus TCP e OPC-UA (server OPC-UA nativo su S7-1500, licenza runtime su S7-1200 a seconda del firmware). L'S7-1500 offre un numero maggiore di nodi OPC-UA simultanei; per un semplice invio di dati, Modbus TCP è sufficiente su entrambi i modelli.
È necessario attivare PUT/GET in TIA Portal?
Solo per le comunicazioni S7 native. Per Modbus TCP tramite i blocchi MB_SERVER o per OPC-UA, PUT/GET non è necessario — ed è anzi preferibile per motivi di sicurezza.
Modbus TCP o OPC-UA: quale scegliere con un S7?
Modbus TCP è più semplice da implementare (mappatura dal database ai registri); OPC-UA offre tipizzazione, struttura e sicurezza tramite certificati. Per un nuovo progetto su S7-1500, si consiglia OPC-UA; per un retrofit rapido, Modbus TCP.
È possibile accedere a TIA Portal da remoto?
Sì, attraverso il tunnel VPN del gateway: la postazione di ingegneria si collega alla rete del dispositivo e TIA Portal funziona come se fosse in locale (online, diagnostica, caricamento), senza esporre il PLC su Internet.
Risorse correlate
- Accesso remoto al PLC Siemens S7 — TIA Portal remoto e sicuro
- Collegare un S7 al cloud — la guida passo passo
- Integrazione OPC-UA — configurazione dettagliata server/client
- OPC UA verso il cloud industriale — la soluzione di acquisizione dati OPC-UA
- Collegare un PLC al cloud — tutte le marche supportate