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.