Per ripristinare la comunicazione Modbus RTU gestita da un modulo CM PtP su ET200SP decentrato dopo un’interruzione della rete PROFINET, è necessario azzerare manualmente la variabile MB_State presente nel DB di istanza di Modbus_Master (o MB_MASTER). Quando il collegamento PROFINET cade, il blocco di comunicazione interno rimane bloccato in uno stato di errore non gestito autonomamente. Il ripristino automatico si ottiene intercettando l'evento di ritorno della stazione PROFINET tramite l'OB di interruzione di guasto di periferia (OB86) e resettando MB_State = 0.
Indice
- Causa tecnica: blocco dello stato di comunicazione in Modbus_Master
- Prerequisiti
- Metodo 1: Reset automatico di MB_State tramite OB86
- Metodo 2: Re-inizializzazione mediante blocco MB_COMM_LOAD e aggiornamento del campione
- Verifica
- Limitazioni e precauzioni operative
- Domande frequenti per ingegneri
- Articoli correlati
- Tags correlate
Causa tecnica: blocco dello stato di comunicazione in Modbus_Master
Quando un PLC Siemens SIMATIC S7-1500 comunica con dispositivi Modbus RTU mediante un modulo di comunicazione CM PtP (6ES7 137-6AA00-0BA0) installato su un'interfaccia di periferia decentrata ET200SP (6ES7 155-6AU00-0BN0), lo scambio dati avviene attraverso la rete PROFINET IO.
Se il cavo PROFINET viene scollegato o si verifica una perdita temporanea della rete tra l'S7-1500 e l'ET200SP:
- L'istruzione
Modbus_Master(FB641) interrompe l'esecuzione della sequenza di lettura/scrittura Modbus. - La variabile interna
MB_Stateall'interno del DB di istanza diModbus_Masterrimane bloccata su uno stato di errore attivo generato dalla disconnessione della periferia. - Al ripristino della connessione fisica PROFINET, l'istruzione
Modbus_Masternon tenta autonomamente una nuova inizializzazione e rifiuta la lavorazione di nuove richieste, ignorando i fronti di salita sul parametroREQ. - Il semplice riciclo del segnale di esecuzione di
MB_COMM_LOAD(FB640) non cancella lo stato interno bloccato dell'istruzione Master, rendendo necessario un riavvio STOP/RUN della CPU in assenza di un intervento da programma.
Prerequisiti
Per applicare le procedure di ripristino è necessario disporre di:
- Hardware: PLC SIMATIC S7-1500 (es. CPU 1511-1 PN 6ES7 511-1AK00-0AB0) collegato via PROFINET a una stazione ET200SP (6ES7 155-6AU00-0BN0) con modulo CM PtP (6ES7 137-6AA00-0BA0).
- Software: TIA Portal con supporto alle istruzioni
MB_COMM_LOADeMB_MASTER/Modbus_Master. - Accesso al progetto: Licenza di ingegneria TIA Portal e autorizzazione al caricamento di blocchi di programma (OB, FB, DB) nella CPU.
Metodo 1: Reset automatico di MB_State tramite OB86
Se usa migliore quando: Si desidera una gestione automatica dell'errore all'interno del programma utente che ripristini la comunicazione non appena l'ET200SP torna online sulla rete PROFINET, senza arrestare il PLC.
Procedura
- Aprire il progetto in TIA Portal e accedere alla struttura del progetto nella CPU S7-1500.
- Inserire l'Organization Block OB86 ("Rack failure or station failure") nella cartella dei blocchi di programma.
- Intercettare l'evento di ritorno della stazione (evento uscente / outgoing event, ovvero quando l'ET200SP riprende la comunicazione con la CPU).
- All'interno di OB86 o in un blocco di analisi guasti richiamato da esso, inserire la logica per azzerare la variabile
MB_Statenel DB di istanza del bloccoModbus_Master:
Structured Text
// Verificare che l'evento corrisponda al ritorno della stazione ET200SP interessata
// Nel contesto dell'evento uscente di OB86:
"InstModbusMasterDB".MB_State := 0;
- Compilare i blocchi di programma e scaricare la configurazione nella CPU S7-1500.
Risultato previsto: Alla riconnessione del cavo PROFINET, l'OB86 rileva il rientro della stazione decentrata e azzera il registro di stato interno di Modbus_Master. L'istruzione torna allo stato inattivo (MB_State = 0) e riprende la trasmissione ciclica delle richieste Modbus RTU al primo fronte di salita di REQ.
Verifica: Scollegare la connessione PROFINET verso l'ET200SP, attendere l'allarme di stazione persa, ricollegare il cavo e verificare che i bit DONE, BUSY ed ERROR dell'istruzione Modbus riprendano i loro cicli standard senza impostare l'S7-1500 in STOP.
Limitazione: Questo metodo agisce direttamente sulla variabile d'istanza dell'istruzione. È valido per le versioni delle librerie Modbus RTU che non resettano automaticamente la macchina a stati interna al rientro del bus di campo.
Metodo 2: Re-inizializzazione mediante blocco MB_COMM_LOAD e aggiornamento del campione
Se usa migliore quando: La sequenza di comunicazione richiede anche il re-invio della configurazione della porta seriale (baud rate, parità, time-out) al modulo CM PtP a seguito di una perdita prolungata dell'alimentazione della stazione decentrata.
Procedura
- Verificare la versione della libreria di esempio Modbus RTU in uso nel progetto TIA Portal. Se si utilizza una versione precedente (es.
68202723_S7-1500_ModbusRTU_V1d0), aggiornare i blocchi applicativi alla versione più recente resa disponibile da Siemens (es. v1.2 o successive). - Verificare che l'esecuzione di
MB_COMM_LOADsia condizionata al rientro della stazione PROFINET o al rilevamento di un errore permanente suModbus_Master(ERROR = TRUEcon un codice di stato correlato alla mancanza del modulo). -
Eseguire la seguente sequenza logica nel programma principale (es. OB1):
- Rilevare il rientro della stazione PROFINET (tramite OB86 o bit di stato della periferia).
- Impostare a
0la variabileMB_Statenel DB di istanza diModbus_Master. - Generare un fronte di salita sul parametro
REQdell'istruzioneMB_COMM_LOAD. - Una volta completata l'inizializzazione (
MB_COMM_LOAD.DONE = TRUE), riattivare le chiamate cicliche al bloccoModbus_Master.
Structured Text
// Esempio di sequenza combinata di ripristino in SCL
IF #ProfinetRestored THEN
"InstModbusMasterDB".MB_State := 0;
#ExecuteCommLoad := TRUE;
#ProfinetRestored := FALSE;
END_IF;
"MB_COMM_LOAD_DB"(
REQ := #ExecuteCommLoad,
// Altri parametri di configurazione seriale
DONE => #CommLoadDone,
ERROR => #CommLoadError
);
IF #CommLoadDone OR #CommLoadError THEN
#ExecuteCommLoad := FALSE;
END_IF;
Risultato previsto: Il modulo CM PtP viene riconfigurato e la macchina a stati di Modbus_Master viene sbloccata, ripristinando lo scambio dati sulla rete RTU.
Verifica: Monitorare il parametro STATUS di MB_COMM_LOAD fino al valore 16#0000 (completato senza errori) e verificare la successiva esecuzione del ciclo di lettura/scrittura del master Modbus.
Verifica
Il ripristino della comunicazione Modbus RTU dopo un'interruzione della rete PROFINET è eseguito correttamente quando si verificano le seguenti condizioni:
- Stato della stazione ET200SP: I LED di stato dell'interfaccia IM e del modulo CM PtP indicano un funzionamento normale senza LED di errore (SF/BF spenti).
- Macchina a stati dell'istruzione: La variabile
"InstModbusMasterDB".MB_Statetorna al valore0o aggiorna dinamicamente i propri valori durante la lavorazione dei comandi. - Segnali di output di Modbus_Master: Il parametro
ERRORtorna aFALSE, mentre il parametroDONEgenera impulsi regolari ad ogni risposta corretta inviata dagli slave Modbus RTU. - Senza intervento manuale: La comunicazione riprende automaticamente entro pochi secondi dalla riconnessione del cavo PROFINET senza richiedere il passaggio della CPU S7-1500 nello stato STOP e successivamente in RUN.
Limitazioni e precauzioni operative
- Rischio di scrittura su variabili interne di istanza: La variabile
MB_Statefa parte della struttura interna del blocco di istanza Siemens. Sebbene la modifica sia indicata dal supporto tecnico per superare questo blocco delle versioni software impattate, occorre assicurarsi che l'azzeramento avvenga solo dopo il reale ripristino della rete PROFINET (evento uscente di OB86), per evitare conflitti con la normale esecuzione del blocco. - Comportamento dell'OB86: Se l'OB86 non è presente nel progetto S7-1500, il distacco di un nodo PROFINET causa il passaggio della CPU in STOP o la mancata gestione dell'evento di rientro dell'hardware.
- Compatibilità delle librerie: L'anomalia del blocco dello stato riguarda specifiche revisioni delle istruzioni
Modbus_Master(FB641) e relativi blocchi applicativi di esempio. Si raccomanda di verificare sempre la documentazione ufficiale della propria versione di TIA Portal e aggiornare le librerie di comunicazione quando disponibili.
Domande frequenti per ingegneri
Perché il solo azionamento di MB_COMM_LOAD non ripristina la comunicazione?
L'istruzione MB_COMM_LOAD imposta i parametri fisici e di protocollo della scheda di comunicazione CM PtP (baud rate, parità, modalità di interfaccia). Tuttavia, non azzera lo stato di errore interno (MB_State) rimasto attivo nell'istanza dell'istruzione Modbus_Master, la quale continua a rilevare un'interruzione della sequenza precedente.
Cosa succede se non si inserisce l'OB86 nel progetto della CPU S7-1500?
Se la stazione ET200SP si disconnette dalla rete PROFINET e l'OB86 non è presente nella memoria della CPU, il sistema operativo dell'S7-1500 potrebbe passare in modalità STOP (a seconda della configurazione di reazione ai guasti di periferia) oppure non eseguire alcun blocco dedicato all'intercettazione del rientro in servizio della periferia decentrata.
È necessario riavviare la CPU S7-1500 per cancellare il blocco di Modbus_Master se non si modifica la logica?
In assenza della gestione del reset della variabile MB_State o dell'aggiornamento dei blocchi applicativi, il passaggio della CPU da RUN a STOP e nuovamente a RUN rappresenta l'unico modo per re-inizializzare completamente i DB di istanza e sbloccare la comunicazione.
Questo problema si verifica anche se il modulo CM PtP è installato direttamente nel telaio centrale del PLC?
No, l'anomalia descritta è legata alla perdita della rete di comunicazione PROFINET che interconnette il PLC alla periferia decentrata ET200SP. Se il modulo seriale è installato nel rack locale del PLC, la perdita della rete PROFINET non influisce sul bus di schiena locale.
Articoli correlati
- Come configurare la comunicazione Modbus RTU con CM PtP in TIA Portal
- Gestione degli errori di periferia decentrata con OB86 e OB122 in S7-1500
- Differenze tra le istruzioni Modbus_Master e MB_MASTER in SIMATIC S7
Tags correlate
Code: C140