5 1 1 1 1 1 1 1 1 1 1 Rating 5.00 (1 Vote)

Valutazione attuale: 5 / 5

Stella attivaStella attivaStella attivaStella attivaStella attiva
 

Com'è noto a molti nell'ambito dell'automazione industriale, Siemens ha sempre mostrato una certa "avversità" a dotare le proprie piattaforme di protocolli non nativi Siemens. Uno di questi, nato nel lontano 1979 ma tuttora molto diffuso nel settore, è il Modbus nella variante per reti: TCP/IP. Esiste da qualche anno ormai un pacchetto (licenziato) che permette il funzionamento di tale protocollo tramite la porta PN della CPU (300, 400, 400H), tramite la CP (343,443) o nelle ET200S dotate di CPU-PN. Ho avuto modo di utilizzarlo di recente in un'applicazione dove la CPU S7 doveva interrogare 3 server (protezioni elettriche) per la regolazione di un sistema idroelettrico. Ho pensato quindi di annotare alcuni accorgimenti come promemoria per future applicazioni. Spero vi sia utile.

In quest'articolo indicherò come implementare la funzionalità modbus TCP Client (Master) all'interno di una CPU S7-315 2PN/DP con firmware 3.2 . Di seguito le componenti hardware e software usate:

  • Software S7 Open Modbus TCP CPU PN Single License cod.2XV9450-1MB02 v.1.3 (dettagli del pacchetto li trovate qui)
  • Software di progettazione Simatic Step 7 v.5.5 service pack 3
  • CPU S7 315 2PN/DP cod 6ES7315-2EH14-0AB0 e relativa MMC

 

  •  Installare innanzitutto il pacchetto Open Modbus TCP CPU PN Single License. Verrà aggiunta una nuova voce nel menu programmi Simatic: SIMATIC MODBUS TCP WIZARD oltre alla libreria MODBUS_PN_CPU library che si troverà tra le risorse di Simatic Step 7
  • Creare un nuovo progetto Simatic(che in quest'esempio chiamerò "MbTCP" inserire nella configurazione HW la CPU PN, quindi aggiungere i seguenti FB e DB (oltre agli OB che normalmenti si usano nelle CPU per evitare arresti inattesi.. OB80, OB82, OB86, OB121, OB122,..
    • FB102 (MODBUSPN) (v.3.4) : Cuore della funzionalità MOdbus di Siemens, copiare dalla MODBUS_PN_CPU library di Simatic
    • FB63 (TSEND): copiare dalla Standard Library, Communication Blocks di Simatic
    • FB64 (TRCV): copiare dalla Standard Library, Communication Blocks di Simatic
    • FB65 (TCON): copiare dalla Standard Library, Communication Blocks di Simatic
    • FB103 (TCP_COMM): copiare dalla MODBUS_PN_CPU Library  di Simatic
    • FB104 (MOD_CLI): copiare dalla MODBUS_PN_CPU Library  di Simatic
    • FB105 (MOD_SERV) : copiare dalla MODBUS_PN_CPU Library  di Simatic
    • FC10 (EQ_STRING): copiare dalla Standard Library, IEC Function Blocks di Simatic
    • DB2 (MODBUS_PARAM) : copiare dalla MODBUS_PN_CPU Library  di Simatic
    • DB3 (License DB) : copiare dalla MODBUS_PN_CPU Library  di Simatic

  

  • Una volta inseriti i DB e FB sopra indicati, bisogna specificare i parametri dModbus quali indirizzo, porta di comunicazione, range di registri da scambiare,.. Ci sono 2 modi per farlo:
    • Manualmente modificando i valori all'interno del DB2 (MODBUS_PARAM)
    • Tramite il wizard di Siemens (consiglio questo metodo, molto più semplice)
  • Lanciare quindi il wizard che siè stato aggiutno al menu di windows all'installazione del pacchetto S7 Open Modbus TCP CPU PN

  

  • quindi "Next"
  • Alla schermata successiva indicare il progetto al quale applicare il wizard (in esempio MbTCP) e la directory "Blocks" relativa (come in figura seguente). Quindi "Next"

  • Verrà ora proposta dal wizard la selezione del DB2, spuntare quindi l'opzione "change". Quindi "Next"

  • Definire ora il tipo di funzionamento (in quest'esempio come Client, ossia master nella comunicazione) smarcando l'opzione "single write (function code 05/06)". Quindi "Next"

  • NOTA: nel tab "MOdbus Genral Paramemters, le 3 possibili opzioni indicano:
    • 1 – spuntare se si vuol far funzionare il PLC da server, non spuntare per funzionamento da client
    • 2 – Spuntare per abilitare la funzione di scrittura (oltre alla lettura sempre abilitata di default in caso di funzionamento come client)
    • 3 – spuntare se si vuole che automaticamente il PLC ci colleghi al dispositivo Modbus (non usarlo, il controllo della comunicazione avviene direttamente tramite i parametri di FB102)
  • Compilare i campi del tab successivo come rappresentato in figura. Quindi "Next"

  • dove:
    • 1 – Connection ID (è solo un riferimento interno per Siemens). Tale ID dev’essere riportato identico tra i parametri di ingresso di FB102 al parametro ”ID”
    • 2 – Nome connessione
    • 3 – Tipo di connessione (Active= Client, Passive=Server)
    • 4 – Indirizzo IP partner di comunicazione ( che deve appartenere alla stessa rete)  (o convertitore TCP/RTU)
    • 5- tipo hw Siemens (CPU, ET200,…)
  • Indicare quindi la porta TCP di comunicazione  (normalmente la 502). Quindi "Next"

  • Indicare le aree di lettura/scrittura come indicato in figura seguente

  • Dove:
    • 1 - tipo di dati Modbus: è possibile selezionare tra: Coils, Input, Holding Register, Input Register
    • 2 - è il primo indirizzo (registro ) letto/scritto via Modbus. Nel caso in cui l’area da leggere nel dispositivo non inizi da 0, il campo “Start Address” rappresenta l’offset di partenza.
    • 3 - è l’ultimo indirizzo (registro) letto/scritto via Modbus
    • 4 - DB dove devono esser trasferiti i dati letti/scritti. Nel DB di appoggio il primo record corrisponderà all’indirizzo Modbus dello “Start Address” (nell’esempio 17 per la riga 1, 7000 per la 2)
  • Confermare e proseguire

  

  • Per modificare/creare un'altra connessione smarcare "Configure another connection" altrimenti cliccare su "Finish"

  •  A questo punto, in Step 7, è possibile implementare FB102 per la gestione in lettura o scrittura come di seguito indicato (OB1 o FC richiamato da OB1):

  •  Il DB di istanza (mnemonico ModbusPN_DI) viene creato durante l'istruzione call di FB102 e conterrà i parametri necessari al funzionamento del blocco che sono:
    • ID: [word]=ID connessione. Il valore deve coincidere con il parametro indicato nel wizard (tab Communciation Partners)
    • DB_PARAM:[BLOCK_DB]  numero DB parametri di riferimento (DB2 secondo il wizard)
    • RECV_TIME: [TIME]=empo max (timeout) di ricezione dati
    • CONN_TIME: [TIME]=tempo max (timeout) per stabilire la connessione col partner di comunicazione
    • KEEP_ALIVE:[TIME]=non usato
    • ENQ_REQ: [BOOL]= richiesta avvio incarico lettura/ scrittura (su fronte di salita). Buona norma è gestire tale impulso monitorando lo stato della comunicazione (STATUS_MODBUS) e il bit di DONE_NDR (incarico precedente concluso)

 

Parameter    In/Out     Type      Description    Value range 
ID IN WORD       
DB_PARAM IN BLOCK_DB     DB di parametrizzazione  
RECV_TIME IN TIME     Tempo controllo (timeout) in ricezione  
CONN_TIME IN TIME     Tempo controllo (timeout) nello stabilire la connessione  
KEEP_ALIVE IN TIME     non usato  
ENQ_REQ IN BOOL  CP is Client: inizio richiesta lettura/scrittura da parte del client
CP is Server: server pronto a ricevere incarichi dal client
 
 DISCONNECT IN  BOOL  S7 is Client: TRUE: la connessione sarà terminata dopo la ricezione della risposta
S7 is Server: TRUE: la connessione sarà terminata quando ENQ_ENR = FALSE
 
 REG_KEY  IN  STRING[17]     Registration key  per attivazione licenza  
 LICENSED  IN  BOOL  Stato licenza FB102:Licenza attiva (true) Licenza non attiva (false)  
 BUSY     OUT BOOL    
 CONN_ESTABILISHED  OUT  BOOL

Connessione stabilita

connessione terminata

TRUE

FALSE
 DONE_NDR      OUT  BOOL  CP is Client: TRUE: incarico completato senza errori
CP is Server: TRUE: la richiesta da parte del client è stata processata correttamente e conclusa
 
 ERROR      OUT  BOOL

Presenza di errori nell'esecuzione del blocco

TRUE= Presenza errori

FALSE=Assenza errori

 STATUS_MODBUS   OUT  WORD  Codifica errori protocollo Modbus (se >0)  
 STATUS_CONN  OUT  STRING[8]  Codifica errori protocollo connessione durante l'esecuzione di un blocco TSEND, TRCV,..(se >0)  
UNIT    IN/OUT BYTE Identificativo unità (INPUT se Client mode, OUTPUT se server mode)  
DATA_TYPE    IN/OUT BYTE Tipo di dati utilizzati (INPUT se Client mode, OUTPUT se server mode)

1=Coil

2=Input Status

3=Holding register

4=Input register

 START_ ADDRESs  IN/OUT  WORD Indirizzo di partenza di lettura/scrittura (INPUT se Client mode, OUTPUT se server mode)  
 LENGTH  IN/OUT  WORD Numero di registri da processare (INPUT se Client mode, OUTPUT se server mode)

1..2000 Coil Read

1..1968 Write Coil

1..2000 Read Input Status

1..125 Read Holding Register

1..123 Write Holding Register

1..125 Read Input Register

  TI  IN/OUT  WORD  Transaction Identifier (INPUT se Client mode, OUTPUT se server mode) . Tale valore va incrementato ad ogni nuovo ENS_REQ  
WRITE_READ  IN/OUT BOOL (INPUT se Client mode, OUTPUT se server mode). Abilitazione funzione scrittura via Modbus

 TRUE= scrittura

FALSE= solo lettura