Skip to main content

Interrupción y continuación de movimientos

Mientras un grupo de ejes está en movimiento, el movimiento puede detenerse. Esto puede ser una parada intencional (MC_GroupHalt, MC_GroupStop), o una pausa en el camino (MC_GroupInterrupt), o una interrupción debido a un error. En todos los casos, CODESYS SoftMotion proporciona bloques de funciones para mover el grupo de ejes de regreso a la ruta planificada y continuarlo.

Detener un movimiento haciendo una pausa

Puedes usar el MC_GroupInterrupt y MC_GroupInterruptAt bloques de función para interrumpir la ejecución de los movimientos comandados. Para MC_GroupInterrupt, se ejecuta una parada inmediata. Para MC_GroupInterruptAt, se ejecuta una parada en una posición específica. Entonces el movimiento se puede continuar más tarde con MC_GroupContinuar.

El bloque de funciones MC_GroupInterruptAt proporciona la entrada SMC_GroupInterruptPositionMvtRel. Esto especifica una posición de interrupción relativa a un movimiento. El movimiento es referenciado por su SMC_Movement_Id. La posición dentro del movimiento está definida por un valor (real) entre 0 y 1, donde 0 es el comienzo del movimiento y 1 es el final. Una posición entre los puntos B y A se interpreta exactamente como si no hubiera fusión. Una posición entre Pcomienzo y B o entre A y Pdest se proyecta en la ruta de fusión.

_sm_img_movement_interrupt_position.png
. Manejo de errores para MC_GroupInterruptAt
  • Cuando se desconoce el ID de movimiento especificado, el bloque de funciones devuelve un error. El movimiento de carrera no se interrumpe.

  • Si el estado dinámico actual del grupo de ejes no permite alcanzar la parada antes de la posición de interrupción especificada, entonces SMC_GroupInterruptAt se comporta exactamente como MC_GroupInterrupt: la interrupción se ejecuta inmediatamente y el grupo de ejes se detiene en algún lugar detrás de la posición de interrupción ordenada.

  • Todos los demás errores se manejan exactamente como para MC_GroupInterrupt

. Limitaciones de MC_GroupInterruptAt
  • Una interrupción en una posición específica se puede cancelar con otro movimiento siempre que aún no haya comenzado el proceso de parada en la posición de interrupción.

  • Solo se puede ordenar una interrupción en una posición específica al mismo tiempo. Si se ha ordenado una interrupción, debe completarse o cancelarse para que se pueda aceptar otra interrupción.

Cuando ejecutas MC_GroupInterrupt o MC_GroupInterruptAt, una parada invariante de ruta se ejecuta al principio, similar a una MC_GroupHalt. Luego, el estado del grupo de ejes ("continuar datos") se almacena en una variable transferida por el usuario (escriba SMC_AXIS_GROUP_CONTINUE_DATA). Ahora el grupo de ejes está en el estado GroupStandby y se puede utilizar normalmente. Un ejemplo típico sería que el grupo de ejes se mueva.

Puedes venir conmigo más tarde. MC_GroupContinue reanudar la ejecución interrumpida. Para hacer esto, transfiera los "Continuar datos" guardados. Para que esto funcione sin error, la posición del grupo de ejes debe coincidir con la posición que tendrá después de ejecutar MC_GroupInterrupt tendría. (Consulte SMC_GroupGetContinuePosition.)

Cuando se ha interrumpido un movimiento de seguimiento (es decir, un movimiento que se ordenó en relación con un sistema de coordenadas dinámico), MC_GroupInterrupt no se detiene absolutamente (como MC_GroupHalt), pero relativamente al sistema de coordenadas dinámicas. Por ejemplo, si una pieza de trabajo se rastrea en una mesa giratoria, MC_GroupInterrupt se detiene con respecto a la pieza de trabajo. El grupo de ejes continúa siguiendo la pieza de trabajo. Los datos continuos deben actualizarse con SMC_GroupUpdateContinueData si la cinemática tiene ejes rotativos con múltiples periodos. Posteriormente, se puede continuar el movimiento con MC_GroupContinue.

Importante

La variable de tipo SMC_AXIS_GROUP_CONTINUE_DATA no debe almacenarse de forma persistente ni modificarse durante un cambio en línea.

Sugerencia

Usando el bloque de funciones SMC_GroupWait, puede esperar en la ruta entre dos movimientos durante un tiempo programable.

Parada de movimiento vía MC_GroupHalt o MC_GroupStop

