Skip to main content

Activador Ejemplo 1: Ejemplo simple

El Robotics_Trigger.project El proyecto de ejemplo descrito aquí se encuentra en el directorio de instalación de CODESYS bajo ..\CODESYS SoftMotion\Examples.

Los disparadores se utilizan para averiguar exactamente cuándo un grupo de ejes llega a un punto específico en la ruta comandada. Esta información se puede utilizar, por ejemplo, para encender o apagar una herramienta exactamente en el momento adecuado. Este ejemplo muestra cómo se ordena un solo disparador en un movimiento y luego se lee cíclicamente. Con base en esto, el Activador Ejemplo 2: Proceso de encolado El proyecto muestra una aplicación de muestra realista.

Estructura de la aplicación

La aplicación consta de dos programas: un Main_PRG correr en la tarea del autobús y un Planning_PRG ejecutándose en la tarea de planificación del grupo de ejes. Además, también hay un rastro.

PRG_principal:

El Main_PRG El programa contiene la máquina de estado principal de la aplicación. Los primeros dos estados se utilizan para inicializar y encender los variadores y el grupo de ejes. En el STATE_COMMAND_MOVEMENT_WITH_TRIGGER estado, primero se prepara un disparador usando una instancia del SMC_GroupPrepareTrigger bloque de funciones La posición se especifica relativamente con un valor de 0,6. Como resultado, el gatillo se coloca en el punto donde se completa el 60% del movimiento asignado. El gatillo preparado se asigna al siguiente movimiento ordenado. En este ejemplo, un movimiento lineal a la posición (X=20, Y=10) es comandado por un MC_MoveLinearAbsolute.

prepTrigger.PositionType := SMC_TriggerPositionType.MvtRelative;
prepTrigger.Position.MvtPosition := 0.6;
prepTrigger(AxisGroup:= AxisGroup, Execute:= TRUE);
 
moveLinear(AxisGroup:= AxisGroup, Execute:= prepTrigger.Prepared);

en el siguiente estado STATE_ENABLE_READ_TRIGGER, una instancia de SMC_GroupReadTrigger se inicia para leer el estado del disparador comandado. El vínculo con el activador se establece mediante el TriggerId devuelto por SMC_GroupPrepareTrigger.

readTrigger.TriggerId := prepTrigger.TriggerId;
readTrigger.Enable := TRUE;

En el STATE_CHECK_TRIGGER state, finalmente se comprueba cíclicamente el estado del disparador. Tan pronto como SMC_GroupReadTrigger informes Active como estado, se puede leer la duración hasta que se alcanza el disparador. La duración siempre se refiere al inicio del ciclo actual. Por lo tanto, el disparo se alcanza en el ciclo actual si la duración es menor que el tiempo del ciclo (en este ejemplo, 0,004 s):

IF readTrigger.TriggerInfo.status = SMC_TRIGGER_STATUS.Active THEN
    IF readTrigger.TriggerInfo.triggerTime <= 0.004 THEN
        triggerFired := TRUE;
        ...
    END_IF
END_IF

Planificación_PRG

En el Planning_PRG programa, la duración prevista de la planificación se configura mediante el SMC_TuneCPKernel bloque de funciones El SMC_GroupReadTrigger El bloque de funciones puede generar una salida cuando se alcanza la duración prevista de un disparador. En el ejemplo, la duración de la previsión se establece en 0,1 s. Por lo tanto, el estado de la SMC_GroupReadTrigger Cambios en el bloque de funciones a Active 0,1 s antes de que el grupo de ejes alcance el disparador y emita una duración válida a partir de ese momento.

tuneCpKernel(AxisGroup:= axisGroup, Execute:= TRUE, fPlanningForecastDuration:= 0.1);

Rastro

La traza se puede utilizar para rastrear el comportamiento del SMC_GroupReadTrigger bloque de funciones

En el primer diagrama se puede ver que se ejecuta un movimiento desde (X=0, Y=0) hasta (X=20, Y=10). El gatillo se encuentra en la posición relativa 0,6 del movimiento, es decir, en (X=12, Y=6).

El segundo diagrama muestra el valor de la triggerTime salida de SMC_GroupReadTrigger. El valor salta a 0,1 s porque la duración prevista de la planificación es de 0,1 s y luego cae linealmente hasta que se alcanza el valor 0 en la posición (X=12, Y=6).

El tercer diagrama muestra el valor de la triggerFired variable que se establece en el STATE_CHECK_TRIGGER estado de Main_PRG tan pronto como el grupo de ejes esté a menos de 0,004 s del disparador.