Siemens S7
Collegare i PLC Siemens S7 per indirizzo tramite S7comm o per nome di variabile tramite S7CommPlus - il campo Accesso, telaio e slot, aree di memoria, indirizzamento tipizzato per byte e bit, nomi di variabile, le impostazioni HMI e i tipi di dato nativi.
Il driver Siemens S7 parla con i PLC Siemens S7 tramite S7comm, il classico protocollo di Step 7 trasportato su ISO-on-TCP. Usa l'indirizzamento assoluto (area di memoria, numero di blocco dati, byte e bit), quindi funziona senza alcuna esportazione di simboli dal progetto di ingegneria. Aggiungi un dispositivo sotto il driver Siemens S7 nel Connector e compila i campi qui sotto; il pannello mostra solo i campi che questo protocollo usa.
Questo è l'accesso Per indirizzo. Ogni dispositivo sceglie il suo Accesso: Per indirizzo, come sopra, oppure Per nome tramite S7CommPlus, il protocollo che usano TIA Portal e gli HMI Siemens, in cui ogni tag nomina la sua variabile come la scrive TIA Portal e la CPU ne dice il tipo.
Accesso
| Aspetto | Per indirizzo | Per nome |
|---|---|---|
| Protocollo | S7comm su ISO-on-TCP, porta 102 | S7CommPlus su TLS 1.3 dentro ISO-on-TCP, porta 102 |
| CPU | S7-300, S7-400, S7-1200, S7-1500 | S7-1500 con firmware V2.9 o successivo, S7-1200 con firmware V4.5 o successivo, configurate in TIA Portal V17 o successivo |
| Campi del dispositivo | Indirizzo host, Telaio / Slot | Indirizzo host, Nome utente e password, entrambi facoltativi |
| Cosa nomina un tag | Area, numero di DB, byte e bit, e il suo tipo di dato | Il nome della variabile, per esempio GanterOpt.Real_; la CPU dice il tipo |
| Sulla CPU | PUT/GET consentito e blocchi dati senza accesso ottimizzato (Preparare la CPU) | Nulla da cambiare: i blocchi dati ottimizzati vengono letti, e PUT/GET non serve |
| Rilevamento | Nessuno | Le variabili della CPU (Rilevamento) |
Un dispositivo creato ora parte Per nome. Un dispositivo salvato prima che questa
scelta esistesse continua a leggere Per indirizzo, come ha sempre letto. Cambiare
l'accesso conserva sia gli indirizzi tipizzati dei tag sia i nomi delle variabili,
quindi tornare indietro ritrova tutto al suo posto. Per nome, l'intestazione del
dispositivo mostra l'endpoint senza telaio né slot, per esempio
s7://192.168.0.2?access=name. Una CPU che non risponde all'accesso per nome lo dice
nella pagina del dispositivo (Una CPU senza l'accesso per nome).
Connessione
| Campo | Significato | Predefinito |
|---|---|---|
| Indirizzo host | Indirizzo IP o nome host della CPU (oppure del modulo CP che le sta davanti). | vuoto |
| Accesso | Per indirizzo o Per nome (Accesso). | Per nome |
| Telaio / Slot | Solo per indirizzo. I numeri di telaio e di slot della CPU, come sono configurati nella disposizione hardware Siemens. Due caselle numeriche su una riga: prima il telaio, poi lo slot. | 0 / 0 |
| Nome utente / Password di accesso | Solo per nome, entrambi facoltativi: la password della protezione della CPU, quando il suo livello di accesso ne chiede una, e un nome utente solo per una CPU che gestisce utenti. Salvati protetti su questo computer. | vuoto |
| Intervallo di interrogazione (ms) | Il periodo di lettura valido per tutto il dispositivo, per i tag che non lo ridefiniscono. | 1.000 |
La porta TCP è fissa a 102 (ISO-on-TCP), quindi non c'è alcun campo per la porta.
L'intestazione del dispositivo mostra l'endpoint composto, per esempio
s7://192.168.0.2:0:1 (host, telaio, slot).
Il telaio e lo slot devono corrispondere all'hardware: le CPU S7-1200 e S7-1500 rispondono sul telaio 0, slot 0 oppure 1; una tipica CPU S7-300 sta sul telaio 0, slot 2; i telai delle S7-400 variano con la disposizione. Uno slot sbagliato fa fallire la connessione invece di leggere dati sbagliati.
Ogni tag può impostare il proprio Intervallo di interrogazione (ms); un valore di tag pari a 0 ricade sull'intervallo del dispositivo.
Leggere per nome
Un tag di un dispositivo che legge per nome nomina la sua variabile nel campo
Nome della variabile della scheda Sorgente, come la scrive TIA Portal: il blocco
dati e la variabile, un punto prima di un membro, un elemento di un array tra parentesi
quadre. Le virgolette doppie di TIA Portal si possono digitare ("GanterOpt".Real_) e
vengono tolte.
| Variabile in TIA Portal | Nome della variabile |
|---|---|
Real_ nel blocco dati GanterOpt |
GanterOpt.Real_ |
Valor dell'istanza di UDT Udt_ |
GanterOpt.Udt_.Valor |
Elemento 0 dell'array Vetor |
GanterOpt.Vetor[0] |
La DTL DataHora |
GanterOpt.DataHora: un solo tag, una data e ora |
Non ci sono area, numero di DB o byte da digitare: la CPU dice dove si trova la variabile e di che tipo è, e il driver la legge come tipo di dato del tag:
| Tipo nella CPU | Tipo di dato | Nota |
|---|---|---|
| Bool | Boolean | |
| Byte, USInt; SInt | Byte; SByte | Senza segno; con segno |
| Word, UInt; Int | UInt16; Int16 | Senza segno; con segno |
| DWord, UDInt; DInt | UInt32; Int32 | Senza segno; con segno |
| LWord, ULInt; LInt | UInt64; Int64 | Tutti i 64 bit, esatti |
| Real; LReal | Float; Double | |
| Char, String | String | Windows-1252, come per indirizzo |
| WChar, WString | String | UTF-16, qualsiasi scrittura |
| Time, S5Time | Int32 | Millisecondi |
| LTime | Int64 | Nanosecondi |
| Time_Of_Day | UInt32 | Millisecondi dalla mezzanotte, meno di 24 h |
| Date, Date_And_Time, DTL, LDT | DateTime | Solo la data; data e ora |
Il rilevamento dà a ogni tag il tipo di dato e l'unità (ms, ns) della sua variabile. Un tag creato a mano prende il tipo di dato che scegli, e il valore della CPU viene convertito in quello.
Una String o una WString si scrive intera, con la lunghezza dichiarata nel blocco, che il driver legge dalla variabile prima della prima scrittura: un testo più lungo viene rifiutato con le due lunghezze e non si invia nulla, e una String rifiuta un carattere fuori da Windows-1252. Una DTL si legge e si scrive intera, come una data e ora; i suoi otto campi non vengono mai offerti separatamente, perché un campo scritto da solo accetta qualsiasi valore (mese 90 compreso). Un valore fuori dall'intervallo del suo tipo (un Time_Of_Day di 24 h o più, 40000 per un Int) viene rifiutato con l'intervallo e non si invia nulla. Un nome che la CPU non ha è l'errore del tag e lo dice; un campo di una DTL nominato da solo riceve il consiglio di nominare la DTL.
Le impostazioni HMI
TIA Portal tiene tre impostazioni per variabile di un blocco dati, nelle colonne del blocco. La stazione le rispetta come fanno l'HMI e il server OPC UA di Siemens, qualunque cosa la CPU lasci passare:
| Impostazione in TIA Portal | Quando non è spuntata |
|---|---|
| Accessible from HMI/OPC UA/Web API | La variabile non viene né letta né scritta: l'errore del tag nomina l'impostazione, e il rilevamento la tralascia. |
| Visible in HMI engineering | Il rilevamento tralascia la variabile; un tag che la nomina a mano la legge normalmente. |
| Writable from HMI/OPC UA/Web API | La variabile è in sola lettura: una scrittura viene rifiutata nominando l'impostazione, l'Accesso del tag offre Sola lettura e dice perché, e il rilevamento la offre come Sola lettura. |
Una CPU senza l'accesso per nome
Una CPU che accetta la connessione e non risponde all'accesso per nome (una S7-1500 precedente al firmware V2.9, una S7-1200 precedente alla V4.5, un progetto configurato in un TIA Portal precedente alla V17, o una CPU che parla solo S7comm) lascia il dispositivo offline. La pagina del dispositivo lo dice in un avviso, al posto dell'errore: ciò di cui la CPU ha bisogno, dove TIA Portal mostra il firmware (quello che la CPU esegue in Online & diagnostics, la versione che il progetto nomina nelle proprietà della CPU, in General > Catalog information) e le tre vie d'uscita:
- Aggiornare il firmware della CPU, impostare la stessa versione per la CPU nel progetto TIA Portal e caricare la configurazione hardware. Aggiornare solo il firmware non basta.
- Impostare l'Accesso su Per indirizzo, con PUT/GET consentito e blocchi dati senza accesso ottimizzato (Preparare la CPU).
- Leggere la CPU tramite il suo server OPC UA (una S7-1500, o una S7-1200 dal firmware V4.4) con il driver OPC UA.
Ogni tag del dispositivo porta lo stesso avviso sulla sua pagina, e l'avviso scompare da solo appena la CPU risponde per nome. Il diario tecnico e l'agente leggono gli stessi passi nell'errore del dispositivo.
Preparare la CPU
Questa sezione riguarda l'accesso per indirizzo; un dispositivo che legge per nome non richiede nessuna di queste impostazioni.
Una S7-1200 o S7-1500 serve l'indirizzamento assoluto di S7comm solo con due impostazioni proprie, entrambe fatte in TIA Portal e caricate nella CPU. Una S7-300 o S7-400 non ne richiede nessuna.
| Impostazione | Dove in TIA Portal | Senza di essa |
|---|---|---|
| Permit access with PUT/GET communication from remote partner, spuntata | Aprire la configurazione dispositivi della CPU, selezionare la CPU, poi Properties > General > Protection & Security > Connection mechanisms. Caricare la configurazione hardware (Download to device > Hardware configuration): un caricamento del solo programma non la porta con sé. | La CPU accetta la connessione e rifiuta ogni lettura e scrittura. Il dispositivo resta connesso e i suoi tag leggono cattiva qualità. |
| Optimized block access, senza spunta, su ogni blocco dati che la stazione legge | Nell'albero del progetto, sotto Program blocks, fare clic con il tasto destro sul blocco dati, poi Properties > General > Attributes. Compilare il blocco e caricarlo. La colonna Offset del blocco mostra allora dove comincia ogni variabile, cioè il valore del Byte iniziale di un tag. | La CPU non fornisce per indirizzo alcun byte del blocco. I suoi tag leggono cattiva qualità, e gli altri tag del dispositivo continuano a leggere. |
Cambiare Optimized block access reinizializza il blocco dati al caricamento: le sue variabili tornano ai valori iniziali. La memoria dei merker (M), gli ingressi (I) e le uscite (Q) sono sempre indirizzabili e non richiedono modifiche. Un blocco dati che deve restare ottimizzato si può leggere in un altro modo: il programma del PLC copia i valori che la stazione legge in un blocco dati senza accesso ottimizzato, o nella memoria dei merker, e i tag puntano lì; oppure la stazione legge il PLC tramite il suo stesso server OPC UA (S7-1500; S7-1200 dal firmware 4.4) con il driver OPC UA.
Quando la CPU rifiuta per una delle due impostazioni, la pagina del dispositivo dice quale, con questi passi, in un avviso che scompare da solo appena la CPU accetta. Per un blocco dati nomina il blocco e i tag che lascia senza lettura. Il diario tecnico e l'agente leggono gli stessi passi. Un blocco dati che la CPU non ha, e un indirizzo oltre la fine di un blocco dati, sono detti per quello che sono sul tag che li nomina.
Indirizzamento
Questa sezione e le due seguenti (Tipi di dato, Scritture) riguardano l'accesso per indirizzo; l'accesso per nome è in Leggere per nome.
Un tag S7 viene indirizzato con campi tipizzati, non con una stringa a testo libero. Il pannello li mostra nella scheda Sorgente del tag:
| Campo | Significato | Valori accettati | Predefinito |
|---|---|---|---|
| Area di memoria | L'area di memoria da leggere. | DataBlock, Merker, ProcessInput, ProcessOutput, Timer, Counter |
DataBlock |
| Numero del DB | Quale blocco dati, mostrato solo quando l'area è DataBlock. |
da 0 in su | 1 |
| Byte iniziale | Lo scostamento in byte, dentro l'area, dove il valore comincia. Nelle aree Timer e Counter la casella si chiama Numero del temporizzatore oppure Numero del contatore e chiede invece il numero del temporizzatore o del contatore. |
da 0 in su | 0 |
| Numero di bit (0–7) | La posizione del bit dentro il byte iniziale. Mostrata solo per i tag Boolean. | 0–7 | 0 |
| Lunghezza massima (vuoto = 254) | Il massimo dichiarato di una STRING o di una WSTRING S7, in caratteri. Mostrata solo per i tag String fuori dalle aree Timer e Counter. |
1–254 per una STRING, 1–16382 per una WSTRING, oppure vuoto | vuoto |
| Tipo di testo nel PLC | Il tipo con cui il testo è dichiarato nel blocco, accanto alla sua lunghezza: STRING (un byte per carattere, Windows-1252) o WSTRING (due byte per carattere, UTF-16, qualsiasi scrittura). Mostrato dove compare la Lunghezza massima. |
STRING, WSTRING |
STRING |
Le aree corrispondono alla solita notazione Siemens: Merker è la memoria dei merker
(M), ProcessInput gli ingressi dell'immagine di processo (I/E), ProcessOutput le
uscite dell'immagine di processo (Q/A), e Timer/Counter le aree dei temporizzatori
e dei contatori delle CPU S7-300 e S7-400. Temporizzatori e contatori si indirizzano per numero, non per
byte: Timer con il numero 5 legge T5, e Counter con il numero 3 legge C3. Come si
traducono i classici indirizzi assoluti:
| Indirizzo classico | Tipo di dato | Campi da compilare |
|---|---|---|
DB5.DBD12 che contiene un REAL |
Float | Area DataBlock, numero del DB 5, byte iniziale 12 |
DB1.DBX3.4 |
Boolean | Area DataBlock, numero del DB 1, byte iniziale 3, bit 4 |
DB2.DBW20 che contiene un INT |
Int16 | Area DataBlock, numero del DB 2, byte iniziale 20 |
MW10 |
Int16 | Area Merker, byte iniziale 10 |
M10.3 |
Boolean | Area Merker, byte iniziale 10, bit 3 |
IB2 |
Byte | Area ProcessInput, byte iniziale 2 |
Q4.1 |
Boolean | Area ProcessOutput, byte iniziale 4, bit 1 |
T5 |
Int16 | Area Timer, numero del temporizzatore 5 |
C3 |
Int16 | Area Counter, numero del contatore 3 |
Un tag Boolean legge e scrive esattamente un bit sul bus; non riscrive mai il byte che lo circonda. Ogni altro tipo è indirizzato per byte a partire dal byte iniziale, con la larghezza esatta del suo tipo di dato. La riga in sola lettura Indirizzo di origine (bus) della scheda Sorgente mostra l'indirizzo composto mentre modifichi.
Tipi di dato
Il Tipo di dato del tag decide il tipo nativo S7 sul bus. Sono disponibili tutte e tredici le larghezze native S7:
| Tipo di dato | Tipo S7 | Dimensione sul bus |
|---|---|---|
| Boolean | BOOL | 1 bit |
| SByte | SINT | 1 byte |
| Byte | USINT | 1 byte |
| Int16 | INT | 2 byte |
| UInt16 | UINT | 2 byte |
| Int32 | DINT | 4 byte |
| UInt32 | UDINT | 4 byte |
| Int64 | LINT | 8 byte |
| UInt64 | ULINT | 8 byte |
| Float | REAL | 4 byte |
| Double | LREAL | 8 byte |
| String | STRING o WSTRING | lunghezza massima + 2 byte (STRING), lunghezza massima × 2 + 4 byte (WSTRING) |
| DateTime | DTL | 12 byte |
I valori su più byte usano automaticamente l'ordine dei byte big-endian nativo di S7; non c'è alcuna opzione sull'ordine dei byte perché non serve.
Un tag String legge la disposizione standard della STRING S7: un byte con il massimo dichiarato, un byte con la lunghezza corrente, poi i caratteri, un byte ciascuno in Windows-1252, la tabella codici in cui TIA Portal e gli HMI Siemens mostrano una STRING. Ciò che la stazione scrive è ciò che TIA Portal e l'HMI mostrano ("Peça 12" resta "Peça 12"), e la stazione lo rilegge identico. La Lunghezza massima conta i caratteri e deve corrispondere alla dichiarazione STRING nel blocco (vuoto significa il massimo S7 di 254); il driver trasferisce lunghezza massima + 2 byte a ogni lettura. Un tag DateTime corrisponde alla struttura DTL della famiglia S7-1200/1500 (dall'anno ai nanosecondi); il più vecchio DATE_AND_TIME da 8 byte non viene offerto.
Un tag String il cui Tipo di testo nel PLC è WSTRING legge invece il layout WSTRING S7: una parola con il massimo dichiarato, una parola con la lunghezza attuale, poi i caratteri, due byte ciascuno in UTF-16, quindi accetta qualsiasi scrittura ("中" viene scritto e riletto come "中"). La Lunghezza massima conta sempre caratteri, da 1 a 16382, e deve corrispondere alla dichiarazione WString nel blocco (vuoto significa 254, la lunghezza che TIA Portal dà a una WString dichiarata senza lunghezza); il driver trasferisce lunghezza massima × 2 + 4 byte a ogni lettura. S7comm non può leggere il tipo dalla CPU, quindi deve corrispondere alla variabile: un tag lasciato su STRING davanti a una variabile WString legge e scrive il layout sbagliato. Ogni tag salvato prima che il campo esistesse è una STRING.
Scritture
I tag il cui Accesso è Lettura e scrittura oppure Sola scrittura si possono scrivere. Le scritture indirizzano la stessa area, lo stesso byte e lo stesso bit delle letture: una scrittura Boolean imposta il suo singolo bit, tutto il resto scrive i byte esatti del tipo. Un tag nuovo nasce Sola lettura.
Una scrittura String che occupa più byte della Lunghezza massima viene rifiutata e non viene inviato nulla, mai tagliata alla misura: il diario tecnico e l'agente leggono, per esempio, "The DB1 byte 44 write was not sent: the text takes 21 bytes, and the STRING holds 20." Un testo lungo esattamente quanto la Lunghezza massima viene scritto per intero.
Una scrittura String che contiene un carattere fuori da Windows-1252 (un carattere cinese, per esempio) viene rifiutata allo stesso modo, mai scritta con un punto interrogativo al suo posto: il diario tecnico e l'agente leggono, per esempio, "The DB1 byte 44 write was not sent: the STRING holds Windows-1252 characters only, and '中' (U+4E2D) is not one of them; it fits once the tag's text type in the PLC and the PLC variable are both WSTRING." Il pannello del tag dà lo stesso motivo nella lingua della stazione.
Per scrivere un testo così, dichiara la variabile come WString nel blocco e scegli WSTRING nel Tipo di testo nel PLC del tag. Una WSTRING conta due byte per carattere, e un testo più lungo della sua Lunghezza massima viene rifiutato allo stesso modo, senza inviare nulla: "The DB1 byte 94 write was not sent: the text takes 42 bytes, and the WSTRING holds 40 (20 characters of two bytes)."
Rilevamento
Una CPU letta per nome elenca le sue variabili; S7comm non ne elenca nessuna, e nessuna diffusione trova una CPU. Nella pagina del driver, CPU da scansionare nella scheda Ambito della scansione dice quale CPU: un dispositivo Siemens del driver che legge la sua CPU per nome, scansionato all'host di quel dispositivo e con l'accesso della sua password (il modo in cui una CPU protetta da password elenca le sue variabili), oppure Un indirizzo scritto qui, con l'indirizzo della CPU in Indirizzo della CPU.
Rileva offre la CPU come un dispositivo con le sue variabili come tag: quelle che la
CPU segna come accessibili e visibili dall'HMI, tutte spuntate, con il tipo che dice la
CPU, e in Sola lettura dove la CPU le segna come non scrivibili dall'HMI. L'elenco è un
albero secondo il percorso di ogni nome: il blocco dati, poi ogni struct o istanza di UDT
e ogni array, poi le variabili, ognuna chiamata con la parte finale più corta del suo
nome che nessun'altra variabile condivide (Real_, Valor, Vetor[0]). Spuntare un
ramo spunta o toglie la spunta a tutto ciò che sta sotto, e il ramo dice quante delle sue
variabili sono spuntate; una DTL è una sola variabile. Aggiungi dispositivo crea un
dispositivo che legge per nome con i tag spuntati.
Una CPU che un dispositivo Siemens di questa stazione legge già per nome è quel dispositivo, comunque la scansione l'abbia indicata: la scansione accede con la password di quel dispositivo, e Aggiungi i tag aggiunge le variabili per cui non ha ancora un tag. Nella pagina di un dispositivo che legge per nome, Rileva tag nella scheda Tag fa lo stesso solo per quel dispositivo, con lo stesso albero (vedi Rilevamento). Un dispositivo che legge per indirizzo non offre Rileva tag: aggiungi i suoi tag a mano.
Buono a sapersi
- Le aree Timer e Counter esistono solo sulle CPU S7-300 e S7-400. Un S7-1200 non ha queste aree, e un S7-1500 le rifiuta via S7comm con "Address out of range" anche con PUT/GET consentito; in quel caso, copia il valore del temporizzatore o del contatore in un blocco dati o nella memoria dei merker dal programma del PLC e leggilo da lì. Dove le aree esistono, si indirizzano per numero, non per scostamento in byte: la casella chiede il temporizzatore o il contatore stesso (T0, T1, T2 e C0, C1, C2). Ogni valore è una parola a 16 bit, quindi va abbinato a Int16; un tipo di dato più largo o più stretto viene rifiutato con il nome del tag nel diario tecnico, e gli altri tag del dispositivo continuano a leggere.
- Un PLC irraggiungibile non costa nulla all'avvio: il dispositivo continua a ritentare in secondo piano e i suoi tag leggono cattiva qualità finché la connessione non si stabilisce.
- Un cavo staccato dopo che il dispositivo è connesso viene notato alla lettura successiva: il dispositivo va non connesso, i suoi tag passano a cattiva qualità, e si riconnette da sé quando la rete torna. Un indirizzo che la CPU rifiuta non fa questo, quindi un solo tag scritto male non porta mai giù con sé il resto del dispositivo. Il tag la cui lettura ha trovato il collegamento caduto dice che la connessione con il dispositivo si è persa, nella lingua della stazione, e la pagina Eventi conserva le parole di Sharp7.