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​

CPUFirmware min.Modbus TCPOPC-UANote
CPU 1211C AC/DC/RelayV4.0✓ MB_SERVER✗50 KB di programma, limitare a max 50 registri
CPU 1211C DC/DC/DCV4.0✓✗—
CPU 1212CV4.0✓✗75 KB di programma
CPU 1212FCV4.0✓✗Versione Fail-safe
CPU 1214CV4.0✓✗100 KB, consigliata per la supervisione
CPU 1214FCV4.0✓✗Fail-safe
CPU 1215CV4.0✓✗125 KB, 2 porte Ethernet
CPU 1217CV4.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​

CPUFirmware min.Modbus TCPOPC-UANote
CPU 1511-1 PNV2.0✓✓ V2.0Standard, 1 Mbit di programma
CPU 1513-1 PNV2.0✓✓300 KB di dati
CPU 1515-2 PNV2.0✓✓2 porte Ethernet fisiche
CPU 1516-3 PN/DPV2.0✓✓Profibus DP integrato
CPU 1517-3 PN/DPV2.0✓✓Alte prestazioni
CPU 1518-4 PN/DPV2.0✓✓Top di gamma S7-1500
CPU 1511F-1 PNV2.0✓✓Fail-safe
ET 200SP CPU 1510SPV2.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)​

ModuloProtocolloNote
CPU 31x con CP 343-1 AdvancedModbus TCP (opzione firmware)Richiede CP 343-1 IT (6GK7343-1GX31)
CPU 41x con CP 443-1 AdvancedModbus TCPCP 443-1 IT (6GK7443-1GX30)
S7-300 con IM 153-2Modbus RTU tramite gateway RS-485Tramite porta RS-485 Eziwan
Tutti gli S7-300/400S7Comm (non sicuro)Sconsigliato, non supportato da Eziwan
warning

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​

  1. Albero del progetto → doppio clic sulla CPU
  2. Proprietà → scheda "Interfaccia PROFINET [X1]"
  3. "Indirizzi Ethernet" → disattivare il DHCP, inserire l'IP statico
  4. Esempio: 192.168.1.10 / 255.255.255.0
  5. 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
warning

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+​

  1. Proprietà CPU → "OPC UA" → "Server" → selezionare "Attiva server OPC UA"
  2. Porta: 4840 (standard OPC-UA, oppure 48010/48020 a seconda dei vincoli di rete)
  3. Sicurezza: selezionare "Basic256Sha256 - Sign & Encrypt" (livello SL2+ consigliato)
  4. Autenticazione: attivare "Nome utente/Password" o "Certificato" (disattivare "Anonimo")

Configurare le variabili esposte​

In TIA Portal, creare degli OPC UA Access Points:

  1. Nel blocco dati o nei tag PLC → selezionare le variabili da esporre
  2. Clic destro → "Properties" → attivare "Accessible from HMI/OPC UA"
  3. 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​

SintomoCausa probabileSoluzione
Connessione TCP rifiutataProgramma non caricato o CPU in modalità STOPImpostare la CPU in modalità RUN, verificare che OB1 sia in esecuzione
MB_STATUS 0x8090Accesso ottimizzato al database attivatoDisattivare S7_Optimized_Access
Eccezione Modbus 01FB MB_SERVER non chiamato nel programmaVerificare che MB_SERVER sia presente in OB1
Eccezione Modbus 02Indirizzo > dimensione dell'array MB_HOLD_REGAumentare la dimensione dell'array o verificare l'indirizzo
Tutti i valori a 0Variabili di processo non copiate in MB_HOLD_REGVerificare la sezione di copia in OB1
MB_STATUS 0x80C3ID di connessione già utilizzatoModificare l’ID di connessione in TCON_IP_v4
Valori REAL erratiOrdine dei byte erratoProvare float32_abcd anziché float32_cdab in Eziwan
Disconnessione casualeTimeout impostato troppo breveAumentare il timeout nelle impostazioni di connessione
OPC-UA: certificato rifiutatoCertificato Eziwan non approvatoApprovare il certificato in TIA Portal > Server > Trusted Clients

👉 Risorse aggiuntive

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​