Flujo de ejecución según ChatGPT
Perfecto, esa es la pregunta clave 👍
En los ABB S4 el flujo de ejecución no es intuitivo porque NO empieza en el programa RAPID directamente, sino en el sistema. Vamos paso a paso, de forma lineal, como realmente ocurre dentro del controlador.
---
🔁 Flujo real de ejecución en un ABB S4
Piensa en 3 capas:
1️⃣ Arranque del sistema
2️⃣ Carga de tareas RAPID
3️⃣ Ejecución del programa de usuario
---
1️⃣ ARRANQUE DEL CONTROLADOR
Cuando enciendes el S4:
➜ 1.1 Carga del sistema base
Se lee desde disquete (o disco):
BASE.SYS
Esto:
Inicializa CPU
Reserva memoria
Define qué otros .SYS se deben cargar
📌 Todavía NO hay RAPID ejecutándose
---
➜ 1.2 Carga de parámetros
Desde SYSPAR/:
SYS.CFG
MOC.CFG
PROC.CFG
EIO.CFG
...
Aquí el controlador aprende:
Qué robot es
Cómo se mueve
Qué entradas/salidas existen
Cuántas tareas habrá
📌 Aún no hay lógica de usuario
---
➜ 1.3 Carga de datos del robot
DAT_MT16.SYS
Define:
Longitudes de brazos
Ceros de ejes
Límites
⚠️ Sin esto, el robot no puede moverse
---
➜ 1.4 Creación del RAMDISK
Todo lo anterior se copia a:
RAMDISK/
👉 Desde este punto el sistema ya corre desde RAM, no desde disquete.
---
2️⃣ CARGA DE RAPID (NO ejecución todavía)
Ahora entra en juego USER.SYS
---
➜ 2.1 USER.SYS = “Índice de programas”
USER.SYS NO es un programa, es un loader.
Dentro dice cosas como:
Qué módulos RAPID cargar
En qué tareas
Qué módulo es principal
Ejemplo conceptual:
TASK PERS
LOAD PROG201.PRG
📌 Hasta ahora:
El programa existe en memoria
Pero no se está ejecutando
---
➜ 2.2 Compilación de RAPID
El controlador:
Lee PROG201.PRG
Lo compila
Verifica sintaxis
Si hay error → NO arranca
---
3️⃣ EJECUCIÓN DEL PROGRAMA RAPID
Aquí está la parte que suele confundir.
---
➜ 3.1 ¿Dónde empieza el programa?
En ABB S4 NO empieza en la primera línea.
Empieza en:
PROC main()
📌 SIEMPRE
No importa el nombre del archivo.
---
➜ 3.2 ¿Quién llama a main()?
El sistema operativo del S4:
BASE.SYS → USER.SYS → RAPID runtime → main()
Tú nunca llamas a main() manualmente.
---
➜ 3.3 Flujo típico dentro del programa
Ejemplo simplificado:
MODULE PROG201
PROC main()
Init;
WHILE TRUE DO
Ciclo;
ENDWHILE
ENDPROC
PROC Init()
! Inicialización
ENDPROC
PROC Ciclo()
MoveJ p1, v100, z10, tool0;
ENDPROC
ENDMODULE
📌 El robot:
Entra a main()
Ejecuta Init
Se queda en el bucle infinito
---
🧠 Resumen mental (MUY IMPORTANTE)
El flujo NO es:
Disquete → PROG201.PRG → primera línea
El flujo REAL es:
POWER ON
↓
BASE.SYS
↓
SYSPAR/*.CFG
↓
DAT_MT16.SYS
↓
RAMDISK
↓
USER.SYS
↓
Carga módulos RAPID
↓
Busca main()
↓
Ejecuta main()
---
⚠️ Errores comunes
❌ “No hace nada al arrancar”
→ main() está vacío o no existe
❌ “Carga el programa pero no se mueve”
→ No hay bucle o está esperando una señal
❌ “No arranca el sistema”
→ Error en MOC.CFG o DAT_MT16.SYS
---
🧪 Ejercicio mental rápido
Si tú borras:
PROG201.PRG → el sistema arranca, pero sin programa
USER.SYS → no se carga ningún RAPID
BASE.SYS → el S4 no arranca
main() → el programa carga pero no corre
---
Si quieres, en el siguiente mensaje puedo:
Dibujarte el flujo como diagrama
Explicarte qué pasa cuando pulsas START en el FlexPendant
Revisar contigo un USER.SYS real línea por línea
No Comments