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.

Visualizza come Markdown

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:

  1. 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.
  2. Impostare l'Accesso su Per indirizzo, con PUT/GET consentito e blocchi dati senza accesso ottimizzato (Preparare la CPU).
  3. 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.