Logic

La página Logic, su columna Espacio de direcciones, las carpetas, la barra de comandos, el ciclo de la lógica y el punto único de escritura que hay detrás de todos los paneles, y los tres permisos que deciden lo que dibuja la página.

Ver como Markdown

Logic es la tercera entrada de la barra de navegación. Se abre para cualquier rol que tenga Ver Logic, y su cabecera se lee "Defina variables (valores derivados o escribibles) y acciones (scripts que las escriben), compuestas sobre el espacio de direcciones." Es una página de maestro y detalle (cómo funcionan las páginas): a la izquierda una columna encabezada Espacio de direcciones, y a la derecha una barra de comandos y un panel de detalle. Todo lo que se edita aquí se guarda solo mientras se escribe; en la página no hay ningún botón Guardar.

En esta área

Página Qué cubre
El espacio de direcciones Las siete raíces reservadas, cómo se escribe y se sanea una dirección, el cuadro de filtro y las tres formas de introducir una dirección.
Variables El editor de variables: identidad y dirección, las clases Expresión y Memoria, la tarjeta Valor, Fijar el valor.
Expresiones El lenguaje de expresiones, la superficie de lectura de un punto, las reglas que impone el evaluador, el editor de scripts.
Acciones El editor de acciones, lo que un script puede escribir, todos los mensajes de validación, Ejecutar y Habilitar/Deshabilitar.
Disparadores El editor de disparadores y el programador por intervalos.
Alarmas El editor de alarmas, la máquina de estados, el aviso, Reconocer y Reconocer todo.
De otras páginas Las raíces System, Server, Connector y Process, el panel de un punto, y el aviso que nombra la página que las edita.

La raíz Assets de esa misma columna es un grupo propio: Recursos cubre Images, Icons, Colors, Symbols y Connection types.

La columna Espacio de direcciones

La columna lista las raíces del espacio de direcciones bajo dos rótulos. Definido aquí contiene lo que esta página crea y edita: Variables, Alarms, Actions, Triggers y Assets. De otras páginas contiene lo que solo muestra: System, Server, Connector y Process. Todas las raíces del primer rótulo llevan un recuento (Variables y Alarms cuentan sus definiciones, Actions y Triggers las suyas, y Assets la suma de sus cinco categorías), y la raíz Alarms, cada carpeta de alarmas y cada fila de alarma llevan un punto de color con la peor prioridad que contienen que esté activa o a la espera de reconocimiento; el punto se limpia en cuanto se responde a la alarma.

El árbol es perezoso: una rama se carga cuando se despliega. En el árbol no se dibujan nunca valores en vivo; los muestra el panel de detalle del nodo seleccionado, refrescados dos veces por segundo.

Control Qué hace
Filtrar… Estrecha el árbol a las filas cuyo nombre contiene el texto, sin distinguir mayúsculas de minúsculas. Una carpeta sobrevive cuando cualquier descendiente coincide, y se abre hasta sus coincidencias; la raíz Assets se estrecha a las categorías cuyo nombre coincide, o llega entera cuando solo coincide su propio nombre; una raíz del espacio de direcciones cuyo propio nombre coincide sigue listada y carga su rama al desplegarla, mientras que las secciones Actions y Triggers listan solo las filas que coinciden.
Nuevo… (pie de la columna) Abre el menú de creación: Nueva variable, Nueva acción, Nuevo disparador, Nueva alarma, y luego Nueva carpeta con un destino por sección (Variables, Alarms, Actions, Triggers). Todo lo que se hace aquí aterriza en la raíz de su sección con el primer nombre libre de las series Variable1, Action1, Trigger1, Alarm1 o Folder1. Una definición nueva no se abre (véase Crear y copiar); una carpeta nueva abre su campo de nombre en su fila del árbol. Se dibuja solo para un rol con Configurar Logic; se pone en gris con el motivo mientras la estación está bloqueada.
Expandir todo / Contraer todo Abrir todas las ramas (cargando cada nivel al abrirlo) o cerrarlo todo hasta las raíces.
Clic derecho Sobre una raíz de sección, una de sus carpetas, una fila de definición o la fila Images, Icons, Colors o Symbols: selecciona la fila y abre su menú (abajo). En un nodo de otra página no se abre nada.

