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 =)
Problème réglage de l'heure par programmation
Re: Problème réglage de l'heure par programmation
Bonjour,
les mots %SW50 à %SW53 ne sont pas au format hexadécimal mais au format BCD !

Enseignant en BTS électrotechnique (Pas taper sur l'intru !)
Re: Problème réglage de l'heure par programmation
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
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 ?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 =)
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
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...
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
- Mi homme - Mi automate

- Messages : 2142
- Enregistré le : 21 oct. 2015, 10:00
- Localisation : Ile de France
Re: Problème réglage de l'heure par programmation
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 !
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 ! 
-
MiGaNuTs
- Mi homme - Mi automate

- Messages : 1572
- Enregistré le : 12 nov. 2015, 21:02
- Localisation : 45 - Loiret
- Contact :
Re: Problème réglage de l'heure par programmation
J’ajouterai juste que %S51 / 256 (ou #100) tu obtient HH directementphilou77 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 !
-
philou77
- Mi homme - Mi automate

- Messages : 2142
- Enregistré le : 21 oct. 2015, 10:00
- Localisation : Ile de France
Re: Problème réglage de l'heure par programmation
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) !
+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 ! 



