6.4 KiB
Framework de Gestión de Motores – Vetromeccanica
1. Visión general
El proyecto utiliza un framework genérico para gobernar todos los accionamientos desde TIA Portal. La pieza central es el bloque FB_Motors_Manage
, que implementa toda la lógica estándar (arranque, paro, rampas, alarmas, diagnóstico, etc.) para cualquier tipo de variador (Minimotor, Danfoss, G120C, Movigear, …).
Para evitar duplicar código, cada motor del sistema dispone de:
- Un wrapper tipo
FC_Ttop_Motor_XXXXXX
(por ejemploFC_Ttop_Motor_M30710
). - Su DB de instancia (por ejemplo
DB_Ttop_Motor_M30710
) donde reside el structManage
con todos los parámetros, flags de mando y estados.
El esquema típico dentro del FC es:
// Ajustes específicos del motor
Motor.CFG_Inverter_Type := Inverter_Type_MINIMOTOR;
Motor.CFG_Min_Speed_Hz := 10;
Motor.CFG_Max_Speed_Hz := 500;
// …otros ajustes…
// Transferencia de órdenes desde la lógica de la mesa (FB_Table)
Motor.REQ_EN_Run := Table_Status.Channel_Enable[n];
Motor.REQ_Speed_Fix_01 := TRUE;
Motor.OUT_VFD_REQ_Speed_User := Velocidad_deseada;
// ► Llamada al bloque genérico
FB_Motors_Manage( Motor );
Así, toda la inteligencia concreta (protecciones, gestión de alarmas, rampas, filtros, cálculos de velocidad, mapping de señales HW, etc.) vive dentro de FB_Motors_Manage
; los FC sólo traducen la estrategia de proceso al formato que entiende el genérico.
2. Relación de FC_Ttop_Motor ↔ Instancia FB_Motors_Manage
A partir de xref_calls_tree.md
encontramos los siguientes wrappers activos en la mesa T-Top (cada uno llama a su DB/FB_Motors_Manage):
Canal / Función | FC wrapper | DB instancia | Tipo de variador* | Dirección PROFINET (PLC IO) |
---|---|---|---|---|
M30710 – Canal central bypass | FC_Ttop_Motor_M30710 |
DB_Ttop_Motor_M30710 |
DBS55-PN (Minimotor extend-A) | IP 10.1.30.37 – In/Out 1356 |
M31010 – Alimentador entrada (L) | FC_Ttop_Motor_M31010 |
DB_Ttop_Motor_M31010 |
DFC2xA (Danfoss) | 10.1.30.40 – 1404 |
M31110 – Alimentador entrada (R) | … | … | DBS55-PN | 10.1.30.41 – 1424 |
M31210 – Formato entrada | … | … | DBS55-PN | 10.1.30.42 – 1472 |
M31310 – Selector entrada | … | … | DBS55-PN | 10.1.30.43 – 1520 |
M31410 – Canal 1 | … | … | DFC2xA | 10.1.30.44 – 1568 |
M31510 – Canal 2 | … | … | DFC2xA | 10.1.30.45 – 1588 |
M31610 – Canal 3 | … | … | DBS55-PN | 10.1.30.46 – 1608 |
M31710 – Canal 4 | … | … | DBS55-PN | 10.1.30.47 – 1656 |
M31810 – Canal 5 (centro) | … | … | DBS55-PN | 10.1.30.48 – 1704 |
M31910 – Canal 6 | … | … | DBS55-PN | 10.1.30.49 – 1752 |
U32810 – Selector salida (G120C) | FC_Ttop_Motor_U32810 |
DB_Ttop_Motor_U32810 |
G120C | 10.1.30.58 – 1800 |
… | … | … | … | … |
*El tipo se extrae de la columna Module Name de PLC IO.md y del parámetro CFG_Inverter_Type . |
Estas FC son llamadas desde FC_Ttop_Run
, que a su vez forma parte de la secuencia principal OB1 → FC_Ttop_Run
descrita en Especifica General.md §1.1.
3. Estructura esencial del struct Manage
El struct contiene +300 campos; los más relevantes se resumen por familias:
- CFG_* (Configuration) – valores estáticos cargados al arranque. Entre ellos:
CFG_VFD
,CFG_PN
,CFG_DP
– modo de comunicación.CFG_Inverter_Type
– mapa a la tabla de constantes de PLC IO.md.- Límites:
CFG_Min_Speed_Hz
,CFG_Max_Speed_Hz
,CFG_Max_mBar
. - Señales adicionales HW:
CFG_Add_Signal_RUN_FWD
,CFG_Add_Signal_TRIP
, …
- RCP_* (Recipe) – velocidades y temporizadores provenientes de recetas HMI.
- REQ_* (Requests) – órdenes de proceso que el wrapper escribe cada ciclo:
REQ_EN_Run
– habilitación general.REQ_Speed_Fix_01 … 05
– selección de consignas fijas.REQ_Master_Speed_Sync
– velocidad en modo síncrono.
- OUT_* – salidas hacia la periferia (bobinas de RUN, RESET, consigna Hz, etc.).
- STATUS_* – feedback del variador tratado por
FB_Motors_Manage
:STATUS_RUN
,STATUS_VFD_Trip
,STATUS_VFD_Warning
,STATUS_Ready
.STATUS_VFD_ACT_Speed_Hz / _User
para diagnóstico.
- Alarm_XX – 16 bits genéricos de fallo estandarizados.
FB_Motors_Manage
lee CFG + REQ, actualiza OUT y STATUS, y setea Alarm_XX cuando procede.
4. ¿Qué hace FB_Motors_Manage
internamente?
Aunque el SCL completo no está visible, por práctica con la librería se puede resumir en:
- Inicialización – copiado de recipes a la estructura, validación de límites.
- Decodificación de órdenes:
- Prioridad:
REQ_QStop
>REQ_Start_FWD/BWD
>REQ_EN_Run
. - Conversión de velocidad (mm/min → Hz / unidades de variador) usando
CFG_Kspeed_User50Hz
.
- Prioridad:
- State Machine genérica – estados
STOPPED
,RUNNING
,FAULT
,RAMP_UP
,RAMP_DOWN
… - Gestión de rampas –
RCP_ACC_Ramp
,RCP_DEC_Ramp
. - Monitorización de feedback – comparación real/objetivo, timeout de ready, etc.
- Gestión de alarmas – mapeo de bits de fallo variador a
Alarm_01…16
, disparo deSTATUS_VFD_Trip
. - Energy Saving / Stand-by – salidas
OUT_EnergySavingON
cuando la línea está vacía (IN_Line_Empty
).
5. Flujo completo de mando (de la mesa al variador)
flowchart LR
FB_Table -- "Status.Channel_Enable[x], Speed" --> FC_Ttop_Motor_x
FC_Ttop_Motor_x -- "REQ_*, CFG_*" --> FB_Motors_Manage
FB_Motors_Manage -- "OUT_* (RUN,SpeedHz)" --> DB_Fieldbus_IO
DB_Fieldbus_IO -- "Feedback bits" --> FB_Motors_Manage
FB_Motors_Manage -- "STATUS_*" --> FC_Ttop_Motor_x
FC_Ttop_Motor_x --> FB_Table
6. Conclusiones / Buenas prácticas
- Escalabilidad: añadir un motor es cuestión de clonar una DB + FC y ajustar
CFG_*
. - Trazabilidad: los campos
STATUS_
yAlarm_XX
ofrecen un diagnóstico unificado visible desde HMI sin depender del fabricante del variador. - Separación de capas:
- Proceso (FB_Table) decide qué hacer.
- Wrapper (FC_Ttop_Motor) traduce al formato genérico.
- Motor core (FB_Motors_Manage) ejecuta el cómo.
Nota: la tabla de la sección 2 puede completarse con los restantes motores (M31610…U33610) siguiendo el mismo patrón mostrado.