Page 1 sur 1

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

Posté : 17 févr. 2017, 14:57
par JulienG
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 =)

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

Posté : 17 févr. 2017, 15:25
par Ulairi
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

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

Posté : 17 févr. 2017, 16:28
par JulienG
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.

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

Posté : 13 juil. 2019, 11:50
par shahid
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

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

Posté : 30 juil. 2019, 14:55
par Apprenti
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...

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

Posté : 30 juil. 2019, 15:13
par philou77
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 !

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

Posté : 30 juil. 2019, 21:57
par MiGaNuTs
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 :)

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

Posté : 31 juil. 2019, 11:02
par philou77
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) !