Manual RAPID Remodelado

Embed Size (px)

DESCRIPTION

Manual rapid abb

Citation preview

  • Manual de programacin para lenguaje RAPID. Pgina 1

    Manual de programacin para lenguaje RAPID

    1. INTRODUCCIN: Es un lenguaje de ltima generacin (creado en 1994 por ABB). Muy similar a lenguajes de programacin de propsito general de alto nivel (Basic, Pascal, C, C++).

    2. SISTEMAS DE COORDENADAS DEL ROBOT:

    El robot tiene 3 sistemas de coordinadas: 1. Coordenadas Mundo. 2. Coordenadas Base. 3. Coordenadas Objeto de trabajo.

    En la figura 1 se puede ver la situacin virtual de cada uno de los sistemas de coordenadas.

    12

    3

    Figura 1_Coordenadas robot.

    INDICE 1. Introduccin. 2. Sistema de coordenadas del robot. 3. Ejes del robot. 4. Estructura de la programacin. 5. Caractersticas de los datos. 6. Instrucciones. 7. Otras consideraciones. 8. Programa de ejemplo.

  • Manual de programacin para lenguaje RAPID. Pgina 2

    3. EJES DEL ROBOT: El robot con el que vamos a trabajar tiene 6 ejes. Estos se pueden ver marcados en la figura 2.

    Figura 2_Ejes de robot.

    4. ESTRUCTURA DE LA PROGRAMACIN DEL ROBOT: El programa consta de tres partes, como se observa en la figura 3:

    - Datos de programa. - Programa principal. - Rutinas.

    Hay dos tipos de rutinas:

    - Procedimiento: Se usa como subprograma. - Funcin: devuelve un valor de un tipo de dato especfico y se usa como

    argumento de una instruccin. - Tratamiento de Interrupciones: Para el tratamiento de las interrupciones.

    Nunca pueden ser llamadas explcitamente desde el programa.

    EJE1

    EJE2

    EJE3

    EJE4 EJE5

    EJE6

  • Manual de programacin para lenguaje RAPID. Pgina 3

    ProgramaPrograma

    PrincipalPrincipal

    Datos de programaDatos de programa

    RutinaRutina

    Figura 3_Estructura del programa.

    5. CARACTERSTICAS DE LOS DATOS: Para cada dato se define su mbito de utilizacin o alcance: local o global y su persistencia: variable, constante o persistente. Alcance de los datos: DATOS DE PROGRAMA: Datos declarados fuera de una rutina. Estos datos a su vez pueden ser:

    LOCALES: Slo se pueden usaren la rutina o mdulo donde se declara. Se deben declarar aadiendo al principio la palabra reservada LOCAL. GLOBALES: Pueden ser llamadas desde otras rutinas o mdulos. Se deben declarar aadiendo al principio la palabra reservada GLOBAL.

    DATOS DE RUTINA: Datos declarados dentro de una rutina. Slo se pueden usar en la rutina en que se encuentra. Declaracin de los datos: VAR: Dato variable. Su valor puede ser modificado en el programa. Declaracin de un dato Variable. |[LOCAL] VAR tipo_dato nombre_dato; Ejemplo1: |VAR num matriz{10}:=[1,2,3,4,5,6,7,8,9,0]; Ejemplo2:

    |VAR string nombre:=JUAN; CONST: Dato constante. No permite ser modificado. |CONST num pi:=3.1415;

  • Manual de programacin para lenguaje RAPID. Pgina 4

    PERS: Dato persistente. Los datos persistentes slo pueden declararse en el nivel de mdulo (fuera de las rutinas) y deben tener obligatoriamente un valor inicial. Si un dato persistente es actualizado, se actualizar automticamente su valor de inicializacin para nuevas ejecuciones del mismo. |PERS num reg:=1; Tipos de datos ms usuales: Bool: Valores lgicos (con los valores verdadero o falso) TRUE/FALSE. |VAR bool estado; |VAR num reg1; |estado:=reg1>100; |!Se le asigna el valor TRUE a estado, si reg1 es que 100. |!De lo contrario de la asigna el valor FALSE. ConfData: Sirve para definir la configuracin de los ejes del robot. A veces el robot es capaz de alcanzar la misma posicin y orientacin de la herramienta mediante varias configuraciones de ejes diferentes. Para evitar esta ambigedad se utilizar este tipo de dato.

    Figura 4_Ejemplo de varias configuraciones de los ejes para una misma posicin. En la figura 4 se observa las distintas configuraciones que se han dado al robot para alcanzar un misma posicin, conservando la orientacin del eje 6, que es el que marca la posicin deseada. El dato confdata indica los cuadrantes en los que se encuentran los ejes 1, 4, 6 y 5 del robot. cf1 indica el cuadrante en el que se encuentra el eje1

  • Manual de programacin para lenguaje RAPID. Pgina 5

    (entre -4 y +3), cf4 indica el cuadrante en el que se encuentra el eje4 (entre -4 y +3). cf6 indica el cuadrante en el que se encuentra el eje6 (entre -4 y +3). Cfx no se utiliza de momento. Para cada uno de los ejes 1, 4 y 6 se indica el cuadrante en el que se debe encontrar situado. En la figura 5 podemos ver las configuraciones que pueden adoptar los ejes 1, 4, 6 y 5 segn en el cuadrante que se site al orientarse. Es importante fijarse en el dibujo de la figura 5 para entender los ejemplos, ya que en la nueva versin del manual Rapid, que se guarda en el equipo al instalar RobotStudio 5.12, en este ejemplo hay un error, y tanto las flechas hacia donde pueden girar los ejes, como la explicacin de los ejemplos estn mal.

    Figura 5_Configuraciones para determinar el cuadrante.

    |VAR confdata conf_1 := [0, 0, -1, 1];

    La instruccin anterior indica que la configuracin del eje1 del robot es el cuadrante 0, es decir, de 0 o a 90o. La configuracin del eje4 del robot es el cuadrante 0, es decir, de 0 o a 90o. La configuracin del eje6 del robot es el cuadrante -1, es decir, de 0 o a -90o. La configuracin del eje5 del robot es el cuadrante 1, es decir, de 90 o a 180o. ExtJoint: Se utiliza para almacenar la posicin de los seis ejes externos que puede controlar el robot. Estos son a, b, c, d, e y f. Cada uno de estos ejes podr ser conectado a un eje fsico mediante un parmetro del sistema. En el caso de no estar conectado a un eje fsico, se indicar 9E9 como valor de posicin. |VAR extjoint pos_ejes_ext1:=[11, 25.2,9E9, 9E9, 9E9, 9E9]; JointTarget: Se utiliza para especificar una posicin deseada para los ejes tanto (articulaciones) del robot, como los externos, al ejecutar una instruccin MoveAbsJ. Se utiliza cuando se quiere gobernar el robot directamente a travs de sus articulaciones sin especificar posiciones y orientaciones. Declaracin de un dato Variable. |[LOCAL] CONST tipo_dato nombre_dato:=[[robax],[extax]];

  • Manual de programacin para lenguaje RAPID. Pgina 6

    - robax: Posicin de los ejes del robot en grados. Tipo de dato robjoint. - extax: Posicin de los ejes externos. Tipo de dato extjoint.

    La posicin se define como eax_a, eax_b, eax_ceax_f para cada eje. El valor 9E9 se utiliza para definir los ejes que no estn conectados. |CONST jointtarget calib_pos:=[[0,0,0,0,0,0],[0,9E9,9E9,9E9,9E9,9E9,9E9]];

    |!Todos los ejes del robot estn calibrados a 0o. |!Los ejes externos estn el primero calibrado a 0o y el resto estn sin definir. LoadData: Define las caractersticas de la carga que deber manipular el robot. Se especifican el peso, el centro de gravedad y los momentos de inercia. Se utiliza para ajustar los pares a ejercer por los motores del robot. Num: Valores numricos. Decimales 3.14 o Enteros 1, -52263. |VAR num nivel:=3; |!Se le asigna a nivel el valor 3. Orient: Se utiliza para orientaciones (por ejemplo de la herramienta) y rotaciones (por ejemplo de un sistema de coordenadas). La orientacin se describe en forma de cuaternios, vector de 4 valores numricos (Q1, Q2, Q3, Q4).

    |VAR orient orient1; |orient1 := [1, 0, 0, 0]; |!Se asigna a la orientacin orient1 el valor q1=1, q2=q3=q4=0. |!Esto equivale a ninguna rotacin.

    La orientacin debe estar normalizada, es decir, la suma de los cuadrados debe ser igual a 1.

    q12+q2

    2+q32+q4

    2=1; Pos: Se utiliza para posiciones (slo para X, Y y Z), no influye en la orientacin de la herramienta ni en la posicin de los ejes. El valor de las posiciones es de tipo NUM. |VAR pos pos1:=[500,0,940]; |!Se asigna a la posicin pos1 el valor X=500mm, Y=0mm y Z=940mm. |pos1.x:=pos1.x+50; |!Se traslada la posicin de pos1, 50mm en la direccin X. Robjoint: Se utiliza para definir la posicin en grados de cada uno de los ejes del robot. El valor rax_1, rax_2rax_6, es un dato de tipo NUM.

  • Manual de programacin para lenguaje RAPID. Pgina 7

    RobTarget: Se utiliza para definir la posicin del robot y de los ejes externos. Declaracin de un dato Variable. |[LOCAL] CONST tipo_dato nombre_dato:=[[trans],[rot],[robconf],[extax]];

    - trans: Translacin. La Posicin (X, Y, Z) del punto central de la herramienta expresado en mm. Tipo de dato pos.

    - rot: Rotacin. La Orientacin de la herramienta expresada en cuaternios (q1, q2, q3, q4). Tipo de dato orient.

    - robconf: Configuracin del robot. La Configuracin de los ejes del robot (cf1, cf4, cf6, cfx). Tipo de dato confdata.

    - extax: Ejes externos. La posicin de los ejes externos (eax_a, eax_beax_f). Tipo de dato extjoint.

    Ejemplo1: |CONST robtarget p15 := [[600, 500, 225.3], [1, 0, 0, 0], [1, 1, 0, 0] ,[11, 12.3, 9E9, 9E9, 9E9, 9E9, 9E9]]; |!Se definen los parmetros de posicin X=600, Y=500 y Z=225.3, la orientacin de |!la herramienta que por la configuracin equivale a ninguna rotacin, la |!configuracin de los ejes del robot que indica que los ejes 1 y 4 se sitan en el |!cuadrante 1, es decir, de 0 o a 90o, y los ejes 6 y 5 en el cuadrante 0, es decir, de |!90 o a 180o. Y por ltimo la configuracin de los ejes externos, que indica que hay |!dos ejes conectados, los otros cuatros estn sin conectar.

    Ejemplo2: |VAR robtarjet p20; | |p20:=CRobT(); |p20:=Offs(p20,10,0,0);

    |!Se declara el dato robtarjet, la posicin de referencia p20. |!Luego se indica mediante la funcin CRobT que la posicin de referencia p20 |!tomo las coordenadas de referencia actuales en las que se sita el robot en ese |!momento. |!CRobT se utiliza para leer la posicin actual de los ejes del robot y los ejes |!externos a partir de datos robtarjet. |!Para finalizar, se mueve la posicin del robot 10mm en la direccin X.

    SpeedData: Sirve para especificar la velocidad del robot: TCP, reorientacin de la herramienta y ejes externos. Cuando se combinan diferentes tipos de movimientos, hay velocidad que limita todos los movimientos. La velocidad del resto de movimientos ser reducida para que los movimientos acaben su ejecucin al mismo tiempo. Componentes:

    - V_tcp: Velocidad del TCP en mm/s. - V_ori: Velocidad de la reorientacin de la herramienta en grados/segundos. - V_leax: Velocidad de los ejes externos lineales en mm/s. - V_reax: Velocidad de los ejes externos rotativos en mm/s.

  • Manual de programacin para lenguaje RAPID. Pgina 8

    |VAR speeddata vel_alta:=[2000,30,200,15]; String: Cadenas de caracteres. Estn compuestas por un mximo de 80 caracteres, encerrados entre comillas ().

    Por ejemplo: "Esto es una cadena de caracteres". Si desea incluir comillas dentro de la cadena de caracteres, debe escribirlas dos veces.

    Por ejemplo: "Esta cadena contiene un carcter "" de comillas". Si desea incluir una barra invertida dentro de la cadena de caracteres, debe escribirla dos veces.

    Por ejemplo: "Esta cadena contiene un carcter \\". |VAR string text; |text := "comienzo de soldadura de tubo1"; |TPWrite text; |!El texto comienzo de soldadura tubo1 se escribe en el FlexPendant. |!La instruccin TPWrite se utiliza para escribir texto en el FlexPendant.

    ToolData: Se utiliza para describir las caractersticas de la herramienta utilizada por el robot. Se especifica tanto la geometra (sistema de coordenadas de la herramienta) como la carga (peso, centro de gravedad y momentos de inercia). Los datos relativos al peso y centro de gravedad de la herramienta se utilizan para adecuar los pares a ejercer por los motores del robot. Los datos de la herramienta debern ser definidos nicamente como PERS y no debern ser definidos dentro de una rutina. ZoneData: Una posicin puede terminarse en un punto de paro o en un punto de paso. Un punto de paro significa que el robot debe alcanzar la posicin programada. En el punto de paso, el robot nunca alcanzar la posicin programada, sino que comenzar a moverse hacia el siguiente punto cuando entre en la zona que se haya definido. Este comportamiento lo podemos ver en la figura 6. La zona se puede definir como la precisin con la que se alcanza una posicin antes de que el robot pueda dirigirse hacia la posicin siguiente. Existen valores predefinidos, z10, z20, z50fine. El valor indica la mxima diferencia en milmetros respecto del punto pedido.

  • Manual de programacin para lenguaje RAPID. Pgina 9

    Figura 6_Precisin con la que alcanza un punto segn zone.

    Wobjdata: Se utiliza para definir el objeto de trabajo.

    Nombrar variables:

    El nombre de la variable debe:

    - Tener 16 caracteres como mximo. - Empezar con una letra. - No puede nombrarse una variable igual que las palabras reservadas por RAPID

    (Instrucciones, tipos de datos).

    Salida:

    Electroiman

    Entrada:

    Finales

    de carrera

    Programa

    Figura 7_E/S del Sistema.

    Figura 8_Palabras reservadas RAPID.

    6. INSTRUCCIONES:

    Instrucciones de movimiento en Offset:

    A continuacin se van a mostrar y explicar las diferentes partes de una instruccin, en la figura 9 vemos detalladamente como declaramos una instruccin de movimiento.

  • Manual de programacin para lenguaje RAPID. Pgina 10

    Figura 9. Instruccin de movimiento. Posiciones de referencia p1 y p0: Dato tipo RobTarget. Velocidad v100: Dato tipo SpeedData. Precisin z10: Dato tipo ZoneData. Herramienta tool1: Dato tipo ToolData. Instrucciones de movimiento: MoveC: Sirve para mover el TCP de la herramienta a lo largo de una trayectoria circular. Ser necesario especificar, el punto de paso intermedio p0 que servir para definir la curvatura y el punto de destino p1. El las figuras 10 y 11 se muestran dos ejemplos distintos, uno es un arco, con la programacin necesaria en la parte inferior para que se trace un arco. Y el otro es un crculo y su programacin en la parte inferior.

    Figura 10_Arco.

    Declaracin de la instruccin: |MoveC coord_punto0, coord_punto1, velocidad, zona, pinza;

    |MoveC Offs(p10,490,120,0), Offs(p10,630,290,0), v100, z50, tool0; |!El robot traza un arco.

    p0: Punto intermedio.

    p1: Punto destino.

  • Manual de programacin para lenguaje RAPID. Pgina 11

    Figura 11_Crculo.

    |MoveL p1,v500,fine,tool1; |MoveC p2,p3,v500,z20,tool1; |MoveC p4,p1,v500,fine,tool1; |!El robot traza un crculo.

    MoveJ: Sirve para mover rpidamente el robot, de un punto a otro punto con la misma orientacin de herramienta, sin garantizar la trayectoria recta. Todos los ejes se mueven a una velocidad constante y alcanzan su posicin a la vez. |MoveJ coordenadas_orientacion, veloc_TCP, zona, herramienta;

    |MoveJ punto1, v200, z40, pinza10; MoveL: Sirve para mover el TCP de la herramienta a lo largo de una trayectoria lineal al punto destino.

    |MoveL punto1, v200, z40, pinza3; MoveAbsJ: Se utiliza para mover el TCP de la herramienta a una posicin de ejes absoluta, definida por un dato jointtarjet. |VAR jointtarjet p_reorient :=[[0,0,0,0,0,0],[ 9E9, 9E9, 9E9, 9E9, 9E9, 9E9]]; |p_reorient:=CJointT(); |p_reorient.robax.rax_6:=p_reorient.robx.rax_6-90;

    |MoveAbsJ p_reorient, v20,fine, soplador3. |!Declaramos un tipo de dato jointtarjet. |!Con CJointT leemos los ngulos actuales de los ejes del robot. |!y esta informacin la mandamos a p_reorient. |!Movemos 90o el ngulo 6 del robot. |!Con MoveAbsJ movemos la herramienta con la posicin de ejes. |!definida por p_reoerient.

    p1

    p2

    p3

    3

    p4

  • Manual de programacin para lenguaje RAPID. Pgina 12

    Instrucciones de llamada a otra rutina: ProcCall: Llamar (saltar) a otra rutina. Esta es la nica instruccin que no se usa la palabra ProCall, pero el hecho de llamar a una rutina se le da el nombre de ProCall. Para ver como se efecta la llamada, aadimos un ejemplo. |VAR num reg:=50; |... |MoveL Offs(p20,40,-530,50),v20,z10,soplador3. |IF reg

  • Manual de programacin para lenguaje RAPID. Pgina 13

    Otras estructuras e instrucciones de activacin/desactivacin de E/S: TEST/CASE: Se utiliza cuando es necesario ejecutar instrucciones diferentes en funcin del valor de una expresin o dato (similar al switch/case del lenguaje C). Si no hay demasiadas alternativas, tambin es posible utilizar IF...ELSE. |TEST reg1

    |CASE 1,2,3 : |routine1; |CASE 4 : |routine2; |DEFAULT : |TPWrite "Illegal choice"; |Stop; |ENDTEST |!Se ejecutan instrucciones diferentes en funcin del valor de reg1. |!Si el valor es 1, 2 3, se ejecuta routine1. |!Si el valor es 4, se ejecuta routine2. |!De lo contrario, se enva un mensaje de error a la unidad de programacin y la |!ejecucin se detiene.

    GOTO: Se utiliza para transferir la ejecucin del programa a otra lnea (una etiqueta) creada dentro de la misma rutina. Ejemplo 1:

    |reg1 := 1; |next: |... |!Aqu se programa las instrucciones necesarias para ejecutar la etiqueta next. |reg1 := reg1 + 1; |IF reg1100 THEN |GOTO highvalue; |ELSE |GOTO lowvalue; |ENDIF |lowvalue: |... |!Aqu se definen las instrucciones de la etiqueta lowvalue. |GOTO ready; |highvalue: |... |!Aqu se definen las instrucciones de la etiqueta highvalue.

  • Manual de programacin para lenguaje RAPID. Pgina 14

    |ready: |... |!Aqu se definen las instrucciones de la etiqueta ready. |!Si reg1 es mayor que 100, la ejecucin se transfiere a la etiqueta highvalue. |!De lo contrario, la ejecucin se transfiere a la etiqueta lowvalue.

    WaitTime: Se utiliza para esperar una cantidad determinada de tiempo o esperar hasta que el robot deje de moverse. |WaitTime 5; |!La ejecucin del programa espera 5 segundos. WaitUntil: Se utiliza para esperar hasta que se cumpla una condicin lgica. Ejemplo1: |WaitUntil ent:=1;

    |!La ejecucin del programa slo contina despus de que se ha activado la |!entrada ent.

    Ejemplo2: |VAR bool timeout;

    |WaitUntil start_in = 1 AND grip_status = 1\MaxTime := 60 \TimeFlag := timeout; |IF timeout THEN |TPWrite "No start order received within expected time"; |ELSE |start_next_cycle; |ENDIF

    |!Si no se cumplen las dos condiciones de entrada en un plazo de 60 segundos, se |!escribe un mensaje de error en la pantalla del FlexPendant. |!MaxTime es el periodo mximo permitido para el tiempo de espera. |!TimeFlag es el parmetro de salida que contiene el valor TRUE si se agota el |!tiempo mximo de espera permitido antes de que se cumpla la condicin.

    WaitDI: Se utiliza para esperar hasta que se activa una seal digital de entrada. Ejemplo1: |WaitDI di4, 1;

    |!La ejecucin del programa slo contina despus de activarse la entrada di4. Ejemplo2: |WaitDI grip_status, 0;

    |!La ejecucin del programa contina despus de restablecerse grip_status. Set: Activar una seal digital de salida (cambiarla a 1). |Set do1; |!Activa la seal do1, la cambia a 1.

  • Manual de programacin para lenguaje RAPID. Pgina 15

    SetAO: Se utiliza para cambiar el valor de una salida analgica. |SetAO tensin, 5.5; |!Se cambia la seal de tensin a 5.5; SetDO: Se utiliza para cambiar el valor de una seal digital de salida (on/off, etc). Ejemplo1: |SetDO do15, 1; |!Se cambia la seal do15 a 1. Ejemplo2: |SetDO do15, off; |!Se cambia la seal do15 a 0. Reset: Desactiva una seal digital de salida (cambiarla a 0). |Reset do15 |!Se cambia la seal do15 a 0; Instrucciones IF: IF ... THEN ... ELSE ... ENDIF: Ejecutar una secuencia de instrucciones diferentes, slo si se cumple una cierta condicin. Ejemplo1: |IF reg1

  • Manual de programacin para lenguaje RAPID. Pgina 16

    Instrucciones de control de flujo de ejecucin While y For: FORENDFOR: Se utiliza para repetir una operacin un nmero de veces. |FOR i FROM 1 TO 10 DO |secado; |ENDFOR |!Repite el procedimiento secado 10 veces. WHILEENDWHILE: Se usa cuando es necesario repetir una secuencia de instrucciones siempre y cuando siga cumplindose una condicin. |WHILE reg1 > reg2 DO |... |reg1:=reg1+1; |ENDWHILE

    |!Repite las instrucciones que se encuentran dentro del bloque WHILE siempre y |!cuando reg1 > reg2

    7. OTRAS CONSIDERACIONES:

    - Al final de cada instruccin se pondr siempre ; menos para el Inicio/Fin de Modulo/Programa/Rutina.

    - La velocidad del robot se ha limitado. Las velocidades a la que podr ir sern: v10, v20, v30, v40, v50, y v100.

    - Los comentarios en los programas tienen que ir precedidos de !. - Para realizar la asignacin de un valor a un dato, utilizaremos :=. - Las coordenadas se ponen en milmetros (1 cm = 10 mm). - La cabecera y la parte final siempre ser igual para este laboratorio remoto.

    MODULE modulo1 ! Datos de programa

    PROC programa1() ! Instrucciones ENDPROC

    ENDMODULE

    8. PROGRAMA DE EJMPLO: El programa que se va a realizar consiste en hacer que el robot pase por los 4 puntos marcados en las esquinas como se muestra en la figura 12.

  • Manual de programacin para lenguaje RAPID. Pgina 17

    p1 100 mm p2

    p4 p3

    50 mm

    Figura 12_Esquema del programa.

    Para ello, nos dan el punto 1 ya almacenado con sus correspondientes coordenadas. Este se encuentra elevado 5cm sobre el mismo. Una vez estemos en el punto exacto, activaremos la seal del Electroiman durante medio segundo. Posible solucin

    Figura 13. Programa acabado

  • Manual de programacin para lenguaje RAPID. Pgina 18

    MODULE modulo1 ! Esta lnea la tienen que incluir todos los programas. ! Inicio del modulo. ! Aqu podemos definir los datos que consideremos oportunos.

    VAR num puntos:=0; ! Definimos la variable puntos con un valor inicial de 0.

    PROC programa1() ! Esta lnea estar siempre. ! Declara el inicio del programa principal.

    MoveL p1,v100,z20,tool0; ! Movimiento lineal al punto p1. MoveL Offs (p1,0,0,-50),v100,fine,tool0; ! Baja los 5 cms que esta elevado. Set Electroiman; ! Activa la seal Electroiman. WaitTime 0.5; ! Durante 0.5 segundos. Reset Electroiman; !Resetea la seal. MoveL Offs (p1,0,0,0),v100,z20,tool0; !Vuelve a subir los 5 cms. MoveL Offs (p1,100,0,0),v100,z20,tool0; MoveL Offs (p1,100,0,-50),v100,fine,tool0; Set Electroiman; WaitTime 0.5; Reset Electroiman; MoveL Offs (p1,100,0,0),v100,z20,tool0; MoveL Offs (p1,100,50,0),v100,z20,tool0; MoveL Offs (p1,100,50,-50),v100,fine,tool0; Set Electroiman; WaitTime 0.5; Reset Electroiman; MoveL Offs (p1,100,50,0),v100,z20,tool0; MoveL Offs (p1,0,50,0),v100,z20,tool0; MoveL Offs (p1,0,50,-50),v100,fine,tool0; Set Electroiman; WaitTime 0.5; Reset Electroiman; MoveL Offs (p1,0,50,0),v100,z20,tool0;

    ENDPROC ! Esta lnea estar siempre.

    ! Declara el final del programa principal. ENDMODULE ! Esta lnea la tienen que incluir todos los programas. Final del modulo.