Simulated
Señales sintéticas dentro de la aplicación, para probar, capacitar y construir paneles de control sin hardware.
El driver Simulated produce señales sintéticas dentro de la aplicación, sin ningún equipo y sin ninguna red de por medio. Es un driver de primera clase, no un atajo: sus dispositivos se incorporan, se sondean y se guardan en caché por exactamente el mismo camino del runtime que el hardware real, así que los trazados, los tipos de dato, los indicadores de calidad y el comportamiento de escritura funcionan igual que en campo. Úselo para probar el modelo del Connector, construir paneles de control antes de que llegue el equipo, o preparar una demostración.
El dispositivo
Un dispositivo simulado no tiene campos de conexión: solo su nombre y el
Intervalo de sondeo (ms) predeterminado (1000 al inicio). Su URI base es
simulated://<dispositivo>; el segmento del dispositivo es solo informativo, porque
todo el comportamiento vive en los tags.
El descubrimiento
Descubrir no necesita ningún destino y lista el catálogo integrado: una instancia lista para agregar de cada arquetipo, con sus tags. Desmarque los canales que no quiera antes de agregarla.
| Modelo | Instancia | Canales |
|---|---|---|
| Universal Controller | UC-01 | ProcessValue (senoidal), SetPoint (consigna escribible, 50 al inicio), Output (rampa), RunStatus (Run/Stop/Pause/Fault) |
| Electrical Power Meter | PM-01 | Voltage, Current, ActivePower y Frequency (paseos aleatorios alrededor de 230, 10, 2300 y 60, sondeados a 250 ms), PowerFactor (senoidal) |
| Production Counter | CNT-01 | Count (contador Int32), Rate (paseo aleatorio alrededor de 100), Running (booleano alterno) |
| Status Panel | STS-01 | State (Run/Stop/Pause/Fault), Alarm (booleano alterno), Uptime (contador Int64) |
| Type Showcase | SHOW-01 | Un canal por cada tipo integrado de OPC UA, quince en total, útil para ejercitar todas las formas de mostrar un valor |
Los tags
Un tag simulado no tiene ninguna dirección que escribir: el nombre del tag es el punto. Están disponibles todos los tipos de dato integrados de OPC UA, y los tres modos de acceso. Lo que produce el tag se elige con Tipo de señal en la tarjeta Origen; el selector ofrece solo las formas compatibles con el tipo de dato del tag, y cambiar el tipo de dato ajusta una forma incompatible a un valor razonable. A un tag cuyo acceso permite escribir solo se le ofrecen las formas que aceptan una escritura, Retención de consigna y Pulso, y cambiar el acceso ajusta la forma de la misma manera.
| Tipo de señal | Produce | Tipos compatibles | Escribible |
|---|---|---|---|
| Senoidal | Una onda suave con un rizado ligero, sembrada a partir del nombre del tag, así que dos tags con nombres distintos se mueven distinto y un reinicio reproduce la misma curva | numéricos | no |
| Rampa | Una onda triangular (sube y luego baja), de periodo entre 10 y 59 s sembrado a partir del nombre del tag | numéricos | no |
| Paseo aleatorio | Ruido realista de un medidor: pasos desde el último valor con reversión a la media hacia el valor predeterminado (50 si no se puso ninguno), con un paso del 1 % del centro (mínimo 0.5) | numéricos | no |
| Contador | Un entero que crece de forma monótona: arranca en el valor predeterminado (0 si no se puso ninguno) y suma 1 por lectura, así que el ritmo sigue al intervalo de sondeo | numéricos | no |
| Booleano alterno | Un booleano que alterna cada segundo | Boolean | no |
| Texto enumerado | Un texto que recorre una lista fija de estados, un paso cada 3 s | String | no |
| Reloj | La hora actual, muestreada en cada lectura | DateTime | no |
| GUID aleatorio | Un Guid aleatorio nuevo por lectura | Guid | no |
| Bytes aleatorios | Una carga aleatoria de 8 bytes por lectura | ByteString | no |
| Retención de consigna | Mantiene un valor predeterminado hasta que se escriba; una escritura reemplaza lo que contestan todas las lecturas siguientes | cualquiera | sí |
| Pulso | Un punto momentáneo: descansa en una línea base, y una escritura mantiene el valor escrito durante un número declarado de segundos antes de caer solo | cualquiera | sí |
Un tag creado sin un tipo explícito recibe un valor predeterminado con vida: los tags escribibles se vuelven Retención de consigna (para que las escrituras se queden), y los de solo lectura reciben un generador adecuado a su tipo (numérico → Senoidal, Boolean → Booleano alterno, String → Texto enumerado, DateTime → Reloj, Guid → GUID aleatorio, ByteString → Bytes aleatorios). Pulso nunca es el predeterminado: un punto que devuelve un valor escrito y después lo abandona es una decisión deliberada.
Los parámetros del panel
Dos parámetros se editan directamente en la tarjeta Origen:
| Campo | Se muestra en | Significado |
|---|---|---|
| Valor predeterminado | Paseo aleatorio, Contador, Retención de consigna | El centro del paseo, el valor inicial del contador, o la respuesta de la consigna hasta que se escriba algo. La entrada coincide con el tipo del tag (casilla para Boolean, selector de fecha para DateTime, texto en los demás casos). |
| Estados | Texto enumerado | La lista separada por punto y coma que se recorre, por ejemplo Run;Stop;Pause. Una lista en blanco o sin miembros cae en Run;Stop;Pause. |
Los parámetros avanzados de la señal
Los demás parámetros de forma viajan como argumentos de consulta en la dirección
guardada del tag (por ejemplo ProcessValue?min=20&max=80&period=30). El panel no
los edita, pero los conserva a lo largo de cada edición; los ejemplos sembrados los
usan, y un agente los puede poner con las herramientas de tag de la superficie de
acceso de agente.
| Argumento | Se aplica a | Significado | Cuando falta |
|---|---|---|---|
min, max |
Senoidal | La banda por la que corre la onda; la salida se recorta a ella | Una banda sembrada a partir del nombre del tag (amplitud de 10 a 49 alrededor de un desplazamiento de 20 a 49), sin recortar |
period |
Senoidal | El periodo de la onda en segundos | Una frecuencia sembrada a partir del nombre del tag (de 0.05 a 0.24 Hz) |
phase |
Senoidal | El desfase en grados | Sembrado a partir del nombre del tag |
default |
Paseo aleatorio, Contador, Retención de consigna | El mismo valor que edita el campo Valor predeterminado del panel | 50 / 0 / el predeterminado del tipo |
values |
Texto enumerado | La misma lista que edita el campo Estados del panel | Run;Stop;Pause |
baseline |
Pulso | El valor en el que descansa el punto entre episodios, interpretado como el tipo del tag | El valor cero del tipo (la hora actual para DateTime, vacío para String) |
hold |
Pulso | Cuántos segundos dura un episodio escrito | 10 s |
warmup |
cualquiera | Segundos después de conectar antes de que conteste la primera lectura, como un instrumento que necesita estabilizarse; el lazo de sondeo absorbe la espera | ninguno |
Las escrituras
- Retención de consigna acepta escrituras y contesta con el valor escrito de ahí en adelante. El valor retenido vive en memoria mientras el dispositivo siga conectado; no se guarda en la configuración, así que desactivar el dispositivo o reiniciar la aplicación devuelve el punto a su valor predeterminado.
- Pulso toma una escritura como un episodio: contesta con el valor escrito hasta que se agota la retención, y luego cae a su línea base. Una segunda escritura durante un episodio lo reemplaza entero, así que mantener presionado un botón reinicia la retención en lugar de apilar dos.
- Todos los demás tipos rechazan las escrituras; un intento de escritura se registra una vez por tag en lugar de inundar el diario técnico en cada sondeo.
Como con cualquier driver, el campo de escritura toma el valor de ingeniería y la cadena de conversión se deshace antes de que el valor bruto llegue a la señal.
Límites que conviene conocer
- Los valores se sintetizan por corrida de la aplicación. Las formas deterministas (Senoidal, Rampa, Reloj) reproducen la misma curva después de un reinicio; las que llevan estado (Contador, Paseo aleatorio, Retención de consigna, Pulso) empiezan de cero.
- Emparejar un tipo de señal con un tipo de dato incompatible (posible solo con configuración programática; el panel restringe el selector) hace que el tag falle en todas las lecturas, con una advertencia registrada una sola vez.