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 cree una con Nuevo… > Nueva variable, o con Nueva variable sobre una carpeta) para abrir su editor. 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 ("El nombre de la variable es obligatorio."). |
| 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 "Cambiar el nombre actualiza las 3 ubicaciones 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 pudo 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. El registro de acciones dice "Valor escrito." El campo no es un visor; la tarjeta VALOR sí.
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 dos decimales |
| 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 la página Adquisición para grabarla."; 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.
Comandos
| Comando | Qué hace | En gris cuando | No se dibuja cuando |
|---|---|---|---|
| Copiar | Duplica la variable en la raíz Variables de Logic con un nombre libre (Nombre (2)…) y abre la copia; 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.