# Nodos servidos

> La lista de lo que sirve el servidor OPC UA integrado, y todo lo que sirve: tags, variables de Logic, alarmas y comandos de dispositivo, cada fila de solo lectura hasta que usted permita la escritura, dónde encuentra un cliente cada uno y lo que necesita una estación actualizada.

**Nodos servidos** es la cuarta tarjeta del panel del servidor OPC UA en Connector. El servidor sirve esta lista y nada más: un cliente que se conecta encuentra los tags, las variables de Logic, las alarmas y los comandos de dispositivo que figuran aquí, y ningún otro. La tarjeta lo dice bajo su título: "El servidor sirve esta lista y nada más: cada fila es un tag, una variable de Logic, una alarma o un comando de dispositivo. Una fila sigue siendo de solo lectura hasta que usted permita la escritura. La escritura de un cliente sigue entonces el mismo camino que cualquier otra y queda en el diario técnico con la sesión del cliente." Ver Connector lee la tarjeta; Configurar Connector la cambia.

## Una lista vacía {#an-empty-list}

La lista empieza vacía, en una estación nueva y en una estación actualizada desde una versión que servía cada dispositivo entero. Mientras está vacía, una nota de precaución en la tarjeta dice: "La lista está vacía, así que el servidor no sirve nada de la estación: un cliente OPC UA no encuentra ningún tag, variable, alarma ni comando hasta que usted agregue filas." El servidor sigue escuchando y sigue aceptando las sesiones que permite [Acceso de clientes](connector-opcua-client-access); recorren un espacio de direcciones en el que no hay nada de la estación. Un agente lee lo mismo en `server_status`, cuyo `servesNothing` es verdadero mientras la lista está vacía.

## La tabla {#the-table}

| Columna | Qué muestra |
| --- | --- |
| **Fuente** | Lo que sirve la fila, tal como lo nombra el selector, o "Todavía sin fuente" mientras no se ha elegido su fuente. |
| **Acceso** | **Solo lectura** o **Lectura y escritura**, y **Invocable** para un comando de dispositivo. |
| **Nodo** | La dirección con la que se configura un cliente, en la forma `nsu=<namespace>;s=<identifier>`; vacía mientras la fila no sirve nada. |

Las filas se listan por tipo (tags, variables, alarmas, comandos) y luego por nombre. Sin ninguna, la tabla dice "Todavía no se sirve ningún nodo. Agregue uno con Nueva fila." Hacer clic en una fila la selecciona y abre sus campos bajo la tabla; qué fila está seleccionada pertenece a la ventana en la que usted está.

| Comando | Qué hace | En gris cuando (situación) | No dibujado cuando (rol) |
| --- | --- | --- | --- |
| **Nueva fila** | Agrega una fila de solo lectura que todavía no sirve nada y la selecciona, para elegir su fuente a continuación. El registro de acciones dice "Fila agregada a la lista del servidor OPC UA. Elija su fuente." | Una corrida retiene la estación, o el runtime está detenido. | Sin Configurar Connector. |
| **Eliminar fila** (tinta de peligro) | Elimina la fila que la tabla tiene seleccionada, al momento y sin preguntar; su información emergente nombra la fuente que sirve la fila, y el registro de acciones lo confirma. La fuente no se toca: un cliente deja de encontrar su nodo. | No hay ninguna fila seleccionada ("Seleccione una fila de la lista para eliminarla."), una corrida retiene la estación, o el runtime está detenido. | Sin Configurar Connector. |

## Los campos de una fila {#a-rows-fields}

Cada campo se guarda en cuanto cambia, y el servidor sirve la fila nueva un instante después, sin cortar ninguna sesión: lee su lista diez veces por segundo.

