Capítulo 26: Barra de progreso en EPLAN (SimpleProgress)

5 min de lectura

Parte VII: Barras de progreso - Sección 15: Progress - Nivel: Intermedio


Objetivos de aprendizaje

Al finalizar este capítulo serás capaz de:

  • Implementar la barra de progreso nativa de EPLAN (Progress)
  • Mostrar el avance de tareas largas para evitar que EPLAN parezca congelado
  • Usar BeginPart, EndPart y Step
  • Configurar opciones de cancelación (permitir al usuario abortar)

Requisitos previos

  • Haber completado el Capítulo 22 (Decider)
  • Entender bucles (for, foreach)
  • Conocer System.Threading.Thread.Sleep (para simular carga en ejemplos)

Introducción: El problema del "EPLAN congelado"

Cuando ejecutas un script que tarda mucho tiempo (ej. procesar 500 páginas), la interfaz de EPLAN se congela. El usuario no sabe si el programa está trabajando o si se bloqueó.

Solución: EPLAN proporciona la clase Progress para mostrar una barra de carga estándar.


1. La clase Progress

1.1 Definición y Namespace

La clase Progress se encuentra en Eplan.EplApi.Base.

using Eplan.EplApi.Base;

1.2 Sintaxis básica

// 1. Crear instancia
Progress progress = new Progress("SimpleProgress");

// 2. Configurar (título y máximo)
progress.BeginPart(100, "Procesando datos...");

// 3. Mostrar inmediatamente
progress.ShowImmediately();

// 4. Actualizar en un bucle
for (int i = 0; i < 100; i++)
{
    progress.Step(1); // Avanzar 1 paso
}

// 5. Finalizar
progress.EndPart();

2. Métodos principales

MétodoDescripción
BeginPart(total, título)Inicia la barra con un valor máximo (total) y un título.
ShowImmediately()Fuerza que la barra aparezca instantáneamente (si no, puede tardar un poco).
SetActionText(texto)Cambia el texto descriptivo debajo de la barra.
Step(cantidad)Incrementa el progreso en la cantidad especificada.
EndPart(bool)Cierra la barra. Pasar true para limpiar.
SetAllowCancel(bool)Permite que el usuario cancele el proceso con el botón "Cancelar".

3. Ejemplo práctico: Procesamiento simulado

Vamos a crear un script que simule una tarea larga (como exportar archivos) usando una barra de progreso.

using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;
using System.Threading; // Para Sleep

public class EjemploProgress
{
    [Start]
    public void Function()
    {
        int totalPasos = 20;

        // 1. Iniciar Progress
        Progress progress = new Progress("SimpleProgress");
        progress.SetAllowCancel(true); // Permitir cancelar
        progress.BeginPart(totalPasos, "Iniciando proceso...");
        progress.ShowImmediately();

        try
        {
            for (int i = 0; i < totalPasos; i++)
            {
                // 2. Verificar si el usuario canceló
                if (progress.Canceled())
                {
                    new BaseException("Proceso cancelado por usuario", MessageLevel.Warning).FixMessage();
                    break;
                }

                // 3. Actualizar texto y barra
                progress.SetActionText("Procesando elemento " + (i + 1) + " de " + totalPasos);
                progress.Step(1);

                // IMPORTANTE: Simular trabajo
                Thread.Sleep(200); // 0.2 segundos por paso
            }
        }
        finally
        {
            // 4. Siempre finalizar la barra
            progress.EndPart();
        }
    }
}

Notas sobre el ejemplo:

  • progress.Canceled(): Devuelve true si el usuario presionó Cancelar. Es vital comprobarlo dentro del bucle.
  • try-finally: Asegura que progress.EndPart() se llame incluso si ocurre un error, para que la barra no se quede "pegada" en pantalla.

4. Patrón recomendado: Progress en bloques using

Aunque C# usa IDisposable, la clase Progress de EPLAN API no implementa IDisposable de forma tradicional en versiones antiguas, por lo que el patrón try-finally es el más seguro.

Sin embargo, si quieres encapsular la lógica, asegúrate siempre de cerrar la barra.

Error común: Olvidar llamar a EndPart(). Consecuencia: La barra de progreso sigue visible sobre EPLAN aunque el script haya terminado.


5. Progress vs CommandLineInterpreter

Algunos comandos de CommandLineInterpreter (como export) muestran su propia barra de progreso.

  • Si usas Execute("export"), EPLAN manejará su propia barra.
  • Si tu script hace un bucle que llama muchas veces a comandos rápidos, o procesa lógica propia (leer archivos, cálculos), debes crear la barra Progress.

Resumen

  • Usa Progress para tareas que tomen más de 1-2 segundos.
  • Inicia con BeginPart, avanza con Step, finaliza con EndPart.
  • Comprueba Canceled() si quieres permitir que el usuario aborte.
  • Siempre usa try-finally para garantizar que la barra se cierre.

Conexiones

Capítulo anterior

Capítulo 22: Decider - Tomar decisiones

Próximo capítulo

Capítulo 24: Diálogos simples (Select)

En la próxima parte (Parte V), aprenderemos a usar diálogos de selección estándar de EPLAN, como SelectSimple y SelectFile.