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