Skip to main content

ReadNCFile2 con modificador de token

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

En este ejemplo se muestra cómo modificar el código G durante la importación para convertir la unidad de velocidad de trayectoria (palabra F) de mm/min a mm/s. Esto se hace insertando el código G 1/60.0 * antes del valor de velocidad mientras se lee el código G de la palabra F. F6000 luego se convierte F 1/60.0 * 6000, que posteriormente es procesado por el SMC_NCInterpreter bloque de función para F100. En casos simples, puedes saltarte la multiplicación por 1/60 y simplemente ajusta el valor (por ejemplo, desde 6000 para 100). Sin embargo, la multiplicación es más general porque también funciona cuando se usan variables F $SPEED$ se convierte F 1/60.0 * $SPEED$.

Estructura de la solicitud

Como es habitual en las aplicaciones de CNC, la aplicación consiste en el procesamiento de rutas (CNC_PreparePath programa) e interpolación (CNC programa). Debido a que la interpolación no es diferente de los otros ejemplos, no se analizará más aquí

El procesamiento de rutas se llama cíclicamente cada 20 ms en la prioridad baja PathTask. La interpolación se llama cíclicamente cada 4 MotionTask. La tarea en segundo plano VISU_TASK está definido para la visualización.

Puede empezar a procesar el código G en la visualización. El código G y el movimiento de la máquina (pórtico 3D) se muestran en el lado derecho de la

El código G

CNC_PathSpeed

N10 G01 X1000 F6000
N20 Y1000

En este código G, la velocidad de la trayectoria en bloque N10 está configurado con F6000 a 6000 mm/min. Sin embargo, los bloques de funciones del CNC esperan la velocidad de trayectoria en mm/s. Se ordenan dos movimientos lineales, primero X=1000 y luego a X=1000, Y=1000.

Procesamiento de tokens

El SMC_ReadNCFile2 y SMC_ReadNCFromStream los bloques de funciones proporcionan la capacidad de realizar sus propias transformaciones cuando se lee el código G. Aquí lo estamos usando con SMC_ITokenModifier interfaz, que se pasa a través de aTokenModifier entrada.

Esta interfaz funciona con «tokens». Estas son las partes básicas del código G en las que se subdivide el texto del código G cuando se inicia el procesamiento

ejemplo 54. Ejemplo
N50 G36 O$plc_variable$ D'TextTest' X-1 (Comment)

Este código G se subdivide de la siguiente manera:

Texto

SMC_TOKENTYPE

SMC_TOKENVALUE

N

identifer

stValue = 'N'

50

number

fValue = 50.0

G

identifer

stValue = 'G'

36

number

fValue = 36.0

O

identifer

stValue = 'O'

$plc_variable$

variable

stValue = 'plc_variable'

D

identifer

stValue = 'D'

'TextTest'

strLiteral

stValue = 'TextTest'

X

identifer

stValue = 'X'

-

operator

stValue = '-'

1

number

fValue = 1.0



La información que no es necesaria para un procesamiento posterior (por ejemplo, espacios en blanco, saltos de línea y comentarios) no aparece en la lista de fichas.

Cuando el SMC_ITokenModifier está implementada la interfaz, la lista de tokens se puede adaptar añadiendo nuevos tokens, eliminando tokens y cambiando los valores de los tokens.

. La interfaz define dos métodos:
  • Start: Inicialización del bloque de funciones. Se restablece el estado interno

  • Call: Llamada a este método mientras se procesa el código G. Los tokens pueden leerse y eliminarse de la cola de entrada y añadirse a la cola de salida

Implementación

. El flujo de procesamiento en PLC_PRG es el siguiente:
  • Todos los tokens se mueven de la cola de entrada a la cola de salida.

  • Si se detecta una palabra con F, entonces dos símbolos nuevos, 1/60 y *, se añaden después del símbolo de «F» y antes del símbolo del valor de velocidad.

El Call El método contiene la lógica para procesar los tokens. Es útil mover primero los tokens de la cola de entradatokensIn) a una cola temporal (m_tmpQueue), procesarlos allí y, a continuación, moverlos a la cola de salida (tokensOut). La cola temporal no es absolutamente necesaria para adaptar la velocidad de la ruta, pero simplifica la estructura del programa en casos más complicados

Método: Llamar

Al principio, el sistema espera en STATE_RUNNING estado hasta que se pueda iniciar el procesamiento (cuando los tokens estén disponibles en la cola de entrada y aún haya espacio en la cola de salida).

IF NOT SMC_NC_CanProcessTokens(tokensIn, tokensOut) THEN
    // Wait until processing can proceed
    RETURN;
END_IF

Luego, un token se mueve de la cola de entrada a la cola temporal.

IF m_tmpQueue.IsEmpty() THEN
    // Move the next token from the in-queue to the tmp-queue.
    pt := tokensIn.GetFromStart(0);
    m_tmpQueue.Append(pt^);
    tokensIn.RemoveFirst();
END_IF

El procesamiento real se realiza en ConvertSpeed método.

IF NOT m_tmpQueue.IsEmpty() THEN
    // The actual processing is done here
    ConvertSpeed();
END_IF

Al final del método, un token se mueve de la cola temporal a la cola de salida.

Método: ConvertSpeed

Se comprueba el primer token de la cola temporal.

Si es un identificador con el valor F se encuentra, luego se agregan dos fichas adicionales: el número 1/60.0 y el operador *.

(El tamaño de la cola temporal se selecciona de forma que quepan dos fichas más en la cola además del único token de la cola de entrada).

tk := m_tmpQueue.GetFromStart(0)^;

IF tk.tokenType = SMC_TokenType.identifier THEN
    tk.GetString(pbyString => pby, iSize => iSize);
    // 70 = ASCII code for F (path velocity)
    IF iSize = 1 AND pby^ = 70 THEN
        // Insert the number 1/60
        SMC_Token_InitNumber(
            tk:= tkNumber,
            value:= 1/60.0,
            srcPos:= tk.srcPos);
        m_tmpQueue.Append(tkNumber);

        // Insert operator '*' for multiplication
        SMC_Token_InitOperator(
            tk:= tkOperator,
            value:= '*',
            srcPos:= tk.srcPos);
        m_tmpQueue.Append(tkOperator);
    END_IF
END_IF

Puesta en servicio

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

  2. Inicie la aplicación, cambie a la visualización y pulse Start.