Siemens S7
Relier des automates Siemens S7 par adresse en S7comm ou par nom de variable en S7CommPlus : le champ Accès, châssis et emplacement, zones de mémoire, adressage typé par octet et par bit, noms de variable, les réglages IHM et les types de donnée natifs.
Le pilote Siemens S7 parle aux automates Siemens S7 en S7comm, le protocole Step 7 classique porté par ISO-on-TCP. Il emploie l'adressage absolu (zone de 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 renseignez les champs ci-dessous ; le volet ne montre que les champs que ce protocole emploie.
C'est l'accès Par adresse. Chaque équipement choisit son Accès : Par adresse, comme ci-dessus, ou Par nom en S7CommPlus, le protocole qu'emploient TIA Portal et les IHM Siemens, où chaque tag nomme sa variable comme TIA Portal l'écrit et où la CPU dit son type.
Accès
| Aspect | Par adresse | Par nom |
|---|---|---|
| Protocole | S7comm sur ISO-on-TCP, port 102 | S7CommPlus sur TLS 1.3 dans ISO-on-TCP, port 102 |
| CPU | S7-300, S7-400, S7-1200, S7-1500 | S7-1500 en micrologiciel V2.9 ou ultérieur, S7-1200 en micrologiciel V4.5 ou ultérieur, configurées dans TIA Portal V17 ou ultérieur |
| Champs de l'équipement | Hôte, Châssis / Emplacement | Hôte, Nom d'utilisateur et Mot de passe, tous deux facultatifs |
| Ce qu'un tag nomme | Zone, numéro de DB, octet et bit, et son type de donnée | Le nom de la variable, par exemple GanterOpt.Real_ ; la CPU dit le type |
| Sur la CPU | PUT/GET autorisé et blocs de données sans accès optimisé (Préparer la CPU) | Rien à changer : les blocs de données optimisés se lisent, et PUT/GET n'est pas nécessaire |
| Découverte | Aucune | Les variables de la CPU (Découverte) |
Un équipement créé maintenant démarre Par nom. Un équipement enregistré avant que ce
choix existe continue de lire Par adresse, comme il a toujours lu. Changer d'accès
garde à la fois les adresses typées des tags et les noms des variables, si bien que
revenir en arrière retrouve tout à sa place. Par nom, l'en-tête de l'équipement montre
l'endpoint sans châssis ni emplacement, par exemple
s7://192.168.0.2?access=name. Une CPU qui ne répond pas à l'accès par nom le dit sur
la page de l'équipement (Une CPU sans l'accès par nom).
Connexion
| Champ | Sens | 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 |
| Accès | Par adresse ou Par nom (Accès). | Par nom |
| Châssis / Emplacement | Par adresse seulement. Les numéros de châssis et d'emplacement de la CPU, tels que la configuration matérielle Siemens les définit. Deux zones de nombre sur une ligne : le châssis d'abord, l'emplacement ensuite. | 0 / 0 |
| Nom d'utilisateur / Mot de passe | Par nom seulement, tous deux facultatifs : le mot de passe de la protection de la CPU, quand son niveau d'accès en demande un, et un nom d'utilisateur seulement pour une CPU qui gère des utilisateurs. Enregistrés protégés sur cet ordinateur. | vide |
| 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 l'endpoint 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 sur le châssis 0, emplacement 0 ou 1 ; une CPU S7-300 typique se trouve au châssis 0, emplacement 2 ; les châssis S7-400 varient avec la configuration. Un mauvais emplacement fait échouer la connexion plutôt que de lire de fausses données.
Chaque tag peut régler son propre Intervalle de scrutation (ms) ; une valeur de tag à 0 retombe sur la période de l'équipement.
Lire par nom
Un tag d'un équipement qui lit par nom nomme sa variable dans le champ Nom de variable
de la carte Source de la valeur, comme TIA Portal l'écrit : le bloc de données et la
variable, un point avant un membre, un élément de tableau entre crochets. Les guillemets
doubles de TIA Portal peuvent être saisis ("GanterOpt".Real_) et sont retirés.
| Variable dans TIA Portal | Nom de variable |
|---|---|
Real_ dans le bloc de données GanterOpt |
GanterOpt.Real_ |
Valor de l'instance d'UDT Udt_ |
GanterOpt.Udt_.Valor |
Élément 0 du tableau Vetor |
GanterOpt.Vetor[0] |
La DTL DataHora |
GanterOpt.DataHora : un seul tag, une date et heure |
Il n'y a ni zone, ni numéro de DB, ni octet à saisir : la CPU dit où se trouve la variable et de quel type elle est, et le pilote la lit comme le type de donnée du tag :
| Type dans la CPU | Type de donnée | Remarque |
|---|---|---|
| Bool | Boolean | |
| Byte, USInt ; SInt | Byte ; SByte | Non signé ; signé |
| Word, UInt ; Int | UInt16 ; Int16 | Non signé ; signé |
| DWord, UDInt ; DInt | UInt32 ; Int32 | Non signé ; signé |
| LWord, ULInt ; LInt | UInt64 ; Int64 | Les 64 bits, exacts |
| Real ; LReal | Float ; Double | |
| Char, String | String | Windows-1252, comme par adresse |
| WChar, WString | String | UTF-16, toute écriture |
| Time, S5Time | Int32 | Millisecondes |
| LTime | Int64 | Nanosecondes |
| Time_Of_Day | UInt32 | Millisecondes depuis minuit, moins de 24 h |
| Date, Date_And_Time, DTL, LDT | DateTime | Date seule ; date et heure |
La découverte donne à chaque tag le type de donnée et l'unité (ms, ns) de sa variable. Un tag créé à la main prend le type de donnée que vous choisissez, et la valeur de la CPU y est convertie.
Une String ou une WString s'écrit en entier, à la longueur déclarée dans le bloc, que le pilote lit sur la variable avant la première écriture : un texte plus long est refusé avec les deux longueurs et rien n'est envoyé, et une String refuse un caractère hors de Windows-1252. Une DTL se lit et s'écrit en entier, comme une date et heure ; ses huit champs ne sont jamais proposés séparément, parce qu'un champ écrit seul accepte n'importe quelle valeur (mois 90 compris). Une valeur hors de la plage de son type (un Time_Of_Day de 24 h ou plus, 40000 pour un Int) est refusée avec la plage et rien n'est envoyé. Un nom que la CPU n'a pas est l'erreur du tag et le dit ; un champ de DTL nommé seul reçoit le conseil de nommer la DTL.
Les réglages IHM
TIA Portal tient trois réglages par variable d'un bloc de données, dans les colonnes du bloc. La station les respecte comme le font l'IHM et le serveur OPC UA de Siemens, quoi que la CPU laisse passer :
| Réglage dans TIA Portal | Quand il est décoché |
|---|---|
| Accessible from HMI/OPC UA/Web API | La variable n'est ni lue ni écrite : l'erreur du tag nomme le réglage, et la découverte la laisse de côté. |
| Visible in HMI engineering | La découverte laisse la variable de côté ; un tag qui la nomme à la main la lit normalement. |
| Writable from HMI/OPC UA/Web API | La variable est en lecture seule : une écriture est refusée en nommant le réglage, l'Accès du tag propose Lecture seule et dit pourquoi, et la découverte la propose en Lecture seule. |
Une CPU sans l'accès par nom
Une CPU qui accepte la connexion et ne répond pas à l'accès par nom (une S7-1500 avant le micrologiciel V2.9, une S7-1200 avant la V4.5, un projet configuré dans un TIA Portal antérieur à la V17, ou une CPU qui ne parle que S7comm) laisse l'équipement hors ligne. La page de l'équipement le dit dans un avis, à la place de l'erreur : ce dont la CPU a besoin, où TIA Portal montre le micrologiciel (celui que la CPU exécute dans Online & diagnostics, la version que nomme le projet dans les propriétés de la CPU, sous General > Catalog information) et les trois issues :
- Mettre à jour le micrologiciel de la CPU, régler la même version pour la CPU dans le projet TIA Portal et charger la configuration matérielle. Mettre à jour le micrologiciel seul ne suffit pas.
- Mettre l'Accès sur Par adresse, avec PUT/GET autorisé et des blocs de données sans accès optimisé (Préparer la CPU).
- Lire la CPU par son propre serveur OPC UA (une S7-1500, ou une S7-1200 à partir du micrologiciel V4.4) avec le pilote OPC UA.
Chaque tag de l'équipement porte le même avis sur sa propre page, et l'avis disparaît de lui-même dès que la CPU répond par nom. Le journal technique et l'agent lisent les mêmes étapes dans l'erreur de l'équipement.
Préparer la CPU
Cette section concerne l'accès par adresse ; un équipement qui lit par nom n'a besoin d'aucun de ces réglages.
Une S7-1200 ou S7-1500 ne sert l'adressage absolu de S7comm qu'avec deux réglages qui lui sont propres, tous deux faits dans TIA Portal et chargés dans la CPU. Une S7-300 ou S7-400 n'a besoin d'aucun des deux.
| Réglage | Où dans TIA Portal | Sans lui |
|---|---|---|
| Permit access with PUT/GET communication from remote partner, coché | Ouvrez la configuration des appareils de la CPU, sélectionnez la CPU, puis Properties > General > Protection & Security > Connection mechanisms. Chargez la configuration matérielle (Download to device > Hardware configuration) : un chargement du programme seul ne l'emporte pas. | La CPU accepte la connexion et refuse chaque lecture et chaque écriture. L'équipement reste connecté et ses tags se lisent en mauvaise qualité. |
| Optimized block access, décoché, sur chaque bloc de données que la station lit | Dans l'arborescence du projet, sous Program blocks, faites un clic droit sur le bloc de données, puis Properties > General > Attributes. Compilez le bloc et chargez-le. La colonne Offset du bloc montre alors où commence chaque variable, ce que prend l'Octet de début d'un tag. | La CPU ne sert aucun octet du bloc par adresse. Ses tags se lisent en mauvaise qualité, et les autres tags de l'équipement continuent de lire. |
Changer Optimized block access réinitialise le bloc de données au chargement : ses variables reviennent à leurs valeurs de départ. La mémoire de marqueurs (M), les entrées (I) et les sorties (Q) sont toujours adressables et ne demandent aucun changement. Un bloc de données qui doit rester optimisé peut se lire autrement : le programme de l'automate copie les valeurs que la station lit vers un bloc de données sans accès optimisé, ou vers la mémoire de marqueurs, et les tags y pointent ; ou la station lit l'automate par son propre serveur OPC UA (S7-1500 ; S7-1200 à partir du micrologiciel 4.4) avec le pilote OPC UA.
Quand la CPU refuse à cause de l'un ou l'autre réglage, la page de l'équipement dit lequel, avec ces étapes, dans un avis qui disparaît de lui-même dès que la CPU accepte. Pour un bloc de données, il nomme le bloc et les tags qu'il rend muets. Le journal technique et l'agent lisent les mêmes étapes. Un bloc de données que la CPU n'a pas, et une adresse au-delà de la fin d'un bloc de données, sont dits pour ce qu'ils sont sur le tag qui les nomme.
Adressage
Cette section et les deux suivantes (Types de donnée, Écritures) concernent l'accès par adresse ; l'accès par nom est dans Lire par nom.
Un tag S7 est adressé par des champs typés, pas par une chaîne en texte libre. Le volet les montre dans la carte Source de la valeur du tag :
| Champ | Sens | Valeurs acceptées | Défaut |
|---|---|---|---|
| Zone | La zone de mémoire à lire. | DataBlock, Merker, ProcessInput, ProcessOutput, Timer, Counter |
DataBlock |
| Numéro de DB | Quel bloc de données, affiché seulement quand la zone est DataBlock. |
0 et plus | 1 |
| Octet de début | 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 plus | 0 |
| Bit (0 à 7) | La position du bit dans l'octet de début. Affiché seulement pour les tags booléens. | 0-7 | 0 |
| Longueur maximale (vide = 254) | Le maximum déclaré d'une STRING ou d'une WSTRING S7, en caractères. Affichée seulement pour les tags String hors des zones Timer et Counter. |
1-254 pour une STRING, 1-16382 pour une WSTRING, ou vide | vide |
| Type de texte dans l'automate | Le type sous lequel le texte est déclaré dans le bloc, à côté de sa longueur : STRING (un octet par caractère, Windows-1252) ou WSTRING (deux octets par caractère, UTF-16, toute écriture). Affiché là où figure la Longueur maximale. |
STRING, WSTRING |
STRING |
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/E), ProcessOutput les
sorties de l'image du procédé (Q/A), et Timer/Counter les zones de temporisations et de compteurs
des CPU S7-300 et S7-400. Les temporisations et les compteurs s'adressent par numéro, pas par octet : Timer avec
le numéro 5 lit T5, et Counter avec le numéro 3 lit C3. Pour traduire les
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ébut 12 |
DB1.DBX3.4 |
Boolean | Zone DataBlock, numéro de DB 1, octet de début 3, bit 4 |
DB2.DBW20 portant un INT |
Int16 | Zone DataBlock, numéro de DB 2, octet de début 20 |
MW10 |
Int16 | Zone Merker, octet de début 10 |
M10.3 |
Boolean | Zone Merker, octet de début 10, bit 3 |
IB2 |
Byte | Zone ProcessInput, octet de début 2 |
Q4.1 |
Boolean | Zone ProcessOutput, octet de début 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. Tous les autres types sont adressés à l'octet de début avec la largeur exacte de leur type de donnée. La ligne Adresse source (bus) en lecture seule de la carte Source de la valeur montre l'adresse assemblée au fil de la saisie.
Types de donnée
Le Type de donnée du tag décide du type S7 natif sur le bus. Les treize largeurs natives 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 ou WSTRING | longueur maximale + 2 octets (STRING), longueur maximale × 2 + 4 octets (WSTRING) |
| 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 String lit la disposition STRING S7 standard : un octet de maximum déclaré, un octet de longueur courante, puis les caractères, un octet chacun en Windows-1252, la page de code dans laquelle TIA Portal et les IHM Siemens affichent une STRING. Ce que la station écrit est ce que TIA Portal et l'IHM affichent (« Peça 12 » reste « Peça 12 »), et la station le relit à l'identique. La longueur maximale compte des caractères et doit correspondre à la déclaration STRING du bloc (vide signifie le maximum S7 de 254) ; le pilote transfère longueur maximale + 2 octets par lecture. Un tag DateTime correspond à la structure DTL de la famille S7-1200/1500 (de l'année aux nanosecondes) ; l'ancien DATE_AND_TIME de 8 octets n'est pas proposé.
Un tag String dont le Type de texte dans l'automate est WSTRING lit à la place la disposition WSTRING S7 : un mot pour le maximum déclaré, un mot pour la longueur actuelle, puis les caractères, deux octets chacun en UTF-16, si bien qu'il accepte toute écriture ("中" est écrit et relu tel quel). La Longueur maximale compte toujours des caractères, de 1 à 16382, et doit correspondre à la déclaration WString du bloc (vide signifie 254, la longueur que TIA Portal donne à une WString déclarée sans longueur) ; le pilote transfère longueur maximale × 2 + 4 octets par lecture. S7comm ne peut pas lire le type dans la CPU, il doit donc correspondre à la variable : un tag laissé en STRING face à une variable WString lit et écrit la mauvaise disposition. Tout tag enregistré avant l'existence de ce champ est une STRING.
É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 unique bit, tout le reste écrit les octets exacts du type. Un nouveau tag démarre en Lecture seule.
Une écriture String qui prend plus d'octets que la Longueur maximale est refusée et rien n'est envoyé, jamais tronquée à la taille : le journal technique et l'agent lisent, par exemple, "The DB1 byte 44 write was not sent: the text takes 21 bytes, and the STRING holds 20." Un texte exactement aussi long que la Longueur maximale est écrit en entier.
Une écriture String qui contient un caractère hors de Windows-1252 (un caractère chinois, par exemple) est refusée de la même façon, jamais écrite avec un point d'interrogation à sa place : le journal technique et l'agent lisent, par exemple, "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." Le volet du tag donne la même raison dans la langue de la station.
Pour écrire un tel texte, déclarez la variable en WString dans le bloc et choisissez WSTRING dans le Type de texte dans l'automate du tag. Une WSTRING compte deux octets par caractère, et un texte plus long que sa Longueur maximale est refusé de la même façon, sans rien envoyer : "The DB1 byte 94 write was not sent: the text takes 42 bytes, and the WSTRING holds 40 (20 characters of two bytes)."
Découverte
Une CPU lue par nom énumère ses variables ; S7comm n'en énumère aucune, et aucune diffusion ne trouve une CPU. Sur la page du pilote, CPU à balayer dans la carte Portée du balayage dit quelle CPU : un équipement Siemens du pilote qui lit sa CPU par nom, balayé à l'hôte de cet équipement et connecté avec son mot de passe (la façon dont une CPU protégée par mot de passe énumère ses variables), ou Une adresse saisie ici, avec l'adresse de la CPU dans Adresse de la CPU.
Découvrir propose la CPU comme un équipement avec ses variables comme tags : celles
que la CPU marque accessibles et visibles depuis l'IHM, toutes cochées, avec le type que
dit la CPU, et en Lecture seule là où la CPU les marque non inscriptibles depuis l'IHM.
La liste est une arborescence par le chemin de chaque nom : le bloc de données, puis
chaque structure ou instance d'UDT et chaque tableau, puis les variables, chacune nommée
par la fin la plus courte de son nom qu'aucune autre variable ne partage (Real_,
Valor, Vetor[0]). Cocher une branche coche ou décoche tout ce qui est dessous, et la
branche dit combien de ses variables sont cochées ; une DTL est une seule variable.
Ajouter un équipement crée un équipement qui lit par nom avec les tags cochés.
Une CPU qu'un équipement Siemens de cette station lit déjà par nom est cet équipement, quelle que soit la façon dont le balayage l'a nommée : le balayage se connecte avec le mot de passe de cet équipement, et Ajouter les tags ajoute les variables pour lesquelles il n'a pas encore de tag. Sur la page d'un équipement qui lit par nom, Découvrir les tags dans la carte Tags fait la même chose pour ce seul équipement, avec la même arborescence (voir Découverte). Un équipement qui lit par adresse ne propose pas Découvrir les tags : ajoutez ses tags à la main.
Bon à savoir
- Les zones Timer et Counter n'existent que sur les CPU S7-300 et S7-400. Un S7-1200 n'a pas ces zones, et un S7-1500 les refuse par S7comm avec « Address out of range » même avec PUT/GET autorisé ; dans ce cas, copiez la valeur de la temporisation ou du compteur dans un bloc de données ou dans la mémoire de marqueurs depuis le programme de l'automate, et lisez-la à cet endroit. Là où les zones existent, elles s'adressent par numéro, pas 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 tient sur un mot de 16 bits, associez-la donc à Int16 ; un type de donnée plus large ou plus étroit est refusé, le tag étant nommé dans le journal technique, et les autres tags de l'équipement continuent de se lire.
- Un automate injoignable ne coûte rien au démarrage : l'équipement continue de réessayer en arrière-plan et ses tags se lisent en mauvaise qualité jusqu'à ce que la connexion s'établisse.
- Un câble débranché après que l'équipement est en ligne 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, si bien qu'un tag mal saisi n'emporte jamais le reste de l'équipement avec lui. Le tag dont la lecture a trouvé le lien coupé dit que la connexion à l'équipement a été perdue, dans la langue de la station, et la page Événements garde les mots de Sharp7.