# 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