La cadena de conversión
La conversión tipada que comparten todos los tags, de la lectura bruta al valor de ingeniería, las dos políticas de lectura no válida, las acciones fuera de rango, las transformaciones de Boolean y String, y cómo una escritura deshace las etapas.
Todos los tags comparten una cadena de conversión tipada que convierte la lectura bruta en el valor de ingeniería. La cadena vive en el propio tag: la tarjeta Conversión de la página Tags y la rejilla del dispositivo muestran las mismas etapas, y el valor que aterriza en Logic, en los paneles de control, en el grabador y en el nodo OPC UA público es el que sale de la última etapa.
Primero el bruto
La cadena parte del valor bruto convertido al tipo de dato del tag, no del objeto propio del controlador: un controlador que entrega 3,7 a un tag Int32 lee 4 en lo alto de la tarjeta, y todas las etapas siguen desde ese 4. Una lectura que el tipo declarado no puede contener en absoluto (texto donde se declara un número) es una lectura vacía, nunca un cero de relleno. En el otro extremo, el valor de ingeniería se vuelve a convertir al mismo tipo, así que un tag Float redondea a lo que un float puede representar.
Las etapas
En los tipos numéricos la cadena es una sucesión de etapas, cada una con su propia casilla; una etapa deshabilitada deja pasar su entrada, y la tarjeta muestra el valor corriente al final de cada etapa para poder seguir una lectura en vivo a través de las matemáticas:
| Etapa | Por defecto | Qué hace |
|---|---|---|
| Escala | encendida | escalado = bruto × Angular + Lineal. Angular vale 1 por defecto y Lineal 0. Un Angular de 0 se rechaza allí donde se escribe ("Un factor de escala de 0 pondría a cero todas las lecturas. Introduzca el factor por el que multiplicar (1 mantiene el valor)."), porque pondría a cero todas las lecturas y la vista previa y la cadena guardada nunca deben contradecirse. |
| Calibración | apagada | Un segundo par lineal aplicado al valor escalado: calibrado = escalado × Angular + Lineal. Se mantiene aparte de Escala para que un ajuste de estado inicial y final no perturbe las matemáticas del rango, y va con su propio permiso; véase Calibración. Un Angular de 0 se rechaza igual. |
| Lectura no válida | siempre visible | Dos políticas para las lecturas que no traen ningún número utilizable (más abajo). No es una casilla: su "apagado" es en sí una de las respuestas. |
| Límites | apagada | Juzga el valor contra Mín (0 por defecto) y Máx (100 por defecto) y aplica la acción fuera de rango elegida (más abajo). Las cotas se normalizan, así que un Mín por encima del Máx nunca falla: la menor de las dos es el suelo. |
| Decimales | encendida | Redondea a Decimales posiciones, 2 por defecto, aceptadas de 0 a 15. |
Las dos etapas lineales llevan un asistente de Dos puntos que calcula el par a partir de dos puntos de referencia; está descrito paso a paso en Calibración.
El dispositivo respondió sin un número
Un termopar abierto, un canal sin sensor: la lectura llegó, el equipo habla, pero la medida es NaN. Solo en tags numéricos, y la calidad sigue siendo buena en los dos casos:
| Política | Efecto |
|---|---|
| Dejarlo pasar (por defecto) | El NaN viaja intacto y se salta la etapa Límites entera, lleve esa etapa la acción que lleve: los límites juzgan números, y aquí no hay ninguno. Infinito no es NaN y sigue saturando en el rango. |
| Sustituir por un valor | El número declarado hace de sustituto desde esta etapa en adelante y entra en Límites, Decimales y la conversión final como cualquier lectura. |
El dispositivo no respondió
Un tiempo de espera agotado, un cable cortado, un equipo apagado, una excepción del controlador. Todos los tipos, aunque a un tag que lee una marca de tiempo, un identificador o un bloque de bytes solo se le ofrecen las dos primeras políticas: un sustituto declarado es un número, y ninguno de esos tres se puede fabricar con uno.
| Política | Efecto |
|---|---|
| Mostrar el error (por defecto) | El tag se lee vacío y su calidad pasa a mala, así que el fallo asoma en todas partes a la vez. |
| Mantener el último valor bueno | La última lectura que aterrizó se queda a la vista, sin caducidad, hasta que el equipo vuelve a responder. Las marcas de tiempo siguen apuntando a esa lectura, porque es cuando se midió el número. No se mantiene nada antes de que aterrice la primera lectura; entonces el tag se lee vacío. |
| Sustituir por un valor | El número declarado se presenta tal y como está declarado: no hay ninguna lectura que recorrer las etapas, así que no se escala, ni se calibra, ni se redondea, solo se convierte al tipo del tag. Se ofrece en todos los tipos a los que la conversión lleva un número, que son todos menos DateTime, Guid y ByteString. |
Un sustituto no es nunca silencioso: la tarjeta Valor en vivo imprime por qué ("Último valor bueno, mantenido mientras el dispositivo no responde."), el punto en vivo se pone ámbar, y el servidor OPC UA integrado publica el valor con un estado de sustitución en lugar de Good a secas. Sigue publicado mientras la política lo pida: un dispositivo que sigue sin responder no hace que un cliente externo alterne entre el sustituto y un fallo de lectura, así que lo que ese cliente lee es lo que muestra el panel. La propia lectura recupera el punto en cuanto el dispositivo responde, y también lo hace apagar el sustituto. Elegir un sustituto es elegir disponibilidad, así que las alarmas y las expresiones siguen juzgando el punto como si tuviera un valor; lo que eso cuesta se paga a la vista, porque el diario técnico sigue registrando la lectura fallida y el estado de salud del dispositivo sigue informando de que está sin conexión. Un sustituto responde a "qué debe mostrar este punto", nunca a "está ahí el equipo". Un valor de sustitución declarado fuera de los límites habilitados se avisa allí donde se escribe: "Fuera de los límites [0, 100]: el valor que sustituye una lectura fallida."
Valores fuera de rango
Acciones de Límites para un valor fuera del Mín y el Máx:
| Acción | El valor pasa a ser | Calidad |
|---|---|---|
| Nulo | Un hueco (sin valor). | buena |
| Recorte (por defecto) | La cota más cercana. | buena |
| Error y nulo | Un hueco. | mala (falta de límite) |
| Error y recorte | La cota más cercana. | mala (falta de límite) |
| NaN | NaN. | buena. Se ofrece solo en tags Float y Double, cuyo tipo puede representarlo; permite que un canal de Process clasifique el valor no válido. Una acción NaN que una escritura de agente o una copia de seguridad restaurada dejen en un tag entero degrada al hueco de Nulo. |
Una falta de límite se pliega dentro de la calidad efectiva del tag, así que el punto en vivo, las expresiones de propiedad y las alarmas ven todos el valor fuera de límites como malo sin ningún cableado añadido, y la tarjeta Conversión imprime "El valor 130 está fuera de los límites [0, 100]." Sigue siendo una condición de proceso más que un problema de conexión, y el estado de salud del dispositivo no cuenta por ello al dispositivo como sin conexión.
Boolean, String y los demás tipos
Los tipos no numéricos tienen sus propias transformaciones en la misma tarjeta Conversión:
- Boolean: Invertir informa de la negación lógica del valor bruto.
- String: Inicio de la subcadena (desde 0) y Longitud recortan una ventana de la cadena bruta; una longitud en blanco llega hasta el final, y las cotas fuera de rango se recortan en lugar de fallar.
- Todos los demás tipos (DateTime, Guid, ByteString) pasan sin cambios y no muestran tarjeta Conversión.
Mostrar el error y mantener el último valor bueno se aplican a todos los tipos; sustituir por un valor se ofrece allí donde un número declarado puede convertirse en una lectura, así que un tag DateTime, Guid o ByteString no lo lista. La política de NaN se aplica solo a los tags numéricos.
Las escrituras deshacen la cadena
El campo de escritura de la tarjeta Valor en vivo toma un valor de ingeniería y deshace en orden las etapas habilitadas que son invertibles: recorta al Mín y al Máx cuando Límites está habilitada (una escritura siempre se recorta, nunca se descarta, sea cual sea la acción de límite), descalibra ((valor − Lineal) ÷ Angular), desescala igual, y luego convierte al tipo del tag. El redondeo pierde información y no se deshace. Una entrada booleana vuelve a aplicar Invertir. La subcadena de String es solo de visualización, así que una escritura de cadena envía el valor entero tal cual; DateTime, Guid y ByteString pasan sin cambios. Un valor escrito por un cliente OPC UA externo sobre el nodo público ya es bruto y no cruza nada de esto.