El espacio de direcciones

Las siete raíces reservadas bajo las que vive todo punto, cómo se escribe y se sanea una dirección, dónde termina un punto y empieza un miembro, qué estrecha el cuadro de filtro, y las tres formas de introducir una dirección en un editor.

Ver como Markdown

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

Las siete raíces

Raíz Qué contiene Ró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 sitio
Server Cuatro diagnósticos del servidor OPC UA integrado De otras páginas En Ajustes
Connector El árbol en vivo de controladores, carpetas, dispositivos y tags De otras páginas En la página Connector
Variables Las variables que se definen aquí, en sus carpetas Definido aquí Aquí
Alarms El estado en vivo de las alarmas que se definen aquí, en sus carpetas Definido aquí Aquí (el estado en sí es de solo lectura)
Process Las unidades de cada modelo: canales, estado del ensayo, producción, 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 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 y 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, se listan en De otras páginas.

Cómo se escribe una dirección

Una dirección son segmentos separados por puntos y enraizados en una raíz reservada: Connector.Simulated.Air.CompressedAir.HeaderPressure, Variables.Forno.Setpoint, Alarms.HighLevel, System.Now, Assets.Colors.Red. Los nombres visibles siguen siendo texto libre; la dirección usa el segmento saneado de cada nombre: todo carácter que no es una letra ni un dígito pasa a ser _, y un nombre que empieza por un dígito gana un _ delante (Forno de teste responde a Forno_de_teste, 3rd zone a _3rd_zone, y un nombre vacío a _). Los segmentos son siempre identificadores, así que la forma con puntos siempre funciona; un segmento se puede escribir además en forma de corchetes con un literal de texto, Variables["Setpoint"], y el evaluador lo lee como la misma dirección.

Dónde termina el punto y dónde empieza el acceso a un miembro depende de la raíz. Las direcciones de Connector llevan los niveles de carpeta del dispositivo entre el controlador y el dispositivo (una línea Modbus RTU no añade 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 le sigue es un miembro (.Value, .State()). Assets está siempre dos segmentos por debajo de la raíz; Process está a cuatro en un punto corriente, a seis en un punto de resumen de producción y a siete en un punto de salida 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[someName] se rechaza en la validación con "Las direcciones deben ser estáticas".

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 Setpoint en carpetas distintas no dan problema; una variable y una carpeta que se sanean las dos hasta Forno en el mismo nivel sí lo dan, e igual Pump 1 y Pump_1 una al lado de la otra. Los editores rechazan un nombre así mientras se escribe, nombrando lo que ya responde a la dirección: "'Pump 1' ya responde a 'Variables.Pump_1'. Los nombres archivados en una misma carpeta deben convertirse en segmentos distintos." Los recursos siguen la misma regla dentro de cada categoría: dos de sus imágenes, iconos o colores no pueden compartir un segmento, y un icono o un color de usuario cuyo segmento coincide con una entrada de sistema la sustituye en esa dirección.

Introducir una dirección

Tres formas de introducir una dirección en una expresión, en una condición o en un script:

  • Escribirla. El editor autocompleta las fichas de dirección: los nombres de raíz para una ficha pelada (Con ofrece Connector), luego los hijos de la ruta escrita hasta ese momento, emparejados por prefijo y sin distinguir mayúsculas de minúsculas, y los miembros legibles de un punto en cuanto la ficha nombra un punto. Cada candidato sustituye la ficha entera.
  • Examinar… abre un selector sobre el árbol a nivel de miembro de todas las raíces, incluida la raíz Assets. Seleccione una fila y pulse Insertar, o haga doble clic en ella, para colocar su dirección en el cursor. El pie muestra el texto que inserta la fila seleccionada, o "Haga doble clic (o pulse Insertar) para añadirlo 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 se puede seleccionar y copiar, junto al valor en vivo, su calidad y su marca de tiempo. Un editor de variable o de alarma repite su propia dirección bajo el campo Nombre.

Bajo un punto, el selector lista sus miembros legibles (Value, ValueToReal(), State() y demás). Un miembro no es una dirección propia: es lo que se añade a la dirección del punto. Expresiones lista esa misma superficie, con lo que devuelve cada miembro.

El cuadro de filtro

El cuadro Filtrar… que hay sobre la columna estrecha el árbol a las filas cuyo nombre contiene el texto escrito, sin distinguir mayúsculas de minú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 estrecha a las categorías cuyo nombre coincide (escribir Col deja Colores) y 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. Los miembros no forman nunca parte de la vista filtrada, y el filtro es de su ventana y de nadie más: otro navegador en la misma estación conserva el suyo.

Lo que el espacio de direcciones no hace

No publica nada de un dispositivo deshabilitado, 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 saneado, 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 mediante el cambio de nombre seguro (Variables, Carpetas de dispositivos).