Date et Heure
Logique Temporelle
Maîtrisez l'horloge de votre automate. De l'horodatage précis d'événements aux calculs de temps complexes et conversions de formats, contrôlez chaque milliseconde.
Pourquoi gérer le temps dans un automate ?
La gestion du temps est cruciale pour l'automatisation industrielle. Elle permet l'archivage précis des événements de production, le déclenchement de tâches de maintenance planifiées, le calcul des temps de cycle machine et la synchronisation de systèmes distribués via des protocoles NTP.
Les automates Siemens modernes proposent des types de données avancés comme le DTL (Date and Time Long) qui offre un accès direct aux composants individuels (Année, Mois, Jour, Heure) sans manipulation de bits complexe, simplifiant grandement la programmation par rapport aux anciens formats DT.
Lecture
Accès aux horloges système et locale
T_CONV — Extraction Heure Système
T_CONVDescription
Extrait des composants spécifiques d'une valeur date/heure ou convertit entre formats. Essentiel pour obtenir des heures/minutes lisibles à partir d'un horodatage brut.
Usage courant
Lorsque vous devez afficher uniquement l'heure sur un IHM à partir d'une variable Date_And_Time complète.
Conseils d'expert
Utilisez T_CONV pour convertir un TOD (Time_Of_Day) en String pour un journal de bord.
Vérifiez la compatibilité des types d'entrée et de sortie pour éviter les erreurs de débordement.
En SCL, cette instruction est souvent gérée implicitement par de simples affectations.
RD_SYS_T — Lire l'heure système
RD_SYS_TDescription
Lit l'heure système actuelle du CPU (UTC). Contrairement à RD_LOC_T, elle n'inclut pas le passage à l'heure d'été ni les décalages de fuseau horaire.
Usage courant
Idéal pour l'horodatage interne (logging) où une référence temporelle continue et sans saut est requise.
Conseils d'expert
Utilisez toujours l'UTC pour le stockage en base de données pour garantir la cohérence globale.
La sortie RET_VAL donne des informations d'état (ex: si l'horloge est synchronisée).
Combinez avec RD_LOC_T si vous devez afficher à la fois l'heure 'Technique' et 'Humaine'.
Arithmétique
Calculs sur les durées et horodatages
T_ADD — Addition de durées
T_ADDDescription
Ajoute une durée (Time ou LTime) à un point temporel spécifique. Gère correctement les reports de minutes, heures et jours.
Usage courant
Calcul d'une heure d'expiration ou d'un point de redémarrage planifié (ex: heure actuelle + 24h).
Conseils d'expert
Très utile pour implémenter des watchdogs personnalisés avec des durées dynamiques.
Utilisez les types LTime pour une précision à la nanoseconde sur les CPU S7-1500.
Si le résultat dépasse la date maximale (Année 2262), le CPU définit un état d'erreur.
T_DIFF — Différence de temps
T_DIFFDescription
Calcule la différence entre deux horodatages et renvoie le résultat sous forme de durée (Time ou LTime).
Usage courant
Mesure de la durée exacte d'une étape de processus ou calcul du temps de fonctionnement d'une machine.
Conseils d'expert
Parfait pour les calculs de TRS (Taux de Rendement Synthétique).
Soustraire une date plus grande d'une plus petite renvoie une valeur Time négative.
Sur S7-1200/1500, utilisez des variables DTL pour accéder plus facilement aux composants du résultat.
Conversion
Changements de formats et chaînes de caractères
T_CONV — DATE_AND_TIME ↔ DTL
T_CONVDescription
Convertit l'ancien format DATE_AND_TIME (8 octets) vers le format moderne DTL ou inversement.
Usage courant
Lors de l'interfaçage de code hérité ou de blocs de communication avec une nouvelle logique optimisée S7-1500.
Conseils d'expert
Privilégiez le DTL pour tous les nouveaux projets pour éviter la complexité du BCD.
La conversion en DTL vous permet d'écrire 'MaVar.MONTH' directement dans votre code.
Attention à la précision des millisecondes qui peut être tronquée dans certains formats.
DT_TO_STRING — Sérialisation
DT_TO_STRDescription
Convertit une valeur date/heure en une chaîne de caractères lisible. STRING_TO_DT fait l'inverse.
Usage courant
Envoi d'horodatages vers un fichier CSV sur carte mémoire ou communication avec une API web.
Conseils d'expert
La chaîne de sortie suit le format ISO 8601 (AAAA-MM-JJ-HH:MM:SS.ms).
Utilisez STRING_TO_DT pour parser des dates reçues d'une base de données SQL externe.
Notez que les opérations sur les Strings sont gourmandes en CPU ; utilisez-les avec parcimonie.
DATE_AND_TIME vs DTL
Choisir la bonne structure temporelle
| Caractéristique | DATE_AND_TIME (Hérité) | DTL (Moderne) |
|---|---|---|
| Taille | 8 Octets | 12 Octets |
| Encodage | BCD (Difficile à lire) | Entiers (Lecture directe) |
| Accès aux composants | Nécessite des masques de bits | Structurel (Var.Mois) |
| Plage de dates | 1990 à 2089 | 1970 à 2262 |
| Support S7-1200/1500 | Compatibilité uniquement | Natif & Recommandé |
| Précision | 10 ms | 1 Nanoseconde |
Questions Fréquentes (FAQ)
Quelle est la différence entre l'heure système et l'heure locale ?
L'heure système (RD_SYS_T) est toujours en UTC, offrant une référence stable. L'heure locale (RD_LOC_T) s'ajuste selon votre fuseau horaire et les règles d'heure d'été (DST) configurées dans le CPU.
Comment synchroniser l'horloge de l'automate avec un serveur ?
Activez le protocole NTP dans la configuration matérielle du CPU. Renseignez l'IP de votre serveur de temps, et l'automate ajustera automatiquement son horloge interne.
Pourquoi mon DATE_AND_TIME affiche des valeurs bizarres en Hexa ?
Le format DT utilise le codage BCD. Une valeur de 25 en Décimal est stockée comme 16#25 en BCD. Utilisez toujours les instructions de conversion ou le DTL pour lire les valeurs correctement.
Puis-je calculer la différence entre deux DTL directement ?
En SCL, vous pouvez simplement utiliser l'opérateur '-' entre deux variables DTL. TIA Portal appellera automatiquement l'instruction T_DIFF en arrière-plan.