El tiempo de ciclo de la tarea es uno de los valores prácticos que los ingenieros pueden utilizar para comprender cómo se comporta una aplicación de controlador durante el tiempo de ejecución. Si una tarea toma más tiempo del esperado, puede afectar la temporización del proceso, la sincronización, la resolución de problemas y la estabilidad del sistema.
CODESYS es un entorno de desarrollo para la programación de aplicaciones de controlador según IEC 61131-3. Se utiliza en sistemas de automatización y control donde las tareas deben ejecutarse de manera fiable dentro de las condiciones de temporización definidas.
En los proyectos de CODESYS, monitorizar el tiempo de ciclo real de una tarea puede ayudar a los ingenieros a optimizar las prestaciones, identificar cuellos de botella y detectar el comportamiento de temporización que puede afectar la secuencia de la máquina. Esto es especialmente importante cuando las tareas de control, las tareas de comunicación o las funciones relacionadas con el movimiento necesitan mantenerse dentro de una ventana de temporización específica.
Este tutorial muestra dos maneras de medir el tiempo real de ciclo de tarea en CODESYS:
Ambos métodos pueden ser útiles. La elección correcta depende de la precisión que necesite y de qué tan profundamente desee analizar el comportamiento de las tareas.
El tiempo de ciclo de la tarea describe cuánto tiempo tarda una tarea u operación específica dentro de un sistema de control distribuido. En una aplicación de controlador, este valor ayuda a entender si el código se está ejecutando dentro del rango de tiempo esperado.
Monitorear el tiempo de ciclo de la tarea puede proporcionar soporte para varias tareas de ingeniería:
Un tiempo de ciclo de tarea estable no resuelve todos los problemas de control, pero proporciona a los ingenieros un punto de partida útil. Si el tiempo de ciclo real es más largo de lo esperado o varía considerablemente, puede ser necesario analizar la aplicación más a fondo.
En CODESYS, una tarea define cuándo y cómo se ejecuta un programa o función. El tiempo de ciclo de la tarea es el tiempo requerido para completar esa ejecución.
Por ejemplo, una tarea cíclica puede configurarse para ejecutarse cada pocos milisegundos. Si el código dentro de la tarea toma demasiado tiempo, el controlador podría no completar la tarea dentro de la ventana de tiempo prevista. Esto puede afectar las prestaciones, la sincronización del proceso o el comportamiento del movimiento.
Medir el tiempo de ciclo de la tarea puede resultar un desafío porque el valor efectivo puede estar influenciado por varios factores:
Es por eso que el método de medida es importante. Un método de temporización simple puede ser suficiente para verificaciones básicas. Puede ser necesario un método más preciso cuando se requiere temporización a nivel de microsegundos o información específica de la tarea.
Una forma sencilla de medir el tiempo transcurrido en CODESYS es utilizar la función integrada TIME().
La lógica básica es sencilla:
1. Capture el tiempo de inicio antes de que se ejecute la sección de código
2. Ejecute el código que usted desea medir
3. Capture el tiempo de finalización después de que se haya ejecutado la sección de código
4. Reste el tiempo de inicio del tiempo de finalización
5. Utilice el resultado como la medida del tiempo transcurrido
En el ejemplo, se utilizan dos bucles FOR para simular una tarea que consume tiempo. La función TIME() captura el tiempo antes y después de la sección del bucle, y la diferencia entre esos valores proporciona un tiempo estimado de ejecución de la tarea.
Este método puede ser útil cuando desea una indicación rápida de cuánto tarda una sección de código.
El ejemplo muestra un tiempo de ciclo medido de la tarea que normalmente varía entre 6 y 8 milisegundos. Se puede añadir un gráfico de seguimiento para monitorear la magnitud medida a lo largo del tiempo. En el ejemplo, el tiempo de ciclo ocasionalmente salta a 10 milisegundos.
Esa variación importa. Si una tarea de movimiento suave se configura con un tiempo de ciclo de 4 milisegundos o menos, superar ese tiempo de ciclo configurado puede causar excepciones. Esto hace que la sincronización de tareas sea especialmente relevante para aplicaciones con requisitos estrictos de movimiento o sincronización.
La función TIME() es útil porque es sencilla. Requiere poco código, es fácil de entender y puede añadirse rápidamente a un proyecto existente.
Puede ser una buena opción cuando:
Sin embargo, la función TIME() también tiene límites. Proporciona valores con una resolución a nivel de milisegundos. Eso puede no ser lo suficientemente preciso para aplicaciones que requieren análisis a nivel de microsegundos.
Este método también requiere un seguimiento manual del tiempo. Es necesario definir dónde comienza la medida, dónde termina y cómo se calcula el tiempo transcurrido. Esto es aceptable para verificaciones simples, pero puede ser menos conveniente cuando se necesita información específica de tiempo de ejecución de la tarea dentro de un programa más grande.
Para una medición más precisa del tiempo de ciclo de las tareas, la biblioteca CmpIecTask suele ser la mejor opción.
La biblioteca CmpIecTask está incluida con CODESYS. Esta biblioteca proporciona funciones para acceder a la información del Gestor de Tareas IEC.
Una vez que la biblioteca se agrega a un proyecto de CODESYS, la inicialización requiere solo una pequeña cantidad de código. Después de la inicialización, el programa puede acceder a una estructura con información detallada de las tareas, incluidos valores como el tiempo real del ciclo de tarea y el tiempo promedio del ciclo.
Este enfoque es más específico para tareas que medir manualmente el tiempo antes y después de una sección de código. En lugar de crear su propia lógica de temporización, utilice la información de tareas proporcionada a través de la biblioteca.
En el ejemplo original, se utiliza la misma carga de trabajo simulada para que puedan compararse los métodos de medida. La diferencia es que la biblioteca CmpIecTask gestiona la información sobre el tiempo de ciclo de las tareas de manera más directa.
La biblioteca CmpIecTask ofrece varias ventajas cuando se necesita una sincronización de tareas más precisa.
En primer lugar, puede integrarse de manera flexible en diferentes partes del programa. Esto facilita el acceso a la información de las tareas sin necesidad de colocar manualmente las medidas de tiempo de inicio y fin alrededor de cada sección del código.
En segundo lugar, la biblioteca gestiona el registro y el cálculo de la información del tiempo de ciclo de las tareas. Esto reduce el esfuerzo manual y disminuye el riesgo de errores en la lógica de medida.
En tercer lugar, la biblioteca proporciona valores con una resolución de nivel de microsegundos. Esto es más preciso que los valores obtenidos con la función TIME() y puede ser importante para aplicaciones con requisitos de tiempo más estrictos.
El principal inconveniente es que la biblioteca debe añadirse al proyecto CODESYS. Sin embargo, para muchas aplicaciones, se trata de un inconveniente menor en comparación con la precisión adicional y la información específica de tareas que proporciona.
Ambos métodos pueden ayudarle a entender el tiempo de las tareas, pero no están igualmente adaptados para cada situación.
Utilice la función TIME() cuando necesite una verificación sencilla y rápida, y una resolución a nivel de milisegundos sea suficiente. Es fácil de implementar y útil para comparaciones básicas de temporización.
Utilice la biblioteca CmpIecTask cuando necesite información más precisa de las tareas, quiera evitar la lógica de temporización manual o necesite una resolución a nivel de microsegundos para el análisis de las prestaciones.
Para las tareas de movimiento, las tareas de sincronización o las aplicaciones de controlador con requisitos de temporización más estrictos, la biblioteca CmpIecTask suele ser la mejor opción.
La temporización de tareas en CODESYS es especialmente relevante cuando se deben evaluar las prestaciones del controlador, el comportamiento de movimiento o la sincronización de máquinas durante la puesta en funcionamiento o la resolución de problemas.
Dentro del entorno de software de Festo, CODESYS puede formar parte de un flujo de trabajo de ingeniería y control más amplio. Festo AX Controls admite el control determinista en tiempo real en la programación estándar según IEC 61131-3, incluido CODESYS, y también admite lenguajes de alto nivel como C/C++, C# y Python.
Festo Automation Suite proporciona soporte para la puesta en funcionamiento, la programación y la diagnosis. Puede transferir, desde la topología al entorno de programación CODESYS, los dispositivos de controles AX, como CEPE, sin pasos adicionales de configuración, para que los usuarios puedan continuar directamente con el encadenamiento de secuencias de la máquina.
Utilice este tutorial como un método práctico de CODESYS para verificar la temporización de las tareas. Luego continúe con el software, las licencias o el recurso de aprendizaje de Festo que se adecue a su siguiente paso de ingeniería.