Accueil > Forum > Programmation IEC 61131 (LogicLab) > Gérer les horaires dans le langage ST
- Ce sujet a 3 réponses, 2 participants et a été mis à jour pour la dernière fois 13 années, 9 mois da Sergio Bertana.
-
auteurPost
-
Juillet 27, 2010 à 3: pm 04 #34883Anonymeinactif
Je dois gérer un timing en langage ST. Auparavant, j'utilisais vos produits Picolog et ma programmation en langage "C".
La fonction IsMsecTimeOver () était disponible dans vos bibliothèques, ce qui rendait l'exécution de la synchronisation extrêmement simple. Il y a quelque chose comme ça sur SlimLine ?
Juillet 27, 2010 à 3: pm 07 #36500Sergio BertanaAdministrateur du forumLa fonction IsMsecTimeOver () est basée sur le contrôle du tick du système, qui incrémente automatiquement chaque 1 mS dans les systèmes Picolog.
Dans les systèmes SlimLine à partir du langage ST, il est possible de tester la variable système SysTime de type UDINT, qui augmente chaque fois que la valeur maximale est atteinte, elle est réinitialisée. En pratique, pour exécuter le chronométrage de la même manière que ce que vous avez fait en «C» sur les systèmes Picolog, vous pouvez faire quelque chose de similaire au programme ci-dessous qui effectue l'inversion de la sortie Do00M00 toutes les secondes. La variable RefTimeBuf doit être déclaré comme type UDINT.
(* Heure de référence initiale à la première boucle de programme. *)
IF SysFirstLoop ALORS
RefTimeBuf: = SysTime; (* Enregistrer le temps de référence *)
END_IF;(* Vérifier si 1 Sec est passé et inverser l'état logique DoOOM00. *)
SI (SysTime> (RefTimeBuf + 1000)) ALORS
RefTimeBuf: = SysTime; (* Enregistrer le temps de référence *)
Do00M00: = NON (Do00M00);
END_IF;Juillet 27, 2010 à 3: pm 23 #36501Sergio BertanaAdministrateur du forumLa fonction existe aussi SysGetSysTime () qui permet la lecture d'un tick système qui augmente à chaque us, dans ce cas le programme précédent peut être modifié en cours de route.
(* Heure de référence initiale à la première boucle de programme. *)
IF SysFirstLoop ALORS
RefTimeBuf: = SysGetSysTime (TRUE); (* Enregistrer le temps de référence *)
END_IF;(* Vérifier si 1 Sec est passé et inverser l'état logique DoOOM00. *)
SI (SysGetSysTime (TRUE)> (RefTimeBuf + 1000000)) ALORS
RefTimeBuf: = SysGetSysTime (FALSE); (* Enregistrer l'heure de référence *)
Do00M00: = NON (Do00M00);
END_IF;Notez l'appel à SysGetSysTime () avec le drapeau FAUX avoir le même temps utilisé dans la comparaison et ne pas perdre le temps nécessaire pour l'exécution des instructions de comparaison.
Juillet 27, 2010 à 3: pm 52 #36502Sergio BertanaAdministrateur du forumCependant, il y a aussi des blocs fonctionnels eTOF, Minuterie désactivée ed eTON, Minuteur activé que les langages de l'IEC5 peuvent être utilisés dans tous les 61131. Les deux blocs fonctionnels exécutent des temporisations avec un temps définissable en mS.
-
auteurPost
- Vous devez être connecté pour répondre à ce sujet.