Limitaciones/Desventajas
La aplicacion no debe operarse sobre equipo real sin revisión de seguridad, validación mecánica y autorizacion del responsable de la celda. Las funciones de movimiento y seguridad deben validarse antes en un entorno seguro.
El proyecto implementa una aplicacion de control de movimiento para un sistema MultiBelt compuesto por tres trenes o carros sincronizados sobre una trayectoria circular. Cada tren se desplaza entre una estacion de carga y una o dos estaciones de descarga, manteniendo separacion respecto al tren precedente para evitar colisiones o acercamientos por debajo de una distancia minima configurada.
La aplicacion corre sobre un controlador GuardLogix/ControlLogix/Compaclogix y emplea dos dispositivos principales de movimiento: el Drive_1 y el Drive_2. Los ejes de tren se denominan Ax_Train1, Ax_Train2 y Ax_Train3, y existe además un eje de banda de entrada llamado In_Belt junto con el eje Ax_Converter, todos agrupados en el grupo de movimiento Axes.
La lógica se organiza en tres bloques. Main_Program gobierna la secuencia general: inicializa parametros, gestiona arranque, paro, reset de fallas, simulación de producto, coordinación MultiBelt y administración de ejes. Main_Motion_Prg ejecuta los comandos de movimiento Q_MAM y publica posiciones de mando para visualizacion o integracion externa. SafetyProgram gestiona la funcion Safe Torque Off de los trenes mediante AOIs de seguridad codificados.
El objetivo del documento es poner en marcha la aplicacion MultiBelt de tres trenes o configurable según la necesidad, ejecutar el ciclo, observar el movimiento y detenerlo de forma controlada. El modo de uso previsto es un entorno compatible con control de movimiento, con grupo de ejes sincronizado, variadores configurados y la cadena Safe Torque Off validada.
El problema que resuelve es la coordinación de varios móviles independientes sobre una misma pista cerrada. La lógica evita que un tren alcance al anterior calculando la distancia circular entre ejes, aplicando una distancia mínima, conmutando a modo encolado cuando el espacio se reduce y propagando feedforward de posición desde el eje precedente hacia el tren siguiente.
Limitaciones/Desventajas
La aplicacion no debe operarse sobre equipo real sin revisión de seguridad, validación mecánica y autorizacion del responsable de la celda. Las funciones de movimiento y seguridad deben validarse antes en un entorno seguro.
Descargas
Tenga en cuenta: deberá aceptar los Términos y Condiciones para cada descarga.
¿Necesita ayuda?
Si necesita ayuda con alguna aplicación o tiene comentarios acerca del Innovation Center, por favor contáctenos.
Es útil para quien necesite entender, poner en marcha o demostrar una aplicación de transporte con varios carritos coordinados en Studio 5000.
Áreas de aplicación: Aplicaciones de transporte de producto con carros o trenes independientes sobre una pista cerrada, donde cada móvil se carga por vagones en una estación y descarga en una o dos estaciones posteriores, y donde debe garantizarse una separación mínima entre móviles. El proyecto también funciona como demostración de control de movimiento coordinado y de integración con visualización o simulación externa a través de los tags To_E3D_T1_CmdPos, To_E3D_T2_CmdPos y To_E3D_T3_CmdPos.
Requisitos: productos, herramientas, conocimiento previo.
Controlador 1756-L84ES o equivalente, revisión mayor 36.
Kinetix 5700/5500/5300
Studio 5000 Logix Designer version 36 o superior, compatible con proyectos de movimiento y de seguridad.
Archivo de proyecto Q_MAM_P_v3_GL.acd.
Programación en Studio 5000, control de movimiento CIP (grupo de ejes, modos de desplazamiento, desenrollado de posición e instrucciones MAM, MAJ, MAS y MRP), manejo de Add-On Instructions y nociones de aplicaciones de seguridad con Safe Torque Off.
Preparacion del entorno
Abra el archivo Q_MAM_P_v3_GL.acd en un entorno de programación compatible con proyectos Logix version 36 y verifique que el controlador objetivo sea compatible con 1756-L84ES o compatible y revisión mayor 36.
Antes de continuar, confirme que existan las tareas SafetyTask, _01_MainTask y _03_MotionEventTask; los programas Main_Program, Main_Motion_Prg y SafetyProgram; los ejes Ax_Train1, Ax_Train2, Ax_Train3, Ax_Converter e In_Belt; el grupo de movimiento Axes; y los modulos de variador Drive_PowerSupply, Drive_1 y Drive_2 con las direcciones.
Confirme también que los AOIs requeridos están presentes en el proyecto.
Revisión antes de descargar
Revise que los ejes tengan asignación correcta a sus variadores y que los parámetros de movimiento sean seguros para el equipo o el simulador. Verifique que las posiciones iniciales esperadas sean compatibles con la mecánica y que las condiciones mecánicas permitan movimiento positivo alrededor de la pista circular, y que el sistema pueda detener los trenes con la deceleración configurada.
Posiciones iniciales de comando y estaciones
Elemento |
Valor esperado |
|---|---|
Ax_Train1 - posicion inicial de comando |
2000 |
Ax_Train2 - posicion inicial de comando |
1500 |
Ax_Train3 - posicion inicial de comando |
1000 |
LoadingStationPosition |
1650.0 |
UnloadingStationPosition_1 |
200.0 |
UnloadingStationPosition_2 |
300.0 |
Configuración de trenes y parámetros Q_MAM
|
Valor |
|---|---|
T1_NofWagons, T2_NofWagons, T3_NofWagons |
4 |
Tamanos de vagones por tren |
60, 120, 60, 60 |
Longitud calculada por tren |
300 |
Velocidad Q_MAM |
2500 |
Aceleracion Q_MAM |
15000 |
Deceleracion Q_MAM |
15000 |
Jerk de aceleracion |
33 |
Jerk de deceleracion |
33 |
Tolerancia de posicion objetivo |
0.05 |
Desenrollado de pista calculado |
aproximadamente 2072.5 |
Descarga y modo de ejecución
Conecte con el controlador o con el entorno de simulación y descargue el proyecto. Si se requiere una descarga completa, coloque el controlador en modo Program; una vez finalizada la descarga, cambie a modo Run o Remote Run.
Verifique que _01_MainTask se ejecute periódicamente a 10 ms, que _03_MotionEventTask este asociada al evento Motion Group Execution y que SafetyTask se ejecute a 20 ms. Confirme por último que el grupo Axes quede sincronizado mediante Axes.GroupSynced: esa condición habilita toda la secuencia posterior.
Inicialización automática
Al iniciar el escaneo, Main_Rtn espera que Axes.GroupSynced este activo y arranca la temporización ProgramScanDelay. Mientras ProgramScanDelay.DN no este activo, Main_Rtn llama a _00_InitVar y detiene temporalmente el resto del escaneo de aplicación con TND, de modo que las variables de configuración y posicion se inicialicen antes de permitir secuencias normales.
_00_InitVar activa InitializeVariables y reposiciona internamente las posiciones de comando de los trenes cuando no coinciden con las posiciones iniciales esperadas. Luego lee, mediante instrucciones GSV, el CoarseUpdatePeriod del grupo Axes y lo convierte a segundos, y lee TravelMode, ConversionConstant y PositionUnwind de cada eje para calcular Train1_Unwind, Train2_Unwind y Train3_Unwind.
Si los tres desenrollados son iguales y los tres ejes estan en TravelMode igual a 2, se copia el valor comun a Trains_Unwind y se activa TrainsConfCorrect. A continuacion la rutina carga las posiciones de estaciones, deja EnableUnloadingStation1 apagado, configura los cuatro vagones por tren con sus tamanos, calcula la longitud de cada tren mediante bucles con LBL y JMP, y escribe los parametros comunes de Q_MAM en Train_1_QMAM_Data para copiarlos despues a Train_2_QMAM_Data y Train_3_QMAM_Data.
Finalmente asigna la distancia mínima de cada tren tomando como referencia la longitud del tren precedente y apaga RUN_CYCLE y CycleSimulationEnabled, dejando el sistema en un estado seguro de espera.
Verificación de seguridad antes de arrancar
Confirme que las entradas Safe Torque Off de los variadores estén ok, que Train_SafeTorqueOff.Inp_SafetyInterlockOK este activo, que no haya errores activos en Train_SafeTorqueOff.Sts_ER y que Train_SafeTorqueOff.Sts_TorqueDisabled refleje correctamente el estado STO de los trenes. Si se requiere un reset de seguridad, active momentaneamente SafetyResetRequest.
SafetyProgram.MainRoutine copia esa solicitud a Train_SafeTorqueOff.Cmd_Reset y llama a Trains_SafeTorqueOff, que distribuye Cmd_Reset, Cfg_AutoReset, Cfg_StopCategory y Cfg_StopTime hacia las tres instancias internas _Trains_SafeTorqueOff_M1, _Trains_SafeTorqueOff_M2 y _Trains_SafeTorqueOff_M3. M1 y M2 se conectan a las senales de seguridad 1 y 2 de Drive_1, y M3 a las senales de seguridad 1 de Drive_2.
Train_SafeTorqueOff.Sts_TorqueDisabled se activa cuando las tres instancias reportan torque deshabilitado y Sts_MotionStop cuando las tres reportan paro de movimiento. Si cualquier instancia presenta error, sus codigos Sts_ERR y Sts_EXERR se copian al objeto global y se activa Train_SafeTorqueOff.Sts_ER. No solicite arranque mientras existan condiciones de seguridad inhibiendo el movimiento.
Reset de fallas de aplicacion
Active momentaneamente FaultReset_Cmd. La secuencia FaultResetCycle recorre estados numericos y termina en 999 cuando el reset se completa correctamente.
Estado de FaultResetCycle |
Que debe ocurrir |
|---|---|
10 |
Confirmar que la interconexion de seguridad este correcta y que AxesTorqueDisabled refleje el estado esperado para reset; se genera SafetyResetCmd cuando corresponde. El ciclo avanza a 20 cuando el torque ya no esta deshabilitado |
20 |
Si AxesFaultedState esta activo se activa AxesResetFault_Cmd y _99_AxManager genera ClearFaults para los ejes en falla. El ciclo avanza a 30 cuando no hay ejes en falla |
30 |
Se limpia ApplicationMotionError si estaba activo y, si existia AbortCycle, se genera Trains_ResetCycle |
999 |
Ciclo de reset finalizado |
Arranque de ejes
Verifique que AxesAvailableState este activo, que AxesFaultedState este inactivo y que AxesTorqueDisabled este inactivo antes de habilitar movimiento. Active entonces momentáneamente StartUp_Cmd y confirme que StartUpCycle pase a estado 10.
AxesOn_Cmd se activa cuando los ejes están disponibles, sin falla, sin torque deshabilitado y aun no activados. En _99_AxManager debe observarse la generacion de AxT1_Ctrl_Cmd.Activate, AxT2_Ctrl_Cmd.Activate y AxT3_Ctrl_Cmd.Activate, siempre que el eje correspondiente no tenga Safe Torque Disabled y el dispositivo esté disponible. Cuando AxT1_Ctrl_Sts.Activated, AxT2_Ctrl_Sts.Activated y AxT3_Ctrl_Sts.Activated quedan activos, AxesON pasa a verdadero y StartUpCycle termina en 999.
Inicio del ciclo MultiBelt
Con AxesON, TrainsConfCorrect y RunCycleEnabled activos, active momentáneamente RunCycle_Cmd. RunCycleState pasa a estado 10 y RUN_CYCLE queda enclavado. Si la marcha no esta permitida, la secuencia se invalida con un estado negativo.
_01_MultiBelt activa Enable_MultiBelt_AOI cuando Axes.GroupSynced e InitializeVariables son verdaderos y no hay Trains_ResetCycle activo. Con ello se ejecutan las tres instancias Train_1_AOI, Train_2_AOI y Train_3_AOI de AOI_MultiBelt_SingleTrain. Cada instancia recibe su arreglo de tamaños de vagones, el número de vagones, las posiciones de carga y descarga, el desenrollado de pista, el estado RUN_CYCLE, el disparo de producto In_ProductTrigger, la señal de descarga completa y el estado de movimiento completado de su Q_MAM, y devuelve Out_TrainTargetPosition.
La rutina declara MultiBelt_Ready cuando el ciclo esta activo y al menos uno de los trenes esta en la estacion de carga, y consolida los errores de los AOIs: si cualquier tren reporta Sts_ER se activa MultiBelt_Cycle_Error y se apaga RUN_CYCLE. Cada AOI activa Cmd_Q_MAM_Exe cuando requiere mover su tren.
Ejecución de movimientos Q_MAM
Move_Commands bloquea su ejecución mientras ProgramScanDelay.DN no este activo, lo que evita enviar comandos de movimiento antes de completar la inicialización. Después llama al AOI Q_MAM_P_V3 para cada tren cuando el AOI de tren correspondiente lo solicita mediante Cmd_Q_MAM_Exe. El encadenamiento de ejes precedentes y de parámetros enlazados es circular.
TreN |
InstAncia Q_MAM |
objetivo |
Eje |
eje precedente |
Parametros enlazados (entrada / salida) |
|---|---|---|---|---|---|
1 |
Train1_QMAM |
Train_1_TargetPosition |
Ax_Train1 |
Ax_Train3 |
Train3_LinkedParametersOutput / Train1_LinkedParametersOutput |
2 |
Train2_QMAM |
Train_2_TargetPosition |
Ax_Train2 |
Ax_Train1 |
Train1_LinkedParametersOutput / Train2_LinkedParametersOutput |
3 |
Train3_QMAM |
Train_3_TargetPosition |
Ax_Train3 |
Ax_Train2 |
Train2_LinkedParametersOutput / Train3_LinkedParametersOutput |
Monitoree Train1_QMAM.PC, Train2_QMAM.PC y Train3_QMAM.PC: cada Cmd_Q_MAM_Exe debe limpiarse cuando su Q_MAM correspondiente reporta PC, lo que convierte cada solicitud en una ejecucion controlada y evita la reejecucion continua del mismo comando. Vigile tambien Train1_QMAM.ER, Train2_QMAM.ER y Train3_QMAM.ER para detectar errores de movimiento, y Sts_Queued, Sts_QueueLeader, inf_TrainsActualDistance y Sts_Mover_WayFree en cada Q_MAM para validar la separacion entre trenes.
Carga de productos
Para una prueba manual, genere un pulso en In_ProductTrigger. Para usar la simulación, active CycleSimulationEnabled mientras RUN_CYCLE este activo: ProductGenerationTimeDelay temporiza la generacion de producto, InfeedBeltProductInput_FallingEdge genera un pulso y ese pulso activa In_ProductTrigger durante un escaneo.
Confirme que el AOI del tren que se encuentra en la estación de carga incremente su contador Train_Wagon_CTU y que el objetivo de carga avance según el tamaño del vagón cargado. Repita hasta completar los cuatro vagones configurados: cuando el contador los completa, el tren se resetea y pasa a la secuencia de descarga.
Descarga de productos
Observe Sts_TrainAtUnloadingStation1 y Sts_TrainAtUnloadingStation2 en Train_1_AOI, Train_2_AOI y Train_3_AOI. Cuando un tren llega a descarga se activa su temporizador correspondiente (UnloadTrain1, UnloadTrain2 o UnloadTrain3) y, al finalizar, se genera la señal de descarga completa Train1UnloadingCompleteSignal, Train2UnloadingCompleteSignal o Train3UnloadingCompleteSignal. Esa señal genera Trigger_Products_Unloaded y se limpia.
Confirme que el AOI del tren reciba In_UnloadingComplete, avance al siguiente estado y regrese a la secuencia de carga. Como EnableUnloadingStation1 se inicializa apagado, la lógica puede omitir la primera estación de descarga y usar la segunda como descarga principal.
Banda de entrada
Cuando RUN_CYCLE pasa a activo se genera un pulso de inicio para _03_AxBelt y AxBelt_CycleState pasa a estado 10. En ese estado se ejecuta un jog de In_Belt con los parametros de velocidad, aceleracion, deceleracion y jerk configurados, y cuando In_Belt.JogStatus confirma, el estado avanza a 20. Al apagarse RUN_CYCLE, _03_AxBelt emite otro comando de jog con velocidad cero para detener la banda, y AxBelt_CycleState vuelve a 0 cuando In_Belt.JogStatus se apaga.
Monitoreo recomendado durante la ejecucion
| Grupo | Tags a observar |
|---|---|
Estado general |
RUN_CYCLE, RunCycleEnabled, RunCycleState, ApplicationMotionError, AbortCycle, MultiBelt_Cycle_Error |
Ejes |
AxesON, AxesAvailableState, AxesFaultedState, AxesTorqueDisabled |
Trenes |
Sts_IP y Sts_ER de Train_1_AOI, Train_2_AOI y Train_3_AOI; Train_1_TargetPosition, Train_2_TargetPosition y Train_3_TargetPosition |
Q_MAM |
IP, PC, ER, ERR y EXERR de Train1_QMAM, Train2_QMAM y Train3_QMAM |
Visualizacion |
To_E3D_T1_CmdPos, To_E3D_T2_CmdPos, To_E3D_T3_CmdPos |
Para observar el comportamiento dinámico conviene usar las tendencias ya existentes en el proyecto: Q_MAM_V3, Train1To2Distance, Train1_LinkedParametersOutput_PP, Train1_QMAM_Sts_QueueLeader, Trains, Trains1n2 y Train_1.
Paro normal
Active momentaneamente StopCycle_Cmd. RUN_CYCLE se apaga y RunCycleState vuelve a 0. _01_MultiBelt limpia Cmd_Q_MAM_Exe en los tres AOIs de tren y emite comandos de paro para Ax_Train1, Ax_Train2 y Ax_Train3 con la deceleración y el jerk configurados, mientras _03_AxBelt detiene In_Belt. Confirme que los ejes queden sin movimiento activo antes de deshabilitar torque.
Paro por falla o aborto
Si ocurre ApplicationMotionError, se activan StopCycle_Cmd y AbortCycle, RUN_CYCLE se apaga, los comandos Q_MAM se limpian y se ejecutan paros de movimiento para los tres trenes. Identifique el origen de la falla en Train1_QMAM.ER, Train2_QMAM.ER y Train3_QMAM.ER, en Sts_ER de los tres AOIs de tren, en AxesFaultedState y en Train_SafeTorqueOff.Sts_ER.
Corrija la causa raíz antes de resetear. Ejecute luego el procedimiento de reset de fallas mediante FaultReset_Cmd y repita el arranque de ejes y el arranque de ciclo solo cuando no existan fallas activas.
Apagado del sistema
Ejecute primero el paro normal con StopCycle_Cmd y confirme que no exista movimiento activo. Si se requiere dejar el sistema sin servo habilitado, desactive los ejes mediante AxesOff_Cmd: _99_AxManager genera los comandos de desactivación para los ejes que estén activados y AxesON queda apagado. Aplique después las condiciones de seguridad o STO segun el procedimiento de la máquina, y coloque el controlador en modo Program solo si el procedimiento de planta lo requiere.
Condiciones esperadas de una ejecución correcta
Control De Cinta Multibelt
Versión 1.0 - Septiembre de 2026