Vai al contenuto
PLC Forum


Pythno-SNAP7 su Siemens S7-1200


Messaggi consigliati

Buongiorno a tutti,

 

è da ormai qualche giorno che mi scervello sulla questione in oggetto in cerca di una soluzione o quantomeno di un'idea di come funzioni l'ambiente Siemens in merito.

Come avrete intuito dal titolo, ho scoperto l'esistenza delle (impressionanti) librerie Snap7; nel mio caso sto utilizzando il wrapper Python poichè è il linguaggio a cui mi sono avvicinato negli ultimi mesi.

Attualmente, di tutto il set di metodi disponibili nella librearia, sono riuscito a far funzionare solamente le operazioni di lettura e scrittura dei DB (db_read e db_write).

Al contrario non ci sono riuscito con funzioni che mi sarebbero state davvero utili come ad esempio "list_blocks" , "list_blocks_of_type" e "get_block_info". A quanto vedo non si tratta di errori di sintassi ma del fatto che la CPU (quindi il modello di plc che ho tra le mani) non supporta questo tipo di istruzioni.

A questo punto, visto che probabilmente qualcuno me lo chiederà, la risposta è si...ho tolto la spunta su blocco ottimizzato e sulle proprietà del plc ho messo la spunta sulle operazioni PUT/GET (prima di metterla non funzionavano nemmeno le operazioni di lettura e scrittura).

Ho setacciato in lungo e in largo pagine e pagine dei forum più disparati senza alcun risultato soddisfacente e, ad onor del vero, nel manuale di Snap7 originale c'è scritto chiaramente che con le famiglie S7-1200 e S7-1500 sono disponibili solamente le funzioni di base.
 

Il vero punto di forza di Snap7 (che lo rende una figata, se si può dire) è che posso interagire con i dati all'interno del plc senza per forza di cose dover mettere le mani sul programma che ci gira dentro tramite Tia Portal (aldilà delle due spunte di cui sopra).

In diversi siti ho trovato post che menzionavano l'uso dei blocchi di comunicazione TSEND_C e TRCV_C come soluzione al problema, ma questo prevede di modificare il programma dentro al plc al fine di crearsi una sorta di protocollo costruito ad-hoc sulle esigenze dell'applicazione di quel caso specifico. Questo non è quello che vorrei ottenere.

 

In sintesi la mia domanda è la seguente: esiste ufficilamente un API/protocollo/specifica che Siemens mette a disposizione per poter accedere al suo sistema dall'esterno? Chiariamo ulteriormente : facciamo finta che io non abbia mai preso in mano un plc e che non sappia usare Tia Portal (il che non si allontana molto dalla realtà) ma voglio comunque creare un mio front-end di visualizzazione/modifica dei dati....quali sono gli strumenti da "programmatore PC" che Siemens rilascia ufficialmente come API?

 

Non voglio dilungarmi o mettere troppa carne al fuoco ma in sostanza, allo stato attuale delle cose mi viene da pensare questo: hai voglia a parlare di IIoT e di Smart Factory se con un brand comunemente utilizzato come Siemens per tirare fuori qualche dato da elaborare devi starci sveglio di notte....e non è una polemica, è solo una considerazione (disperata) di chi vorrebbe avvicinarsi ma purtroppo non ci sta riuscendo.

 

Qualcuno di voi può illuminarmi?

Se magari il papà di Snap7 avesse voglia di darmi qualche suggerimento non sarebbe male ;)

 

Grazie a tutti

Link al commento
Condividi su altri siti

  • 2 weeks later...

Ciao e scusa il ritardo, sono molto impegnato in questo periodo.

Andiamo con ordine.

 

Siemens non rilascia informazioni circa il protocollo interno, non lo ha fatto con S7Protocol e tantomeno con quello esteso della serie TIA (1200/1500).

O meglio, le specifiche non sono pubbliche, immagino che un produttore di OPC o di hardware può acquistarle, ma sinceramente non mi sono mai posto il problema.

 

E' importante tuttavia delineare il dominio di azione che si vuole abbracciare.

Snap7 è nato come driver binario ad alta efficienza, su una CPU PN, un telegramma (240 o 480 byte a seconda del PDU) viene scambiato in 5ms, tempo che non puoi mai raggiungere seguendo la filosofia OPC.

Parliamo di esigenze particolari (le mie) di grosse e veloci raccolte dati gestite con handshake sincroni con SQL ecc..

L'effetto collaterale di Snap7 è che è open source, lo puoi usare anche per applicazioni più "rilassate" e gira da Arduino a SparcStation.

 

Detto questo c'è il rovescio della medaglia.

 

Snap7 è solo per PLC Siemens e si colloca ad un livello molto basso dello stack di comunicazione : è un driver binario e devi metterci del tuo, quindi programmare, per usarlo nella tua applicazione.

 

