Funciones de código G específicas del usuario
El CNC11_CustomFunctions.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 crear sus propias funciones para usarlas en expresiones en código G.
Para obtener más información acerca de las expresiones y funciones en el código G, consulte: Expresiones. Allí encontrará una lista de todos los operadores y funciones compatibles de forma predeterminada.
El ejemplo define la SEL operador de IEC 61131-3 para que también se pueda usar en código G.
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 difiere de los otros ejemplos, el tema no se discutirá 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.
En la visualización, puede empezar a procesar el código G y establecer el valor de la variable $LONGLINE$. 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
LET #WIDTH : LREAL N10 G36 O#WIDTH D SEL($LONGLINE$, 40, 110) N20 F50 E100 E-100 N30 G01 X#WIDTH Y#WIDTH Z#WIDTH/2 N40 Y-#WIDTH N50 X-#WIDTH Z-#WIDTH/2 N60 Y#WIDTH N70 X0 Y0 Z0
Línea 1: Declaración de la variable local #WIDTH de tipo LREAL.
Línea 2, bloque N10: Asignación del valor de SEL($LONGLINE$, 40, 110) a la variable #WIDTH. Si el valor de la variable PLC $LONGLINE$ es TRUE, entonces el valor de la expresión es 110; de lo contrario, es 40.
En las siguientes líneas, se recorre un rectángulo con movimiento adicional en la dirección Z; la longitud de un lado del rectángulo es 2*#WIDTH.
Implementación del SEL función

Para crear una función definida por el usuario, debe escribir un bloque de funciones que implemente el SMC_NC_IFunction interfaz.
Para obtener más información, consulte: Función SMC_NC_I.
GetSignature. Aquí se devuelven el tipo de retorno, el recuento y los tipos de argumentos de la función. En este ejemplo, elSELla función devuelve un valor de tipoT_OTHERy tiene 3 argumentos de tipoT_BOOL,T_OTHER, yT_OTHER.T_OTHERrepresenta cualquier tipo (ya seaT_BOOL,T_LREAL, oT_STRING]. Las 3 apariciones deT_OTHERdebe ser del mismo tipo.METHOD GetSignature VAR_OUTPUT resultType : SMC_GVar_Type; nNumArguments : UDINT; pType : POINTER TO SMC_GVar_Type; END_VAR VAR argTypes : ARRAY[0..2] OF SMC_GVar_Type := [SMC_GVar_Type.T_BOOL, SMC_GVar_Type.T_OTHER, SMC_GVar_Type.T_OTHER]; END_VAR resultType := SMC_GVAR_Type.T_OTHER; nNumArguments := 3; pType := ADR(argTypes);
Call: Este método se invoca cuando se procesa el código G. Los argumentos se transmiten a través delpaentrada. La expresiónpa[0].argValue.bValuese usa para acceder al valor booleano del primer argumento. Según el tipo del segundo argumentopa[1].argType, el resultado es el valor devueltoresult.argTypey la bifurcación en una sentencia CASE.METHOD Call VAR_IN_OUT result : SMC_NC_GArgument; END_VAR VAR_INPUT pa : POINTER TO SMC_NC_GArgument; END_VA RVAR_OUTPUT eError : SMC_ERROR; END_VAR VAR g : BOOL; END_VAR g := pa[0].argValue.bValue; result.argType := pa[1].argType; CASE result.argType OF SMC_GVAR_Type.T_BOOL: result.argValue.bValue := SEL(g, pa[1].argValue.bValue, pa[2].argValue.bValue); SMC_GVAR_Type.T_STRING: result.argValue.sValue := SEL(g, pa[1].argValue.sValue, pa[2].argValue.sValue); SMC_GVAR_Type.T_LREAL: result.argValue.fValue := SEL(g, pa[1].argValue.fValue, pa[2].argValue.fValue); ELSE eError := SMC_INVALID_PARAMETER; END_CASE
Configuración de SMC_ReadNCFile2
Una instancia del CNC_Sel el bloque de función se crea en GVL_CNCFunctions lista global de variables.
Una matriz aCNCFunctions de longitud 1 se inicializa con el nombre y la instancia del bloque de funciones. A continuación, esta matriz se vincula a la tabla funTable de tipo SMC_NC_GFunctionTable.
aCNCFunctions : ARRAY[0..0] OF SMC_NC_GFunction := [(stName:= 'SEL', iFunc:= GVL_CNCFunctions.g_Sel)]; funTable : SMC_NC_GFunctionTable := (numFunctions:= 1, pFunction:= ADR(aCNCFunctions)) ;
Por último, esta tabla se pasa al SMC_ReadNCFile2 bloque de funciones:
rncf2 : SMC_ReadNCFile2 := (bParenthesesAsComments:= FALSE); [...] rncf2( bExecute:= TRUE, sFileName:= sFileName, pCustomFunTable:= ADR(funTable), pvl:= ADR(varList));
Puesta en servicio
Cree la aplicación y descárguela en un controlador.
Inicie la aplicación, cambie a la visualización y pulse
Start. Puedes usar elLonglinebotón de radio para establecer el valor de la variable$LONGLINE$en el código G paraTRUEoFALSE.