Problème pour additionner des variables de temps
Problème pour additionner des variables de temps
Bonjour , je travaille sur un projet d'où je suis bloquer sur les variables de temps .Je dois utiliser des heures fixes . J'utilise le logicielle visilogic.
Pour mon exemple, j'ai 2 variables , l'heure et les minutes a soustraire . Variables 1 : 14h00 , variable 2 : 20mn , le résultat est 13h40.
Dans mon IHM , j'utilise les variables TIMES FONCTIONS et sous ladder je les convertir en NUM TO BCD, puis j'utilise le bloc SUB pour le calcul et le résultat converti en BCD TO NUM .
Et pour finir , je le compare avec SI 31 pour enclencher un évènement.
Le problème est je m'arrive pas a faire le calcul et le comparer vu que les valeurs sont différentes.
Je me comprend ou est le problème et je vous remercie d'avance pour être aide .
Pour mon exemple, j'ai 2 variables , l'heure et les minutes a soustraire . Variables 1 : 14h00 , variable 2 : 20mn , le résultat est 13h40.
Dans mon IHM , j'utilise les variables TIMES FONCTIONS et sous ladder je les convertir en NUM TO BCD, puis j'utilise le bloc SUB pour le calcul et le résultat converti en BCD TO NUM .
Et pour finir , je le compare avec SI 31 pour enclencher un évènement.
Le problème est je m'arrive pas a faire le calcul et le comparer vu que les valeurs sont différentes.
Je me comprend ou est le problème et je vous remercie d'avance pour être aide .
- itasoft
- Mi homme - Mi automate

- Messages : 7806
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Problème pour additionner des variables de temps
Slts,
Connais pas visilogic mais il faut tout convertir en minutes
14h=840 mn – 20 mn = 820 mn puis remettre en heures/minutes
820 / 60 = 13 h 820 MOD 60 = 40 mn résultat = 13 H 40 mn
Connais pas visilogic mais il faut tout convertir en minutes
14h=840 mn – 20 mn = 820 mn puis remettre en heures/minutes
820 / 60 = 13 h 820 MOD 60 = 40 mn résultat = 13 H 40 mn
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: Problème pour additionner des variables de temps
J'ai penser a faire cela , mais je dois utiliser du bcd .
Pour mon projet on m'oblige d'utiliser le BCD pour les variables 1 (MI 1) et variables 2 (MI2) .
Dans mon exemple , lorsque que l'on rentre l'HEURE (ex: 5h ) et 10 mn , je dois lancer une sonnerie pour 5h50 et a 6h une deuxième sonnerie se lance .
Je pense que mon erreur vient de ADD MI1 et MI2 et le résultat est plus en BCD. Je me vois pas comment je peux faire .
Je joins 2 photo de mon program.
Pour mon projet on m'oblige d'utiliser le BCD pour les variables 1 (MI 1) et variables 2 (MI2) .
Dans mon exemple , lorsque que l'on rentre l'HEURE (ex: 5h ) et 10 mn , je dois lancer une sonnerie pour 5h50 et a 6h une deuxième sonnerie se lance .
Je pense que mon erreur vient de ADD MI1 et MI2 et le résultat est plus en BCD. Je me vois pas comment je peux faire .
Je joins 2 photo de mon program.
- itasoft
- Mi homme - Mi automate