La tendenza di oggi è quella di astrarsi dall'hardware e concentrarsi sul contenuto dell'informazione, in quest'ottica OPC UA è la scelta migliore : lui si occupa della comunicazione a basso livello con qualunque PLC e presenta i dati a un livello superiore.

Inoltre le applicazioni sono sempre più distribuite e spesso non vengono più programmate (sta passando di moda :)), "disegni" qualcosa con node-red e mandi i dati sul Cloud dove interconnetti un pool di applicazioni predefinite per fare data analytics.

Al fianco di OPC UA trovi i gateway intelligenti che gestiscono, sempre con node-red o prodotti visuali simili, l'hardware IIoT non-PLC tramite MQTT, ZigBee e quant'altro tutto in modo trasparente.

 

In quest'ottica funzioni tipo list_blocks, list_blocks_of_type perdono di significato in quanto sono utility specifiche per un PLC specifico, a cosa ti servono ?

 

Noi stiamo investendo tantissimo in Industry 4.0 come processo interno e architettura di prodotto e ti assicuro che, nel mercato che si va delineando, la programmazione bare-metal del PLC è messa assolutamente in secondo piano rispetto alla fruizione dei dati.

Una stazione di montaggio è scontato che faccia il suo ciclo, il valore aggiunto è dato dallo smartphone che si appoggia all'adesivo NFC sulla stazione e visualizza tutti i dati di produzione o il tablet che inquadra il QR code e visualizza il progetto 3D navigabile dell'attrezzatura.

 

Bello o brutto, giusto o sbagliato, utile o marketing fuffa ? conta poco, purtroppo è il mercato che decide. Come dice Siemens nei seminari : un giorno qualcuno farà una domanda, o rispondi tu o lo farà qualcun'altro al posto tuo :).

 

Se sei interessato ad IIoT e Smart Factory cambia direzione, node-red, ed altro su Iot lo trovi open source, astraiti dal livello di comunicazione e concentrati sulle interconnessioni.

Se poi ha necessità specifiche (dato che hai bisogno di list_blocks ecc..) parliamone ;) 

 

Ciao

Davide

Link al commento
Condividi su altri siti

  • 2 weeks later...

La via più comoda per accedere all'S7 senza dover conoscere TIA Portal è attivare un OPC Server Siemens. Una volta che i dati sono disponibili in OPC, possono essere facimente messi a disposizione di client custom, pacchetti software commerciali, database o verso il cloud tramite protocolli standard quali MQTT. Anche se si utilizzano i blocchi ottimizzati, il dataFEED Softing è in grado di comunicare con gli S7-1200/1500 via OPC. Se poi per esterno si intende un client che non risiede sulla stessa rete del server, allora è fortemente consigliato utilizzare l'OPC UA.

Link al commento
Condividi su altri siti

  • 1 year later...
Gianlucasammarchi
il 1/3/2018 at 16:57 , dan64100 scrisse:

Ciao e scusa il ritardo, sono molto impegnato in questo periodo.

Andiamo con ordine.

 

Siemens non rilascia informazioni circa il protocollo interno, non lo ha fatto con S7Protocol e tantomeno con quello esteso della serie TIA (1200/1500).

O meglio, le specifiche non sono pubbliche, immagino che un produttore di OPC o di hardware può acquistarle, ma sinceramente non mi sono mai posto il problema.

 

E' importante tuttavia delineare il dominio di azione che si vuole abbracciare.

Snap7 è nato come driver binario ad alta efficienza, su una CPU PN, un telegramma (240 o 480 byte a seconda del PDU) viene scambiato in 5ms, tempo che non puoi mai raggiungere seguendo la filosofia OPC.

Parliamo di esigenze particolari (le mie) di grosse e veloci raccolte dati gestite con handshake sincroni con SQL ecc..

L'effetto collaterale di Snap7 è che è open source, lo puoi usare anche per applicazioni più "rilassate" e gira da Arduino a SparcStation.

 

Detto questo c'è il rovescio della medaglia.

 

Snap7 è solo per PLC Siemens e si colloca ad un livello molto basso dello stack di comunicazione : è un driver binario e devi metterci del tuo, quindi programmare, per usarlo nella tua applicazione.

 

La tendenza di oggi è quella di astrarsi dall'hardware e concentrarsi sul contenuto dell'informazione, in quest'ottica OPC UA è la scelta migliore : lui si occupa della comunicazione a basso livello con qualunque PLC e presenta i dati a un livello superiore.

Inoltre le applicazioni sono sempre più distribuite e spesso non vengono più programmate (sta passando di moda :)), "disegni" qualcosa con node-red e mandi i dati sul Cloud dove interconnetti un pool di applicazioni predefinite per fare data analytics.

