Clase #26 - Funciones Matemáticas MUL/DIV en TIA Portal V18: Escalado Seguro y Cálculos Estables

Funciones Matemáticas MUL/DIV en TIA Portal V18: Escalado Seguro y Cálculos Estables

Funciones Matemáticas MUL/DIV en TIA Portal V18: Escalado Seguro y Cálculos Estables
💡 Por qué este video es esencial: Multiplicar y dividir parece seguro hasta que un sensor falla o una señal alcanza su máximo. En este video te muestro cómo un MUL_I puede desbordar INT en milisegundos, por qué DIV por cero no siempre genera fault en S7-1500 pero sí da resultados erróneos, y cómo implementar escalado analógico profesional SIN usar bloques SCALE_X prematuramente. ¡La protección matemática es clave!

👋 Introducción: Transformando Valores con Precisión

Bienvenido a la Clase #26. Ya sumas y restas de forma segura (Clase 25). Ahora necesitas operaciones que cambian la magnitud de los datos: convertir unidades, escalar lecturas de sensores, calcular promedios o ajustar ganancias de control.
Las funciones MUL (Multiplicación) y DIV (División) son potentes, pero peligrosas. A diferencia de ADD/SUB donde el crecimiento es lineal, MUL puede explotar el rango de un tipo de dato en una sola operación. Y DIV tiene un enemigo silencioso: el divisor cero.
En este artículo explicamos los bloques IEC, pero ver el overflow exponencial y la estrategia de protección contra div/0 solo es posible en el video.

🎯 Lo que aprenderás en esta sesión (Enfoque Ladder)

  1. Bloques MUL/DIV IEC: Entradas IN1/IN2, salida OUT, y comportamiento ante límites extremos.
  2. Gestión de Overflow en Multiplicación: Por qué INT * INT casi siempre requiere DInt como salida.
  3. Protección Contra División por Cero: Estrategias robustas antes, durante y después del bloque DIV.
  4. Escalado Analógico Manual: Implementar (Valor * RangoFísico) / RangoADC correctamente.
  5. Promedios Móviles Seguros: Sumar N muestras y dividir sin perder precisión ni causar faults.

️ Conceptos Clave (Resumen Técnico Ladder)

1. Anatomía de MUL/DIV IEC: Potencia y Riesgo
Como demuestro en el minuto 02:20 del video, estos bloques requieren precaución extrema:

Elemento Ladder
Función
Error Común en Conexión
Bloque MUL_I/DI/R
Multiplica IN1 × IN2 → OUT
Conectar OUT a variable del mismo tipo que IN cuando el producto excede rango
Bloque DIV_I/DI/R
Divide IN1 ÷ IN2 → OUT
No poner contacto de validación ANTES del bloque en la misma rama
Contacto Comparador
Valida divisor ≠ 0
Usarlo DESPUÉS del bloque DIV (demasiado tarde)
Bobina MOVE
Asigna resultado a tag final
Olvidar que MOVE copia valor, no transforma

💡 Regla de Oro en Ladder: Cada bloque matemático ocupa SU PROPIA RED o RAMA independiente. Nunca pongas MUL y DIV en la misma rama lógica; usa marcas auxiliares (M) para pasar resultados entre redes.
2. Protección Div/0 en Ladder: Solo Contactos y Bobinas
En Ladder no hay IF/THEN. La protección se construye así:

  • Red 1: Validación |--[Divisor <> 0]-----------------(M_Valido)--| Red 2: Cálculo Condicionado |--[M_Valido]--[DIV_DI(IN1:=Num, IN2:=Den)]--(Resultado)--| |--[/M_Valido]--[MOVE(IN:=0, OUT:=Resultado)]------------|
Red 1: Usa un contacto comparador <> para validar divisor. Activa marca M_Valido.
Red 2: Solo si M_Valido está activa, ejecuta DIV. Si no, MOVE asigna 0 seguro.

3. Escalado Analógico en Ladder: Orden Crítico
Para escalar (Raw * RangoFisico) / RangoADC en Ladder:
  • Red 1: Multiplicación Primero |--[MUL_DI(IN1:=Raw_ADC, IN2:=Rango_Fisico)]--(Temp_Intermedio)--| Red 2: División Después |--[DIV_DI(IN1:=Temp_Intermedio, IN2:=Rango_ADC)]--(Temp_Escalada)--|
⚠️ EN LADDER ESTE ORDEN ES OBLIGATORIO: Si pones DIV primero en Red 1 y MUL después en Red 2, pierdes resolución decimal porque DIV_I trunca antes de multiplicar. Los bloques deben estar en redes separadas con marca intermedia.

✅ Checklist de MUL/DIV en Ladder

Antes de implementar:
  • Cada bloque MUL/DIV en su propia red o rama independiente.
  • Marca auxiliar (M) usada para pasar resultado entre redes de MUL y DIV.
  • Contacto comparador <> 0 en red ANTERIOR al bloque DIV.
  • Tipo de dato OUT declarado como DInt si operands son Int.
  • Bloque MUL siempre en red anterior a DIV en escalado.
  • Comentada cada red explicando unidades de entrada/salida.
Este checklist está demostrado en el proyecto Ladder del video. Úsalo como referencia.

🛑 Errores Comunes en Ladder con MUL/DIV

  1. Poner MUL y DIV en Misma Rama: El flujo de energía Ladder no garantiza orden de ejecución dentro de una rama compleja. Separa en redes.
  2. Validar Divisor DESPUÉS del Bloque DIV: En Ladder, todos los elementos de una rama se evalúan simultáneamente. La validación DEBE estar en red previa con marca.
  3. Usar MOVE Para Asignar Resultado Sin Validar: MOVE copia ciegamente. Si DIV falló, MOVE propaga basura. Siempre condiciona MOVE con marca válida.
  4. Declarar OUT como INT en MUL de Dos INTs: El bloque MUL_I permite declarar OUT como INT, pero el resultado se trunca silenciosamente. Cambia a MUL_DI o declara OUT como DInt.
  5. Hardcodear Constantes en Bloques: Escribir 27648 directo en IN2 del bloque MUL hace el código ilegible. Usa tags descriptivos del DB.

👉 MIRA EL VIDEO PARA VER ESTA ESTRUCTURA DE DOS REDES CONSTRUIDA PASO A PASO EN LADDER

¿Te ha pasado que tu escalado analógico da valores erráticos en Ladder?
Déjame un comentario en YouTube describiendo cómo conectaste los bloques. Te ayudaremos a verificar orden de redes y protecciones.
¡Suscríbete y activa la campanita! En la Clase #27 usamos bloques MOD, NEG y ABS directamente en redes Ladder para secuencias cíclicas y cálculo de errores absolutos. ¡Todo con contactos y bloques IEC!

Publicar un comentario

0 Comentarios