Variables
El editor de variables, tarjeta a tarjeta: identidad y dirección, las clases Expresión y Memoria, los tipos de salida, la tarjeta Valor en vivo, Establecer el valor, calidad y retención, los comandos, y lo que el editor rechaza.
Una variable es un valor tipado que la estación calcula o contiene, direccionado bajo Variables por su ruta de carpetas y su nombre saneado. Seleccione una fila de variable en la columna de Logic, o pulse Abrir en su fila de la tabla de su carpeta o de la raíz de su sección, para abrir su editor. Una variable hecha con Nuevo… > Nueva variable, o con Nueva variable sobre una carpeta, no se abre: su fila queda resaltada en esa tabla (véase Crear y copiar). El editor necesita Ver Logic para leer, Configurar Logic para cambiar cualquier campo, y Operar Logic para escribir un valor de memoria.
La cabecera del panel muestra la marca de la fila (una marca de expresión o de memoria), el nombre, y una línea por clase: "Un valor que esta estación calcula a partir de una expresión sobre el espacio de direcciones, recalculado en cada ciclo." o "Un valor que esta estación contiene: lo escribe un script, un panel de control o usted, y se puede leer en cualquier sitio por su dirección." La columna del formulario lleva la tarjeta IDENTIDAD y después el editor de EXPRESIÓN o la tarjeta MEMORIA; el carril de la derecha lleva VALOR y, en una expresión, PUNTOS REFERENCIADOS.
Identidad
| Campo | Qué es | Valores / por defecto | Efecto |
|---|---|---|---|
| Nombre | El nombre visible; su segmento saneado es el último nivel de la dirección. | Texto libre; una variable nueva es VariableN. |
Se confirma mediante el cambio de nombre seguro (más abajo). Un nombre en blanco se rechaza ("Hace falta un nombre."). |
| Línea de dirección | La dirección a la que responde la variable, repetida bajo el nombre: la raíz de la sección, los niveles de carpeta, el segmento. | Solo lectura. | Sigue al nombre mientras se escribe; la parte de la carpeta solo cambia con Mover a en el árbol. |
| Tipo | Cómo se produce el valor. | Expresión (por defecto) o Memoria. | Cambiar a Memoria vuelve a sembrar el valor desde el Valor inicial; cambiar a Expresión lo deja en un hueco hasta el siguiente ciclo. |
| Tipo de salida | La categoría a la que se convierte todo resultado y toda escritura. | Booleano, Entero, Número decimal (por defecto), Texto, Fecha y hora, Imagen, Icono, Valor de color. | Cambiarlo vuelve a sembrar una variable de memoria (y guarda la siembra cuando es retentiva) o deja una variable de expresión en un hueco; la vista previa se vuelve a resolver bajo el tipo nuevo. |
| Unidad (opcional) | La unidad de ingeniería que se dibuja junto al valor. | Texto libre, vacío por defecto. | Se muestra en la tarjeta VALOR y se puede leer en los scripts como .EngineeringUnit. |
| Descripción (opcional) | Texto libre. | Vacío por defecto. | Ninguno en la evaluación. |
El nombre y la dirección
El campo Nombre es un campo de cambio de nombre: lo que se escribe se queda en local, una línea bajo el campo previsualiza el impacto tras una pausa corta ("Comprobando las referencias…", y luego "Al renombrar se actualizan los 3 lugares que leen esta dirección.", "Ninguna referencia usa la dirección actual." o "La dirección efectiva no cambia; no hay referencias que actualizar." cuando el nombre nuevo se sanea hasta el mismo segmento), y Intro o salir del campo lo confirma. La confirmación renombra la variable, reescribe todas las expresiones, los scripts, las condiciones y los vínculos de panel de control que usaban la dirección antigua, conserva el valor en vivo y los vínculos de canal (un canal se vincula por la clave estable de la variable, nunca por su nombre) e informa "Variable renombrada y N referencias actualizadas." Un nombre que choca en su nivel se rechaza en el sitio: "'X' ya responde a 'Variables.X'. Los nombres archivados en una misma carpeta deben convertirse en segmentos distintos." Las reglas de escritura y de choque están en El espacio de direcciones.
Expresión
Se muestra mientras el tipo es Expresión: el editor de EXPRESIÓN con su botón Examinar… y la indicación "Una sola expresión JavaScript sobre el espacio de direcciones (por ejemplo, Connector.Simulated.Pump.Flow.ValueToReal() * 0.1, Variables.Setpoint.Value). Para una salida de imagen, icono o color, devuelva una dirección Assets.Images, Assets.Icons o Assets.Colors (por ejemplo, Variables.Level.Value > 50 ? Assets.Colors.Red : Assets.Colors.Green). Escriba para autocompletar, o use Examinar… para elegir una." El texto se guarda solo con cada pulsación de tecla y se valida cada medio segundo; un problema aparece en la tarjeta VALOR. El lenguaje, la superficie de lectura y todas las reglas están en Expresiones. El texto de la expresión se conserva, aunque se ignora, mientras el tipo es Memoria.
Memoria
Se muestra mientras el tipo es Memoria.
| Campo | Qué es | Valores / por defecto | Efecto |
|---|---|---|---|
| Valor inicial | La siembra, como texto. Debajo: "Se interpreta según el tipo de salida al arrancar. Déjelo vacío para no tener valor." | Cualquier texto, vacío por defecto. | Se interpreta según el tipo de salida cuando se crea la variable, cuando cambian el tipo o el tipo de salida, y en cada arranque de una variable no retentiva. Vacío significa sin valor: la variable arranca como un hueco. Un texto que no se puede interpretar se señala en la tarjeta VALOR ("El valor inicial no se pudo interpretar como número decimal.") y siembra un hueco. |
| Retentiva: el último valor escrito sobrevive a los reinicios | Si las escrituras se guardan. | Apagada por defecto. | Una variable retentiva se guarda alrededor de un segundo después de que las escrituras se detengan, y nunca más tarde de cinco segundos tras la primera escritura sin guardar; detener el runtime vuelca lo que quede pendiente. En el siguiente arranque, el texto retenido se interpreta según el tipo de salida actual; cuando ya no se puede interpretar, se usa el valor inicial en su lugar. Una variable no retentiva vuelve al valor inicial en el arranque. |
Establecer el valor
El campo Establecer el valor y su botón Escribir se dibujan solo para un rol con Operar Logic, y se ponen en gris con "Runtime detenido" mientras la estación es de solo lectura; el bloqueo de ingeniería no los toca. Escriba un valor y pulse Escribir: el texto se interpreta según el tipo de salida; un texto que no se puede interpretar se rechaza ("No se ha podido interpretar 'abc' como entero.") y no se escribe nada; un campo vacío no escribe ningún valor, lo que devuelve la variable a un hueco. La escritura viaja por el punto único: se rechaza mientras una receta en marcha o un enclavamiento retienen la variable ("'Variables.X' está protegida contra escritura por '<holder>'."), se anota en el diario como valor antiguo a valor nuevo bajo el origen Operador, se aplica en la cola de la lógica, y se marca para retención cuando la variable es retentiva. Una línea bajo el campo dice "Valor escrito." cuando el valor ha entrado, o el motivo del rechazo (cualquiera de los rechazos de arriba), como responde la escritura de una etiqueta en el Connector. El campo no es un visor; la tarjeta VALOR sí.
Una variable de memoria también se puede escribir desde fuera de la estación: servida por una fila del mapa del servidor Modbus que permite escribir, recibe las escrituras de un cliente Modbus por el mismo punto único, anotadas bajo el origen Modbus client <address>:<port>. Una variable de expresión también se puede servir, en solo lectura.
Tipos de salida
| Tipo de salida | Lleva | Notas |
|---|---|---|
| Booleano | verdadero o falso | Se puede grabar y trazar con un canal |
| Entero | un entero de 64 bits | Se puede grabar y trazar |
| Número decimal | un real de doble precisión | Se puede grabar y trazar; el visor muestra los decimales de la estación |
| Texto | texto libre | |
| Fecha y hora | un instante | Se muestra con el formato de fecha y hora de la estación |
| Imagen | un id de recurso, como texto | Salida de presentación: la expresión devuelve una dirección Assets.Images.* |
| Icono | un glifo o marcado SVG, como texto | Salida de presentación: devuelva una dirección Assets.Icons.* |
| Valor de color | un color hexadecimal, como texto | Salida de presentación: devuelva una dirección Assets.Colors.* |
La conversión es la misma conversión permisiva que usa el resto de la aplicación: el texto se interpreta, los números se redondean o se convierten, y lo que no se puede convertir pasa a ser sin valor. Una variable de memoria de un tipo de presentación contiene el literal que se escribe (un id de recurso, un glifo, un hexadecimal). Las tres salidas de presentación existen para los paneles de control, donde el componente Imagen, Icono o Símbolo vinculado dibuja lo que la variable resuelva en ese momento; las direcciones que devuelven se listan en Recursos.
La tarjeta Valor
El carril VALOR muestra el valor actual refrescado dos veces por segundo: en un tipo escalar, el visor con la unidad al lado; en Imagen, la figura; en Icono, el glifo a su tamaño; en Valor de color, la muestra con su hexadecimal. Un hueco se dibuja como un guion. En una variable de expresión, la tarjeta previsualiza el borrador que se está escribiendo, evaluado con los valores actuales antes de que el ciclo lo recoja; mientras la expresión no es válida, el visor se queda en un guion y el mensaje de validación aparece en la tarjeta (un choque de nombres también se informa aquí, aunque un nombre malo nunca detiene la vista previa). Bajo una lectura escalar, la tarjeta dice "Vincule un canal a esta variable en Process > Definición > Canales para registrarla."; el vínculo se hace en la pantalla Canales de un modelo de Process.
En una variable de expresión, la tarjeta PUNTOS REFERENCIADOS lista todas las direcciones que nombra la expresión con su lectura actual, y "?" cuando la dirección ya no resuelve, así que una entrada mala se ve de un vistazo.
Calidad
El valor de una variable es o un valor tipado o ningún valor en absoluto (un hueco). Un punto es bueno solo cuando su propio valor existe: una variable de memoria es buena en cuanto contiene un valor, y una siembra vacía es un hueco hasta la primera escritura de verdad; una variable de expresión lleva la calidad de su última evaluación, así que cuando cualquier punto referenciado falta, es malo o no tiene valor, la expresión no se evalúa y la variable pasa a ser un hueco de mala calidad. Una lectura vacía nunca se convierte en silencio en un cero. Los scripts leen la calidad como .State(); un canal vinculado a la variable graba el hueco como un hueco.
Usado por
La tarjeta USADO POR, al pie de la columna del formulario, lista todo lo que en la estación lee o escribe la variable, para que vea lo que depende de ella antes de renombrarla o eliminarla. Se lee cuando selecciona la variable y otra vez después de un cambio de nombre.
| Tipo | Ubicación | Nombre |
|---|---|---|
| Servidor Modbus | Vacía | La fila del mapa de registros del servidor Modbus que sirve la variable, por su clase de registro y su dirección en el manual (Registro de retención (4xxxx) 40101) |
| Servidor OPC UA | Vacía | Lo que un cliente puede hacer a través de la fila de los nodos servidos del servidor OPC UA que sirve la variable: Solo lectura o Lectura y escritura |
| Publicación MQTT | El bróker | El tópico de la fila de la tarjeta Publicar del bróker que publica la variable |
| Variable de Logic, Acción, Alarma | Vacía | La variable de expresión, la acción o la alarma cuyo texto escribe la dirección de la variable, con las carpetas en las que está archivada |
| Panel de control | El panel de control | El componente cuya propiedad de dirección nombra la variable |
La fila de un servidor guarda la variable por su identidad estable: un cambio de nombre la deja sirviendo la misma variable, y una eliminación deja la fila en pie, nombrando lo que perdió. La fila de un bróker hace lo mismo y mantiene su tópico. Mientras la búsqueda corre, la tarjeta dice "Leyendo las referencias…"; cuando nada usa la variable, "Nada en la estación usa esta variable."; cuando la búsqueda falla, "No se pudieron leer las referencias" con Intentar de nuevo, nunca una lista vacía. La tarjeta solo lee: todo rol que abre el editor la ve, también mientras la estación está bloqueada, y no ofrece ningún comando. No lista los canales de Process vinculados a la variable, que se vinculan por su clave estable.
Comandos
| Comando | Qué hace | En gris cuando | No se dibuja cuando |
|---|---|---|---|
| Copiar | Duplica la variable en la raíz Variables con un nombre libre (Nombre (2)…) y resalta la copia en la tabla de esa raíz en lugar de abrirla (Crear y copiar); la copia tiene una clave nueva, así que todavía no hay ningún canal vinculado a ella. |
La estación está bloqueada o de solo lectura. | El rol no tiene Configurar Logic. |
| Eliminar la variable | Pregunta "¿Eliminar 'X'? Esto quita la variable. Las referencias a su dirección quedarán sin resolver. Esta acción no se puede deshacer." y luego la elimina con su valor retenido. | La estación está bloqueada o de solo lectura. | El rol no tiene Configurar Logic. |
| Mover a (clic derecho) | Archiva la variable en otra carpeta o en la raíz; la dirección y todas las referencias van detrás. | La estación está bloqueada o de solo lectura. | El rol no tiene Configurar Logic. |
Una variable no tiene Habilitar ni Deshabilitar: o se evalúa siempre o se contiene siempre.
Lo que el editor rechaza
- Un nombre en blanco, o un nombre cuyo segmento ya está ocupado en su nivel.
- Una expresión que no es una sola expresión JavaScript de solo lectura, que referencia un punto que no existe o a otra variable de expresión, o que falla una evaluación de prueba (los mensajes exactos están en Expresiones).
- Un valor inicial o un valor de Establecer el valor que no se puede interpretar bajo el tipo de salida, y cualquier valor que sea NaN o infinito.
- Cualquier cambio mientras la estación está bloqueada por un ensayo o detenida: el campo se recarga a lo que tiene la estación y el registro de acciones dice por qué.
Lo que el editor no hace
No traza ni graba (eso lo hace un canal), no escribe tags (un script o un mando de un panel de control lleva un valor de memoria más lejos), no referencia otras variables de expresión, no guarda ningún histórico de valores, y no conserva un valor no retentivo entre reinicios.