El espacio de direcciones

Las siete raíces reservadas bajo las que vive cada punto, cómo se escribe y se higieniza una dirección, dónde termina un punto y empieza un miembro, qué reduce la caja de filtro y las tres maneras de capturar una dirección en un editor.

Ver como Markdown

Todo punto que una expresión, un script, un vínculo de panel de control o una herramienta de agente puedan nombrar vive bajo una de siete raíces reservadas. Sus propios nombres viven siempre bajo una raíz, así que nunca chocan con las raíces mismas. La columna de la página Logic dibuja esas mismas raíces, repartidas bajo dos títulos, y lo que muestra el árbol es exactamente lo que usted escribe: la dirección de una fila es el texto que usa una expresión.

Las siete raíces

Raíz Qué contiene Título en la columna Se edita
System Cuatro diagnósticos que la aplicación publica sobre sí misma De otras páginas En ningún lado
Server Cuatro diagnósticos del servidor OPC UA integrado De otras páginas En Ajustes
Connector El árbol en vivo de drivers, carpetas, dispositivos y tags De otras páginas En la página Connector
Variables Las variables que usted define aquí, en sus carpetas Definido aquí Aquí
Alarms El estado en vivo de las alarmas que usted define aquí, en sus carpetas Definido aquí Aquí (el estado mismo es de solo lectura)
Process Las unidades de cada modelo: canales, estado de la corrida, productividad, comandos, preparación De otras páginas En la página Process
Assets Las imágenes, los iconos y los colores de la biblioteca, direccionables por su nombre Definido aquí, como la raíz Recursos En los paneles de Recursos

Las acciones y los disparadores son secciones de la columna, pero no raíces del espacio de direcciones: se referencian por identidad, no por dirección, y no llevan ningún valor en vivo. La raíz Assets existe para las expresiones y para el selector Examinar…; en la columna su lugar lo ocupa la raíz de la biblioteca de Recursos, así que el árbol nunca muestra dos raíces con ese nombre. Los puntos fijos de System y de Server, y la forma de las ramas Connector y Process, están listados en De otras páginas.

Cómo se escribe una dirección

Una dirección son segmentos separados por puntos con raíz en una raíz reservada: Connector.Simulated.Air.CompressedAir.HeaderPressure, Variables.Horno.Consigna, Alarms.NivelAlto, System.Now, Assets.Colors.Red. Los nombres visibles siguen siendo texto libre; la dirección usa el segmento higienizado de cada nombre: todo carácter que no es letra ni dígito se vuelve _, y un nombre que empieza por un dígito gana un _ delante (Horno de prueba responde a Horno_de_prueba, 3a zona a _3a_zona, y un nombre vacío a _). Los segmentos siempre son identificadores, así que la forma con puntos siempre funciona; un segmento se puede escribir también en forma de corchetes con un literal de texto, Variables["Consigna"], y el evaluador lo lee como la misma dirección.

Dónde termina el punto y empieza el acceso a un miembro depende de la raíz. Las direcciones de Connector llevan los niveles de carpeta del dispositivo entre el driver y el dispositivo (una línea Modbus RTU no agrega ningún nivel), y Variables y Alarms llevan hasta tres niveles de carpeta antes del nombre, así que bajo estas raíces el punto es el prefijo más largo que resuelve y lo que sigue es un miembro (.Value, .State()). Assets está siempre dos segmentos debajo de la raíz; Process está a cuatro para un punto ordinario, a seis para un punto de resumen de productividad y a siete para un punto de producción o de procedimiento. Una cadena más corta de lo que su raíz permite se rechaza como dirección incompleta.

Las direcciones de las expresiones y de los scripts tienen que ser estáticas: cada segmento un identificador o un literal de texto, nunca un valor calculado. Variables[algúnNombre] se rechaza en la validación con "Las direcciones tienen que ser estáticas".

Los choques de dirección

Un nivel de una sección es un espacio de nombres de un solo segmento, compartido por las carpetas y las definiciones archivadas ahí. Dos variables llamadas Consigna en carpetas distintas están bien; una variable y una carpeta que se higienizan las dos a Horno en el mismo nivel no lo están, y tampoco Pump 1 y Pump_1 lado a lado. Los editores rechazan un nombre así conforme usted escribe, nombrando lo que ya responde a esa dirección: "'Pump 1' ya responde a 'Variables.Pump_1'. Los nombres archivados en una carpeta tienen que higienizarse a segmentos distintos." Los recursos siguen la misma regla dentro de cada categoría: dos de sus imágenes, de sus iconos o de sus colores no pueden compartir un segmento, y un icono o un color propio cuyo segmento coincide con una entrada del sistema la invalida en esa dirección.

Capturar una dirección

Hay tres maneras de capturar una dirección en una expresión, en una condición o en un script:

  • Escribirla. El editor autocompleta los tokens de dirección: los nombres de raíz para un token pelón (Con ofrece Connector), luego los hijos de la ruta escrita hasta ahí, emparejados por prefijo y sin distinguir mayúsculas, y los miembros legibles de un punto en cuanto el token nombra un punto. Cada candidato reemplaza el token entero.
  • Examinar… abre un selector sobre el árbol a nivel de miembro de todas las raíces, la raíz Assets incluida. Seleccione una fila y presione Insertar, o haga doble clic en ella, para poner su dirección en el cursor. El pie muestra el texto que inserta la fila seleccionada, o "Haga doble clic (o Insertar) para agregarlo al editor." mientras no hay nada seleccionado.
  • Copiarla de un punto. Seleccionar cualquier punto de la columna abre el panel del punto, cuyo campo Dirección es texto de solo lectura que usted puede seleccionar y copiar, junto al valor en vivo, su calidad y su marca de tiempo. El editor de una variable o de una alarma repite su propia dirección debajo del campo Nombre.

Debajo de un punto, el selector lista sus miembros legibles (Value, ValueToReal(), State() y demás). Un miembro no es una dirección por sí mismo: es lo que se agrega a la dirección del punto. Expresiones lista esa misma superficie, junto con lo que devuelve cada miembro.

La caja de filtro

La caja Filtrar… que hay arriba de la columna reduce el árbol a las filas cuyo nombre contiene el texto escrito, sin distinguir mayúsculas. Un punto sobrevive solo cuando coincide; una carpeta sobrevive cuando coincide ella o cualquier descendiente, y se abre hasta sus coincidencias. Las secciones Acciones y Disparadores listan solo las filas cuyo nombre coincide (su propio nombre mantiene la sección listada, pero vacía); la raíz Recursos se reduce a las categorías cuyo nombre coincide (escribir Col deja Colores) y viene entera cuando solo coincide su propio nombre; una raíz del espacio de direcciones cuyo propio nombre coincide se queda listada y carga su rama al desplegarla. Los miembros nunca forman parte de la vista filtrada, y el filtro pertenece únicamente a su ventana: otro navegador en la misma estación conserva el suyo.

Lo que el espacio de direcciones no hace

No publica nada de un dispositivo desactivado, de un dispositivo cuyos tags no están materializados en el servidor integrado, ni de un canal de Process sin vínculo (un canal así se lista, pero no ofrece miembros). Los nombres no se traducen: la dirección es el nombre visible higienizado, así que renombrar una variable, una alarma, una carpeta, un dispositivo, un tag o una imagen es un cambio de dirección, que la aplicación reescribe en todas las referencias por el cambio de nombre seguro (Variables, Carpetas de dispositivos).