Sistema de verificación de longitud para perfiles de aislante de marcos de puertas de autos. Documentación técnica en Ladder Logic para integración con programa PLC existente.
La máquina ensambla perfiles de aislante en marcos de puertas de autos. Tiene dos secciones independientes (LEFT y RIGHT), cada una con 3 guías donde el operador coloca los perfiles. Cada guía tiene un sensor capacitivo (presencia) y un sensor de barrera (longitud con codificación 2-bit).
El sistema verifica que los perfiles cumplan la tolerancia de ±3mm. El mapeo principal confirmado usa 12 lámparas: LEFT OK en Y070-Y072, LEFT Fault/NOK en Y073-Y075, RIGHT OK en Y076-Y077/Y100 y RIGHT Fault/NOK en Y101-Y103. La sección queda bloqueada hasta que el operador reemplace el perfil fuera de tolerancia.
Alias históricos: la documentación actual usa LEFT/RIGHT y guías L1-L3/R1-R3 como nombres canónicos. En documentos históricos, A equivale a LEFT, B equivale a RIGHT, A1/A2/A3 equivalen a L1/L2/L3 y B1/B2/B3 equivalen a R1/R2/R3. Las direcciones físicas no cambian.
LEFT RIGHT
┌───────────────────┐ ┌───────────────────┐
│ L1 L2 L3 │ │ R1 R2 R3 │
│ [CAP] [CAP] [CAP] │ ← Capacitivo │ [CAP] [CAP] [CAP] │
│ [BAR] [BAR] [BAR] │ ← Barrera │ [BAR] [BAR] [BAR] │
└───────────────────┘ └───────────────────┘
│ │
Switch_LEFT (X025) Switch_RIGHT (X026)
(programa existente) (programa existente)
Regla clave: Cada sección es independiente. Una sección está OK cuando sus 3 guías tienen perfil presente Y dan código 10. No se permiten combinaciones entre secciones.
| Parámetro | Valor |
|---|---|
| Modelo | Mitsubishi FX3G-60M |
| Entradas | X110-X117, X120-X127, X130-X131 (18 sensores) |
| Salidas | Y070-Y077, Y100-Y103 (12 lámparas: OK/Fault-NOK LEFT y RIGHT; Y078/Y079 no existen por direccionamiento octal Mitsubishi) |
| Timers | T200-T221 usados; T224-T225 disponibles si se agrega debounce dedicado de reset por falla (resolución 10ms) |
| Flags | M3000+ rango |
| Interface | M5000 (LEFT OK), M5001 (RIGHT OK) |
El sistema es un módulo de verificación puro que se integra INLINE en el programa PLC existente. NO reimplementa Grafcets, switches ni lógica de ciclo — eso ya existe en el programa.
Verify_OB (64 rungs)
├── Debounce_Filters (R0-R18) ─ 18 timers T200-T217 + First Scan Init
│ └── TON filter × 18 (Átomo)
├── Guide_Verify (R19-R54) ─ 6 instancias de verificación
│ └── Guide_Verify × 6 (Molécula)
├── Section_Logic (R55-R58) ─ Left_Section_OK_Internal, Right_Section_OK_Internal
└── Section_OK_Reset (R59-R62) ─ Latches M5000/M5001 con auto-reset
X110-X131 (sensores) → Debounce (T200-T217) → M3020-M3043
↓
Guide_Verify → M3010-M3015 (OK)
M3050-M3055 (Fault)
↓
Section_Logic → M3009 / M3018
↓
Section_OK_Reset → M5000 / M5001
↓
Programa existente (restricción)
↓
Y070-Y077/Y100-Y103 (12 lámparas)
| Módulo | Rungs | Descripción |
|---|---|---|
| Debounce_Filters | R0-R18 | 18 filtros TON (10ms resolución, PT=80ms). First Scan Init para D210 y D230 |
| Guide_Verify | R19-R54 | 6 instancias (L1-L3, R1-R3). Decodifica barrera 2-bit + presencia → Guide_OK + Fault |
| Section_Logic | R55-R58 | Combina Guide_OK + Presence → Left_Section_OK_Internal (M3009), Right_Section_OK_Internal (M3018) |
| Section_OK_Reset | R59-R62 | Latch M5000/M5001 con reset por vacío sostenido, falla o perfil presente ya no OK |
| Señal | Dirección | Tipo | Descripción |
|---|---|---|---|
| LEFT_OK | M5000 | OUTPUT | LEFT lista para movimiento (TRUE = OK) |
| RIGHT_OK | M5001 | OUTPUT | RIGHT lista para movimiento (TRUE = OK) |
| STANDBY | M250 | INPUT | Máquina en standby (READ-ONLY) |
| Position_LEFT | M180 | INPUT | Posición LEFT activa (READ-ONLY) |
| Position_RIGHT | M181 | INPUT | Posición RIGHT activa (READ-ONLY) |
| Switch_LEFT | X025 | INPUT | Switch operador LEFT (READ-ONLY) |
| Switch_RIGHT | X026 | INPUT | Switch operador RIGHT (READ-ONLY) |
Solo M5000 y M5001 son escritos por nuestro sistema. El resto son señales del programa existente que leemos como referencia.
Toyoda-venado/
├── README.md ← Este archivo
├── requerimientos.md ← Requerimientos funcionales
└── src/
├── memory_map.md ← Mapa de M3000+, T200+, D210/D230
├── io_mapping.md ← Entradas X110+, salidas Y070+, cableado
├── debounce_filters.md ← 18 filtros debounce + First Scan Init (R0-R18)
├── guide_verify.md ← 6 instancias Guide_Verify (R19-R54)
├── section_logic.md ← Section OK interno (R55-R58)
├── section_ok_reset.md ← Latch M5000/M5001 + auto-reset (R59-R62)
└── verify_ob.md ← Estructura completa del programa (64 rungs)
| Rango | Descripción | Nota |
|---|---|---|
| X110-X117 | LEFT (cap L1, bar L1 b0/b1, cap L2, bar L2 b0/b1, cap L3, bar L3 b0) | |
| X120 | Barrera L3 bit 1 | |
| X121-X127 | RIGHT (cap R1, bar R1 b0/b1, cap R2, bar R2 b0/b1, cap R3, bar R3 b0) | |
| X130-X131 | Barrera R3 bit 0/1 |
| Dirección | Descripción |
|---|---|
| Y070 | Lámpara L1 OK (M3010) |
| Y071 | Lámpara L2 OK (M3011) |
| Y072 | Lámpara L3 OK (M3012) |
| Y073 | Lámpara L1 Fault/NOK (M3153 = M3050 ∧ M3020) |
| Y074 | Lámpara L2 Fault/NOK (M3154 = M3051 ∧ M3021) |
| Y075 | Lámpara L3 Fault/NOK (M3155 = M3052 ∧ M3022) |
| Y076 | Lámpara R1 OK (M3013) |
| Y077 | Lámpara R2 OK (M3014) |
| Y100 | Lámpara R3 OK (M3015) |
| Y101 | Lámpara R1 Fault/NOK (M3053 ∧ M3023) |
| Y102 | Lámpara R2 Fault/NOK (M3054 ∧ M3024) |
| Y103 | Lámpara R3 Fault/NOK (M3055 ∧ M3025) |
Direccionamiento octal Mitsubishi: Y078/Y079 no existen; después de Y077 viene Y100.
| Rango | Descripción |
|---|---|
| M3009 | Left_Section_OK_Internal (combinacional) |
| M3010-M3015 | Guide_OK por guía (L1-L3, R1-R3) |
| M3016 | At_Least_One_Profile_LEFT (guard) |
| M3017 | At_Least_One_Profile_RIGHT (guard) |
| M3018 | Right_Section_OK_Internal (combinacional) |
| M3020-M3025 | Presence filtrada por guía |
| M3030-M3039, M3042-M3043 | Barrera bits filtrados (bit 0/1 por guía) |
| M3050-M3055 | Fault flags por guía |
| M3100-M3117 | Decode auxiliaries (Short/Long/Invalid) |
| M3153-M3155 | Indicadores Fault/NOK LEFT L1-L3 hacia Y073-Y075 |
| M5000 | LEFT_OK — INTERFACE |
| M5001 | RIGHT_OK — INTERFACE |
| Dirección | Default | Descripción |
|---|---|---|
| D210 | 8 | Sensor debounce PT (8 × 10ms = 80ms) |
| D230 | 200 | Section_OK reset PT (200 × 10ms = 2000ms) |
| Rango | Cantidad | Descripción |
|---|---|---|
| T200-T217 | 18 | Debounce sensores (PT = D210) |
| T220 | 1 | Anti-rebounce reset LEFT_OK (PT = D230) |
| T221 | 1 | Anti-rebounce reset RIGHT_OK (PT = D230) |
| T224-T225 | 2 | Disponibles si se requiere debounce dedicado para reset por perfil presente y no OK |
Polaridad: Las barreras MIN/MAX instaladas son normalmente cerradas (NC). Por eso, en Ladder pueden aparecer contactos NC o interpretación invertida en los timers/decode de barrera. No es un error de contacto: el bit lógico documentado abajo representa la señal ya interpretada para la decodificación.
| Bit 1 | Bit 0 | Código | Significado | Acción |
|---|---|---|---|---|
| 1 | 0 | 10 |
En rango (longitud correcta) | OK ON, NOK OFF, Guide_OK = TRUE |
| 0 | 0 | 00 |
Corto (-3mm o más) | OK OFF, NOK ON, Fault |
| 1 | 1 | 11 |
Largo (+3mm o más) | OK OFF, NOK ON, Fault |
| 0 | 1 | 01 |
Inválido (fallo de sensor) | OK OFF, NOK ON, Fault (fail-safe) |
LEFT_OK (M5000):
SET: M3010∧M3020 ∧ M3011∧M3021 ∧ M3012∧M3022 ∧ M3016
(3 guías LEFT presentes Y OK, al menos un perfil)
RESET: T220.Q
OR (M3016 AND NOT M3009)
OR (M3050 OR M3051 OR M3052)
RIGHT_OK (M5001):
SET: M3013∧M3023 ∧ M3014∧M3024 ∧ M3015∧M3025 ∧ M3017
(3 guías RIGHT presentes Y OK, al menos un perfil)
RESET: T221.Q
OR (M3017 AND NOT M3018)
OR (M3053 OR M3054 OR M3055)
Comportamiento: Section_OK se SETea cuando las 3 guías están presentes y OK. No se RESETea por Section_OK en sí mismo. Se RESETea cuando la sección queda vacía por >2s (T220/T221), o cuando hay al menos un perfil presente pero la sección ya no está OK después del debounce de sensores. Una falla de guía con perfil presente también debe resetear el latch para que una sección previamente OK no siga habilitada si un perfil queda corto, largo o inválido. Las lámparas siguen indicando la guía en falla; M5000/M5001 son permisos de movimiento.
Los 64 rungs se insertan INLINE en el programa existente (no CALL a subprograma).
1. Lectura de entradas (programa existente)
2. → Verify_OB (nuestros 64 rungs)
├─ Debounce (R0-R18)
├─ Guide_Verify (R19-R54)
├─ Section_Logic (R55-R58)
└─ Section_OK_Reset (R59-R62)
3. Grafcets del programa existente (leen M5000/M5001)
4. Escritura de salidas
| M5000 | [lógica de movimiento existente] |---( permitir movimiento LEFT )---|
| M5001 | [lógica de movimiento existente] |---( permitir movimiento RIGHT )---|
M5000/M5001 actúan como restricción: si están FALSE, la sección correspondiente no puede avanzar.
Eliminar los 64 rungs de Verify_OB. Sin impacto residual — el programa existente no depende de nuestras señales internas.
| Fase | Estado |
|---|---|
| Requerimientos | ✅ Completado |
| Especificaciones | ✅ Completado (17 requisitos, 24 escenarios) |
| Diseño técnico | ✅ Completado (4 módulos, 64 rungs) |
| Implementación | ✅ Completado (7 archivos) |
| Judgment Day | ✅ Completado (3 rondas, todos los CRITICAL corregidos) |
| Pruebas en campo | 🔲 Pendiente |
- Confirmar que M5000/M5001 no colisionan con memorias del programa existente
- Encontrar la señal de "ciclo iniciado" para trigger de reset (actualmente usa auto-reset por ausencia)
- Calibrar D230 (2s default) — ajustar si el operador necesita más/menos tiempo entre ciclos
- Verificar cableado X110-X131 en campo (octal: X118/X119 no existen)
Para detalle de implementación, ver los archivos en src/. Para especificaciones funcionales, ver requerimientos.md.