Problème réglage de l'heure par programmation

Forum traitant des automates industriels de marque Schneider - Telemecanique
Répondre
JulienG
Code sa première boucle
Code sa première boucle
Messages : 13
Enregistré le : 18 nov. 2016, 09:35

Problème réglage de l'heure par programmation

Message par JulienG » 17 févr. 2017, 14:57

Bonjour,

Je viens vers vous pour une petit problème pour régler l'heure d'un automate M340. Je m'explique, je reçois par une supervision 6 INT:
Synchro_annee = 2017 (en décimal)
Synchro_mois = 02
Synchro_jour = 17
Synchro_heure = 14
Synchro_minute = 36
Synchro_seconde = 00

En plus de cela, je reçois une variable booléenne Top_horloge pour prendre en compte les valeurs. Dans la pratique, je reçois d'abord les INT et ensuite le bit.

Mon problème étant que je n'arrive pas à faire la "conversion" des mots en décimal en héxa pour ensuite les mettre dans les mots %SW50 à %SW53, mon code est le suivant:

IF TC_Top_horloge THEN
%S50:=1;
%SW50:=Synchro_seconde AND 16#FF00;
%SW51:=(Synchro_heure AND 16#FF00)+(Synchro_minute AND 16#00FF);
%SW52:=(Synchro_mois AND 16#FF00)+(Synchro_jour AND 16#00FF);
%SW53:=Synchro_annee;
END_IF;

TON_524 (IN := TC_Top_horloge AND %S50(*BOOL*),
PT := t#1s(*TIME*),
Q => Fin_synchro(*BOOL*),
ET => Int_synchro(*TIME*));

IF Fin_synchro THEN
TC_Top_horloge:=0;
%S50:=0;
END_IF;


Concrètement la supervision m'envoie 2017 pour l'année par exemple et j'aimerai récupérer cette valeur en héxa et donc avoir 16#2017 et non pas la conversion de 2017 en hexa.

Si quelqu'un a une idée pour me débloquer un peu, ça serait super.

Merci d'avance =)

Avatar de l’utilisateur
Ulairi
Codeur fou
Codeur fou
Messages : 293
Enregistré le : 20 oct. 2015, 06:22

Re: Problème réglage de l'heure par programmation

Message par Ulairi » 17 févr. 2017, 15:25

JulienG a écrit :
17 févr. 2017, 14:57
Mon problème étant que je n'arrive pas à faire la "conversion" des mots en décimal en héxa pour ensuite les mettre dans les mots %SW50 à %SW53,
Bonjour,

les mots %SW50 à %SW53 ne sont pas au format hexadécimal mais au format BCD !

Image
Enseignant en BTS électrotechnique (Pas taper sur l'intru !)

JulienG
Code sa première boucle
Code sa première boucle
Messages : 13
Enregistré le : 18 nov. 2016, 09:35

Re: Problème réglage de l'heure par programmation

Message par JulienG » 17 févr. 2017, 16:28

Merci, je me suis rendu compte de mon problème, je l'ai corrigé en appliquant mes masques et en utilisant la fonction INT_TO_BCD et ça marche bien.

shahid
Apprend le binaire
Apprend le binaire
Messages : 1
Enregistré le : 13 juil. 2019, 11:34

Re: Problème réglage de l'heure par programmation

Message par shahid » 13 juil. 2019, 11:50

JulienG a écrit :
17 févr. 2017, 14:57
Bonjour,

Je viens vers vous pour une petit problème pour régler l'heure d'un automate M340. Je m'explique, je reçois par une supervision 6 INT:
Synchro_annee = 2017 (en décimal)
Synchro_mois = 02
Synchro_jour = 17
Synchro_heure = 14
Synchro_minute = 36
Synchro_seconde = 00

En plus de cela, je reçois une variable booléenne Top_horloge pour prendre en compte les valeurs. Dans la pratique, je reçois d'abord les INT et ensuite le bit.

Mon problème étant que je n'arrive pas à faire la "conversion" des mots en décimal en héxa pour ensuite les mettre dans les mots %SW50 à %SW53, mon code est le suivant:

IF TC_Top_horloge THEN
%S50:=1;
%SW50:=Synchro_seconde AND 16#FF00;
%SW51:=(Synchro_heure AND 16#FF00)+(Synchro_minute AND 16#00FF);
%SW52:=(Synchro_mois AND 16#FF00)+(Synchro_jour AND 16#00FF);
%SW53:=Synchro_annee;
END_IF;

TON_524 (IN := TC_Top_horloge AND %S50(*BOOL*),
PT := t#1s(*TIME*),
Q => Fin_synchro(*BOOL*),
ET => Int_synchro(*TIME*));

IF Fin_synchro THEN
TC_Top_horloge:=0;
%S50:=0;
END_IF;


Concrètement la supervision m'envoie 2017 pour l'année par exemple et j'aimerai récupérer cette valeur en héxa et donc avoir 16#2017 et non pas la conversion de 2017 en hexa.

Si quelqu'un a une idée pour me débloquer un peu, ça serait super.

Merci d'avance =)
bonjour Julien, je suis un peu nouveau à tout ça et donc je serai vraiment reconnaissant si tu peux m'expliquer pourquoi t'as rajouté les 16#00FF ?
en fait, j'ai devant mes yeux un programme pour la synchronisation des horloges de supervision et automate mais je le comprend pas parfaitement

Avatar de l’utilisateur
Apprenti
Première mise en service
Première mise en service
Messages : 53
Enregistré le : 26 oct. 2015, 14:09

Re: Problème réglage de l'heure par programmation

Message par Apprenti » 30 juil. 2019, 14:55

Bonjour shahid,

Dites mois si je me trompe, donc pour séparer 2 valeurs dans un contenu en programmation on utilise les masques.
par exemple le bit système %SW51 contient HOURMIN et donc il faudrait faire un masque 16#00FF pour obtenir les minutes...et parfois il faudrait faire un décalage ou une rotation...

philou77
Dieu du process
Dieu du process
Messages : 943
Enregistré le : 21 oct. 2015, 10:00

Re: Problème réglage de l'heure par programmation

Message par philou77 » 30 juil. 2019, 15:13

Salut !

Oui, tu as tout compris ! :)

Pour reprendre ton exemple
%SW51 = HHMM

en faisant :

un ET avec %SW51 et #00FF on obtient en résultat 00MM
un ET avec %SW51 et #FF00 on obtient HH00 (d'où le décalage à droite de 8 positions pour avoir 00HH )

Cela fait intervenir les tables de vérité BOOLEENES !

Pour le masque
# veut dire hexadécimal
0 = 0000
0 = 0000
F = 1111
F = 1111

on peut naturellement mettre n'importe quelle valeur en masque, il suffit de placer à '1' le(s) bit(s) dont on souhaite la connaitre la valeur !
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D

MiGaNuTs
Codeur fou
Codeur fou
Messages : 209
Enregistré le : 12 nov. 2015, 21:02
Localisation : 45 - Loiret

Re: Problème réglage de l'heure par programmation

Message par MiGaNuTs » 30 juil. 2019, 21:57

philou77 a écrit :
30 juil. 2019, 15:13
Salut !

Oui, tu as tout compris ! :)

Pour reprendre ton exemple
%SW51 = HHMM

en faisant :

un ET avec %SW51 et #00FF on obtient en résultat 00MM
un ET avec %SW51 et #FF00 on obtient HH00 (d'où le décalage à droite de 8 positions pour avoir 00HH )

Cela fait intervenir les tables de vérité BOOLEENES !

Pour le masque
# veut dire hexadécimal
0 = 0000
0 = 0000
F = 1111
F = 1111

on peut naturellement mettre n'importe quelle valeur en masque, il suffit de placer à '1' le(s) bit(s) dont on souhaite la connaitre la valeur !
J’ajouterai juste que %S51 / 256 (ou #100) tu obtient HH directement :)

philou77
Dieu du process
Dieu du process
Messages : 943
Enregistré le : 21 oct. 2015, 10:00

Re: Problème réglage de l'heure par programmation

Message par philou77 » 31 juil. 2019, 11:02

Salut !

+1 MiGanuts.

la division et le décalage sont de proches parents dans le fonctionnement (mais cela ne fonctionne que pour les puissances de 2) !
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D

Répondre