Durante años me tocó bastante las narices no poder usar Git con TIA Portal de forma decente.
Y no hablo de “oye, estaría bien tenerlo”.
Hablo de ese tipo de frustración muy concreta que aparece cuando:
- La máquina está parada
- El cliente está mirando fijamente
- Y tú estás intentando averiguar qué cambió entre dos proyectos que se llaman igual… pero no son el mismo
Git para software, una maravilla.
Git para PLCs… folklore industrial.
El ritual era siempre el mismo:
- Proyecto_Final
- Proyecto_Final_2
- Proyecto_Final_BUENO
- Proyecto_Final_BUENO_AHORA_SÍ
Y en algún servidor olvidado:
Backup_2024_11_03_revisado_definitivo.zip
Que nadie borraba. Jamás. Porque igual era el bueno.
TIA permite exportar XML, sí.
Pero quien haya intentado meter esos XML en Git sabe lo que pasa:
Git dice que todo cambió.
Tú sabes que no cambió nada.
Nodos reordenados.
Atributos distintos.
GUIDs nuevos.
Ruido por todas partes.
Git empieza a gritar cambios como si se hubiese roto la planta… y en realidad solo moviste un comentario.
Así que Git deja de servir.
Y volvemos al ZIP con fecha como si estuviésemos en 2009.
0) El problema real
El problema no es exportar.
El problema es exportar pensando en versionado.
Para que Git funcione, el código debe ser:
- Determinista
- Ordenado
- Reproducible
- Estable entre exports
El XML nativo de TIA sirve para importar…
pero no para versionar sin querer tirarte por la ventana.
1) La idea
De esa frustración nació TiaGitExporter.
No como producto.
No como SaaS.
No como “plataforma digital disruptiva”.
Sino como herramienta para dejar de sufrir yo primero.
Exportar artefactos de PLC a una estructura XML pensada para Git.
2) Qué exporta
- Function Blocks
- Functions
- UDTs
- Tag Tables
- Tipos PLC
/ProjectName/
/CPU_1/
/Blocks/
FB_Motor.xml
FB_Valve.xml
/Types/
UDT_Motor.xml
3) Determinismo primero
Tipo → CPU → Grupo → Nombre
Si no cambió nada, Git no debería decir que cambió algo.
Parece lógico. Pero no lo es cuando TIA decide reorganizar XML por deporte.
4) Normalización XML
- Indentación consistente
- Orden de atributos
- Ruido fuera
- UTF-8 sin BOM
Resultado: diffs legibles y menos “¿quién ha tocado esto?” a las 3 AM.
5) Export incremental
Cada archivo tiene hash SHA-256.
- Commits limpios
- Pipelines rápidos
- Backups incrementales reales
6) Arquitectura
- Core: Openness, export, import, hashing
- UI: selección de proyecto
La UI no sabe nada de Openness. Y mejor así.
7) Importación
Permite re-importar XML para restaurar versiones o sincronizar repos.
8) Qué NO es
Exportar → Versionar → Comparar
Sin magia. Sin marketing. Solo útil.
9) Open-source
Lo liberé porque estas herramientas funcionan mejor abiertas que vendidas baratas.
10) Cierre
No cambia cómo programas PLCs.
Cambia cómo versionas su software.