Siemens S7
Relier des automates Siemens S7 par S7comm : châssis et emplacement, zones mémoire, adressage typé par octet et par bit, et les types de donnée natifs.
Le pilote Siemens S7 parle à des automates Siemens S7 par S7comm, le protocole Step 7 classique porté par ISO-on-TCP. Il emploie un adressage absolu : zone mémoire, numéro de bloc de données, octet et bit, si bien qu'il fonctionne sans aucun export de symboles depuis le projet d'ingénierie. Ajoutez un équipement sous le pilote Siemens S7 dans le Connector et remplissez les champs ci-dessous; le volet ne montre que les champs que ce protocole emploie.
Connexion
| Champ | Sens | Par défaut |
|---|---|---|
| Hôte | L'adresse IP ou le nom d'hôte de la CPU (ou du module CP qui la précède). | vide |
| Châssis / Emplacement | Les numéros de châssis et d'emplacement de la CPU, tels que la configuration matérielle Siemens les fixe. Deux zones de nombre sur une ligne : le châssis d'abord, l'emplacement ensuite. | 0 / 0 |
| Intervalle de scrutation (ms) | La période de lecture de tout l'équipement, pour les tags qui ne la remplacent pas. | 1 000 |
Le port TCP est fixé à 102 (ISO-on-TCP) : il n'y a donc pas de champ de port. L'en-tête de
l'équipement montre le point de terminaison assemblé, par exemple s7://192.168.0.2:0:1
(hôte, châssis, emplacement).
Le châssis et l'emplacement doivent correspondre au matériel : les CPU S7-1200 et S7-1500 répondent en châssis 0, emplacement 0 ou 1; une CPU S7-300 typique est en châssis 0, emplacement 2; les châssis S7-400 varient selon la configuration. Un mauvais emplacement fait échouer la connexion plutôt que de lire de mauvaises données.
Chaque tag peut poser son propre intervalle de scrutation (ms); une valeur de 0 sur un tag retombe sur l'intervalle de l'équipement.
Adressage
Un tag S7 est adressé par des champs typés, non par une chaîne en texte libre. Le volet les montre dans la carte Source du tag :
| Champ | Sens | Valeurs acceptées | Par défaut |
|---|---|---|---|
| Zone | La zone mémoire à lire. | DataBlock, Merker, ProcessInput, ProcessOutput, Timer, Counter |
DataBlock |
| Numéro de DB | Quel bloc de données, montré seulement quand la zone est DataBlock. |
0 et au-delà | 1 |
| Octet de départ | Le décalage en octets, dans la zone, où la valeur commence. Dans les zones Timer et Counter, la zone s'intitule Numéro de temporisation ou Numéro de compteur et demande le numéro de la temporisation ou du compteur à la place. |
0 et au-delà | 0 |
| Bit (0 à 7) | La position du bit dans l'octet de départ. Montré seulement pour les tags booléens. | 0 à 7 | 0 |
| Longueur maximale (vide = 254) | Le maximum déclaré d'un STRING S7. Montré seulement pour les tags de texte hors des zones Timer et Counter. |
1 et au-delà, ou vide | vide |
Les zones correspondent à la notation Siemens habituelle : Merker est la mémoire de marqueurs
(M), ProcessInput les entrées de l'image du procédé (I ou E), ProcessOutput les
sorties de l'image du procédé (Q ou A), et Timer et Counter les zones de temporisations et
de compteurs S7. Les temporisations et les compteurs sont adressés par numéro, non par octet :
Timer avec le numéro 5 lit T5, et Counter avec le numéro 3 lit C3. La traduction des
adresses absolues classiques :
| Adresse classique | Type de donnée | Champs à saisir |
|---|---|---|
DB5.DBD12 portant un REAL |
Float | Zone DataBlock, numéro de DB 5, octet de départ 12 |
DB1.DBX3.4 |
Booléen | Zone DataBlock, numéro de DB 1, octet de départ 3, bit 4 |
DB2.DBW20 portant un INT |
Int16 | Zone DataBlock, numéro de DB 2, octet de départ 20 |
MW10 |
Int16 | Zone Merker, octet de départ 10 |
M10.3 |
Booléen | Zone Merker, octet de départ 10, bit 3 |
IB2 |
Byte | Zone ProcessInput, octet de départ 2 |
Q4.1 |
Booléen | Zone ProcessOutput, octet de départ 4, bit 1 |
T5 |
Int16 | Zone Timer, numéro de temporisation 5 |
C3 |
Int16 | Zone Counter, numéro de compteur 3 |
Un tag booléen lit et écrit exactement un bit sur le bus; il ne réécrit jamais l'octet qui l'entoure. Tout autre type est adressé à l'octet de départ, sur la largeur exacte de son type de donnée. La ligne en lecture seule Adresse source (bus) de la carte Source montre l'adresse assemblée au fil de vos modifications.
Types de donnée
Le type de donnée du tag décide du type natif S7 sur le bus. Les treize largeurs natives de S7 sont disponibles :
| Type de donnée | Type S7 | Taille sur le bus |
|---|---|---|
| Boolean | BOOL | 1 bit |
| SByte | SINT | 1 octet |
| Byte | USINT | 1 octet |
| Int16 | INT | 2 octets |
| UInt16 | UINT | 2 octets |
| Int32 | DINT | 4 octets |
| UInt32 | UDINT | 4 octets |
| Int64 | LINT | 8 octets |
| UInt64 | ULINT | 8 octets |
| Float | REAL | 4 octets |
| Double | LREAL | 8 octets |
| String | STRING | longueur maximale plus 2 octets |
| DateTime | DTL | 12 octets |
Les valeurs sur plusieurs octets emploient automatiquement l'ordre gros-boutiste natif de S7; il n'y a pas d'option d'ordre des octets parce qu'aucune n'est nécessaire.
Un tag de texte lit la disposition standard du STRING S7 : un octet de maximum déclaré, un octet de longueur courante, puis des caractères ASCII. La longueur maximale doit correspondre à la déclaration du STRING dans le bloc (vide veut dire le maximum S7 de 254); le pilote transfère la longueur maximale plus 2 octets par lecture. Un tag DateTime correspond à la structure DTL de la famille S7-1200 et S7-1500 (de l'année aux nanosecondes); l'ancien DATE_AND_TIME de 8 octets n'est pas offert.
Écritures
Les tags dont l'accès est Lecture et écriture ou Écriture seule peuvent être écrits. Les écritures adressent la même zone, le même octet et le même bit que les lectures : une écriture booléenne pose son bit unique, tout le reste écrit les octets exacts du type. Un nouveau tag démarre en Lecture seule.
Découverte
S7comm n'a pas de découverte par diffusion : le Connector ne montre donc aucun bouton Découvrir pour ce pilote. Ajoutez l'équipement et ses tags à la main.
Bon à savoir
- Sur les CPU S7-1200 et S7-1500, l'adressage absolu de S7comm exige deux réglages dans le projet Siemens : Autoriser l'accès par communication PUT/GET sur la CPU, et l'accès optimisé aux blocs désactivé sur chaque bloc de données que vous adressez. Un DB optimisé n'a aucun décalage en octets à adresser.
- Les zones Timer et Counter sont adressées par numéro, non par décalage en octets : la zone demande la temporisation ou le compteur lui-même (T0, T1, T2 et C0, C1, C2). Chaque valeur est un mot de 16 bits : associez-la donc à Int16; un type de donnée plus large ou plus étroit est refusé avec le tag nommé dans le journal, et les autres tags de l'équipement continuent de lire.
- Un automate injoignable ne coûte rien au démarrage : l'équipement continue de réessayer en arrière-plan et ses tags lisent une mauvaise qualité jusqu'à ce que la connexion aboutisse.
- Un câble débranché après la mise en ligne de l'équipement est remarqué à la lecture suivante : l'équipement passe hors ligne, ses tags passent en mauvaise qualité, et il se reconnecte de lui-même une fois le réseau revenu. Une adresse que la CPU refuse ne fait pas cela : un seul tag mal saisi n'emporte donc jamais le reste de l'équipement avec lui.