Skip to main content

RAMDISK/COM200.SYS

Análisis del Archivo COM200.SYS - Comunicación RPC Multitarea


📋 Descripción General


Sistema de comunicación RPC (Remote Procedure Call) para intercambio de datos entre el robot ABB IRB 6400 y un sistema externo (posiblemente un PLC o supervisor). Implementado como tarea secundaria (Task 1) en un entorno multitarea.


🎯 Contexto de la Aplicación


```yaml

Estación: FFS Schaufelbearbeitung (procesamiento de palas)

Ubicación: ABB Kraftwerke Birr/Bexbach (central eléctrica)

Función: Comunicación robot ↔ sistema de control externo (RPC)

Autor: Bernd Luckas - ABB Flexible Automation GmbH

Fecha: 22.08.1995 - 24.09.1996

Versión: 2.00

```


🔧 Especificaciones Técnicas


```yaml

Robot: IRB 6400 (modelo específico XXXX)

Hardware: M94A

Software: Basic CommWare 2.0 + Advanced Functions + Multitasking

Programa: 3HAB2317-1/05

Comunicación: RS232 por puerto sio1:

Protocolo: Telegramas personalizados (STX/ETX/ACK/NAK)

```


📊 Estructura del Protocolo de Comunicación


1. 📨 Telegrama de ESTADO (Robot → RPC)


```rapid

Formato: [STX] [Z] [Datos(12)] [ETX]

Posiciones:

  1: STX (2) - Start of Text

  2: Z (90) - Identificador "Zustand" (Estado)

  3: nAlr - Número de alarma

  4-6: nAnrC1-3- Número de alarma convertido (3 chars)

  7: nBtrz - Estado operativo (A=Auto, M=Manual, S=Stop)

  8: nQpoa - ??? 

  9: nEpoa - ???

  10: nSpb - ??? 

  11: nQtta - ???

  12: nEtta - ???

  13: nStb - ???

  14: ETX (3) - End of Text

```


2. 📩 Telegrama de ORDEN (RPC → Robot)


```rapid

Formato complejo con múltiples campos:

  - Tipo de orden (AuftragsArt)

  - Estación (StationsNr)

  - Posiciones (PlatzNrStation, PlatzNrIRB)

  - Tipo de transferencia (TransArt)

  - Peso (Gewicht)

  - Desplazamientos X,Y,Z (VerschiebX/Y/Z)

  - Rotación Z (DrehungZ)

  - Tipo de adaptador

  - Dirección de aproximación

  - Patrón de colocación

  - Tipo de pala (SchaufelTyp)

```


🔄 Diagrama de Flujo del Sistema


```

┌─────────────────┐ RS232 ┌─────────────────┐

│ Robot ABB │◄────────────►│ Sistema RPC │

│ IRB 6400 │ sio1: │ (Supervisor) │

│ │ │ │

│ TASK 0 (Main) │ I/O │ │

│ │ │ Digital │ │

│ ▼ │◄────────────►│ │

│ TASK 1 (COM) │ di/do │ │

└─────────────────┘ └─────────────────┘

       ▲ ▲

       └─────────── Telegramas ─────────┘

```


⚙️ Variables de Comunicación entre Tareas


Señales Digitales Task 0 ↔ Task 1:


```rapid

diCTENQ → Enable Request (Task 0 solicita comunicación)

doCTACK → Acknowledge (Task 1 confirma recepción)

```


Variables Compartidas (posiblemente en DAT_MT16.SYS):


```rapid

nZ_tgm → Flag telegrama estado procesado

nA_tgm → Flag telegrama orden procesado

nAnr → Número de alarma actual

nAlr → ??? 

nQpoa, nEpoa, nSpb, nQtta, nEtta, nStb → Parámetros de estado

```


🔍 Funciones Principales


main() - Ciclo Principal


```rapid

IF bInit=FALSE initialisiere; → Inicializa comunicación

ctrtask0; → Escanea solicitudes Task 0

ctrbetrz; → Controla estado operativo

IF bSend=TRUE send; → Envía telegrama estado

IF bSend=FALSE receive; → Recibe telegrama orden

IF bProcess_Atgm=TRUE process_Atgm; → Procesa orden recibida

stop_task; → Controla estado de tarea

```


send() - Envío de Telegramas


```rapid

1. Prepara buffer de salida (14 bytes)

2. Envía por RS232 (WriteBin)

3. Espera ACK (6) del RPC

4. Reintenta hasta 3 veces si falla

```


receive() - Recepción de Telegramas


```rapid

1. Lee bytes del puerto serie

2. Detecta STX (inicio) y ETX (fin)

3. Responde ACK al telegrama completo

4. Activa procesamiento si es válido

```


process_Atgm() - Procesamiento de Órdenes


```rapid

Convierte datos ASCII a valores numéricos:

- Campos de 1-5 dígitos

- Signo negativo detectado por carácter 45 (-)

- Escalas aplicadas (×0.1 para desplazamientos)

```


🚨 Sistema de Gestión de Errores


Códigos de Error (stFMTCOM01-07):


```yaml

01: "Kein ACK in RPC Antwort TGM" - Sin confirmación

02: "ERR_DEV_MAXTIME" - Timeout en dispositivo

03: "Kein ACK" (reintento)

04: "Keine Antwort von RPC" - Sin respuesta tras 3 intentos

05: "TGM-Kennung undefiniert" - Identificador desconocido

06: "ERR_FILEACC" - Error acceso a archivo

07: "ERR_DEV_MAXTIME inerhalb RPC-TGM" - Timeout interno

```


Prioridades:


· 0: Solo mensaje en Teach Pendant

· 1: Mensaje + detiene tarea (requiere OK)


💡 Ejemplo de Configuración para Repositorio


Archivo: 📚 Configuraciones/Comunicación/COM200_SYS.md


```markdown

## Configuración RS232 Implícita

(Puerto sio1: configurado en SIO.CFG)

- Baudrate: (desconocido, verificar en SIO.CFG)

- Paridad: (desconocido)

- Bits de datos: (desconocido)

- Bits de parada: (desconocido)


## Mapeo de Estados Operativos

nBtrz (Estado del robot):

  65 'A' → AUTO (diCProg_run=1 AND diCAuto_Ein=1)

  77 'M' → MANUAL (sin error, no auto)

  83 'S' → STOP (diCFehler=1)


## Protocolo de Handshake

1. Task 0 activa diCTENQ

2. Task 1 envía telegrama estado

3. Task 1 activa doCTACK

4. Task 0 desactiva diCTENQ

5. Task 1 desactiva doCTACK

```


🔗 Dependencias con Otros Archivos


```

COM200.SYS depende de:

├── BASE_MT.SYS (definiciones base)

├── DAT_MT16.SYS (variables compartidas)

└── SIO.CFG (configuración puerto serie)


COM200.SYS comunica con:

└── PROG201.PRG (Task 0 principal)

```


📝 Notas de Implementación


1. Multitarea Real → Task 1 independiente de movimiento

2. Comunicación Asíncrona → No bloquea movimiento robot

3. Robustez → Reintentos y manejo de errores

4. Industrial → Diseñado para 24/7 en planta


¿Necesitas que explique cómo configurar el puerto serie SIO.CFG o cómo integrar este sistema en una aplicación nueva?