95910470 Manual Prog Crs
-
Upload
guillermo-montiel -
Category
Documents
-
view
177 -
download
10
Transcript of 95910470 Manual Prog Crs
PROGRAMACIÓN ROBOTS CRS
RAPL-3
PROGRAMACIÓN ROBOTS CRS
INDICE
1) Introducción. 4 2) Controlador. 6
3) Botones de emergencia 7
4) Control de una sola Persona. 7
5) Iniciar el Sistema. 7
6) Apagar el Sistema. 8
7) Programador Manual (Teach pendant). 8
8) Características del Teach Pendant. 8
9) Cambio de Control. 11
10) Mover el Robot. 12
11) Sistema de Coordenadas. 12
12) Home. 15
13) Enseñar Posiciones. 16
14) Crear una Aplicación. 16
15) Edición de un Programa. 17
16) Cambio de Posiciones con el Teach. 21
17) Cambio de Posiciones desde la Computadora. 22
18) Tipos de variables. 22
19) Matriz. 22
2
PROGRAMACIÓN ROBOTS CRS
20) Creación de nuevas Variables. 23
21) Asignación de Valores a Variables. 23
22) Control de Flujo. 24
23) Puerto de Entradas y Salidas de Propósito General (GPIO). 26
24) Subrutinas y Funciones. 27
25) Subprogramas utilizados más frecuentes. 28
26) Programas. 31
27) Referencia 50
3
PROGRAMACIÓN ROBOTS CRS
INTRODUCCIÓN. La marca CRS cuenta con cuatro modelos diferentes de robots con características diferentes para cubrir necesidades específicas. Los modelos son los siguientes:
• CataLyst 3.
• CataLyst 5.
• A 465.
• F 3. Las características de los cuatro modelos de robots son los siguientes: CataLyst 5.
Grados de libertad : 5 Carga Nominal : 1 kg. Alcance : 660 mm. Repetibilidad : ± 0.05 mm
Eje Rango Velocidad Aceleración Troqué 1 ± 180 ° 210 °/s 500 °/s² 9.6 N m 2 0° a +110° 210 °/s 500 °/s² 9.6 N m 3 -125° a 0° 210 °/s 500 °/s² 9.6 N m 4 ± 110° 551 °/s 1836 °/s² 3.4 N m 5 ± 180° 1102 °/s 3673 °/s² 1.7 N m
4
PROGRAMACIÓN ROBOTS CRS
A 465.
Grados de libertad : 6 Carga Nominal : 2 kg. Alcance : 710 mm. Repetibilidad : ± 0.05 mm
Eje Rango Velocidad Aceleración Torqué 1 ± 175 ° 180 °/s 720 °/s² 39.5 N m 2 ±90° 180 °/s 720 °/s² 39.5 N m 3 ±110° 180 °/s 720 °/s² 39.5 N m 4 ± 180° 171 °/s 1430 °/s² 6.9 N m 5 ± 105° 173 °/s 1430 °/s² 6.9 N m 6 ± 180° 171 °/s 1430 °/s² 2.9 N m
F3.
Grados de libertad : 6 Carga Nominal : 3 kg. Alcance : 710 mm. Repetibilidad : ± 0.05 mm
Eje Rango Velocidad Aceleración Troqué 1 ± 180° 240 °/s 879 °/s² 74.5 N m 2 -135 a +45° 240 °/s 879 °/s² 74.5 N m 3 ±135° 240 °/s 879 °/s² 74.5 N m 4 ± 180° 375 °/s 1098 °/s² 16.6 N m 5 ± 135° 300 °/s 1098 °/s² 16.6 N m 6 ± 4096 vueltas 375 °/s 1098 °/s² 16.6 N m
5
PROGRAMACIÓN ROBOTS CRS
Estos cuatro modelos de robots cuentan para su control con el Controlador C500C, el cual tiene la capacidad de manipular cualquiera de los robots. No por ello quiere decir, que si se cuenta con varios robots y controladores estos se pueden intercambiar. Esto es debido a que cada controlador dependiendo del brazo que se seleccione, cuenta con una configuración interna diferente, así como su calibración personalizada. El controlador se muestra en la siguiente imagen:
Dentro del sistema mínimo necesario para que el sistema se encuentre operando es indispensable tener lo siguiente:
• Brazo.
• Controlador.
• Cables Umbilicales.
• Software. Los cables umbilicales son los que comunican tanto la alimentación eléctrica al robot así como la retroalimentación del mismo para su adecuado funcionamiento. De igual forma existen otros componentes adicionales al sistema como lo son el Teach Pendant y el Modulo de Entradas y salidas de Propósito General (GPIO).
6
PROGRAMACIÓN ROBOTS CRS
BOTONES DE EMERGENCIA. Cuando se oprime un botón de emergencia, se aplican los frenos a todos los ejes, desacelera, deshabilita la alimentación del robot. Para volver a habilitar, se restablece el botón de emergencia, se alimenta al robot (es necesario liberar el botón de emergencia, para poder alimentar al robot). Además el teach cuanta con un interruptor (switch live man) para poder mover el robot, este debe estar oprimido durante el movimiento del robot. Requisito internacional de seguridad. El botón de emergencia se muestra en la siguiente imagen:
CONTROL DE UNA SOLA PERSONA. Solo puede ser movido por una persona, ya sea por medio del teach o por la computadora. INICIAR EL SISTEMA. Encender interruptor del controlador, esperar mensaje en display C500C CROS, comprobar que los botes de emergencia estén libres y oprimir ARM POWER (alimentación del robot).
7
PROGRAMACIÓN ROBOTS CRS
APAGAR EL SISTEMA.
Desde el controlador. Mantener oprimido Home, oprimir después pause / continue soltar pause / continue y finalmente soltar home, y esperar el mensaje en display de cristal liquido “system halted”, ahora si apagar el interruptor del controlador.
Desde la ventana terminal. Escribir en el prompt “shutdown now” , y esperar por el mensaje en el display de cristal liquido “system halted”, hasta que aparezca el mensaje se debe apagar el interruptor del controlador
PROGRAMADOR MANUAL (TEACH PENDANT). El programador manual es una herramienta para mover el robot, enseñar posiciones, crear variables y correr programas. Una vez que la aplicación ya esta iniciada, por medio de variables aprendidas (teachables) es posible guardar posiciones, iniciar variables, etc.
CARACTERÍSTICAS FÍSICAS DEL PROGRAMADOR MANUAL (TEACH PENDANT).
• Teclado • Interruptor de seguridad • Paro de emergencia • Pantalla • Sonidos
Teclado. Muchas de las teclas son multifunciones, dependiendo de la aplicación es la función que realizan.
8
PROGRAMACIÓN ROBOTS CRS
Teclas de función. Cada menú tiene una tecla de función, estas teclas son asignadas en la parte baja de la pantalla. F1 a F4.
Teclas de ejes. Se emplean para mover el robot. La respuesta del eje a mover depende del modo y sistema de movimiento empleado. Flechas en verde parte izquierda.
Teclas de movimiento. Tienen una función especifica. Teclas con un cuadro de color verde parte superior derecha del programador.
TECLA FUNCIÓN GRIP Abrir o cerrar gripper HOME Mover cada eje al punto de
Referencia READY Ir a posición ready LIMP ALL Liberar ejes del robot NOLIMP ALL Mantener en la posición ejes MOVE Ir a la posición seleccionada SPEED UP SPEED DOWN
Incrementar velocidad Disminuir velocidad
Teclas de matriz.
Se emplean en matrices para seleccionar la variable. Teclas con un cuadro amarillo parte derecha del programador.
TECLA FUNCIÓN FIRST Seleccionar el primer elemento LAST Seleccionar el ultimo elemento TYPE No usado UP Incrementar índice DOWN Decrementar índice
9
PROGRAMACIÓN ROBOTS CRS
Teclas de entrada de datos.
Cada tecla de eje (flechas verdes), de movimiento (cuadro verde) y de matriz (cuadro amarillo) también cuentan con letras o números. Estas teclas representan.
TECLA FUNCIÓN Letras Se usan para crear una variable, Seguridad.
Y para búsqueda de variables o aplicaciones Números Seleccionar un determinado índice de matriz,
O crear una variable y especificar el tamaño SHIFT Se usa junto con F1 para mostrar una
bitácora de errores
Interruptor de Seguridad (live-man switch).
El interruptor de seguridad del programador manual (cuenta con tres posiciones. Cuando se oprime ligeramente, esta en habilitando el movimiento. Mientras que si se presiona fuertemente o se suelta esta deshabilitando el movimiento. Si se quitar la condición de habilitar durante este movimiento provoca la interrupción de alimentación del brazo y por esto el brazo se para súbitamente.
Botón de emergencia. Por razones de seguridad interrumpe la alimentación del robot.
Pantalla. Los diferentes menús son mostrados por medio de la pantalla. Por medio de las teclas de función se puede acceder. Por medio de la tecla ESC se va al menú anterior
10
PROGRAMACIÓN ROBOTS CRS
Sonidos. El programador manual esta equipado con una pequeña bocina que es capaz de producir un sonido, estos sonidos tienen un significado SONIDO EVENTO EJEMPLO Corto y grave Una tecla valida a sido
Oprimida Desde el menú Aplicación oprimir F1
Corto y agudo Una tecla no valida a sido oprimida
Desde el menú Aplicación oprimir move
Tres cortos y agudos
Se ha inicializado una acción y necesita confirmación
Desde el menú manual Oprimir Home
Largo y agudo Error Desde el menú manual Oprimir Home estando apagado el robot
CAMBIO DE CONTROL.
Del teach a la computadora. Para cambiar el control de teach a la computadora se debe oprimir ESC hasta que sale el mensaje “Terminate pendant and release robot control”, y oprimir F1 para enviar el control a la computadora. En el teach debe aparecer un mensaje “Pendant Off”.
De la computadora al teach. Para cambiar el control de la computadora al teach dentro del programa Robcomm 3 y abierta la ventana terminal, escribir “pendant”, envía el control al teach.
11
PROGRAMACIÓN ROBOTS CRS
MOVER EL ROBOT. Para mover el robot, es necesario especificar el tipo de movimiento y el sistema de coordenadas. Entre los tipos de movimiento tenemos el jog , se desplaza una cantidad especificada cada vez que oprimimos una tecla, según sea el sistema, se desplaza grados o distancia. Y mover cada eje en forma continua. SISTEMAS DE COORDENADAS. Existen 4 sistemas de coordenadas, si no se va a home esta limitado a una velocidad del 10% y un sistema de eje.
1. Eje (joint) 2. Sistema cartesiano 3. Sistema cilíndrico 4. Sistema herramienta
Sistema de coordenadas por Eje (joint). Se mueve cada eje en forma independiente. Cuando no se ha enviado a home es el único sistema que se puede acceder, con una velocidad máxima de 10% antes de enviar a home, desde la ventana terminar, escribir el eje a mover y la distancia “joint 1,5”, o por medio del teach, seleccionar el tipo de movimiento, el sistema joint F3 y F4 respectivamente y la velocidad. La numeración de los ejes va de la base hasta el efector final.
12
PROGRAMACIÓN ROBOTS CRS
Sistema cartesiano (world). Toma como origen el centro de la base del robot. COORDENADA TECLA DESCRIPCIÓN
Eje x 1 Mover efector final adelante – atrás Eje y 2 Mover efector final derecha – izquierda Eje z 3 Mover efector final arriba - abajo Rotación Z 4 Rotar el efector final en base al eje Z Rotación Y 5 Rotar el efector final en base al eje Y Rotación X 6 Rotar el efector final en base al eje X
Desde la ventana de la terminal escribir el eje a mover y la distancia, “wx 5” , “wy 10” , etc.
13
PROGRAMACIÓN ROBOTS CRS
Sistema cilíndrico.
COORDENADATECLA EJE DESCRIPCIÓN θ (theta) 1 mover la base del robot Radio R 2 Extender o contraer efector final
horizontalmente a lo largo del vector Altura 3 Mover verticalmente hacia arriba o abajo el
efector final Cil.- Yaw 4 Rotar el efector final en base al eje vertical Cil-Pitch 5 Rotar efector final arriba o abajo Cil-Roll. 6 Rotar efector final en base a la línea horizontal formada en
efector final y el robot. Este sistema solo puede ser usado desde el programador manual (teach pendant).
14
PROGRAMACIÓN ROBOTS CRS
Sistema de coordenadas herramienta.
Este sistema toma como referencia el efector final, gripper, se tiene que especificar el origen del efector final (TCP-Tool Center Point). En base al efector final Eje X adelante – atrás Eje Y derecha – izquierda Eje Z abajo – arriba Desde la ventana terminal tx distancia, ty distancia, etc
MANDAR A HOME.
Cuando se inicia el robot es necesario mandar a home, como los encoders son increméntales se deben poner a cero en una posición ya especificada.
Mandar a home en forma manual.
Existen marcas dentro de cada eje, deben estar los ejes sobre esa marca para poder enviar a home, cuando ya están en la marca desde el teach. Dentro del menú movimiento, oprimir F1 para que se vaya a home mantener oprimido el interruptor de seguridad, hasta que termine el movimiento. Desde la terminal, escribir en el prompt “home”.
15
PROGRAMACIÓN ROBOTS CRS
ENSEÑAR POSICIONES.
Para enseñar una posición debe existir una variable donde guardar la posición,
Desde el teach.
1. Comando tch 2. F1 (var) 3. Nombre de la variable 4. make, type y dim (especificar el tipo, y la dimensión de la variable) 5. Ir a posición a guardar 6. Oprimir F1 (tch) 7. Si se desean más variables seguir paso 1
Desde la terminal. Es necesario estar en una aplicación par poder lograrlo. Dentro de la aplicación se mueve el brazo y se guarda la posición. Con el comando “here nom” donde nom es el nombre de la variable.
CREAR UNA APLICACIÓN Dentro de Robocomm3
1. Seleccionar el puerto de comunicación y la velocidad de transmisión / recepción 2. Crear un nuevo documento (Editor de texto) 3. Crear una aplicación(archivo a enviar al controlador)
Cada programa debe tener un main y un end main, es la parte del programa que ejecuta el controlador siempre.
16
PROGRAMACIÓN ROBOTS CRS
EDICIÓN DE UN PROGRAMA. Para realizar un programa es necesario seguir los pasos que a continuación se enumeran:
1) Abrir el Robcomm3.
2) Crear una Aplicación. En el menu Application, seleccionar New Application.
17
PROGRAMACIÓN ROBOTS CRS
En ese momento aparecerá un cuadro de mensaje en donde pedirá el nombre de la aplicación que se desea generar.
Nota: Evitar borrar la extensión app.. Una vez que se ha realizado la aplicación, si se desea se puede verificar la creación de los archivos que componen la aplicación, esto se hace en el menu Application en su opción Setup, como de muestra a continuación.
18
PROGRAMACIÓN ROBOTS CRS
3) Ingresar el Programa. En esta parte es donde se va a capturar todo el código del programa que será ejecutado por el robot cuando esta sea terminada. Para ingresar al editor de programas del RAPL – 3 en el menú Archivo seleccionamos New y en la pantalla que aparece será donde vamos a capturar el código.
4) Compilar el programa. Para compilar el programa es necesario seleccionar el icono de compilación. Al seleccionar este icono nos va a mandar un cuadro de diálogo si existen errores o si el programa se encuentra correctamente creado manda otro mensaje.
5) Enviar el Programa.
19
PROGRAMACIÓN ROBOTS CRS
Al enviar el programa lo que estamos realizando es enviar el código hacia el controlador. Para esto es indispensable que la configuración del puerto por la cual nos estamos comunicando con el controlador sea el correcto y la velocidad se encuentre a 57600 bauds. Para enviar el programa será necesario seleccionar la opción de los iconos del menú.
Una vez que se haya finalizado este paso, el programa y la aplicación ya se encuentran cargados en el controlador. Para manipular esta aplicación desde la PC es necesario abrir la Terminal, esta es una pantalla negra en donde ingresaremos el comando ash después del prompt $ y aparecerán los nombres de las aplicaciones existentes en el controlador. La pantalla se muestra en las siguiente imagen.
Desde aquí será posible enseñar variables, ejecutar los programas y mover el robot de forma manual.
20
PROGRAMACIÓN ROBOTS CRS
Ejemplo main teachable cloc a,b ;;declarar variables move(a) ;;moverse a posicion a move(b) ;;moverse a posicion b ready() ;;ir a posicion ready end main ;;termina el programa Para poder enviarlo al controlador es necesario compilarlo, (cambia de lenguaje), y posteriormente si no existe algún error enviarlo a controlador. Para correr el programa desde el teach seleccionar la aplicación y oprimir F2 para que corra, antes de que se mueva el brazo se debe oprimir pause / continue, como seguridad, se debe verificar que no exista algo dentro del área de trabajo del robot que le impida realizar sus movimientos o una persona dentro del área. Para correr el programa desde la computadora, dentro de Robocomm 3 y en la termina seleccionar la aplicación escribir “ash” (stands for applications shell) e indica cuales aplicaciones tenemos, escribir el nombre de nuestra aplicación y finalmente escribir “run”. También se debe oprimir pause / continue, como seguridad, se debe verificar que no existe algo dentro del área de trabajo del robot, para terminar el programa, si se quedo en un ciclo oprimir CTRL. + Z para interrumpir el programa.
CAMBIO DE POSICIONES CON EL TEACH. Comprobar que este el control en el teach.
1. Seleccionar aplicación 2. Escoger editar F1 3. Escoger variable F1 4. Seleccionar variable a editar 5. Seleccionar variable F1 6. Moverse a la nueva posición 7. Guardar posición (tch F1) 8. Confirmar que se desea guardar la variable (F1) 9. Oprimir ESC para regresar al menú anterior 10. Si se desea modificar mas variables seguir paso de 3 al 9
21
PROGRAMACIÓN ROBOTS CRS
CAMBIO DE POSICIONES DESDE LA COMPUTADORA.
Comprobar que este en la Aplicación correcta, (ventana terminal) ir a nueva posición, escribir “here variable”, y continuar cambiando posiciones si se desea cambiar más posiciones.
TIPOS DE VARIABLE.
SÍMBOLO PREFIJO TIPO Int Ninguno Entero
float % Fracción string $ Cadena cloc _ Posición cartesiana ploc # Posición de precisión
Todas estas variables su valor puede ser asignado desde el teach (teachable), es útil como contadores, enviar mensajes y posiciones.
MATRIZ. También existe la posibilidad de crear matrices multidimensionales, el único problema es que no pueden ser teachable las matrices de dos dimensiones si son de tipo cadena, y mayor de tres dimensiones ninguna variable puede se teachable.
22
PROGRAMACIÓN ROBOTS CRS
CREACIÓN DE NUEVAS VARIABLES.
Desde el teach. Asegurarse que esta en la aplicación, correcta.
1. F1 (var) 2. Nombre de la variable 3. type (F2) y dim (F3) especificar el tipo, y tamaño de la variable 4. crear variable (F1) 5. Si se desean más variables seguir paso 1 al 5
Desde le ventana terminal. Asegurarse que esta en la aplicación correcta.
1. new prefijo nombre ;emplear el prefijo de la variable.
ASIGNACIÓN DE VALORES DE VARIABLES TEACHABLES. Desde el teach.
1. Seleccionar aplicación. 2. Seleccionar editar F1. 3. Seleccionar var F1. 4. Desplazarse con F3 o F4 hasta encontrar variable. 5. Asignar valor. 6. ESC para regresar a menú anterior. 7. Se desean modificar mas variables ir a paso 4.
Desde la computadora. Asegurarse que esta en la aplicación correcta. En el prompt de la ventana terminal escribir Set = nombre = valor Nombre = nombre de la variable Valor = valor de la variable
23
PROGRAMACIÓN ROBOTS CRS
CONTROL DE FLUJO.
1. BREAK 2. LOOP 3. CASE 4. WHILE 5. FOR 6. DO 7. IF 8. GOTO
BREAK Salir de un ciclo, loop, while, do, for, do, if
LOOP
Hacer un ciclo Ejemplo loop move (a) move(b) end loop
CASE Hacer varias comparaciones. Según la comparación es lo que realiza. Ejemplo int contado case contado ;;comprobar estado de contador of 0: ;;si es igual cero move(a) ;;muévete a posición a of 2,3,5: ;;si es igual 2 , 3 o 5 move (b) ;;muévete a posición b of 6 to 30: ;;si esta dentro del rango 6 a 30 ready() ;;ve a ready end case
24
PROGRAMACIÓN ROBOTS CRS
WHILE Hacer un ciclo mientras la sentencia sea verdadera Ejemplo While (contador < 5] ;;mientras que el contador sea menor a 5 move(a) ;;ir a posición a move(b) ;;ir a posición b contador = contador + 1 ;;incrementar contador end while
FOR
Realizar un ciclo un determinado numero de veces, Ejemplo For x= 1 to 10 ;;sentencia inicio y final Move posicion(x) ;;ciclo a realizar End for
DO Hacer un ciclo, pero prueba la condición hasta el final, en el caso de while la prueba antes de empezar, al menos se realiza una vez. do move(a) ;;ir a posición a move(b) ;;ir a posición b contador = contador + 1 ;;incrementar contador until contado > 5 ;;hasta que el contador mayor a 5
IF Si es cierta la condición se realiza el ciclo, para salir por medio de un break a un goto (ir a una lugar especificado por una etiqueta)
25
PROGRAMACIÓN ROBOTS CRS
if (contador < 5] ;;si en contador es menor a 5 move(a) ;;ir a posición a move(b) ;;ir a posición b else if (contado >5) ;;si en con move(b) ;;ir a posición b move(a) ;;ir a posición c end if
GOTO Ir a una etiqueta.
PUERTO DE ENTRADA / SALIDA DE PROPÓSITO GENERAL (GPIO).
Con su nombre lo indica es un puerto de entradas / salidas el cual cuanta con :
• 16 entrada opto aisladas, NPN • 12 salidas opto aisladas NPN • 4 salidas a relevador, con salida normalmente abierta y salida normalmente cerrada,
conectadas a línea común • Una entrada analógica de 0 a 5 volts
Fuente externa. Soporta una fuente de voltaje de 20 a 28 VCD. Se tiene opto aisladas las entradas.
Fuente Interna. No se tiene las entradas opto aisladas. La fuente interna es 24 VCD.
Consideraciones. No soporta una diferencia de 50 volts CD Las salidas y las entradas no deben exceden de 1 A en todo el puerto si se emplea la fuente interna Las salidas a relevador no deben exceder 2 A 30 VCD, no soportan corriente alterna.
26
PROGRAMACIÓN ROBOTS CRS
PARA LEER UNA ENTRADA. input (int canal) ; canal numero de entrada
PARA HABILITAR LAS SALIDAS. output_set(int canal, int estado) SUBRUTINAS Y FUNCIONES.
Subrutinas. Una subrutina es un subprograma el cual puede tomar cualquier numero de argumentos (inclusive ninguno), no regresa ningún valor al programa principal. Se emplea cuando se repiten varios comandos y se quiere ahorrar espacio. Para no estar escribiendo cada vez, Formato para crear una subrutina. sub sub_indicador (parámetros) declaración end sub Formato para llamar una subrutina. Identificador_sub (parámetro) El tipo de parámetro debe coincidir con el especificado en la declaración de la subrutina, (un error común) también deben coincidir el numero de parámetro. Funciones. Una función es similar a una subrutina, solo que las funciones regresar un valor al programa principal, este puede ser int, flota, ploc, cloc o incluso un apuntador para una cadena, ya que no puede regresar una cadena. Formato func tipo identificador_func (parámetros)
27
PROGRAMACIÓN ROBOTS CRS
declaraciones return end func Al menos debe de contar con un return ya que indica que valor se envia al programa. Formato para llamar una función. Existen dos formas de llamar una función.
• Como parte de una expresión • Por ella misma como una condición
SUBPROGRAMAS UTILIZADOS MAS FRECUENTEMENTE.
Para ver todos los subprogramas se recomienda ver el archivo RAPL –3 Language Reference Guide.pdf ya que aquí solo se muestran algunos. Se agruparon según la tarea que realizan.
• Entrada analógica • Calibración • Entradas y salidas digitales • Panel frontal • Gripper • Home • Posición • Movimiento
ENTRADAS ANALÓGICAS.
analogs_get Regresa en valor de las ocho entradas analógicas al controlador C500C
boardtemp_get Regresa la temperatura en grados centígrados de la tarjeta
del controlador C500C
28
PROGRAMACIÓN ROBOTS CRS
CALIBRACIÓN. calrdy Mover robot a posición de calibración
motor Rotar en motor un especifico numero de pulsos
pos_get Obtener posición del robot pos_set Poner posición del robot ready Mover el robot a posición ready ENTRADAS Y SALIDAS DIGITALES. input Regresa el estado de una entrada
inputs Regresa un mapa estado de las entradas digitales
output_get Regresa estado de una salida output_pulse Poner la salida en un estado, espera y cambia
de estado output Poner el estado de una salida outputs_set Poner estados en salidas
PANEL FRONTAL.
Existen cinco botones de los cuales por medio del RAPL-3 se pueden programar. Los botones no tienen interruptores para estar en ON u OFF. Cuando se oprime el botón mientras se oprime se mantiene ON y cuando se suelta regresa a OFF. Los botones se encuentran etiquetados como sigue onbutton Espera por un botón que sea oprimido panel_button Regresa cierto si un botón es oprimido panel_button_wait Espera por un botón en particular panel_buttons Regresa el estado de los botones panel_light_get Obtiene estado de una luz panel_light_set Pone el estado de una luz particular panel_lights_get Obtiene estado de las luces panel_lights_set Poner estado de las luces Los botones están numerado como sigue
29
PROGRAMACIÓN ROBOTS CRS
F1 = 1 F2 = 2 Pause continue = 4 Home = 8
GRIPPER.
grip Mover el los dedos del gripper una distancia grip_close Cerrar gripper grip_finish Mantener en espera el programa hasta que el
gripper termine su movimiento grip_open Abrir gripper
HOME. Home Especificar el home de ejes
POSICIÓN.
here Guardar posición
MOVIMIENTO.
appro Aproximarse a un punto, no forzar
movimiento en línea recta appros Aproximarse a un punto, forzar
movimiento en línea recta calrdy Ir a posición de calibración depart Alejarse dela posición departs Alejarse dela posición en línea recta finish Esperar hasta que no exista movimiento.
30
halt Para movimiento del robot
PROGRAMACIÓN ROBOTS CRS
wx,wy,wz Mover el robot en sistema cartesiano zrot, yrot, xrot
wxs,wys,wzs Mover el robot en sistema cartesiano, forzar zrots, yrots, xrots en línea recta joint Mover un eslabon limp Quitar energía a motores lock Asegurar un eje move Ir a una posición moves Ir a una posición en línea recta nolimp Energizar motores después de un limp ready Ir a posición ready speed Velocidad unlock Liberar eje después de lock PROGRAMAS. Se muestran algunos programas, con la finalidad de ir adquiriendo la habilidad con programador manual para mover el robot, los diferentes tipos de movimiento, tipos de variables, puerto de entrada salida de propósito general, panel frontal, etc. Se trato de cubrir todos los aspectos del controlador hasta se realiza un programa para ejemplificar un proceso de multitarea, muy útil en proceso de control. En total son ocho los programas pero se pueden modificar, según las necesidades. Algunos que cuentan con diagrama de flujo, solo cuando intervienen en control de flujo en los otros casos no considere poner ya que el programa se realiza en forma lineal sin verificar alguna condición. Solo un caso especial de multitarea. Y el ultimo programas mas que nada se ejemplifica como utilizar los subprogramas incluidos en el controlador par monitorear el estado del robot. 1. Realizar un programa que haga una secuencia de cuatro puntos main teachable ploc a,b,c,d aqui:: speed(30) ready() move(a) move(b) move(c) delay(500) move(d) goto aqui
31
PROGRAMACIÓN ROBOTS CRS
end main
32
PROGRAMACIÓN ROBOTS CRS
2. Realizar una secuencia de cuatro puntos, además por medio de una variable dada por el teach realizar un ciclo
Variables
inicio
Hasta que Contador > Numero
Posiciones
Contador = 0
main
teachable cloc a,b,c teachable ploc d teachable int i int j ;;inicio del programa for j=0 to i ;;condicion
speed(40) ;;velocidad ready () ;;ir a posicion ready printf("Ir a posicion ready\n") move (a) ;;moverse a punto a printf("ir a punto a\n") moves (b) printf("ir a punto b\n") move (c) printf("ir a punto c\n") move (d) printf("ir a punto d\n") printf("numero de veces {} \n",j)
end for end main
33
PROGRAMACIÓN ROBOTS CRS
3. Realiza una secuencia, que se aproxime a ciertos puntos, llegue al punto, se aleje, hacer
esto bajando la velocidad. no si no si
Variables
Dentro de índice
Establecer índice
Posición de aproximación
Disminuir velocidad
Acercarse a posición
Ir a posición
Alejarse
Incrementar índice
Ir a posición
Fin del programa
inicio
34
PROGRAMACIÓN ROBOTS CRS
main teachable cloc [6] a ;;numero de posiciones teachable int max, aprox, punto int i, contador ;;contador y auxiliar contador = 0 ;;establecer valor del contador loop ;;ciclo i = 0 ;;establecer valor de índice speed(max) ;;velocidad do if (i == 1) or (i == 3) or (i==5) then ;;cuando sea igual alguno speed(aprox) ;;bajar la velocidad printf("aproximarse a[{}]\n",i) appros(a[i],30) ;;aproximarse en linea recta printf("moverse a[{}]\n",i) speed(punto) ;;disminuir la velocidad move (a[i]) ;;ir al punto finish() ;;esperar que llegue delay(1000) ;;demora printf("alejarse a[{}]\n",i) depart(30) ;;separarse del punto i=i-1 speed(max) ;;aumentar velocidad printf("moverse a[{}]\n",i) move (a[i]) ;; ir una posicion anterior finish() i=i+1 ;;recuperar contador printf(" i = {}\n",i) else speed(max) ;;ir a puntos de acercamiento printf("Moverse a mas [{}]\n",i) move (a[i]) end if i= i +1 ;;incrementar contador until i > 5 ready() ;;ir a posicion ready finish() contador = contador +1 ;;incrementar contador printf("fin secuencia N= {}\n",contador) ;;mensaje end loop end main
35
PROGRAMACIÓN ROBOTS CRS
4. Realizar una secuencia de puntos designados por una matriz de una dimensión, además
que cuente con un botón de inicio conectado al GPIO no
si no si
Numero de veces
Contador de filas
Contador de columnas
Ir a posición [i,j]
Incrementar fila
Dentro de limite
Botón de inicio
Variables
inicio
36
PROGRAMACIÓN ROBOTS CRS
main int i,j ;;contador teachable cloc [5]a ;;variables matriz teachable cloc [2]b teachable int k,l ;;variable numero de ciclos después (k) ;;aca:: ;;numero de ciclos a realizar (l) printf("\n BOTON \n") ;;mensaje delay(500) ;;demora while input(1) == 0 ;;espera hasta que se oprime botón delay(200) printf("\n OPRIMIR BOTON \n") end while ready() ;;ir a posicion ready printf ("\n Ciclos a realizar {} \n",l) printf ("\n numero de ciclos despues {}\n",k) for j=1 to l speed(20) ;;establecer velocidad if (j == k)
printf("Condicion si\n") for i=0 to 1 printf("aproximarse al punto b[{}]\n",i) appro(b[i],80)
finish() printf("moverse al punto b[{}]\n",i) move(b[i])
finish() printf("alejarse del punto b[{}]\n",i) depart(80)
finish() end for end if i=0 printf("move, ciclo = {}\n",j) ;;comentario while i < 5 ;;ciclo move (a[i]) ;;mover a posicion finish() ;;detener hasta que termine el movimiento printf("lugar a[{}]\n",i) ;;mostrar lugar visitado i = 1+i ;;incrementar contador end while speed(60) ;;fin del ciclo delay(900) ;;demora en milisegundos ready () ;;ir a posicion ready printf("Fin del ciclo move\n") ;;mensaje speed(10) printf("moves, ciclo = {}\n",j)
37
PROGRAMACIÓN ROBOTS CRS
for i=0 to 4 ;;ciclo for
moves (a[i]) ;;mover finish() printf("lugar a[{}]\n",i) ;;indicar posicion visitada end for speed(60) delay(900) ;;demora en milisegundos ready () ;;ir a posicion ready printf("fin del ciclo moves\n") end for printf("\n FIN DEL PROGRAMA\n") end main
38
PROGRAMACIÓN ROBOTS CRS
5. Secuencia empleando una matriz de dos dimensiones, emplear el GPIO y los botones del
panel frontal que son programables (F1 y F2) indicando que botones se deben oprimir por medio de las luces
SI NO
inicio
variables
Botón de inicio
Ver estado de entrada
Entrada = 1
β
α
Mientras este dentro del numero de columnas
Mientras este dentro del numero de fila
β
Ir a posición (fila, columna)
Fin del programa
Ir a posición ready
Esperar por botón del panel frontal
α
39
PROGRAMACIÓN ROBOTS CRS
;; funcion regresar el estado de una entrada func int estado(int entrada) return input(entrada) end func main int i,j,x,f1,f2 teachable cloc [2][4] posicion inicio:: printf("boton de inicio \n") while input (2) == 0 ;;esperar por botón de inicio delay(200) end while speed(40) ;;establecer valor inicial i = 0 for j = 0 to 1 ;;hacer un ciclo do x= estado(1) ;;checar botón if (x==1) printf("boton\n") ;;se oprimio boton 1 speed(60) printf("ready\n") ;;ir a posicion ready ready() finish() goto fin ;;fin de condición
end if move (posicion[i,j]) ;;moverse
finish() printf("posicion [{}],[{}] \n", i, j)
printf(" i = {}\n",i) ;;indicar valores de contadores printf(" j = {}\n",j) i = 1 + i ;;aumentar contador
until i == 4 ;;establecer limite i = 0 ;;restablecer contador end for printf("\nFIN SECUENCIA\n") ;;mensaje fin:: f1 = panel_button(1) ;;obtener estado de boton F1 printf("\nEstado de F1 = {}\n",f1) f2 = panel_button(2) ;;obtener estado de boton F2 printf("Estado de F2 = {}\n",f2) printf(" OPRIMIR F1 \n")
40
PROGRAMACIÓN ROBOTS CRS
while panel_button(1) == f1 ;;esperar hasta que cambie F1
panel_light_set(1,1) ;;hacer toggle a luz de F1 delay(200) panel_light_set(1,0) delay(200)
end while ready() finish() printf(" OPRIMIR F2 \n") ;;esperar que cambie F2 while panel_button(2) == f2 ;;hacer toggle a luz F2
panel_light_set(2,1) delay(200) panel_light_set(2,0) delay(200)
end while goto inicio ;;saltar a inicio end main
41
PROGRAMACIÓN ROBOTS CRS
6. Programar secuencia empleando una matriz de dos dimensiones, monitorear dos entradas
del GPIO con una reinicia el ciclo y con otra espera que se oprima un botón del panel frontal, se va a ready y se debe oprimir alguno de los dos botones del panel frontal, con uno re regresa a la posición donde se activo la entrada, y con otro termina el programa
no
si
si si no no si no
inicio
variables
Fila = 0 Columna = 0
Dentro de limite de fila
Dentro de limite de columna
Estado de entradas
Entrada(1) = 1
Ir a ready
Entrada(2) = 1
Panel
1
Ir a posición (i,j)
Incrementar columna
Ultima columna α
Ultima fila
Incrementar fila
Columna = 0
α
α
β
β
1
42
PROGRAMACIÓN ROBOTS CRS
si no
Ir a ready
Esperar por F1
F2 Recuperar posición
α Fin del programa
Esperar por F1
Panel
43
PROGRAMACIÓN ROBOTS CRS
func int estado(int entrada) return input(entrada) end func main
teachable cloc [3,4] pos int i,j,en1,en2,en3,f1,f2 loop
inicio:: i=0 ;;establecer condiciones iniciales j=0 print("entradas analogicas ",analogs_get,"\n") speed(40) ;;velocidad
ciclo:: do
do en1=estado(1) ;;asegurar estado de entradas en2=estado(2) en3=estado(3) if (en1==1) ;;entrada 1 printf("entrada 1 \n") while input(1)==1 delay(75) ;;esperar por libre boton
end while ready() ;;ir a posicion de inicio finish() goto inicio ;;continuar desde la primera posicion
end if if (en2==1) ;;entrada 2
printf("entrada 2 \n") goto fin ;;fin del programa end if if (en3==1) ;;no esta habilitada printf("error\n") end if move (pos [i,j]) ;;ir a posicion finish()
printf("posicion [{}],[{}]\n", i,j) j=j+1 ;; incrementar contador until j > 3 ;;establecer limite
i=i+1 ;;siguiente fila j = 0 ;;contador until i == 3 ;;limite de filas speed(60) ;;termina secuencia ready()
44
PROGRAMACIÓN ROBOTS CRS
finish() printf("fin secuencia\n")
end loop ;;fin del ciclo
fin:: ;;fin f1 = panel_button(1) ;;obtener estado de boton F1 printf("\nOprimir F1\npara que se vaya a ready\n") while panel_button(1) == f1 ;;esperar hasta que cambie estado
panel_light_set(1,1) ;;encender indicador delay(200) ;;del boton panel_light_set(1,0)
delay(200) end while delay(500) ;;demora while (panel_button(1)==1) ;;hasta que este libre el boton printf("suelta F1\n") ;;mensaje todavia esta oprimido el boton delay(200) end while ready() ;;continua ciclo finish() delay(800) ;;demora evita rebote f1 = panel_button(1) ;;esperar boton F1 f2 = panel_button(2) printf("\n Oprimir F1 para terminar\n \n Oprimir F2 para continuar en \n la posicion anterior\n") while (panel_button(1) == f1 ) ;;or panel_button(2) == f2 panel_light_set(3,1) if panel_button(2) != f2 apagar::
panel_light_set(3,0) printf("Regresa\ni = {}, j = {}\n",i,j)
if j==0 and i == 0 ;;esta en primer posicion printf("iguales\ni = {}, j = {}\n",i,j) goto inicio end if
if j==0 ;;tiene que regresar una fila i= i-1 j= 3 printf("regresar fila\n i = {}, j = {}\n",i,j) goto ciclo else ;;entonces tiene que regresa una columna j= j -1
45
PROGRAMACIÓN ROBOTS CRS
printf("regresar columna\n i = {}, j = {}\n",i,j) goto ciclo end if
end if delay(100) ;; if panel_button(2) != f2 ;;pueden oprimir el boton aqui goto apagar ;;ir a checar estado de posicion end if panel_light_set(3,0) ;;apagar luces delay(100)
end while printf("\nFIN DEL PROGRAMA\n") ;;fin del programa end main
46
PROGRAMACIÓN ROBOTS CRS
7. Demostración de multitarea int enable = 0 main string [20] cmd int pid, cont cont = 0 pid = split() if pid == 0 then printf("Alterno pid = {} \n proceso principal de {}\n",getpid(),getppid()) loop delay(1000) if enable == 1 then printf("Contador = {}\n",cont) cont= cont +1 end if end loop else printf("Principal pid = {}\n proceso alterno {} \n",getpid(), pid)
delay(500) loop printf("\ninicio, paro, terminar o quitar >") readline(cmd,20) if cmd == "inicio" then ;;iniciar contador enable = 1 elseif cmd == "paro" then ;;detener el ciclo enable = 0 elseif cmd == "terminar" the ;;detener tarea alterna sigsend(pid,SIGHUP)
pid=0 elseif cmd == "quitar" then ;;terminar programa break else printf("\nerror\n") ;;error end if end loop if pid != 0 then ;;en caso de pid diferente de cero
;;error sigsend(pid,SIGHUP) ;;genera una interrupción y se
end if ;;apaga el controlador end if end main
47
PROGRAMACIÓN ROBOTS CRS
8. Estado del robot, utilizando los subprogramas mostrar el estado del
robot, leer entrada analógica, limite de ejes, etc. main
string [10] cad int [5] config int i,k, cont, e, eje, total, trans float kp, ki, kd float [8] poslim, neglim, radio,valor int [8] act_est int con, tiempo, cierto, tiempo1 int homed, done string [128] time_date cont = 0
tecla:: printf("Numero de veces a realizar \n") ;;numero de veces readline(cad,10) e = str_to_int(k,cad) ;;determinar error if (e < 0)
print("error dato debe ser un numero entero\n\n") goto tecla
end if while cont < k
robot_info(homed,done) ;;estado del robot homed y movimiento if (homed != 0 && done != 0)
print("El robot esta en home y no se esta moviendo\n") else if done == 0 print("robot en movimiento\n")
end if if homed == 0 print("Robot no ha ido a home\n") end if end if conf_get (config) ;;obtener configuracion del robot
for i= 0 to 4 ;; estan ordenado como sigue case i
of 0: printf("Codigo del producto ") of 1: printf("Cogigo del robot ") of 2: printf("Numero de ejes ") of 3: printf ("Configuracion ") of 4: printf("Estado de arm power ") else printf("NO puede llegar aqui ")
48
PROGRAMACIÓN ROBOTS CRS
end case print(config[i],"\n") delay(500) end for for i= 1 to 5 ;;obtener ganancias de cada eje gains_get(i,kp,ki,kd) ;;proporsional, integral, y diferencial printf("ganancia eje = {}\np= {}\ni= {}\nd= {}\n",i,kp,ki,kd) delay(500) end for axes_get(eje,trans,total) ;;limites de cada eje for con = 1 to eje jointlim_get(con,poslim[con-1],neglim[con-1]) printf("eje {} limite: + {} {} \n",con,poslim[con-1],neglim[con-1]) delay(500)
end for xratio_get(radio) ;;relacion de giro de cada eje for i = 0 to eje printf("radio eje {}= {}\n",i,radio[i]) delay(500) end for print("Entradas analogicas \n") analogs_get(valor) ;;obtener entradas analogicas print("Temperatura de tarjeta= ",valor[ANA_BOARDTEMP],"\n") delay(500) printf("Entrada analogica 1= {} \n",valor[ANA_USER1]) delay(500) printf("Entrada analogica 2= {} \n",valor[ANA_USER2]) delay(500) printf("Fuente interna de 24 = {} \n",valor[ANA_V24SUPPLY]) delay(500) printf("Fuente interna de 12 = {} \n",valor[ANA_V12SUPPLY])
delay(500) printf("Fuente interna de 5 = {} \n",valor[ANA_V5SUPPLY]) axis_status(act_est) ;;estado de cada eje
for i = 0 to eje print("estado eje ",i,"= ",act_est[i],"\n") delay (500) end for robot_odo(tiempo) ;;tiempo de funcionamiento print("Ha estado encendido ",tiempo," seg\n") tiempo1 = time() ;;obtener fecha cierto = time_to_str(time_date, tiempo1) ;;formato printf("Fecha: {}\n",time_date) cont= cont+1 printf("realizado = {}\n\n",cont) end while
end main
49
PROGRAMACIÓN ROBOTS CRS
REFERENCIA Los suiguientes archivo se encuentran en el software del robot el formato acrobat (extensión pdf)
1. A465 Robot System User Guide 2. Application Development Guide 3. Application Shell (ash) 4. Catalyst 5 Robot System User Guide 5. CROS and System User Guide 6. RALP-3 Language Reference Guide 7. Robcomm 3 8. Teach Pendant 9. Terminal Editor for C500C
50