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 mémoire, adressage typé par octet et par bit, noms de variable, les réglages IHM et les types de donnée natifs.

Afficher en Markdown

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.

C'est l'accès Par adresse. Chaque équipement choisit son Accès : Par adresse, comme ci-dessus, ou Par nom par 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 : revenir en arrière retrouve donc 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 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
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 fixe. 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 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.

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.

Un String ou un 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 un 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 :

  1. 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.
  2. 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).
  3. 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, non 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 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é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 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 ou d'un WSTRING S7, en caractères. Montré seulement pour les tags de texte hors des zones Timer et Counter. 1 à 254 pour un STRING, 1 à 16382 pour un 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). Montré 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 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 des CPU S7-300 et S7-400. 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 de la valeur 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 ou WSTRING longueur maximale plus 2 octets (STRING), longueur maximale × 2 plus 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 de texte lit la disposition standard du STRING S7 : 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 un 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 tel quel. La longueur maximale compte des caractères et 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.

Un tag de texte dont le Type de texte dans l'automate est WSTRING lit plutôt 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 à un WString déclaré sans longueur); le pilote transfère la longueur maximale × 2 plus 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 un 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 bit unique, 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. Un 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 lorsque PUT/GET est autorisé; il faut alors copier la valeur de la temporisation ou du compteur dans un bloc de données ou dans la mémoire de marqueurs à partir du programme de l'automate, puis la lire là. Là où les zones existent, elles 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 technique, 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. 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.