Siemens S7
Collegare i PLC Siemens S7 tramite S7comm - telaio e slot, aree di memoria, indirizzamento tipizzato per byte e bit, 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.
Connessione
| Campo | Significato | Predefinito |
|---|---|---|
| Indirizzo host | Indirizzo IP o nome host della CPU (oppure del modulo CP che le sta davanti). | vuoto |
| Telaio / Slot | 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 |
| 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.
Indirizzamento
Un tag S7 viene indirizzato con campi tipizzati, non con una stringa a testo libero. Il pannello li mostra nella scheda Origine 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 S7. Mostrata solo per i tag String fuori dalle aree Timer e Counter. |
da 1 in su, oppure vuoto | vuoto |
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 S7. 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 Origine 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 | lunghezza massima + 2 byte |
| 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 ASCII. La Lunghezza massima 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.
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.
Rilevamento
S7comm non ha un rilevamento a diffusione, quindi per questo driver il Connector non mostra alcun pulsante Rileva. Aggiungi il dispositivo e i suoi tag a mano.
Buono a sapersi
- Sulle CPU S7-1200/1500 l'indirizzamento assoluto di S7comm richiede due impostazioni nel progetto Siemens: Consenti accesso tramite comunicazione PUT/GET sulla CPU, e l'accesso ottimizzato ai blocchi disattivato su ogni blocco dati che indirizzi. Un DB ottimizzato non ha scostamenti in byte da indirizzare.
- Le aree Timer e Counter 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, 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.