| Campo | Qué hace | Valores y valor por defecto |
| --- | --- | --- |
| **Fuente** | Lo que sirve la fila. La lista empieza con "(ninguno)", luego cada tag habilitado de un dispositivo habilitado, nombrado por su driver, su dispositivo y él mismo ("Tag del Connector · Simulated · Oven · Temperature"), luego cada variable de Logic que guarda un valor, por sus carpetas y su nombre ("Variable de Logic · Oven / Setpoint"), luego cada alarma, nombrada del mismo modo ("Alarma de Logic · Oven / High temperature"), y por último cada comando de un dispositivo habilitado: los comandos declarados en la página del dispositivo y los que fija un protocolo, como los de un punto de carga ("Comando · OCPP · Charger · Reset"). Una fuente figura una sola vez en la lista. La fila guarda su fuente por su identidad, así que un cambio de nombre deja la fila en la misma fuente, que el servidor pasa a servir con su nombre nuevo. Una fuente que la lista ya no ofrece sigue seleccionada y nombrada, un tag o un comando deshabilitado con lo que lo deja fuera, y solo una fuente que ya no existe aparece como ausente, con su identidad. La tarjeta [Usado por](connector-tags#the-used-by-card) de un tag lista las filas que lo sirven. | "(ninguno)" en una fila nueva. |
| **Acceso** | Si un cliente puede escribir la fila. **Lectura y escritura** sigue en la lista y en gris donde la fuente no acepta escrituras, con la información emergente "Esta fuente no acepta escrituras: solo las aceptan un tag con acceso de escritura o una variable de memoria." Elegir una alarma devuelve la fila a solo lectura. En un comando el campo muestra **Invocable** como valor fijo, sin selector, porque un comando se invoca, nunca se lee ni se escribe. | **Solo lectura** o **Lectura y escritura**; **Invocable**, fijo, en un comando. Solo lectura en una fila nueva. |

Bajo los campos, una línea dice lo que la fila hace por un cliente:

| La tarjeta dice | Cuándo |
| --- | --- |
| "Esta fila todavía no sirve nada: elija su fuente." | No se ha elegido ninguna fuente. |
| "La fuente de esta fila ya no existe, así que el servidor no sirve nada por ella." | El tag, la variable, la alarma o el comando se eliminó. |
| "Un cliente puede leer este nodo pero no escribirlo." | Un tag o una variable, de solo lectura. |
| "Un cliente puede leer y escribir este nodo: cada escritura queda en el diario técnico con la sesión del cliente." | Un tag o una variable marcado de lectura y escritura. |
| "Un cliente lee Active, Acked, State, Priority y Message de la alarma, y nunca los escribe." | Una alarma. |
| "Un cliente llama a este comando como un método de su dispositivo mientras esté en la lista." | Un comando de dispositivo. |

Bajo esa línea, **Un cliente lo encuentra en** va seguido del nodo.

## Lo que rechaza una fila {#what-a-row-refuses}

Un cambio que las reglas de la lista rechazan no se guarda: el motivo aparece en rojo sobre los campos de la fila, el cambio sigue en pantalla para que usted lo corrija, y la fila sigue sirviendo lo que servía.

| La tarjeta dice | Cuándo |
| --- | --- |
| "Esta fuente ya está en la lista: un cliente la encuentra en el nodo que sirve esa fila." | La fuente ya figura en otra fila. |
| "La fuente no se puede escribir: elija un tag con acceso de escritura o una variable de memoria, o deje la fila de solo lectura." | Lectura y escritura en un tag de solo lectura, en un tag de un driver que nunca escribe, en una variable de expresión, en una alarma, en un comando o en una fuente que ya no existe. |
| "Una fila que acepta escrituras necesita el tag o la variable a la que van." | Lectura y escritura en una fila sin fuente, algo que solo un agente puede pedir. |
| "Esta fila de la lista ya no existe. Recargue y vuelva a intentarlo." | La fila se eliminó en otro lado, en otra ventana o por un agente, mientras usted la editaba. |

Mientras una corrida retiene la estación o el runtime está detenido, un cambio se rechaza como todo cambio de la página, con el motivo en el registro de acciones, y no se guarda nada.

## Dónde encuentra un cliente cada fuente {#where-a-client-finds-each-source}

| Fuente | Dónde está | Qué lee un cliente |
| --- | --- | --- |
| Tag | Donde siempre ha estado: en el espacio de nombres de su dispositivo, `http://opcfoundation.org/UA/<driver>.<device>/`, con el nombre propio del tag. Un cliente configurado antes de que existiera la lista lo encuentra en la misma dirección. Un cliente que recorre el espacio de direcciones lo encuentra en la carpeta `Devices` bajo Objects, dentro del objeto que lleva el nombre de su dispositivo. | El valor que respondió el dispositivo, con su calidad y su marca de tiempo, tal como lo lee Connector. |
| Variable de Logic | En la carpeta `Logic` bajo Objects, dentro de las propias carpetas de Logic, en el espacio de nombres del servidor `http://opcfoundation.org/UA/EdgeTranslator/` con su dirección de Logic (`Variables.Oven.Setpoint`). | Su valor, tipado por la conversión única de la estación: Boolean, Int64 para un Entero, Double para un Decimal, String para un Texto y DateTime para una Fecha y hora. Una variable sin valor bueno se lee como BadDataUnavailable. |
| Alarma | En la carpeta `Alarms` bajo Objects, dentro de las propias carpetas de Logic, como un objeto con su dirección de Logic (`Alarms.Oven.HighTemperature`). | Cinco miembros de solo lectura: Active y Acked (Boolean), State (Int32: 0 en reposo, 1 activa y sin reconocer, 2 activa y reconocida, 3 restablecida y sin reconocer), Priority y Message (String). Mientras la alarma mantiene su estado durante una calidad mala, Active, Acked y State se leen como UncertainLastUsableValue. |
| Comando | Un método de su dispositivo, junto a los tags del dispositivo. | Llamado con los valores que declara el comando, responde con lo que respondió el equipo. |

Cada dispositivo conserva su espacio de nombres sirva lo que sirva la lista de él, así que el índice en el que un cliente encuentra un espacio de nombres no se mueve cuando los tags de otro dispositivo entran en la lista o salen de ella. Un dispositivo del que la lista no nombra nada no tiene ningún nodo.

## Escritura {#writing}

La escritura de un cliente solo llega a la estación en una fila marcada de lectura y escritura, y la lista se consulta otra vez en el instante en que llega la escritura, así que una fila que acaba de pasar a solo lectura nunca se escribe. La escritura en un tag va a la cola de entrega de su dispositivo como toda escritura de fuera, y la respuesta espera al equipo; la escritura en una variable de memoria pasa por el embudo de escritura de Logic y se convierte al tipo de la variable. Los bloqueos de origen se aplican: una fuente que retiene un Process en marcha se rechaza. Cada escritura queda en el diario técnico con la aplicación y la sesión del cliente. Una variable de expresión y una alarma nunca aceptan escrituras, y el servidor responde BadNotWritable. Un comando se llama, no se escribe, y un cliente solo llama a un comando que está en la lista.

## Una estación actualizada {#an-updated-station}

Una estación actualizada desde una versión sin la lista servía cada tag de cada dispositivo. Su lista empieza vacía, así que después de la actualización su servidor OPC UA no sirve nada hasta que se arma la lista: agregue una fila por cada tag que lee un cliente, marque de lectura y escritura los que escribe un cliente, y agregue los comandos que llama un cliente. Un cliente configurado antes de la actualización encuentra cada tag en la dirección que tenía, así que no necesita ningún cambio propio.

## Con un agente {#with-an-agent}

```text
server_list_upsert(source: "Connector.Simulated.Oven.Temperature")
server_list_upsert(source: "Variables.Oven.Setpoint", access: "ReadAndWrite")
server_list_upsert(source: "Alarms.Oven.HighTemperature")
server_status()
```

Una fila creada por un agente es de solo lectura salvo que `access` diga otra cosa, y `server_list_delete` elimina una por su identificador. Las herramientas se describen en [Las herramientas, área por área](agent-tools#connector--configure).

## Lo que no hace la lista {#what-the-list-does-not-do}

No enciende el servidor (lo hace Activar en la barra de comandos), no decide qué cliente puede conectarse (lo decide [Acceso de clientes](connector-opcua-client-access)) y no reconoce una alarma desde fuera: reconocer sigue siendo un comando del operador. Sirve los valores de arriba y ningún evento OPC UA de alarmas y condiciones. Una variable que guarda una imagen, un icono o un color no se ofrece, y una constante de la descripción de un dispositivo no se sirve.
