[S7-1200]

Forum traitant des automates industriels de marque Siemens.
Répondre
Umberto1974
Asservi son premier moteur
Asservi son premier moteur
Messages : 27
Enregistré le : 25 nov. 2018, 22:18
Localisation : Mechelen

[S7-1200]

Message par Umberto1974 »

Bonjour les pros,

J'aurais besoin de l'avis éclairé d'un ou plusieurs experts.

Voici me question,

Je lis avec un lecteur de code-barres l'heure et les minutes. Je les ai en format string,
par exemple “ 12 53”.

Je dois comparer cela avec l’heure du CPU. Et je dois pouvoir prendre une décision par rapport à la différence.

Merci d’avance en bonne pâque à tous,

Umberto
Avatar du membre
Sycon88
Première mise en service
Première mise en service
Messages : 64
Enregistré le : 22 févr. 2019, 17:43
Localisation : Vosges

Re: [S7-1200]

Message par Sycon88 »

Bonjour Umberto,

Tu peux récupérer la date et l'heure de la cpu via une variable de type DTL.

Ensuite pour lui affecter l'heure automate, tu utilise le bloc RD_SYS_T_DTL sous TIA.

De cette variable la tu peux extraire l'heure, les minutes...

Ensuite tu dois pouvoir isoler les valeurs de ta variable string et les comparer :)
Avatar du membre
LaurentCK
Première mise en service
Première mise en service
Messages : 60
Enregistré le : 24 oct. 2020, 08:41
Localisation : Pizay

Re: [S7-1200]

Message par LaurentCK »

Type de donnée DTL : année-mois-jour-heures:minutes:secondes.nanosecondes
Min. : DTL#1970-01-01-00:00:00.0
Max. : DTL#2262-04-11-23:47:16.854775807
Les valeurs entières des heures et des minutes se trouvent dans les octets 5 (heures) et 6 (minutes)
C'est sûrement le plus simple de tout mettre en minutes depuis minuit...

On peut aussi faire d'abord une conversion DTL_TO_TOD
Mais si vous faites ça, il vous faudra comprendre comment est construit le type de données TOD (TIME_OF_DAY) : double mot qui mémorisent le nombre de millisecondes depuis le début du jour (0:00) comme nombre entier sans signe. TOD#00:00:00.000 à TOD#23:59:59.999
La conversion vers un double entier non signé (UDINT) par exemple se fera facilement avec l'instruction T_CONV

Au passage si on avait à travailler sur du DATE_AND_TIME, voilà comment est construit le type de données DT (DATE_AND_TIME) 8 octets bien compartimentés qui mémorisent les indications concernant la date et l'heure en format BCD.
Octet 3 : Heure ---> de BCD#0 à BCD#23
Octet 4 : Minute ---> de BCD#0 à BCD#59
Après 1 conversions pour chacun de ces deux nombres BCD vers 2 nombres entiers, puis 1 multiplication pour chacun, puis une addition, on retombe facilement sur un nombre de millisecondes depuis le début du jour.



Vous devriez trouver votre bonheur avec ces instructions :


Notamment pour convertir les données texte du lecteur de code-barres (String / Char)

S_CONV : Convertir la chaîne de caractères (S7-1200, S7-1500)
STRG_VAL : Convertir la chaîne de caractères en valeur numérique (S7-1200, S7-1500)
Strg_TO_Chars : Convertir la chaîne de caractères en Array of CHAR (S7-1200, S7-1500)
LEFT : Lire les caractères de gauche d'une chaîne de caractères (S7-1200, S7-1500)
RIGHT : Lire les caractères de droite d'une chaîne de caractères (S7-1200, S7-1500)
MID : Lire les caractères au milieu d'une chaîne de caractères (S7-1200, S7-1500)
DELETE : Supprimer des caractères dans la chaîne de caractères (S7-1200, S7-1500)
INSERT : Insérer des caractères dans une chaîne de caractères (S7-1200, S7-1500)
REPLACE : Remplacer des caractères dans une chaîne de caractères (S7-1200, S7-1500)

Sinon, pour travailler sur les heures & minutes :

T_CONV : Convertir et extraire les temps (S7-1200, S7-1500)
TOD vers UDINT par exemple : UDINT : nombre de millisecondes depuis le début de la journée (0:00).
T_SUB : Soustraire les temps (S7-1200, S7-1500)
T_DIFF : Différence des temps (S7-1200, S7-1500)
Umberto1974
Asservi son premier moteur
Asservi son premier moteur
Messages : 27
Enregistré le : 25 nov. 2018, 22:18
Localisation : Mechelen

Re: [S7-1200]

Message par Umberto1974 »

Merci à tous.
Répondre