Desarrolladores/Programación
Scripts Python
API ctx, eventos de inicio, apertura de pantalla, botones y tareas periódicas.
2 min de lectura
Los scripts son archivos scripts/<nombre>.py del proyecto. Se editan en Studio (Scripts y tareas), con resaltado y comprobación de sintaxis, o desde un editor externo.
Eventos
| Evento | ctx.event |
Cuándo |
|---|---|---|
| Inicio | startup |
Una vez al arrancar el Runtime, en el orden configurado |
| Apertura de pantalla | screen_open |
Al abrir o navegar a la pantalla |
| Botón | button |
Acción Ejecutar script |
| Tarea cíclica | task:<id> |
Cada periodo, tras terminar la ejecución anterior |
API ctx
# Instantánea coherente tomada al empezar esta ejecución.
if ctx.quality("Pump1.running") == "good":
running = ctx.read("Pump1.running")
print(f"Bomba 1: {running}")
# Estado persistente entre ejecuciones de este script, mientras dure el Runtime.
ctx.state["executions"] = ctx.state.get("executions", 0) + 1
# Solicitar una escritura; se valida y aplica al terminar sin errores.
if ctx.read("Tank.level") > 90.0:
ctx.write("Pump1.setpoint", 50.0)
| Miembro | Descripción |
|---|---|
ctx.read(nombre) |
Valor; lanza error si la calidad no es good |
ctx.quality(nombre) |
good, uncertain o bad |
ctx.write(nombre, valor) |
Encola una escritura (máx. 1000 por ejecución) |
ctx.state |
Diccionario JSON serializable por script |
ctx.event |
Evento que disparó la ejecución |
ctx.screen |
Pantalla de origen; vacío en inicio y tareas |
Si el script lanza una excepción, sus escrituras y cambios de ctx.state se descartan. print() y los errores aparecen en Ejecuciones.
Configuración
{
"startup": ["startup"],
"timeout_seconds": 10,
"tasks": [
{"id": "quality", "script": "check_quality", "interval_ms": 5000, "enabled": true}
]
}
Se guarda en automation.json. Una pantalla añade "on_open": ["screen_open"]; un botón "action": "script", "script": "nombre".
Ejecución
- Cada ejecución usa un proceso Python nuevo, con límite de 0,1 a 300 s (10 por defecto).
- Los eventos se serializan: un script lento retrasa a otros, pero no bloquea Qt ni la adquisición.
- Las tareas no se solapan ni recuperan periodos perdidos.
Código de confianza
El proceso separado permite cancelar, pero no es una sandbox. Los scripts tienen los permisos del usuario y pueden importar cualquier biblioteca instalada.
Ejemplo: contador de arranques
# scripts/count_starts.py — tarea cada 1000 ms
running = ctx.read("Pump1.running")
was_running = ctx.state.get("was_running", False)
if running and not was_running:
ctx.write("Pump1.starts", ctx.read("Pump1.starts") + 1)
ctx.state["was_running"] = running
Idioma del runtime
ctx.language devuelve el idioma actual. ctx.set_language() acepta un idioma declarado en el proyecto y aplica el cambio cuando el script termina correctamente y se validan sus órdenes.
if ctx.language == "es":
ctx.set_language("en")