El menú del clic derecho lleva, según la fila y el rol: Nueva variable / Nueva acción / Nuevo disparador / Nueva alarma (en la carpeta o la raíz donde se pulsó), Nueva carpeta (atenuada y con el motivo en una carpeta que ya está tres niveles adentro), Ejecutar (filas de acción), Reconocer (filas de alarma), Reconocer todo (la raíz Alarms), Habilitar o Deshabilitar (acciones, disparadores y alarmas), Mover a (un submenú con la raíz de la sección y todas las carpetas en las que se puede archivar la fila), Copiar, la eliminación con el nombre que le da la barra (Eliminar la variable y así), y en una carpeta Renombrar la carpeta y Quitar la carpeta. En Images, Icons, Colors y Symbols lleva su barra: Importar imagen…, Nuevo icono de usuario, Nuevo color, Nuevo símbolo de usuario, Importar símbolo… y Copiar la instrucción para el chat. Un rol sin Configurar Logic solo recibe Ejecutar, Reconocer y Reconocer todo cuando tiene Operar Logic, y Copiar la instrucción para el chat en Symbols; una fila sin ninguno de ellos no abre menú.

El área de detalle está vacía hasta que se selecciona algo: "Seleccione un nodo para inspeccionarlo: las variables, las acciones, los disparadores y las alarmas abren su editor. Cree uno con Nuevo."

La barra de comandos

La barra dibuja los verbos del nodo seleccionado. Lo que el rol nunca permite no se dibuja; lo que la situación rechaza ahora mismo sigue dibujado, en gris, con el motivo en su información emergente: "La configuración está bloqueada mientras una unidad está en marcha." durante una operación de ingeniería, "Runtime detenido" mientras la estación corre de solo lectura.

Selección Grupo inicial Grupo final (de peligro)
Una de sus carpetas Nueva variable / acción / disparador / alarma (la clase que contiene su sección), Nueva carpeta (en gris con "Esta carpeta ya está a la profundidad máxima a la que se anidan las carpetas." en el tope de profundidad), Renombrar la carpeta Quitar la carpeta
Una variable Copiar Eliminar la variable
Una acción Ejecutar, Habilitar o Deshabilitar, Copiar Eliminar la acción
Un disparador Habilitar o Deshabilitar, Copiar Eliminar el disparador
Una alarma Reconocer, Habilitar o Deshabilitar, Copiar Eliminar la alarma
La raíz Alarms Reconocer todo
Assets, Images Importar imagen…
Assets, Icons Nuevo icono de usuario
Assets, Colors Nuevo color
Assets, Symbols Nuevo símbolo de usuario, Importar símbolo…, Copiar la instrucción para el chat
Un nodo de System, Server, Connector o Process El aviso de que se edita en otro sitio y su botón Abrir

Copiar duplica la definición seleccionada en la raíz de su sección, con el nombre propio del original cuando está libre y si no Nombre (2), Nombre (3) y así, y resalta la copia en la tabla de esa raíz en lugar de abrirla (véase Crear y copiar); una alarma copiada empieza en reposo, un disparador copiado empieza sin programar, y una acción copiada no tiene ninguna ejecución anotada. Habilitar y Deshabilitar cambian la bandera Habilitado de la definición por el mismo guardado automático que cualquier campo. Todo Eliminar pregunta primero ("¿Eliminar 'X'? … Esta acción no se puede deshacer.") e informa "Eliminado." en el registro de acciones; eliminar una variable o una alarma deja sin resolver todas las expresiones, los scripts, las condiciones y los vínculos de panel de control que nombraban su dirección, que es lo que lista Validación. Una eliminación aterriza en el padre de lo eliminado: la pantalla va a la carpeta en la que estaba archivada la definición, o a la raíz de su sección, seleccionada y abierta en el árbol con su tabla de lo que queda, y Quitar la carpeta aterriza igual en la carpeta de arriba o en la raíz de la sección.

Crear y copiar

