Hi everyone,
As a long-time supporter of the easyE4 since its launch in 2019, I’ve always believed this device has "PLC-grade" potential that is often underutilized. To support the community, I am sharing what I consider a comprehensive standard for Screen Management, Diagnostics, and Advanced Forcing, developed entirely in Structured Text (ST).
The core of this development is the use of Indirect Addressing—the "Queen" of the easyE4’s features—allowing for a compact, scalable, and professional UI without cluttering the program with repetitive markers.
Key Features of the P+D+F Standard:
• "Cross" Navigation: Vertical scroll for 30 System Faults (ID) and Horizontal scroll for 16 Application Faults (Markers).
• PAUSE Mode (Focus): Using P5 (OK) to lock the navigation focus for detailed fault analysis.
• Secure Forcing (The ALT Method): A deliberate logic sequence (ALT + Cursors + ENTER delay) to ensure bypasses are conscious and safe.
• Memory Optimization: Efficient use of Offsets (+16 for permissions, +32 for forcing) to keep the code clean.
• Multi-language Support: Integrated language selector (ready for global projects).
Attached Files:
1. Technical Document: Conceptual overview.
2. PDF Guide: Detailed mapping and logic explanation (English/Spanish).
3. Project File (.e80): Ready-to-run example.
4. Demo Video: Screen handling and UI experience.
https://www.youtube.com/watch?v=LcCdTB0fzi4“A 'Force' is an emergency solution for service continuity; proper notification and security ensure professional accountability.”
I hope this resource helps you squeeze the full potential of your E4 projects. Feel free to share your feedback!
Agustín
¡Hola a todos!
Hoy quiero compartir con la comunidad el que considero primer estándar de gestión de Pantallas, Diagnóstico y Forzados avanzado desarrollado íntegramente en Texto Estructurado (ST) para nuestro querido easyE4.
¿Cansado de llenar tu programa de marcas y comparadores repetitivos para gestionar las alarmas? Este estándar propone una solución compacta, segura y profesional, exprimiendo al máximo el código de E4.
El Concepto: Menos, es Más
La clave de este desarrollo es el uso de Punteros Dinámicos y bucles de control inteligentes. En lugar de programar cada fallo uno a uno, el sistema utiliza un bloque de código que "escanea" las averías activas y las presenta al operario de forma elegante. Desde la propia pantalla (local/remoto), permite ver los fallos o averias presentes, el rearme del fallo y/o el forzado de la función ¡TODO EN UNA PANTALLA DE SEIS LÍNEAS X 16 CARÁCTERES!
Puntos clave del Estándar:
Navegación en "Cruz":
Eje Vertical: Desplazamiento por 30 fallos de Sistema (ID).
Eje Horizontal: Selector de pantallas y gestión de los 16 fallos de Aplicación (Marcas).
Modo PAUSA (Focus): Mediante la tecla P5 (OK), el sistema "secuestra" el foco de navegación, permitiendo al técnico analizar un fallo sin que las pantallas cambien.
Seguridad en Forzados (El método ALT): Se requiere una secuencia lógica (ALT + Cursores + (ENTER+2s)) que garantiza que el forzado es una acción voluntaria y consciente.
Retroalimentación Visual: Un indicador en pantalla (el "cuadradito" de estado) confirma si el forzado está activo, separando la realidad física del sensor de la lógica de bypass aplicada.
Núcleo de la cosa: El bucle REPEAT
He pulido el uso de la instrucción REPEAT para garantizar un control de rango estricto (16 bits), evitando errores de desbordamiento de memoria al incrementar el índice.
¿Por qué usar este estándar?
Más del 50% de tu trabajo de programación profesional ya lo tienes resuelto aquí.
Escalabilidad: ¿Quieres pasar a 8 o 32 fallos? Solo tienes que cambiar la dirección inicial y las constantes.
Ahorro de Memoria: Al usar Offsets (+16 para permisos, +32 para forzados), el código se mantiene limpio y organizado.
Código compacto: Gestión de múltiples fallos en muy pocas líneas.
Interfaz de Usuario (UX): Proporciona al operario una experiencia de manejo similar a la de un HMI.
Un método robusto para quien necesite un diagnóstico real de máquina sin complicaciones siendo muy apropiado para E4.
Observaciones:
El direccionamiento INDIRECTO: Es la herramienta más potente, puedes apuntar y leer IF M[MD100], o escribir THEN M[MD100+32] S=M501, en el mapa de direcciones de operandos. Si eres descuidado/a, el puntero loco escribirá donde no debe y desatará el caos.
Pantallas: Se necesitan pantallas para VER, ENTENDER y MANEJAR y este GESTOR DE PANTALLAS cumple según mi criterio y es la mejor solución para E4.
Alarmas o fallos de sistema: La parte de Alarmas no requiere explicaciones, es lo que es.
Diagnóstico y forzados: En la programación de la aplicación se generarán los “SET” de fallo utilizando los bits indicados en la tabla, SOLO EL “SET” (M449-M464). El bit correspondiente de FORZADO (M481-M496)) se programará “PUENTEANDO” la función del BIT DE FALLO y conectando el funcionamiento alternativo. En la palabra de PERMISOS (M465-M480), se activarán solo los puenteables o forzables.
La acción RESETEA, actúa sobre el bit de fallo y el bit de forzado (los dos).
He retocado al final la aceptación de cambios en RESETEAR Y FORZAR, le he añadido una temporización de 2 segundos con indicador de acción inminente para evitar errores.
El apartado REMANENCIA, lo dejo a elección del usuario.
Me ha parecido mejor ahorrar direcciones utilizando constantes. Si, se facilita el uso, pero es mi deseo que se comprenda y el que lo use, crezca en habilidades.
Es esta una solución que deriva de la necesidad y la experiencia y es proporcionada al producto (E4).
No conviene la utilización Web Server para modificar el funcionamiento del programa. Con ésta herramienta tienes todo el control en el código y es fácil informar (recordar), en tiempo real del estado de fallos activos “FORZADOS” mediante alarmas por email.
¡Un forzado es una solución rápida de emergencia que te permite seguir dando servicio en condiciones degradadas sin alterar seguridades. Las notificaciones de Forzados evitarán el olvido, mejorando así la responsabilidad profesional!
Agustín
----------------------------------------------------------
LISTADO DE PROGRAMA.
ESTANDAR P+D+F
PROGRAMA PRINCIPAL:
0001
0002 (*=========================================================
0003 GESTIÓN DE PANTALLAS (Parte 1)
0004 ==========================================================*)
0005 M505:=P1;M506:=P2;M507:=P3;M508:=P4;(*P1-P4 a Marcas*)
0006 M509:=P5;M510:=P6;M511:=P7;M512:=P8;(*P5-P8 a Marcas*)
0007 MB394:=16;(*Nº BITS APICACIÓN*)MB407:=30;(*Nº BITS SISTEMA*)
0008 M11 R= M504;(*VOLVER A "RESETEA" POR TIEMPO INACTIVIDAD 0m40s*)
0009 MW30:=33153;(* Ejemplo Permisos FORZAR bits: 1000000110000001 LSB*)
0010
0011 UF01 (
0012 NAME := "ScreenPDF",
0013 VERSION := "V1.00",
0014 I1 := D01Q1, (*Pantalla PDF*)
0015 IA1 := 5, (*Cantidad de pantallas en proyecto*)
0016 IA2 := MB64, (*Botones P1-P8*)
0017 IA3 := MB407, (*Cantidad de direcciones de bit de SISTEMA *)
0018 IA4 := MB394, (*Cantidad de direcciones de bit de APLICACIÓN*)
0019 Q1 => M2, (*"P" Indicador de pausa en pantalla*)
0020 Q2 => M3, (*Atenuar luz pantalla*)
0021 QA1 => MB512, (*Número de Pantalla Activa*)
0022 QA2 => MB63, (*Flanco botones P1-P5 +RESETEAR -BIT 8-*)
0023 QA3 => MB406, (* Posicion del puntero en ID_30 *)
0024 QA4 => MB396 (* Posición del puntero en Diag/Force_16 *)
0025 );
0026
0027 (*=========================================================
0028 GESTIÓN DE PANTALLAS (Parte 2)
0029 ==========================================================*)
0030 D01 (EN:=MB512=1);(* PANTALLA Pan+Diag+Force *)
0031 D02 (EN:=MB512=2);(* PANTALLA (reserva) *)
0032 D03 (EN:=MB512=3);(* PANTALLA (reserva) *)
0033 D04 (EN:=MB512=4);(* PANTALLA (reserva) *)
0034 D05 (EN:=MB512=5);(* PANTALLA SELECCIÓN IDIOMA *)
0035 (*=======================================================
0036 LECTURA DE FALLOS DE DIAGNÓSTICO DEL SISTEMA
0037 PRESENTACIÓN INDIRECTA de 30 fallos
0038 ========================================================*)
0039 MD101:=0;(* Indice *) MB405:=0;(* Contador fallos *)
0040 REPEAT
0041 MD101:=MD101+1;
0042 M14:=MD101>0 AND MD101<31;
0043 IF ID[MD101] AND M14 THEN MB405:=MB405+1;END_IF; (* Contador errores Sis. *)
0044 UNTIL MD101>30 OR (MB405>0 AND MB405=MB406 AND D01Q1) (* Ver FALLO en pantalla *)
0045 END_REPEAT;
0046 M13:=MB405>0;
0047 (*=======================================================
0048 LECTURA DE FALLOS DE APLICACIÓN DIAGNÓSTICO Y FORZADO
0049 TRATAMIENTO INDIRECTO de 16 fallos
0050 ========================================================*)
0051 MD100:=448;(* Indice *)MB395:=0;(* Contador de fallos *)
0052 REPEAT
0053 MD100:=MD100+1;
0054 M14:=MD100>448 AND MD100<465;
0055 IF M[MD100] AND M14 THEN MB395:=MB395+1;END_IF; (* Contador de Fallos *)
0056 UNTIL MD100>464 OR (MB395>0 AND MB395=MB396 AND D01Q1) (* Ver FALLO en pantalla *)
0057 END_REPEAT;
0058
0059 IF M[MD100+16] AND M14 THEN M10:=TRUE;ELSE M10:=FALSE;END_IF;(* FORZAR SI/NO *)
0060 IF M[MD100] AND M[MD100+16] AND M11 AND M14 AND D01Q1 THEN
0061 M[MD100+32] S=M501;END_IF; (* ¡FORZAR! *)
0062 IF M[MD100] AND NOT M11 AND M14 AND D01Q1 THEN
0063 M[MD100] R=M501;M[MD100+32] R=M501;END_IF; (* ¡RESETEAR DESFORZAR! *)
0064 IF M[MD100+32] AND M14 THEN M9:=TRUE;ELSE M09:=FALSE;END_IF; (* Ver si está forzado *)
0065 M12:=MB395>0;
0066 (*=======================================================
0067 PROGRAMA DE APLICACIÓN
0068 ========================================================*)
0069
0070 (* PROGRAMA
0071 .
0072 .
0073 .
0074 . *)
0075
0076 (* ALARMA *)
0077 (*AL01 (
0078 EN := ,
0079 T_ := ,
0080 Q1 => ,
0081 BY => ,
0082 E1 =>
0083 );*)
0084
0085 (* FIN DE PROGRAMA *)
UF - ScreenPDF V1.0
0001 (*=========================================================
0002 GESTIÓN DE PANTALLAS
0003 ==========================================================*)
0004 (* I1 D01Q1, Pantalla PDF
0005 IA1 5, Cantidad de pantallas en proyecto
0006 IA2 MB64, Botones P1-P8
0007 IA3 MB407, Cantidad de direcciones de bit de SISTEMA
0008 IA4 MB394, Cantidad de direcciones de bit de APLICACIÓN
0009 Q1 M2, "P" Indicador de pausa en pantalla
0010 Q2 M3, Atenuar luz pantalla
0011 QA1 MB512, Número de Pantalla Activa
0012 QA2 MB63, Flanco botones P1-P5 +RESETEAR -BIT 8-
0013 QA3 MB406, Posicion del puntero en ID_30
0014 QA4 MB396 Posición del puntero en Diag/Force_16 *)
0015
0016 MB2:=IA2;
0017 (* SELECCIÓN MANUAL DE PANTALLA *)
0018 ED01 (I1 := M9,Q1=>M17); (*Flanco IZQ. *)
0019 ED02 (I1 := M11,Q1=>M18);(*Flanco DER. *)
0020 ED03 (I1 := M10,Q1=>M19);(*Flanco ARR. *)
0021 ED04 (I1 := M12,Q1=>M20);(*Flanco ABA. *)
0022
0023 (* LAS PANTALLAS ESTÁN A LA DERECHA *)
0024 IF M18 AND NOT Q1 THEN QA1:=QA1+1; (*Siguiente*)
0025 ELSIF M17 AND NOT Q1 THEN QA1:=QA1-1;(*Anterior*)
0026 ELSIF QA1>IA1 OR QA1<1 THEN QA1:=0;
0027 ELSE;
0028 END_IF;
0029
0030 (*Pausar cambio de pantalla P5 (OK); Salir con P6 (ESC)*)
0031 Q1:=M13 AND I1 OR (Q1 AND NOT M14);
0032
0033 (* Atenuar luz*)
0034 T01 (EN:=TRUE,RE:=MB2>0,I1:=T#0m40s,Q1=>Q2);(* Atenuar *)
0035 T02 (EN:=M13,I1:=T#0m2s);
0036 ED05 (I1:=T02Q1,Q1=>M21); (*Flanco OK *)
0037 (* Intermitencia Retardar OK *)
0038 T03 (EN:=M13,RE:=T02Q1,I1:=T#200ms,I2:=T#200ms);
0039 (* Volver a posición RESETEAR *)
0040 ED06 (I1:=T01Q1,Q1=>M24 );
0041 M22:=T03Q1 or T02Q1;
0042 QA2:=MB3; (* Flanco +Botones P1-P5 +volver a RESETEAR *)
0043 (*=========================================================
0044 DIAG ID SISTEMA 30 FALLOS (PUNTERO)
0045 ==========================================================*)
0046 IF M19 AND I1 THEN MB4:=MB4+1;(* Siguiente *) END_IF;
0047 IF M20 AND MB4>0 THEN MB4:=MB4-1;(* Anterior *) END_IF;
0048 IF (MB4>IA3 OR M14) THEN MB4:=0;(* Resetear *) END_IF;
0049 IF NOT I01 THEN MB04:=0;END_IF;(* Resetear al salir de pantalla*)
0050 (*=========================================================
0051 DIAG APLICACIÓN 8 FALLOS (PUNTERO)
0052 ==========================================================*)
0053 IF M18 AND I1 THEN MB5:=MB5+1;(* Siguiente *)END_IF;
0054 IF M17 AND MB5>0 THEN MB5:=MB5-1;(* Anterior *) END_IF;
0055 IF I1 AND (MB5>IA4 OR M14) THEN MB5:=0;(* Resetear *) END_IF;
0056 IF NOT I01 THEN MB05:=0;END_IF;(* Resetear al salir de pantalla*)
0057 QA3:=MB4;
0058 QA4:=MB5;
0059 (* Fin ScreenPDF *)