Skip to main content

Uso de MC_DigitalCamSwitch_HighPrecision

El ejemplo BasicMotion_DigitalCamSwitch_HighPrecision.project se encuentra en el directorio de instalación CODESYS debajo ..\CODESYS SoftMotion\Examples.

En este ejemplo se muestra cómo utilizar las salidas de SMC_DigitalCamSwitch_HighPrecision para controlar salidas digitales con alta resolución temporal. Los terminales EL2258 y EL2252 de Beckhoff

Aviso

Las descripciones de los dispositivos de Beckhoff no se incluyen en el ejemplo. Puede descargarlas directamente del proveedor e instalarlas en el repositorio de dispositivos. Para ejecutar el ejemplo, necesita un acoplador de bus EK1100, un terminal EL2258 y un terminal EL2252

Importante

Este ejemplo se desarrolló y probó de acuerdo con la revisión 0017 de EL2258 y la revisión 0020 de EL2252. Solo sirve como ejemplo. No garantizamos la exactitud. El código fuente debe probarse antes de usarlo. Si es necesario, debe modificarse para adaptarlo a otras revisiones de los terminales.

Estructura de la solicitud

La aplicación consiste en Main programa, el DigitalCamSwitch_EL2258 y DigitalCamSwitch_EL2252 bloques de funciones y un acoplador de bus EK1100 con los terminales de salida EL2258 y EL2252.

El DigitalCamSwitch_EL2258 y DigitalCamSwitch_EL2252 bloques de funciones son las partes esenciales del ejemplo. Muestran cómo usar el Events salida de SMC_DigitalCamSwitch_HighPrecision para programar salidas digitales. Los bloques de funciones deben entenderse como ejemplos que pueden adaptarse a otro hardware.

DigitalCamSwitch_EL2258

. El bloque de funciones funciona de la siguiente manera:
  1. El bloque de función se inicializa en un borde ascendente en el Enable entrada. En el STATE_INIT_0 y STATE_INIT_1 estados, el OutputBufferReset se escriben las señales del terminal EL2258 y el aLastEventIds la matriz está inicializada. El ID del último evento procesado para cada pista se guarda en esta matriz. Esto evita que un evento se transfiera al terminal varias veces.

  2. Una vez inicializado (STATE_ACTIVE), todas las pistas se procesan sucesivamente y se ejecuta la siguiente lógica para cada pista:

    1. Compruebe si el terminal EL2258 ya ha aceptado los últimos eventos ordenados (ChannelsIn[channel].OutputOrderFeedback = ChannelsOut[channel].OutputOrderCounter).

    2. Recorre todos los eventos de la pista. Solo aquellos eventos cuyo ToggleEventId es mayor que la última ID procesada y se consideran más adelante. (Consulta EventId_GreaterThan(event^.ToggleEventId, aLastEventIds[channel]))

      Consulta la sección: «Nota sobre el orden de los eventos».

    3. Convierte el Duration del evento en una marca de tiempo de EtherCAT y la correspondiente escritura del ChannelsOut[channel].OutputEventState y ChannelsOut[channel].OutputEventTime salidas.

    4. Anule el procesamiento después de un máximo de 5 eventos.

    5. Notifique a la terminal que existen nuevos eventos si se ha encontrado al menos un evento (ChannelsOut[channel].OutputOrderCounter := ChannelsOut[channel].OutputOrderCounter + 1).

Nota sobre el orden de los eventos

Los eventos son devueltos por el SMC_DigitalCamSwitch_HighPrecision bloque de función para cada pista de una matriz. SwitchNumber y un ToggleEventId se devuelven para cada evento. ToggleEventId es único y ascendente para cada pista.

Para obtener más información, consulte: SMC_CAMSWITCH_TOGGLE_EVENT.

En el ejemplo, el aLastEventIds[trackNo] una matriz almacena para cada pista que ToggleEventId transfirió por última vez al terminal en una llamada de bloqueo de funciones anterior. Porque el ToggleEventIds están en orden ascendente, la próxima llamada sabrá exactamente qué eventos aún deben transferirse.

. Aún deben tenerse en cuenta dos detalles:
  1. Porque no se sabe en qué ToggleEventId los eventos comienzan, a valid la bandera se guarda en EventId tipo de datos además del ID. Para el EventId_GreaterThan comparación, esto valid la bandera se tiene en cuenta en consecuencia.

  2. El ToggleEventIds tienen el tipo de datos de 32 bits UDINT y, por lo tanto, puede, en principio, desbordarse con un tiempo de ejecución largo o una frecuencia de conmutación alta, respectivamente. A continuación, el valor pasa de 2^32-1 a 0. La función de comparación EventId_GreaterThan también tiene en cuenta los desbordamientos de 32 bits.

Mapeo PDO EL2258

El ChannelsOut y ChannelsIn salidas del DigitalCamSwitch_EL2258 bloques de funciones están conectados a los canales de E/S respectivos del terminal EL2258. La siguiente imagen muestra las asignaciones del canal 1. El canal 2 es similar; solo cuando se accede ChannelsOut y ChannelsIn el índice es 2, no 1.

_sm_img_mapping_el2258.png

DigitalCamSwitch_EL2252

El principio básico es idéntico al DigitalCamSwitch_EL2258. La diferencia está en la forma en que se escriben las señales porque el terminal EL2252 solo puede programar un evento activo

  1. En primer lugar, el bloque de función se inicializa en STATE_INIT.

  2. Entonces STATE_CHECK_FOR_EVENT comprueba si los eventos del SMC_DigitalCamSwitch_HighPrecision el bloque de funciones está pendiente.

  3. Si hay un evento disponible, debe programarse en dos ciclos:

    • Las salidas y la marca de tiempo de EtherCAT se escriben en el primer ciclo. El Activate la salida se establece en 0.

    • En el segundo ciclo, el Activate la salida está configurada en 3 pulgadas STATE_ACTIVATE_EVENT_IN_EL2252. Esto activa el evento en la terminal.

  4. En STATE_WAIT_UNTIL_THE_INPUTS_MATCH_THE_OUTPUTS, el sistema espera entonces hasta que se haya ejecutado el evento. Las señales del Feedback para ello se utiliza la entrada del terminal.

Mapeo PDO EL2252

_sm_img_mapping_el2252.png

Main

En el programa principal, se configuran cuatro conmutadores (dos en cada pista). Las pistas también tienen diferentes compensaciones de encendido/apagadoOnComp, OffComp):

_sm_img_digitalcamswitch_highprecision.png

El programa incluye las llamadas a bloques de funciones necesarias para activar una previsión para el eje y moverlo constantemente a 180°/s (*), así como para SMC_DigitalCamSwitch_HighPrecision, DigitalCamSwitch_EL2258, y DigitalCamSwitch_EL2252. Antes de iniciar el movimiento, el bus de campo debe estar completamente encendido. De lo contrario, los eventos no se pueden transmitir al terminal

(*) Se eligió el movimiento constante para mantener el ejemplo simple y claro. Sin embargo, el SMC_DigitalCamSwitch_HighPrecision el bloque de funciones funciona con todo tipo de movimientos. Por ejemplo, también proporciona marcas de tiempo exactas durante una fase de aceleración o con

Puesta en servicio

  1. Cree la aplicación y descárguela en un controlador.

  2. Inicie la aplicación.