Vai al contenuto
PLC Forum


Connettere più plc - Snap7


Messaggi consigliati

Buongiorno,

è presente una funzione in Snap7 in grado di connettere più plc simultaneamente e decidere poi quale delle connessioni stabilite attivare?
In alternativa mi è venuta l'idea di creare un array di Client, ma spero ci sia una funzione già implementata più semplice.

(I plc saranno del tipo S7 1200/1500)

Grazie mille.

Link al commento
Condividi su altri siti


L'idea di un array (o una lista) di Client è la soluzione migliore.

 

La comunicazione, a basso livello, è di tipo TCP/IP : ogni client ha un socket connesso al PLC.

Un socket, e di conseguenza un client, non può essere connesso a più PLC contemporaneamente.

 

Una simile architettura è possibile solo in presenza di scambio dati connectionless, tipo UDP per capirci, dove mandi un pacchetto e questo viene ricevuto solo dal device che riconosce l'indirizzo di destinazione.

 

Ti sconsiglio caldamente di pensare ad una classe che si connette, scambia dati e si disconnette.

La connessione S7 introduce un overhead notevole in quanto è a tre livelli : connessione TCP/IP, connessione ISO, Setup S7 (negoziazione PDU). Inoltre le CPU non amano molto questo "accendi e spegni".

 

Link al commento
Condividi su altri siti

si ma anche una coda di eventi perchè se ad ogni client corrisponde un socket , ad ogni client corrispondono anche diverse operazioni da fare e da sincronizzare 

Per cui threads separati , mutex , semafori etc .....

Non è un'applicazione proprio semplice 

 

Link al commento
Condividi su altri siti

Già in effetti sto riscontrando qualche difficoltà visto che non mi sembra ci sia una funzione che restituisca l'indirizzo IP del plc connesso, in modo da distinguerli chiaramente e sicuramente univocamente all'interno della lista.

Penso poi che sia una cosa abbastanza comune il fatto di dover gestire più di un plc; quindi qualcuno ha un esempio di codice o altro di come si possa implementare?

(Io userò vb.net con dei 1200/1500, qualsiasi esempio però in qualunque linguaggio e per qualunque dispositivo è ben accetto)

Grazie mille.

Link al commento
Condividi su altri siti

SI ma in applicazioni di questo tipo ci sono anche altri accorgimenti lato plc's

Si usa un plc,per esempio, come concentratore di informazioni e ci si connette a questo col pc .

Se consideri che in un impiantomodesto ci sono profinet , safeties, pannelli , HMI , SCADA  etc non puoi pensare di strutturare la cosa comunicando con 200 plc ed altresi 200 client . L'architettura che ti ho appena spiegato è largamente usata e permette di fare molte cose e molto meglio 

Link al commento
Condividi su altri siti

Quote

Si usa un plc,per esempio, come concentratore di informazioni e ci si connette a questo col pc .

Se consideri che in un impiantomodesto ci sono profinet , safeties, pannelli , HMI , SCADA  etc non puoi pensare di strutturare la cosa comunicando con 200 plc ed altresi 200 client

 

Su questo non sono completamente d'accordo, ti dico le considerazioni che abbiamo fatto noi a riguardo.

 

Efficienza:

Supponi di avere un impianto in cui ogni PLC gestisce un modulo il quale, per lavorare ha necessità di avere le informazioni dal server, e che alla fine deve registrare i dati .

In questo caso il PLC concentratore è un grosso collo di bottiglia : hai una comunicazione three-tier PLC<->PLC<->SERVER che per grossi impianti può portarti anche a 600/700 ms solo per la comunicazione di campo che peggiora all'aumentare dei PLC, poi devi metterci la parte server.

 

Risorse:

I PLC Siemens hanno risorse di comunicazione limitate, se hai 200 PLC non puoi pensare di connetterli tutti ad un unico concentratore a meno di non mettere nel rack una batteria di CP ($$$) oppure devi creare più livelli 

 

Ore uomo / Programmazione:

Devi implementare software lato PLC che comunica con il concentratore e (forse) viceversa, devi implementare lato PC software che serializza/deserializza le informazioni a livello logico (il canale è lo stesso ma i PLC sono tanti).

Ti sei giocato la possibilità di usare un approccio object oriented : hai un unica classe che deve gestire (almeno come front-end) tutto.

Se non sei stato molto bravo nel progetto dell'architettura, ad ogni modifica hardware seguiranno modifiche software a cascata.

 

Snap7 è stato progettato apposta per la comunicazione in parallelo, più PLC ci sono più è vantaggioso secondo un principio molto semplice:

All'aumentare dei PLC aumenta in modo importante il valore dell'impianto ma la complessità, usando un approccio object oriented, non cresce in proporzione, per cui l'utile di commessa è maggiore.

 

Gargio

Devi usare un approccio object oriented altrimenti non ne esci vivo, a prescindere che tu usi Snap7 o un OPC server o altro.

 

S7Client è una classe che ti gestisce solo il canale di comunicazione. Devi creare una classe, ad esempio PLC, che contenga al suo interno:

- Tutte le informazioni (indirizzo, info ecc..) relative al PLC.

- Un thread che ti gestisce la comunicazione in modo indipendente da tutto il resto del programma e che gestisca gli errori (qualcosa trovi quì )

- Un S7Client che comunica con la CPU.

- Il codice necessario alla configurazione : caricare da un DB, un file o quant'altro le informazioni relative al tuo PLC.

 

La lista deve contenere queste classi non direttamente il client.

Alla fine hai bisogno di una classe manager, di interfaccia con il tuo programma, che contiene la lista e si occupa dello start/stop dell'impianto.

 

Lavora sull'architettura a livello di progetto (se vuoi scrivere software industriale ;))

Link al commento
Condividi su altri siti

Giusto .

Bisogna lavorare con oggetti , ereditarietà , polimorfismo etc ...magari creare classi che ereditano da una classse specializzata che deriva da S7Client di Snap 7 .

Bisogna progettare bene 

ciao

Link al commento
Condividi su altri siti

  • 2 weeks later...

Ok, grazie mille per le delucidazioni, proverò a riprendere in mano il progetto e verificare queste caratteristiche.

Essendo praticamente ai primi passi probabilmente chiederò ancora a voi esperti per altri sicuri intoppi ;)
Grazie ancora intanto

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...