Conversion Unity Time vers Time Of Day

Forum traitant des automates industriels de marque Schneider - Telemecanique
Répondre
Avatar du membre
JC87
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2240
Enregistré le : 20 oct. 2015, 13:00
Localisation : Nouvelle Aquitaine

Conversion Unity Time vers Time Of Day

Message par JC87 »

Bonjour,

Je bosse actuellement sur un projet Unity et je bute sur un problème tout con. Je voudrai dans un DFB convertir une variable de type TIME en TOD, ce sont deux variables sur 32 bits et la seule différence c'est que en TOD le premier octet n'est pas utilisé, du coup si je fait un simple move ça ne marche pas. En localisant les variables et en bricolant avec des masques ça devrait le faire mais dans un DFB je ne peut pas localiser et puis c'est pas propre. Il y a surement un truc simple a faire mais je ne vois pas :? si quelqu'un a une idée ?

JC
"On veut faire du zéro défaut mais on a zéro bonhomme et zéro budget, et bien à la fin on a zéro résultat..."
Avatar du membre
Cyril93
Maître du binaire
Maître du binaire
Messages : 484
Enregistré le : 29 oct. 2015, 14:22
Localisation : IDF

Re: Conversion Unity Time vers Time Of Day

Message par Cyril93 »

Salut,

Je vois pas pourquoi tu serais obligé de localiser les variables ?

Sinon, extraire du format time les heures, minutes, secondes rien de bien compliqué, le seul truc relou que je vois c'est si tu à 25h dans le format time parce que le TOD ça doit aller jusqu’à 23:59:59 je pense, du coup ça ferait 1d0h0m1s. Je choisirais le format DT pour être sur de couvrir les 49 jours max du format time, à moins que tu soits sure que ta variable time à convertir ne dépasse pas une journée.
Avatar du membre
JC87
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2240
Enregistré le : 20 oct. 2015, 13:00
Localisation : Nouvelle Aquitaine

Re: Conversion Unity Time vers Time Of Day

Message par JC87 »

En fait ce que j’essaye de faire c'est adapter des blocs Siemens écrit en SCL en Unity et le truc c'est que ces blocs utilisent pas mal de variables Time et TOD hors en SCL ça ne lui pose pas de problème d'affecter un TOD avec un calcul à base de Time alors qu'en Unity ça marche pas, le compilateur me sort une erreur d'incompatibilité de données. Donc soit je revoit le code plus en profondeur soit j'essaye de convertir les Time en TOD mais dans un DFB je sais pas comment manipuler des octets dans une variable TIME ou TOD, c'est surement faisable mais la je vois pas comment faire alors qu'en dehors d'un DBF en localisant les variables on peut manipuler des bouts de variables complexes. Je sais pas si je suis bien clair, on est en fin de semaine et je commence a fatiguer :D

JC
"On veut faire du zéro défaut mais on a zéro bonhomme et zéro budget, et bien à la fin on a zéro résultat..."
Avatar du membre
Cyril93
Maître du binaire
Maître du binaire
Messages : 484
Enregistré le : 29 oct. 2015, 14:22
Localisation : IDF

Re: Conversion Unity Time vers Time Of Day

Message par Cyril93 »

tu as vu ARINT_TO_TOD et TOD_TO_ARINT sur Unity ? associés avec INT_TO_BCD et BCD_TO_INT tu doits pouvoir manipuler les valeurs plus facilement et les mettent dans le format Siemens en les mettant dans un DINT par exemple, après est-ce que unity va faire chier si on mélange des TIME et des DINT dans un calcul je sais pas trop ? Je pense que oui :twisted:

Le format siemens c'est des millisecondes, c'est simple chez eux pour une fois :D
TIME _OF_DAY 32bit Time in steps of 1 ms TOD#0:0:0.0 to TOD#23:59:59.999
Avatar du membre
JC87
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2240
Enregistré le : 20 oct. 2015, 13:00
Localisation : Nouvelle Aquitaine

Re: Conversion Unity Time vers Time Of Day

Message par JC87 »

En effet il y a une grosse différence entre le TOD de Siemens et celui de Schneider. Comme tu le disais celui de Siemens c'est un nombre de ms sur 32 bits alors que celui de Schneider c'est codé sur un format de 32 bits avec l'heure codée dans un champ de 8 bits (2 quartés de poids forts), les minutes codées dans un champ de 8 bits (2 quartés), les secondes codées dans un champs de 8 bits (2 quartés) et les 8 bits de poids faible inutilisés. Du coup je comprend pourquoi en SCL le compilateur ne disait rien puisque que ce ce soit un Time ou un TOD c'est un nombre de ms alors qu'en Schneider il n'y a pas de corrélation directe. De fait je n'ai utilisé que des Time dans mes DFB et ça a l'air de fonctionner. La finalité de tout ça était de convertir les blocs de la librairie OSCAT concernant le calcul des heures de lever et coucher du soleil en fonction de sa position géographique. On en avait parlé ensemble d'ailleurs ici : viewtopic.php?f=15&t=1201&start=10&hilit=horloge ;)

JC
"On veut faire du zéro défaut mais on a zéro bonhomme et zéro budget, et bien à la fin on a zéro résultat..."
Avatar du membre
Ulairi
Expert de l'héxadécimal
Expert de l'héxadécimal
Messages : 366
Enregistré le : 20 oct. 2015, 06:22

Re: Conversion Unity Time vers Time Of Day

Message par Ulairi »

Type TIME = double entier non signé sur 32 bits exprimant un temps en ms
Type TOD = représente les heures, minutes secondes en binaire codé décimal (BCD) dans un format 32 bits

Image

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