Crear nunca abre lo que creó, y una copia es una creación. Nueva variable, Nueva acción, Nuevo disparador y Nueva alarma, ya sea desde el Nuevo… de la columna, desde el menú del clic derecho de una raíz de sección o de una carpeta, o desde la barra de una carpeta abierta, crean la fila con el primer nombre libre de su serie y llevan la pantalla a la página de su padre: la carpeta en la que se archivó, o la raíz de la sección. El árbol selecciona ese padre y lo despliega, la tabla de la página resalta la fila nueva y la desplaza hasta quedar a la vista, y el registro de acciones dice "Elemento 'Variable1' creado. Ábralo para editarlo." Una creación hecha desde la barra de la propia carpeta deja la pantalla en esa carpeta. Copiar hace lo mismo en la raíz de su sección, y el registro de acciones dice "Copiado en 'Setpoint (2)'. Abra la copia para editarla." Un filtro escrito en el cuadro Filtrar… se borra al llegar, para que el padre y la fila nueva estén en el árbol y puedan mostrarse seleccionados y desplegados.

La página de una raíz de sección o de una de sus carpetas es una tabla de lo que contiene, con Nombre, Dirección y Valor, y al final de cada fila un Abrir que abre la definición igual que su fila en el árbol (en la raíz Alarms, un rol con Operar Logic encuentra ahí también Reconocer). Una variable cuyo tipo de salida es Icono, Imagen o Valor de color dibuja en su celda Valor su icono, su imagen o su muestra de color, lo bastante pequeño para la fila (un color muestra además su hexadecimal); la celda nunca escribe el código fuente del icono. Pulsar una fila la elige, y la fila elegida es la fila resaltada: el resaltado se mantiene hasta que elija otra fila o lleve la columna a cualquier otro sitio. Una carpeta nueva es la excepción: abre su campo de nombre en su fila del árbol.

Carpetas

Cada una de las cuatro secciones se puede organizar en carpetas. Una carpeta pertenece a una sección y contiene solo los elementos de esa sección; se anida tres niveles como mucho. Una carpeta es organización y nada más: no tiene permiso, ni evaluación, ni estado.

En Variables y en Alarms, la cadena de carpetas compone la dirección: una variable en Forno se lee Variables.Forno.Setpoint, y una en su subcarpeta Zona1 se lee Variables.Forno.Zona1.Setpoint. Un nivel de una sección es un espacio de nombres de un solo segmento compartido por sus carpetas y sus definiciones: dos carpetas pueden contener cada una un Setpoint, pero nada archivado en el mismo nivel puede sanearse hasta el mismo segmento, y el editor rechaza un nombre así mientras se escribe, nombrando la dirección ya ocupada. Las Actions y los Triggers se referencian por identidad, así que sus carpetas organizan solo el árbol y sus paneles muestran una línea de ubicación en lugar de una dirección.

Comando Qué pasa
Nueva carpeta Crea una carpeta vacía llamada FolderN y abre su campo de nombre en la fila del árbol; dejar el campo vacío o sin cambiar conserva ese nombre.
Renombrar la carpeta Abre el campo de nombre en la fila. Todas las direcciones que hay bajo la carpeta se mueven con ella, todas las referencias se reescriben, y el registro de acciones dice cuántas ("Carpeta renombrada; 3 referencias actualizadas.").
Mover a Archiva una carpeta o una definición bajo otra carpeta de la misma sección, o de vuelta en la raíz de la sección; las direcciones y las referencias van detrás. La lista ofrece solo los destinos legales: nunca la propia carpeta, ni una de sus subcarpetas, ni otra sección, ni un nivel en el que sus subcarpetas pasarían el tope de profundidad.
Quitar la carpeta Pregunta primero, declarando qué se mueve: "Sus 3 elementos se mueven a Variables; no se elimina nada. Las referencias a las direcciones que se mueven se actualizan." Los elementos y las subcarpetas se rearchivan un nivel más arriba; quitarla se rechaza cuando dos de ellos chocarían en el destino.

El ciclo de la lógica y la cola

El runtime corre sobre dos vías, y ninguna de las dos espera nunca a un equipo. El ciclo corre cada 100 ms sobre una única cola secuencial: evalúa todas las variables de expresión y después todas las condiciones de alarma habilitadas, en ese orden, de modo que una condición lee los valores de variable de ese mismo ciclo, y lleva además las escrituras de memoria y de tag que llegan de otra parte y los reconocimientos de alarma. La vía de acciones corre los scripts de las acciones, de uno en uno, en el orden en que se pidieron. Un análisis aparte, también cada 100 ms, lanza a la vía de acciones los disparadores que tocan.