Después de una parada de movimiento provocada por MC_GroupHalt o MC_GroupStop, el movimiento del grupo de ejes se puede reanudar de la siguiente manera sin pérdida de información: Llamar al bloque de funciones SMC_GroupSaveContinueData antes de llamar MC_GroupHalt o MC_GroupStop. Esta POU guarda el estado actual, la posición actual y todos los movimientos ordenados en el momento en que se llamó al comando de parada o parada. Esto permite que el movimiento continúe más tarde desde exactamente esta posición. Nota: Esta NO es la posición que tenía el grupo de ejes después de alcanzar la posición de parada.

Comportamiento antes de la versión 4.12.0.0: El SMC_GroupSaveContinueData el bloque de función tiene que ser llamado en el mismo ciclo donde MC_GroupHalt o MC_GroupStop se llama. En este momento, debe asegurarse de que SMC_GroupSaveContinueData se llama antes MC_GroupHalt o MC_GroupStop. De lo contrario, los movimientos abortados serán eliminados de la cola.

Comportamiento a partir de la versión 4.12.0.0: El SMC_GroupSaveContinueData El bloque de función se puede llamar en cualquier momento hasta el primer movimiento después de llamar MC_GroupHalt o MC_GroupStop. La posición de continuación es la posición actual del grupo de ejes en el momento de la primera llamada del bloque de función. La ruta guardada consta de todos los movimientos que han sido aceptados antes del comando de parada/parada.

Para poder continuar la ruta en la posición donde el grupo de ejes se detuvo debido a MC_GroupHalt o MC_GroupStop, SMC_GroupSaveContinueData debe llamarse en el ciclo donde MC_GroupHalt o MC_GroupStop establece el Done señal.

Solo una instancia de SMC_GroupSaveContinueData se puede llamar por grupo de ejes.

Sugerencia

Guardar el estado actual antes del comando de parada / parada puede llevar varios ciclos, pero se garantiza que la información de estado en el primer ciclo se guardará antes de cualquier movimiento interrumpido.

Sugerencia

SMC_GroupSaveContinueData se puede llamar en cualquier momento para guardar el estado actual, no solo en relación con la llamada MC_GroupHalt o MC_GroupStop.

Detener un movimiento debido a un error

Si un movimiento se detiene debido a un error, los ejes individuales de un grupo de ejes se detienen individualmente y cambian al estado de error. En el proceso, el TCP abandona la ruta planificada. Ahora puede reconocer el error, restablecer el grupo de ejes y moverse a la posición donde se detectó el error. Posteriormente, puede indicar al grupo de ejes que continúe con los movimientos planificados previamente.

usas el SMC_GroupEnableResumeAfterError bloque de función para permitir que la función reanude los movimientos programados después de un error. El bloque de función debe llamarse cíclicamente en la tarea de ciclo de bus. Solo se puede llamar una instancia de este bloque de funciones por grupo de ejes.

Si el grupo de ejes detecta un error y cambia al estado Errorstop, luego guarda los movimientos ya aceptados y la información de estado necesaria en una variable de tipo SMC_AXIS_GROUP_CONTINUE_DATA. Entonces esta variable contiene los "datos de continuación" y se pasa como una entrada de SMC_GroupEnableResumeAfterError.

Esto le permite reanudar los movimientos más tarde usando MC_GroupContinuar. Si los errores son causados por los movimientos ordenados (por ejemplo, violaciones del espacio de trabajo o un radio de arco no válido), no se pueden resolver de esta manera. Estos errores volverán a ocurrir después de que el movimiento continúe. El mecanismo está diseñado más para errores de un solo eje y otros eventos externos que obligan al grupo de ejes a detenerse por error.

MC_GroupContinue requiere que el grupo de ejes esté en una posición específica al continuar el movimiento. En caso de reanudar después de un error, esta posición es la posición actual en el momento en que se detectó el error. Puedes usar el SMC_GroupGetContinuePosition bloque de funciones para obtener esta posición.

Importante

  • Si un error de grupo de ejes no permite la continuación del movimiento (como un error interno al escribir los datos de continuación), entonces MC_GroupContinue y SMC_GroupGetContinuePosition devolver el nuevo ID de error SMC_AXIS_GROUP_CONTINUE_DATA_NOT_WRITTEN.

  • Si una MC_GroupStop está activo cuando ocurre el error, entonces MC_GroupStop también se reactiva cuando el movimiento continúa. El grupo de ejes ya se ha detenido y el MC_GroupStop ha borrado todos los movimientos pendientes para que no se produzca ningún movimiento.

  • Cuando se produce un error de grupo de ejes, la instancia del bloque de funciones del movimiento activo emite el error (salidas Active y Busy cambiar a FALSEy salida Error cambia a TRUE). Las instancias de bloques de funciones de movimientos en búfer o combinados, que aún no se han activado, también emiten un error. Después de reiniciar, todas estas instancias de bloques de funciones se restablecen a Busy/Active y sus salidas se restablecen a Error/CommandAborted.