La cadena de conversión
La conversión tipada que comparte cada tag, de la lectura bruta al valor de ingeniería, las dos políticas de lectura no válida, las acciones de fuera de rango, las transformaciones de Boolean y String, y cómo una escritura deshace las etapas.
Todos los tags comparten una misma cadena de conversión tipada que convierte la lectura bruta en el valor de ingeniería. La cadena vive en el tag mismo: la tarjeta Conversión de la página Tags y la cuadrícula del dispositivo muestran las mismas etapas, y el valor que aterriza en Logic, en los paneles de control, en el registrador y en el nodo público de OPC UA es el que sale de la última etapa.
Primero el valor bruto
La cadena arranca del valor bruto forzado al tipo de dato del tag, no del objeto propio del driver: un driver que entrega 3.7 a un tag Int32 lee 4 en lo alto de la tarjeta, y todas las etapas continúan a partir de 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 sustituto. En el otro extremo, el valor de ingeniería se fuerza de regreso al mismo tipo, así que un tag Float redondea a lo que un float puede representar.
Las etapas
Para los tipos numéricos la cadena es una sucesión de etapas, cada una con su propia casilla; una etapa desactivada deja pasar su entrada, y la tarjeta muestra el valor en curso al final de cada etapa para que usted siga una lectura en vivo a lo largo de las matemáticas:
| Etapa | Valor inicial | Qué hace |
|---|---|---|
| Escala | encendida | escalado = bruto × Angular + Lineal. El coeficiente angular arranca en 1 y el lineal en 0. Un coeficiente angular de 0 se rechaza ahí mismo donde se escribe ("Un factor de escala de 0 pondría a cero todas las lecturas. Ingrese 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 está gobernada por su propio permiso; vea Calibración. Un coeficiente 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 una de las respuestas. |
| Límites | apagada | Juzga el valor contra Mín (0 al inicio) y Máx (100 al inicio) y aplica la acción de 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 piso. |
| Decimales | encendida | Redondea a Decimales posiciones, 2 al inicio, 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; se describe 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 está hablando, pero la medición es NaN. Solo tags numéricos, y la calidad se mantiene buena en cualquiera de los dos casos:
| Política | Efecto |
|---|---|
| Dejarlo pasar (al inicio) | El NaN viaja intacto y se salta la etapa Límites por completo, sea cual sea la acción que lleve esa etapa: los límites juzgan números, y aquí no hay ninguno. El infinito no es NaN y sigue saturando contra el rango. |
| Reemplazar por un valor | El número declarado hace de sustituto de esta etapa en adelante y entra en Límites, en Decimales y en el forzado final como cualquier lectura. |
El dispositivo no respondió
Un tiempo de espera agotado, un cable cortado, un equipo apagado, una excepción del driver. 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 hacer con uno.
| Política | Efecto |
|---|---|
| Mostrar el error (al inicio) | El tag se lee vacío y su calidad se vuelve mala, así que la falla sale a la vista en todas partes a la vez. |
| Mantener el último valor bueno | La última lectura que aterrizó se queda en pantalla, sin vencimiento, hasta que el equipo vuelva a responder. Las marcas de tiempo siguen apuntando a esa lectura, porque fue cuando se midió el número. Nada se mantiene antes de que aterrice la primera lectura; el tag se lee vacío entonces. |
| Reemplazar por un valor | El número declarado se presenta tal como se declaró: no hay ninguna lectura que recorra las etapas, así que no se escala, ni se calibra, ni se redondea, solo se fuerza al tipo del tag. Se ofrece en todos los tipos a los que el forzado lleva un número, que son todos menos DateTime, Guid y ByteString. |
Un sustituto nunca es 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 sustituto en lugar de un Good a secas. Se queda publicado mientras la política lo pida: un dispositivo que sigue sin responder no hace que un cliente externo alterne entre el sustituto y una lectura fallida, así que lo que lee ese cliente es lo que muestra el panel. La lectura misma recupera el punto en cuanto el dispositivo responde, y lo mismo 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 sigue reportando el dispositivo sin conexión. Un sustituto responde "qué debería mostrar este punto", nunca "si el equipo está ahí". Un reemplazo declarado fuera de los límites activados se advierte ahí mismo donde se escribe: "Fuera de los límites [0, 100]: el valor que reemplaza una lectura fallida."
Los valores fuera de rango
Las acciones de Límites para un valor fuera de Mín y Máx:
| Acción | El valor se vuelve | Calidad |
|---|---|---|
| Nulo | Un hueco (sin valor). | buena |
| Recorte (al inicio) | La cota más cercana. | buena |
| Error y nulo | Un hueco. | mala (falla de límite) |
| Error y recorte | La cota más cercana. | mala (falla de límite) |
| NaN | NaN. | buena. Se ofrece solo en los tags Float y Double, cuyo tipo lo puede representar; le permite a un canal de Process clasificar el valor no válido. Una acción NaN dejada en un tag entero por una escritura de agente o por una copia de seguridad restaurada degrada al hueco de Nulo. |
Una falla 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 extra, y la tarjeta Conversión imprime "El valor 130 está fuera de los límites [0, 100]." Sigue siendo una condición de proceso y no un problema de conexión, y el estado de salud del dispositivo no cuenta al dispositivo como sin conexión por ella.
Boolean, String y los demás tipos
Los tipos no numéricos tienen sus propias transformaciones en la misma tarjeta Conversión:
- Boolean: Invertir reporta 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 valen para todos los tipos; reemplazar por un valor se ofrece dondequiera que un número declarado pueda convertirse en una lectura, así que un tag DateTime, Guid o ByteString no lo lista. La política de NaN vale solo para los tags numéricos.
Una escritura deshace la cadena
El campo de escritura de la tarjeta Valor en vivo toma un valor de ingeniería y deshace en orden las etapas activadas que son invertibles: recorta a Mín y Máx cuando Límites está activada (una escritura siempre se recorta, nunca se descarta, sea cual sea la acción de límite), descalibra ((valor − Lineal) ÷ Angular), desescala de la misma manera, y luego fuerza al tipo del tag. El redondeo pierde información y no se deshace. Una entrada booleana vuelve a aplicar Invertir. Una subcadena de String es solo de presentación, así que una escritura de texto 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.