Inicio > Foro > Programación IEC 61131 (LogicLab) > Administrar tiempos en lenguaje ST
- Este tema tiene 3 respuestas, 2 participantes y se actualizó por última vez 13 años, hace 9 meses da Sergio Bertana.
-
autorPublicación
-
Julio 27, 2010 en 3: 04 pm #34883Anonimoinactivo
Tengo que gestionar un cronometraje en lenguaje ST. Anteriormente, estaba usando sus productos Picolog y la programación en lenguaje "C".
La función IsMsecTimeOver () estaba disponible en sus bibliotecas, lo que hizo que la ejecución del tiempo fuera extremadamente simple. Hay algo como esto en SlimLine ?
Julio 27, 2010 en 3: 07 pm #36500Sergio BertanaAdministrador del foroLa función IsMsecTimeOver () se basa en el control de control del sistema, que aumenta automáticamente cada 1 mS en los sistemas Picolog.
En sistemas SlimLine desde el lenguaje ST es posible testear la variable de sistema SysTime del tipo UDINT, que aumenta cada vez que se alcanza el valor máximo, se reinicializa. En la práctica, para ejecutar la sincronización de manera similar a lo que hizo en "C" en los sistemas Picolog, puede hacer algo similar al programa siguiente, que realiza la inversión de la salida Do00M00 cada segundo. La variable RefTimeBuf debe ser declarado como tipo UDINT.
(* Tiempo de referencia inicial en el primer ciclo del programa. *)
IF SysFirstLoop ENTONCES
RefTimeBuf: = SysTime; (* Guardar el tiempo de referencia *)
END_IF;(* Compruebe si se pasa 1 Sec e invierta el estado lógico DoOOM00. *)
SI (SysTime> (RefTimeBuf + 1000)) ENTONCES
RefTimeBuf: = SysTime; (* Guardar el tiempo de referencia *)
Do00M00: = NO (Do00M00);
END_IF;Julio 27, 2010 en 3: 23 pm #36501Sergio BertanaAdministrador del foroLa función también existe SysGetSysTime () lo cual permite la lectura de un tick del sistema que aumenta cada uS, en este caso el programa anterior se puede modificar en la forma.
(* Tiempo de referencia inicial en el primer ciclo del programa. *)
IF SysFirstLoop ENTONCES
RefTimeBuf: = SysGetSysTime (TRUE); (* Guardar el tiempo de referencia *)
END_IF;(* Compruebe si se ha pasado 1 segundo e invierta el estado lógico DoOOM00. *)
SI (SysGetSysTime (TRUE)> (RefTimeBuf + 1000000)) ENTONCES
RefTimeBuf: = SysGetSysTime (FALSO); (* Guarde el tiempo de referencia *)
Do00M00: = NO (Do00M00);
END_IF;Tenga en cuenta la llamada a SysGetSysTime () con la bandera FALSO tener el mismo tiempo utilizado en la comparación y no perder el tiempo necesario para la ejecución de las instrucciones de comparación.
Julio 27, 2010 en 3: 52 pm #36502Sergio BertanaAdministrador del foroSin embargo, también hay bloques funcionales eTOF, temporizador desactivado ed eTON, Timer On que los idiomas de IEC5 se pueden usar en todos los 61131. Ambos bloques de función ejecutan temporizaciones con tiempo definible en mS.
-
autorPublicación
- Debe iniciar sesión para responder a este tema.