Como las vías son independientes, un ciclo puede ocurrir en medio de un script, así que dos lecturas de un mismo script pueden ver ciclos distintos; a cambio, un script que se detiene a esperar a un dispositivo solo retiene a las acciones que van detrás, y nunca a las expresiones, ni a las alarmas, ni al operador. Las escrituras no compiten por ello: el orden se guarda donde está el cable, una cola por dispositivo (véase más abajo). Los consumidores (los paneles de control, los canales, esta página) leen el estado publicado; nada de esta página dispara una evaluación a mano.

Escribir valores

Toda escritura pasa por un punto único, la haya empezado quien la haya empezado: la asignación de un script o Write(...), el campo Establecer el valor de una variable de memoria, un mando de un panel de control, una receta de Process, el agente, un cliente OPC UA externo escribiendo un nodo público, o un cliente Modbus escribiendo una fila del mapa del servidor Modbus que permite escribir. El punto único rechaza un valor que no es finito o que no se puede convertir al tipo del destino, rechaza un origen que retienen una receta en marcha o un enclavamiento (nombrando a quien lo retiene), anota la escritura en el diario como valor antiguo a valor nuevo bajo su origen (Operador, MCP, el ensayo) y la aplica. Lo que el punto único decide, lo decide sin preguntar nada: el valor, el destino, el bloqueo, y hasta si el dispositivo está conectado. Una escritura de tag que admite se entrega después a la cola de entrega propia de ese dispositivo en el Connector, donde los valores que se le deben se envían de uno en uno, en el orden en que llegaron, mientras los demás dispositivos se atienden en paralelo; un valor al que una escritura más reciente sobre el mismo tag adelanta ahí nunca sale de la cola, y el equipo recibe el más reciente. Quien preguntó es quien espera la respuesta, fuera de la lógica y en su propio código: el componente del panel de control, la escritura manual de la página del tag, la herramienta del agente, el cliente OPC UA externo, el cliente Modbus, una receta en marcha, y un script solo donde dijo WriteAndWait. Una escritura cuyo origen es una acción es la excepción: va solo a la captura detallada, nunca a la consola de Eventos, porque un script que escribe en cada ciclo produce valores por millares y sepultaría bajo ellos las noticias de la estación. Lo que la consola lleva de una acción son sus fallos. Una escritura de tag toma el valor de ingeniería y deshace la cadena de conversión del tag hasta el valor bruto que acepta el dispositivo. Los detalles están en Variables y en Acciones.

Permisos y bloqueos

Permiso Qué permite aquí
Ver Logic Abrir la página y leer todo lo que hay en ella, valores en vivo incluidos.
Configurar Logic Crear, editar, renombrar, mover, copiar, habilitar, deshabilitar y eliminar variables, acciones, disparadores, alarmas y carpetas, y mantener la biblioteca de recursos.
Operar Logic Escribir un valor de memoria, ejecutar una acción y reconocer alarmas, aquí, en los paneles de control y en la página Eventos.

Un rol con solo Ver Logic lee la página entera: los editores quedan inertes bajo una nota ("Su rol puede ver Logic pero no configurarlo (variables, acciones, disparadores, alarmas y recursos).") y no se dibuja ningún verbo de configuración ni de operación. Un rol con Operar pero sin Configurar mantiene vivos Ejecutar, Reconocer, Reconocer todo y Fijar el valor. Mientras una unidad de Process retiene la estación, la página muestra el aviso del bloqueo de ingeniería y todos los verbos de configuración y los campos del editor quedan en gris; Ejecutar, Reconocer y Fijar el valor siguen disponibles. Mientras el runtime está detenido, tanto configurar como operar se rechazan con "Runtime detenido"; el árbol y los paneles se siguen leyendo pero no llevan datos en vivo. El catálogo de permisos está en Permisos.

Lo que la página no hace

No hay Guardar y no hay Deshacer: una pulsación de tecla es un cambio guardado (el registro de acciones dice "Guardado."), y un guardado rechazado recarga el campo a lo que tiene la estación. Las definiciones que el agente crea, cambia o elimina con sus propias herramientas, o que cambia otra ventana, llegan solas a la columna abierta. Un editor abierto sobre una definición eliminada así se cierra, y el registro de acciones la nombra y dice que se eliminó fuera del editor. El histórico de alarmas, la consola de Eventos y los paneles de control viven en sus propias páginas.