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_SERVER50 KB di programma, limitare a max 50 registri
CPU 1211C DC/DC/DCV4.0
CPU 1212CV4.075 KB di programma
CPU 1212FCV4.0Versione Fail-safe
CPU 1214CV4.0100 KB, consigliata per la supervisione
CPU 1214FCV4.0Fail-safe
CPU 1215CV4.0125 KB, 2 porte Ethernet
CPU 1217CV4.0150 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.0300 KB di dati
CPU 1515-2 PNV2.02 porte Ethernet fisiche
CPU 1516-3 PN/DPV2.0Profibus DP integrato
CPU 1517-3 PN/DPV2.0Alte prestazioni
CPU 1518-4 PN/DPV2.0Top di gamma S7-1500
CPU 1511F-1 PNV2.0Fail-safe
ET 200SP CPU 1510SPV2.0Compatta, 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