- Messages : 7806
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Problème pour additionner des variables de temps
slts,
Si on rentre l’heure et les minutes en BCD (5h10mn) et si l’heure de l’horloge du système est aussi en BCD on compare du BCD avec du BCD pas de pb, sinon il faut convertir tout en décimal d’abord
ex:
Sonnerie = (BCD_Heures_Horloge = BCD_Heures_entrée) AND (BCD_Minutes_Horloge = BCD_Minutes_entrée)
Si on rentre l’heure et les minutes en BCD (5h10mn) et si l’heure de l’horloge du système est aussi en BCD on compare du BCD avec du BCD pas de pb, sinon il faut convertir tout en décimal d’abord
ex:
Sonnerie = (BCD_Heures_Horloge = BCD_Heures_entrée) AND (BCD_Minutes_Horloge = BCD_Minutes_entrée)
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: Problème pour additionner des variables de temps
Bonjour,
Pourquoi tu définis pas sur ton IHM un champs BCD (heure minute) directement qui te donnerait HeureMinute_BCD?
Ou si ce n'est pas possible, un champs Entier (heure_Entrée), un champs entier (Minute_Entrée) et ensuite dans l'API tu convertis ainsi :
HeureMinute_Entrée = Heure_Entrée *100 + Minute_Entrée
HeureMinute_BCD = NUM TO BCD(HeureMinute_Entrée) Syntaxe supposée pour convertir par ta fonction NUM TO BCD
Il faudrait commencer par indiquer le format de SI31.
C'est sans doute ce format TIMES qui pose problème.
Pourquoi tu définis pas sur ton IHM un champs BCD (heure minute) directement qui te donnerait HeureMinute_BCD?
Ou si ce n'est pas possible, un champs Entier (heure_Entrée), un champs entier (Minute_Entrée) et ensuite dans l'API tu convertis ainsi :
HeureMinute_Entrée = Heure_Entrée *100 + Minute_Entrée
HeureMinute_BCD = NUM TO BCD(HeureMinute_Entrée) Syntaxe supposée pour convertir par ta fonction NUM TO BCD
Il faudrait commencer par indiquer le format de SI31.
Re: Problème pour additionner des variables de temps
Merci de t'on aide.
Aujourd'hui je me suis concentré , sur le calcule . Quand j'aurais réussi, je me concentrerai sur SI 31 pour comparer l'heure .
J'ai fait comme tu as dit , sous visilogic , j'ai utiliser NUN TO BCD pour le calcul et le résultat BCD TO NUN afficher sur min ihm .
J'ai réussi a faire addition des variables de temps mais pas a soustraire . Ex : 12h40 - 10 mn = 12h36 ou 12h - 10 mn = 12h2C.
Il doit avoir une raison pour cette erreur , j'ai essayer de soustraire 6 (hex 110 ) comme je vois sur internet , mais c'est pas cela .
Aujourd'hui je me suis concentré , sur le calcule . Quand j'aurais réussi, je me concentrerai sur SI 31 pour comparer l'heure .
J'ai fait comme tu as dit , sous visilogic , j'ai utiliser NUN TO BCD pour le calcul et le résultat BCD TO NUN afficher sur min ihm .
J'ai réussi a faire addition des variables de temps mais pas a soustraire . Ex : 12h40 - 10 mn = 12h36 ou 12h - 10 mn = 12h2C.
Il doit avoir une raison pour cette erreur , j'ai essayer de soustraire 6 (hex 110 ) comme je vois sur internet , mais c'est pas cela .
Re: Problème pour additionner des variables de temps
Bonjour,
en Hexa : 16#1240 (16# cela dépend du système, automate que tu utilise)
en Binaire : 0001 0010 0100 0000
Donc si tu soustrais les deux valeurs BCD '1240' - '0010' tu dois obtenir '1230' en BCD.
Lorsque tu soustrais 12h00min par 00h10min, alors que ces valeurs sont en BCD, c'est '1200'-'0010' qu'il faut soustraire : tu dois coder tes 10 minutes en BCD et non en décimal comme tu l'as fait. C'est pour cela que tu obtiens '1236' car '0010' BCD font 16 en décimal et non 10.
Tu peux faire ces calculs sur PC avec une calculatrice scientifique, cela te permettra de mieux comprendre et définir clairement les bonnes opérations à réaliser.
Si dans une valeur en BCD contenant les heuresMinutes, tu as besoin d'extraire les heures ou les minutes, voici comment faire :
Heures = HeureMinute/256 (256 étant une valeur décimale)
Minutes =HeureMinute AND 255 (255 étant une valeur décimale)
Petit rappel, en BCD, chaque chiffre est codé sur un quarte. Dans ton exemple 12h40, si tu code cette valeur est en BCD, ('1240') elle s'écrit :J'ai réussi a faire addition des variables de temps mais pas a soustraire . Ex : 12h40 - 10 mn = 12h36 ou 12h - 10 mn = 12h2C.
Il doit avoir une raison pour cette erreur , j'ai essayer de soustraire 6 (hex 110 ) comme je vois sur internet , mais c'est pas cela .
en Hexa : 16#1240 (16# cela dépend du système, automate que tu utilise)
en Binaire : 0001 0010 0100 0000
Donc si tu soustrais les deux valeurs BCD '1240' - '0010' tu dois obtenir '1230' en BCD.
Lorsque tu soustrais 12h00min par 00h10min, alors que ces valeurs sont en BCD, c'est '1200'-'0010' qu'il faut soustraire : tu dois coder tes 10 minutes en BCD et non en décimal comme tu l'as fait. C'est pour cela que tu obtiens '1236' car '0010' BCD font 16 en décimal et non 10.
Tu peux faire ces calculs sur PC avec une calculatrice scientifique, cela te permettra de mieux comprendre et définir clairement les bonnes opérations à réaliser.
Si dans une valeur en BCD contenant les heuresMinutes, tu as besoin d'extraire les heures ou les minutes, voici comment faire :
Heures = HeureMinute/256 (256 étant une valeur décimale)
Minutes =HeureMinute AND 255 (255 étant une valeur décimale)
Re: Problème pour additionner des variables de temps
Merci durando pour t'on aide et désoler de me pas avoir donner de nouvelle ; J'ai étais a fond sur mon projet.
J'ai trouver la raison pour laquelle ma soustraction me fonctionnait pas . c'était du au format de mémoire utiliser .
Mes heures , minutes et secondes sont en format ML (32 bits ) et les minutes , secondes en MI ( 16 bits ) , si je mets pas les 2 sous ML ma soustraction était pas bonne déjà en hexadécimal .
J'ai attendu que l'on envoie des cours de bcd cette semaine , du coup je vais étudier cela ce week-end.
J'essayerai cette semaine un essai en bcd pour voir si j'obtient bien le résultat souhaiter.
Je tiendrai en courant si cela marche .
J'ai trouver la raison pour laquelle ma soustraction me fonctionnait pas . c'était du au format de mémoire utiliser .
Mes heures , minutes et secondes sont en format ML (32 bits ) et les minutes , secondes en MI ( 16 bits ) , si je mets pas les 2 sous ML ma soustraction était pas bonne déjà en hexadécimal .
J'ai attendu que l'on envoie des cours de bcd cette semaine , du coup je vais étudier cela ce week-end.
J'essayerai cette semaine un essai en bcd pour voir si j'obtient bien le résultat souhaiter.
Je tiendrai en courant si cela marche .

