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?