Desarrolladores/Bibliotecas gráficas
Faceplates y dinámicas
Plantillas parametrizadas, catálogo de elementos, acciones de botón y dinámicas por estado.
3 min de lectura
Un faceplate es una plantilla con parámetros tipados. Sus elementos usan $parametro en el campo tag; cada instancia enlaza esos parámetros con variables del proyecto.
Plantilla
{
"width": 320, "height": 180, "background": "#ffffff",
"parameters": {"running": "bool", "flow": "float", "fault": "bool"},
"elements": [
{"id": "body", "kind": "rectangle", "x": 0, "y": 0, "w": 320, "h": 180,
"color": "#f1f5f9", "stroke_color": "#334155"},
{"id": "pilot", "kind": "lamp", "x": 16, "y": 16, "w": 40, "h": 40, "tag": "$running"},
{"id": "flow", "kind": "text", "x": 70, "y": 16, "w": 230, "h": 40,
"text": "Caudal ", "tag": "$flow", "unit": " m³/h", "decimals": 1}
]
}
Instancia
{"id": "pump1", "kind": "faceplate", "x": 30, "y": 100, "w": 320, "h": 180,
"template": "pump",
"bindings": {"running": "Pump1.running", "flow": "Pump1.flow", "fault": "Pump1.fault"}}
bindings debe contener exactamente todos los parámetros, con variables hoja del mismo tipo.
Catálogo de elementos
| kind | Propiedades específicas |
|---|---|
text |
text, tag, unit, decimals, font_size, bold, text_align, color, text_color |
input |
Igual que text; tag escribible |
button |
text, action y campos de la acción |
lamp |
tag bool, lamp_colors: {on, off, bad} |
bar |
tag numérico, min, max, color |
gauge |
tag numérico, min, max, gauge_style (dial, semi, thermometer), text, unit, decimals, warning, alarm, color |
image |
source (SVG recomendado) |
text_list |
tag, texts [{value, text}], default_text |
line / polyline / pipe |
points normalizados, stroke_color, stroke_width, stroke_style, arrows |
rectangle / ellipse |
color, filled, stroke_color, stroke_width |
Los points son pares [u, v] entre 0 y 1 dentro de la caja: X = x + u·w, Y = y + v·h.
Acciones de botón
| action | Campos | Efecto |
|---|---|---|
toggle |
tag bool | Invierte el valor |
set |
tag, value | Escribe value |
momentary |
tag bool | true al pulsar, false al soltar |
press_release |
tag, press_value, release_value | Dos valores |
screen |
screen, target_container | Navega (solo proyecto) |
popup |
screen, modal | Abre emergente (solo proyecto) |
script |
script | Ejecuta Python (solo proyecto) |
Dinámicas
"dynamics": {
"visible": {"tag": "$visible", "op": "eq", "value": true, "bad": false},
"enabled": {"tag": "$permiso", "op": "eq", "value": true, "bad": false},
"default": {"color": "#d7e0e9"},
"states": [
{"when": {"tag": "$fault", "op": "eq", "value": true}, "style": {"color": "#c64b51", "text": "AVERÍA"}},
{"when": {"tag": "$running", "op": "eq", "value": true}, "style": {"color": "#147d75"}}
],
"bad": {"color": "#da982f"},
"disabled": {"color": "#e0e5eb"},
"disabled_reason": "Falta permiso"
}
Operadores: eq, ne para todo; gt, ge, lt, le solo números. Gana el primer estado que se cumpla. Máximo 128 estados.
| kind | Claves de style |
|---|---|
| text, input, button, text_list | color, text_color, border_color, text |
| rectangle, ellipse | color, stroke_color |
| line, polyline, pipe | stroke_color |
| image | source |
| lamp, bar, gauge | color |
Pruébalo en vivo
El playground de faceplates renderiza una plantilla en el navegador y te deja cambiar parámetros para ver las dinámicas.
Objetos de librería en Studio
La interfaz llama objetos de librería a estas plantillas; el formato sigue usando faceplate. Los símbolos estándar se referencian como estandar__<objeto> y sus SVG como library://estandar/graficos/<símbolo>.svg. Los botones y entradas admiten permission para exigir un permiso específico. Este campo se valida en la operación, independientemente de dynamics.enabled. Consulta Librerías y Usuarios y roles.