Al fianco di OPC UA trovi i gateway intelligenti che gestiscono, sempre con node-red o prodotti visuali simili, l'hardware IIoT non-PLC tramite MQTT, ZigBee e quant'altro tutto in modo trasparente.

 

In quest'ottica funzioni tipo list_blocks, list_blocks_of_type perdono di significato in quanto sono utility specifiche per un PLC specifico, a cosa ti servono ?

 

Noi stiamo investendo tantissimo in Industry 4.0 come processo interno e architettura di prodotto e ti assicuro che, nel mercato che si va delineando, la programmazione bare-metal del PLC è messa assolutamente in secondo piano rispetto alla fruizione dei dati.

Una stazione di montaggio è scontato che faccia il suo ciclo, il valore aggiunto è dato dallo smartphone che si appoggia all'adesivo NFC sulla stazione e visualizza tutti i dati di produzione o il tablet che inquadra il QR code e visualizza il progetto 3D navigabile dell'attrezzatura.

 

Bello o brutto, giusto o sbagliato, utile o marketing fuffa ? conta poco, purtroppo è il mercato che decide. Come dice Siemens nei seminari : un giorno qualcuno farà una domanda, o rispondi tu o lo farà qualcun'altro al posto tuo :).

 

Se sei interessato ad IIoT e Smart Factory cambia direzione, node-red, ed altro su Iot lo trovi open source, astraiti dal livello di comunicazione e concentrati sulle interconnessioni.

Se poi ha necessità specifiche (dato che hai bisogno di list_blocks ecc..) parliamone ;) 

 

Ciao

Davide

Buonasera Davide sarei interessato a mettermi in contatto con lei.

Ho una startup che lavora sulle interconnessioni in industria 4.0 

Se le può interessare scambiare 4 chiacchere x una collaborazione le lascio i miei riferimenti.

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Grazie mille

Modificato: da Fulvio Persano
Eliminato indirizzo e-mail e numero di telefono
Link al commento
Condividi su altri siti

Ciao Giaanlucasammarchi e benvenuto.

 

 

 

Il regolamento non consente di pubblicare dati personali. Lo scambio può avvenire tramite MP (Messaggio Privato).

o) Rispetta la Privacy: non pubblicare nomi, cognomi, numeri telefonici, indirizzi, foto, email etc., senza prima avere avuto il permesso.

 

 

Link al commento
Condividi su altri siti

Buongiorno a tutti. Mi accodo alla discussione. 

 

Ho un S7-1200. Non riesco nemmeno a leggere e scrivere i DB. Mi spiego: il mio programma è semplicissimo, comandando un input alla volta da Python si accende il relativo output. Nulla di più. Ho creato un DB dedicato in TIA chiamato Python[DB127]. All'interno ci sono tre variabili Bool Python_1, 2 e 3 con offset da 0.0 a 0.2. Anche la semplice funzione

db_read(127,0,1)

mi restituisce 

b'CLI : function refused by CPU (Unknown error)'
Traceback (most recent call last):
  File "PLC_Test.py", line 15, in <module>
    print(plc.db_read(db, 0, 1))
  File "C:\Users\andrea miclausig\AppData\Local\Programs\Python\Python37-32\lib\site-packages\snap7\client.py", line 145, in db_read
    check_error(result, context="client")
  File "C:\Users\andrea miclausig\AppData\Local\Programs\Python\Python37-32\lib\site-packages\snap7\common.py", line 65, in check_error
    raise Snap7Exception(error)
snap7.snap7exceptions.Snap7Exception: b'CLI : function refused by CPU (Unknown error)'

Ho già letto e seguito tutta la parte di GetUpdate e configurazione della CPU. Quello che vorrei è riuscire ad accendere e spegnere le tre variabili o, meglio ancora, direttamente gli output da Q0.0 a Q0.2, di cui però non conosco il DB o l'area di memoria.

 

Approfitto per chiedere, da neofita quale sono, nel comando read_area come posso risalire all'area di cui si fa riferimento?

Allego screenshot del programma

 

Grazie per la pazienza

Annotazione 2019-10-02 103205.png

Link al commento
Condividi su altri siti

3 ore fa, mikla90 scrisse:

Mi accodo alla discussione. 

 

Questo non è permesso dal regolamento, regolamento che probabilmente non hai letto con attenzione primma di accettarlo.

 

Devi sempre aprire una nuova discussione, questo per evitare confusione nelle risposte, inoltre una nuova discussione ha maggior visibilità quindi più probabilità di risposte adeguate.

Link al commento
Condividi su altri siti

Ospite
Questa discussione è chiusa alle risposte.
×
×
  • Crea nuovo/a...