You are on page 1of 41

CAPITULO 1

Formato General del Programa


Todos los programas RAPL-3 siguen el mismo formato general. Algunos elementos son requeridos. Otros elementos son opcionales dependiendo de la complejidad del programa. RAPL-3 (Robotics Application Programming Language).

El Programa Principal
Cada programa RAPL-3 contiene una funcin main.

main
Descripcin

Una funcin requerida para cada programa. Requiere main y end main para indicar el comienzo y el final de cada programa. main es el lugar en el programa donde se inicia la ejecucin.

Sintaxis

main statements end main

Ejemplo

main Teachable cloc pick, place move(pick) grip_close() move(place) grip_open() end main

Lneas de un programa
Un programa RAPL-3 consiste de un nmero de lneas del texto ASCII. Todas las declaraciones son terminadas por la lnea final declarada.

Continuacin de lneas
Para continuar una declaracin en el siguiente rengln se coloca una \ (diagonal invertida) al final del primer rengln. Por ejemplo:
a=b+c+d \ +e+f

As es ledo como una sola declaracin. Sin el carcter de continuacin.


a=b+c+d +e+f

La primer parte de la declaracin acaba en el final de la primera lnea y se lee como una declaracin. La segunda parte es un fragmento que causa error de sintaxis al compilar. Lneas que terminan con una coma (,) se considera automticamente que son continuados. Por ejemplo.
printf ( the coordinates are {}, {}, {}\n , x, y, z)

Comentarios
Un comentario inicia con dos - punto y coma (; ;) y se extiende al extremo de la lnea. Un comentario puede empezar al principio de una lnea o despus del algn cdigo del programa. Po ejemplo:
; ; calculate the position error: x_ error = x_pos - desired_x_pos y_ error = y_pos - desired_y_pos z_ error = z_pos - desired_z_pos ; ; for the x_axis ; ; for the y_axis ; ; for the z_axis

Identifier - Identificadores
Un identificador es usado para darle nombre a una variable, tipo, subrutina, funcin o comando.

Set de caracteres
Un identificador siempre inicia con una letra. Este puede ser seguido por el cero o ms dgitos, letras, o un guion bajo ( _ ).
a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 _ Set de caracteres vlidos para nombrar identificadores

Argumentos
Los identificadores se pueden escribir en maysculas (ABCDE), minsculas (abcde) o mixtas (AbCdE). El lenguaje de programacin RAPL-3 es un caso sensitivo con identificadores. Por ejemplo: los siguientes son todos los identificadores diferentes:
a A symbol SYMBOL sYmBoL SyMbOl ; ; lowercase - minscula ; ; uppercase - mayscula ; ; lowercase - minsculas ; ; uppercase - maysculas ; ; mixed combinado maysculas y minsculas ; ; mixed combinado maysculas y minsculas

Longitud
Un identificador puede ser de cualquier longitud, pero los primeros 32 caracteres son los significantes. Po ejemplo: los siguientes identificadores no son diferentes.
location_sensor_data_collection_1 location_sensor_data_collection_2 Para hacerlos diferentes solo basta cambiar una letra minscula por una mayscula, y aqu ya son diferentes: location_sensor_data_collection_1 Location_sensor_data_collection_2

Ejemplos
Hay algunas posibilidades de identificadores validos.

Validos
a num my_symbol MySymbol x3 rack_loc_12 ; ; a single letter - una simple letra ; ; several letters - varias letras ; ; letters with underscore - letras con guin bajo ; ; letter of different cases - letras con maysculas y minsculas ; ; letter with digit - letras con nmeros ; ; letters, underscores_digits - letras con guin bajo y nmeros

Invalidos
3a my$symbol &num ; ; begins with a digit, not a letter ; ; uses a character not in the valid character set ; ; uses a character not in the valid character se and does not begin with a letter

Label - Etiquetas
Una declaracin puede ser marcada con un identificador especial llamado etiqueta. La etiqueta tiene doble dos puntos (: :) despus del identificador. Una etiqueta es usada con el objetivo de una declaracin goto.
Syntax label_identifier: : statement

Donde label_identifier es el nombre de la etiqueta y sigue las mismas reglas de los identificadores, y statement es la declaracin de la lnea etiquetada.

Este es un ejemplo de cmo se utilizara una etiqueta en un programa, en este caso la etiqueta es AA. As como est el ciclo es indefinido
main goto AA: statements AA end main

La declaracin puede ser una lnea vaca. Examples


my_label : : current_location = num Start_again : :

Keywords Palabras clave


Los siguientes identificadores son palabras clave de RAPL-3. Estas palabras son reservadas para el lenguaje de RAPL-3 y no pueden ser redefinidas. En particular, las siguientes palabras no pueden ser usadas para nombrar alguna variable, subrutina, funcin o comando: and break _builtin case cloc command comment const gloc goto if ignore import int livbersion loop sizeof static step string struct sub teachable then

continue do else elseif end enum except export float for func global

main mod not of or ploc private proto raise resume return retry

to try typedef union unteachable until var void volatile while with

CAPITULO 2

Tipos de Datos y Variables


Los programas RAPL-3 pueden trabajar con muchos tipos diferentes de datos y tambin permite usar tipos de datos definidos. Este capitulo presenta los tipos de datos bsicos soportado por RAPL-3 y luego veremos los tipos de usuarios definidos que pueden ser construidos.

Tipos de Datos Bsicos


RAPL-3 soporta los siguientes tipos de datos bsicos. Nombre
int float string cloc ploc void

Descripcin
Nmeros enteros (Rango: -2147483648 a +2147483648) Nmeros con punto decimal (Rango: +- 1.7 x 10 8. Cadena de caracteres (Rango: de 0 a 65535 caracteres Locacin cartesiana Locacin de precisin Usado para formar indicadores genricos

Tamao (bytes)
4 4 4 + numero de caracteres 36 36

int
Un int entero, es un nmero sin punto decimal Ejemplos: 0, 1, 23, 456, -7, -89

float
Un float es un numero con punto decimal o parte de una fraccin y tambin es un un numero exponencial. Un nmero flotante tiene siete dgitos significantes. Ejemplo: 4.75, -99.99, 1.0, 3.141593

string
Un string es un set de caracteres: letras maysculas o minsculas, dgitos, puntuacin y otros caracteres grficos, y el espacio en blanco. En un string un dgito es un carcter y no tiene valor numrico como en un nmero (entero o flotante).

cloc
Un cloc o locacin cartesiana, representa un punto en el espacio de trabajo del robot definido por coordenadas cartesianas. La coordenadas tienes tres elementos traslacionales (a lo largo del eje) x, y, z y tres elementos rotacionales (alrededor del eje) z, y, x. Los valores de un cloc son independientes de la posicin del brazo y del tipo de brazo.

ploc
Un ploc o locacin de precisin, representa un punto en el espacio de trabajo del robot definido por incrementos de movimiento rotacional, especficamente el encoder cuenta a cada articulacin del brazo y de cualquier eje adicional (j1, j2, j3, j4, j5, j6, j7, j8). Los valores de un ploc son independientes en el robot.

Declarations - Declaraciones
La mayora de cada variable es declarado como un tipo especifico de variable, ( int, float, string, cloc, ploc). Una declaracin declara el tipo de variable y el nombre de la variable. T puedes declarar una variable explcitamente o implcitamente. Es mejor programar declarando todas las variables explcitamente.

Declaraciones explicitas
Cuando declaras una variable explcitamente, se lista en una declaracin de la declaracin antes de que usted lo use en el programa. Pueden listarse variables declarados con el mismo tipo de declaracin, separados por comas.
Syntax Type Type identfier identifier, identifier, identifier

Donde
type

es el tipo de dato y

es el nombre de la variable y sigue las mismas reglas para los identificadores.


identifier

Ejemplos Tipo Int float string cloc ploc Ejemplo


int i float a, b string[10] mensaje cloc pick_1, place_1 ploc pick_2, place_2

Descripcin i es un entero a y b son flotantes mensaje que puede tener hasta 10 caracteres Pick_1 y place_1 son locaciones cartesianas Pick_2 y place_2 son locaciones de precisin

Declaraciones implcitas
Cuando declaras una variable implcitamente, indicas el tipo de variable con un signo antes de su nombre para usarlo por primera vez en el programa. Si una variable se usa sin ser declarada explcitamente, el compilador busca un carcter de declaracin implcita sobre el nombre de la variable y determina el tipo de variable. Si no hay ningn prefijo de carcter, el compilador define por default como un tipo entero e indica una advertencia.

En general, las declaraciones implcitas deben evitarse, siempre se debe declarar variables explcitamente.
sintax [prefix_character] identifier

Donde Prefix_character es el signo indicando el tipo de dato, y identifier es el nombre de la variable y sigue las mismas reglas de los identificadores. Signos de declaraciones implcitas. Prefix character ninguno % $ _ # porcentaje signo de pesos guion bajo numeral Tipo int float string[64] cloc ploc Ejemplo
a=2 %b = 10.25 $m = Robot working. \ n here _z here #y

Ejemplos ejemplos E Tipo int float Ejemplo


e = c+d %h = f * g

Descripcion e es definido como un entero, ya que no tiene ningn signo antes del identificador. h es definido como un numero decimal(punto flotante) notice9 es definido como una frase que puede tener hasta 64 caracteres, incluyendo dgitos y signos. place22 es definido como una locacin cartesiana material33 es definido como una locacin de precisin.

string $notice9 = stop cloc ploc


Here(_palce22) here(#material33)

string Cadena de caracteres


El tipo string es esencialmente una serie de caracteres con un numero fijo, que indica la cantidad de caracteres. El tipo string siempre debe tener un subndice, indicado entre corchetes [ ].

String [numero ]
Usualmente, el subndice contiene un nmero que especifica la longitud mxima del string que puede ser almacenado, tal como string[10] o string[64].
Sintaxis String[number] identifier

Donde string y los corchetes son requeridos, number es el nmero de caracteres del string, y Identifier es el nombre de la variable y sigue las mismas reglas para los identificadores.

string[ ]

En algunas circunstancias, el subndice puede estar vaco. string[ ] Esta declaracin string sin dimensin solo puede ser usado en las siguientes circunstancias. Un simple string siendo inicializado. Cunado string[ ] es usado, el compilador determina el tamao del string. En este ejemplo el compilador hace notice9 a un string[18].
String [ ] notice9 = End of work cycle. Son 18 caracteres.

Arrays Arreglos
Un arreglo es una coleccin de objetos de datos donde todos los datos son del mismo tipo y todos usan el mismo identificador pero cada uno tiene un nico subndice.
syntax base_type [ subscript_list ] identifier

Donde base_type es el tipo de dato de cada elemento en el arreglo, subscrip_list es un numero o nmeros separados por un coma dependiendo de cada dimensin y identifier es el nombre de la variable y sigue las mismas reglas de los identificadores. Un subndice debe de ser una expresin constante, tal como un simple entero. El compilador debe ser capaz de calcular el valor de cada expresin constante.

Tipos
Tu puedes tener un arreglo de cualquier tipo o un arreglo de arreglos.

Dimensiones
No hay lmites sobre la numeracin de dimensiones permitida, excepto por arreglos de tipo enseable. Numerando In RAPL-3, la numeracin inicia con 0. Declaracin
Int [4] a Int [10[ a Int [20] a Int [100] a

Nmeros de numerando elementos


4 10 20 100

a[0], a[1], a[2], a[3] a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9] a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9] a[10], a[11], a[12], a[13], a[14], a[15], a[16], a[17], a[18], a[19] a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9] hasta el a[90], a[91], a[92], a[93], a[94], a9[5], a[96], a[97], a[98], a[99]

Un arreglo Dimensional

Un arreglo de dos Dimensiones (Bi-dimensional)

Un arreglo Multi-dimensional

Declaraciones
No puedes declarar un arreglo implcitamente. Sin embargo, si usas una declaracin implcita en una declaracin con un arreglo, no te causara problemas, si el arreglo es previamente declarado y el carcter de la declaracin implcita se relaciona a la base del tipo de dato del arreglo. Por ejemplo:
Ploc [ 16, 16 ] a here ( # a [1, 1] )

Ejemplos:
main teachable int [ 5 ] num int subndice for subndice = 0 to 4 printf( \n num[ { } ] = { }, subndice, num[ subndice]) end for end main

Si al arreglo le metiramos los valores de 3, -12, 10, 32 y -1 nos lo mostrara de la siguiente manera: num [0] = 3 num [1] = -12 num [2] = 10 num [3] = 32 num [4] = -1

Ejemplo con un arreglo bi-dimensional


main teachable int [5,2] num int ndice, subndice for ndice = 0 to 4 ;; indicador de renglon for subndice = 0 to 1 ;; indicador de columna printf(\n num[{ },{ }] = { }, ndice, subndice, num[ndice, subndice]) end for end for end main

Al correr el programa me va a ir mostrado el orden de la siguiente manera: los valores se mostraran despus de que se los hallamos ingresado por el teclado, aqu solo se muestra el orden. mum [0,0] num [0,1] num [1,0] num [1,1] num [2,0] num [2,1] num [3,0] num [3,1] num [4,0] num [4,1]

Teachables Enseables
Una variable que es enseable es accesible desde fuera del programa.

Uso
Teachable proporciona una manera fcil para modificar un valor de una variable desde fuera del programa, almacena el valor y usa el valor en un programa. Usando esta caracterstica evita escribir valores en el programa y tener que re-escribir esos valores cuando se requiera un cambio en el programa. Tambien evita almacenar los valores en un costumbre de archivo de usuario designado y tener cuidado de editar el archivo a cambiar valores e incluye una rutina en el programa que lee el dato del archivo. Acerca de los datos enseables y sus valores son almacenados en el archivo de la variable. Cuando t corres un programa, la operacin del sistema toma las variables del programa y usa esos valores de las variables justo antes de que empiece a correr.

Variable archivo (v3)


Acerca de las variables enseables y sus valores que son almacenados en el archivo de la variable (tambin conocido como archivo v3). T modificas el dato o enseas la locacin a otras variables usando el teach pendant o la aplicacin Shell.

Declaraciones
T haces una variable enseable escribiendo la palabra clave teachable antes de la declaracin del tipo de dato.
Sintax teachable type identifier teachable type identifier, identifier, identifier..

donde

teachable es la palabra clave necesaria type es el tipo de dato y identifier es el nombre de la variable y sigue las mismas reglas de los identificadores.

Ejemplos

Limitaciones
Hay lmites sobre el cual los tipos de datos son enseables. Un arreglo de variables dimensional puede ser enseable. Dos arreglos dimensionales (bi-dimensional) puede ser enseable, excepto string[ n ]. Un arreglo tri-dimensional o ms dimensiones no pueden ser enseables. El tipo void no puede ser enseable.

Una variable no puede ser en ambas enseable e inicializada. Tu no puedes escribir. Teachable int a = 5

CAPITULO 5

Control de Flujo
Cuando un programa es ejecutado, generalmente la computadora ejecuta una lnea, luego la siguiente lnea, luego la siguiente lnea. Para que un programa haga en orden las cosas tiles, por ejemplo, para repetir una tarea particular 10 veces debemos poder alterar la manera en que el control del programa pasa de lnea en lnea.

goto
Brinca a una declaracion marcada con una etiqueta. Una etiqueta es nombrada con un identificador, y sigue las mismas reglas de los identificadores, la etiqueta puede ser antes o despus de la instruccin goto. Un goto puede brincar solo una declaracin dentro de un programa main o dentro de un subprograma (sub, func command). Un goto ni puede brincar entre el programa principal y un subprograma, ni entre subprogramas.
Caution

La instruccin goto debe de ser usado con precaucin. El sobreuso de esta instruccin puede ser extremadamente difcil de leer y determinar los errores. Es bueno usar un loop con break o continue, casi siempre puede eliminar la necesidad de usar un goto. La etiqueta es seguida por doble dos punto ( :: ). La declaracin puede estar en la misma lnea o en la siguiente lnea.
Identifier:: statement goto identifier identifier:: statement goto identifier

Sintaxis

Ejemplo

main teachable cloc punto_a, punto_b, punto_4 ;; movimientos indefinidos AA:: move (punto_a) move (punto_b) move (punto_4) printf( accin infinita) goto AA end main

Al correr el programa primero se va a ejecutar la locacin cartesiana nombrada como puno_a, en seguida sigue punto_b y luego el tercer movimiento nombrado como punto_4 y despus de que realizar esos tres movimientos imprime en pantalla la leyenda accin infinita. Al llegar a la instruccin goto hace regresar la secuencia hasta donde se encuentra la etiqueta AA y vuelve a iniciar, ejecutando los tres movimientos nuevamente, y eso lo realiza indefinidamente.

If
Descripcin

Una estructura condicional en el cual las declaraciones solo sern ejecutadas si la condicin especifica es verdadera. Con opcion de usar else o else if que pueden ramificar las condiciones. Inicia con if y termina con end if. Tu puedes usar if con else para ejecutar un set de declaraciones si la condicin es verdadera, y ejecutar un set diferente de declaraciones si la condicin es falsa. Esta construccin es de dos ramas. La palabra clave else if permite una declaracin if a evaluar varias posibilidades de condiciones, creando un ramificacin de condiciones. La declaracin if puede ser arbitrariamente anidada.

Sintaxis

(a) una simple declaracin if:


if expression condition .. instruction . end if

Ejemplo

if ( curr_locnum <= num_locs ) move (#safe_path) end if

Si la condicin es verdadera (curr_locnum es menor o igual que num_locs), la declaracin move se ejecutara. Si la condicin es falsa, el programa proceder a fluir a la lnea siguiente despus de end if.

Sintaxis

(b) if con una clausula else


If expression .. instructions .. else . Instruction end if

Ejemplo

if ( curr_locnum <= num_locs ) move (#safe_path) else curr_locnum = curr_locnum -1 end if

Si la condicin es verdadera (curr_locnum es menor o igual a num_locs),la declaracin move se ejecutara. Si la condicin es falsa, la declaracin seguir despus de else y ejecutara (curr_locnum menos 1).

Sintaxis

( c ) construccin if - elseif
If expression 1 .. instruction else if expression 2 instrucion else if expresin 3 instruction .. end if

Ejemplo

if (curr_locnum == 10 move (B) else if curr_locnum <=10 move (A) else if curr_locnum >=11 move (C) end if

Si la condicin es verdadera (curr_locnum es igual a diez), la declaracin move (B) se ejecutara, si la condicin es falsa, salta a la siguiente comparacin (si curr_locnum es menor o igual a diez), si la condicin es verdadera, la declaracin move(A) se ejecutara y si la condicin es falsa, salta a la siguiente comparacin (curr_locnum es mayor o igual a 11), si la condicin es verdadera la declaracin move(C) se ejecutara, si no, el flujo procede a la siguiente lnea despus de end if.

Ejemplo

Este es un ejemplo de una declaracin anidada.


If A1 > B2 if A1 > C2 printf(\n A1 es mayor que B1 y C2) end if end if if B1 > A1 if B1 > C2 printf(\n B1 es mayor que A1 y C2) end if end if if C2 > A1 if C2 > B1 printf(\n C2 en mayor que A1 y B1) end if end if

loop
Descripcin

Una estructura sin condicin. Inicia con loop y termina con end loop. Puesto que no hay control de expresin, el loop repite todas sus instrucciones por siempre. Para poder controlarlo se usa un break, continue o si es necesario un goto, estas tres declaraciones provocan que el proceso salga del flujo dentro del loop. Las declaraciones loop pueden ser anidadas.
loop Statement(s) end loop

Sintaxis

Ejemplo

En este ejemplo, el programa conseguir un nmero para identificar una locacin. El programa contina indefinidamente hasta que el usuario escribe un nmero valido.
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] loop printf( Enter location number >) readline ( $str, 10) if str_to_int (num, $str) < 0 printf( invalid number \n) continue end if if ((num < 0) or (num > 20)) printf ( number is out of range \n) continue end if break end loop

En la lnea 2 se le pregunta al usuario el nmero que desea colocar para identificar la locacin. De las lneas 3 a 7 se lee una cadena de caracteres y se intenta convertir el string a un entero. Si esto falla se muestra un mensaje de error y continua regresando a la primer declaracin despus de loop para volver a iniciar. Lneas 8 a 11 verifica que el nmero este dentro del rango, si esto no es as muestra otro mensaje de error y nuevamente regresa a la primer declaracin despus de loop. Por ltimo, lnea 12, solo se llega a esta instruccin si el nmero que ingresemos es vlido y si esta dentro del rango, esta instruccin hace que el lazo termine y salta a la siguiente instruccin despus de end loop.

break

Descripcin

Esta instruccin provoca finalizar inmediatamente el lazo de una estructura. Una vez que se llega a la instruccin break salta a la siguiente instruccin despus de until, end while, end for end loop. Puede ser usado para salir de los siguientes lazos de estructuras: do, while, for loop. A menudo es usado con una condicin para controlar a break tal como la declaracin if o else if. Si tenemos una estructura anidada ya sea con do, while, for loop y declaramos a break en un lazo interno, solo va a terminar ese lazo interno no toda la estructura.

Sintaxis

loop if (expression) break end if end loop

Ejemplo

Un lazo loop que cuenta hasta 10.


int i i=0 loop if i == 10 break end if i=i+1 end loop

EL lazo de loop terminara cuando i sea igual a 10.

continue
Omite el resto del cuerpo de un lazo y va a la siguiente iteracin del lazo: puede ser la condicin de do o while, el paso de incremento de for, o la inicializacin de la siguiente iteracin de loop. Puede ser usado para omitir el resto del cuerpo de las siguientes estructuras: do, while, for o loop. A menudo es usado con una condicin tal como la declaracin if o else if. Si tenemos una estructura anidada ya sea con do, while, for loop y declaramos un continue en un lazo interno, solo va a omitir el resto del cuerpo de ese lazo interno no el resto de toda la estructura.
Sintaxis

loop .. if (expression) continue end if .. end loop

Ejemplo

Este programa cuenta del 30 al 50 de 2 en 2 mostrando el conteo en pantalla a excepcin del nmero 32 y 48.
number = 30 loop if number == 32 or number == 48 continue end if printf(\n number is { }, number) number = number+2 if number == 50 break end if end loop

do
Descripcin

Una estructura que prueba una condicin al final del lazo. Inicia con do y termina con until. El flujo entra al lazo y las declaraciones son ejecutadas hasta llegar a until. El control de expresin que es una condicin es probada. Si la expresin de until es verdadera, el flujo regresa a la primera declaracin despus de do para iniciar nuevamente. Si la expresin de es falsa, el flujo procede a la declaracin siguiente despus de until. Puesto que el controlador de expresin se ejecuta despus del cuerpo del lazo, el cuerpo del lazo es ejecutado por lo menos una vez, aun cuando la primer prueba de control de expresin es falsa. Un break puede ser usado para salir del lazo de do y procede a la lnea siguiente despus de until. Un continue puede ser usado para omitir el resto del cuerpo de un lazo do. Un goto puede ser usado para brincar a otra posicin en el programa. La declaracin do puede ser anidada.

Sintaxis

do statement(s) until expression

Ejemplo

Un simple lazo do.


i=0 do move (safe_path) i = I +1 until i > 4

La declaracin move se ejecutara 5 veces, teniendo los valores de i como 0, 1, 2, 3 y 4. El lazo termina cuando i tenga el valor de 5.

while
Descripcin

Una estructura que prueba una condicin al inicio del lazo. Inicia con while y termina con end while. El control de expresin o sea una condicin es probada. Si el control de expresin es verdadero, el flujo entra al lazo y ejecuta las declaraciones. Una vez que ejecuta todas las declaraciones del lazo regresa al control de expresin para hacer la siguiente prueba. Si la expresin es falsa, el flujo procede a la declaracin siguiente despus de end while. Si la prueba inicial es falsa, el flujo nunca entrara al cuerpo del lazo y las declaraciones nunca sern ejecutadas. Un break puede ser usado para salir del lazo while y procede a la siguiente lnea despus de end while. Un continue puede ser usado para omitir el resto del cuerpo de un lazo while. Un goto puede ser usado para saltar a otra posicin en el programa. La declaracin while puede ser arbitrariamente anidada.

Sintaxis

while (expression) statement(s) end while

Ejemplo

una simple declaracin while.

i=0 while < 5 move (safe_path) i=i+1 end while

La declaracin move se ejecutara 5 veces, teniendo los valores de i como 0, 1, 2, 3 y 4. El lazo terminara cuando i tenga el valor de 5.

for
Descripcin

Una estructura que ejecuta un lazo por un nmero definido de veces. La estructura for controla el nmero de veces que el lazo va a ejecutar usando un numero entero constante o variable como valor inicial a un valor final, y el nmero de pasos de incremento del nmero inicial al nmero final. Definir el paso es opcional. Si el step no es especificado, es asumido como incremento de +1. Step puede ser negativo para un decremento de un contador. En cualquier evento el paso especificado debe ser una expresin constante. For interacta en la siguiente manera. El contador variable es inicializado con el valor de expresin_1. Entonces el contador hace la comparacin de que si el paso es mayor que(expresin_3 es positivo) o menor que (si el paso (expresin_3)es negativo). Si es as la ejecucin procede a la primera declaracin despus del final del lazo (despus de end for). Y si la expresin_3 es positiva (mayor que expression 1) las declaraciones en el cuerpo del lazo son ejecutadas. El control regresa al inicio y el contador hace un incremento y vuelve a hacer la prueba, hasta que el contador se iguala al valor final, se realiza una iteracin ms y el lazo termina. Una implicacin de la manera en el cual el lazo for es implementado es que es posible que el lazo del cuerpo nunca sea ejecutado. Consideremos el siguiente lazo for.
For x = 1 to 0 printf(This is never printed) end for

El lazo no hace nada, desde que la prueba x > 0 es inicialmente verdadero, causando que el lazo del cuerpo nunca sea ejecutado.
Sintaxis

for variable=expression_1 to expression_2 [step expression statement(s) end for

Ejemplo

Con un incremento de 1
for x = 1 to 10 move(safe) end for

Step no es especificado, es asumido a ser +1. La funcin move es ejecutada 10 veces, con x = 1, 2, 3.10.

Con un decremento de 1.
for x = 10 to 1 step -1 move(safe) end for

Step es definido como -1. La funcin move es ejecutado 10 veces, con x = 10, 9, 8.1

Con un incremento de 3
for x = 1 to 11 step 3 move(safe) end for

Step es definido como +3. La funcin move es ejecutado 4 veces, con x = 1, 4, 7 y 10. Note que incluso aunque el lmite de la expresin_2 es 11, este valor nunca es visto por el cuerpo del lazo, puesto que el siguiente valor despus de 10 es 13, este es un factor ms all del lmite.

main teachable cloc AA, B4 int vel for vel = 30 to 100 step 10 speed(vel) move(AA) move(B4) ready() end for printf( \n done) end main

Step es definido como +10. Las locaciones cartesianas AA y B4 se van a ejecutar 8 veces con vel = 30, 40, 50 100. La velocidad de los movimientos se van a realizar de acuerdo al valor que tenga vel. O sea que en la primera iteracin AA y B4 se van a mover a una velocidad del 30 %, en la segunda iteracin se van a mover al 40% y as sucesivamente, hasta que se llega al lmite de la expresin_2, y el lazo termina.

CAPITULO 6

Subrutinas, funciones y comandos


RAPL-3 tiene tres distintos gneros de objetos ejecutables: subrutinas (subs), funciones (funcs), y comandos (commands). Colectivamente, subs, funcs y commands son referidos como subprogramas. main es el caso especial de un subprograma.

Subprogramas
Una manera de entender el concepto de subprogramas es viendo un breve ejemplo:
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] sub sayhello() int x x=0 printf(Hello! \ n) end sub sub say_n_plus_1(int n) printf(n + 1 = { } \n, n + 1) end sub func int a_plus_b(int a, int b) return a + b end func main int x, y x = 10 sayhellou() say_n_plus_1(x) y = a_plus_b(1, x) printf( x + 1 = { } \n, y) end main

Este ejemplo define dos subs, uno llamado sayhello() y el otro say_n_plus_1() y una func llamado a_plus_b(). La ejecucin del programa inicia en main. En la linea 16 se declaran dos variables que pertenecen solo a main que son x y y (variables globales), en la linea 17 x es declarado que tiene un valor de 10. Cuando la linea 18 es alcanzado, la subrutina sayhello() es ejecutado. sayhello() tiene su propia variable local x, lo cua es declarado con un valor de 0 en la linea 3. Entonces sayhello() se ejecuta en linea 4 en el cual imprime un mensaje fuera de la console. Cuando el final de sayhello() es alcanzado, el control regresa a main, en la linea 19. El hecho de que sayhello() tiene declarado a la variable x = 0 no cambia el valor de la variable x en main. Cualquier variable declarada dentro de un subprograma es local a ese subprograma y no puede ser cambiado. Esas variables declaradas fuera de cualquier subprograma son accesibles a todos los subprogramas y son llamados programas de alcance de variables o simplemente programa. Este concepto de local y programa son parte de las variables de alcance. Despues de que sayhello() es ejecutado (llamado por main), main llama a la subrutina say_n_plus_1(). Una diferencia entre sayhello() y say_plus_1() al llamarlos main. Es que say_plus_1() tiene una expresion declarada entre parentesis (x). Este es un argumento o parametro actual de say_plus_1(). El valor de x es dado o pasado a el subprograma. El subprograma say_plus_1() es ejecutado con la variable inicial n = 10, despues de que el valor fue pasado por main. n es una varaible local especial de say_plus_1() llamado parametro formal. Los parametros formales consigues valores inicales que son dados por el llamador del subprograma , en este caso, main. En linea 8, say_plus_1() ahora imprime el valor de n + 1, el cual es 11 en este caso. El control regresa a main en la linea 20. En linea 20, main declara que y es igual a a_plus_b(1,x). Este es un ejemplo de un subprograma llamado funcin; la funcin a_plus_b() es llamado con dos argumentos (1 y x (x=10)). En linea 12 hay una sola linea de a_plus_b(), y es una declaracion return. Para una funcin, la declaracion return indica que un valor (en este caso a + b 11 ) sera regresado al subprograma llamador, que es main. El efecto en este ejemplo es que y obtiene el valor que a_plus_b() regresa, en este caso es 11. Este resultado es impreso en linea 21 y el programa termina.

Generos de subprogramas
Subs
Una sub (subrutina) es un simple genero de subprograma de RAPL-3. Un sub puede tomar cualquier numero de argumentos (o ninguno), pero no regresa ningun valor al subprograma llamador. Como un resultado, una sub no puede aparecer dentro de una expresin. sintaxis de declaracin
sub sub_identifier ( parameter_list ) [ condiciones y declaraciones. ] end sub

llamando a la sintaxis
sub_identifier(actual_parameter_list)

Note que la lista actual de parametros, debe de estar relacionado a la lista de parametros declarados en la sub. Eso es que deben ser el mismo numero de parametros y el mismo tipo de dato, para que sea compatible.

funcs
Una func es similar a una sub, en que los dos pueden aceptar cuaquie numero de argumentos. Sin embargo un func regresa un valor al subprograma llamador. En RAPL-3 , func puede regresar cualquier int, float cloc, ploc o un valor de tipo puntero (una func no puede regresar un string, pero puede regresar un puntero a un string). Por ejemplo a = sen(x) + cos(y), al llamara a sen(), la funcion calcula el valor de seno de la variable x, a llamar a cos(), la funcion calcula el seno de la variable y, suma los dos y los almacena en la variable a. Declaracin de sintaxis
func type func_identifier (paramer_list) [ condiciones y declaraciones. ] return value end func

Note que al ultimo debe de estar una declaracion return que regresa el valor a alguna parte del cuerpo del progrma principal. Las funciones solo pueden regresar int, float, locaciones o tipo puntero.

Llamando a la sintaxis Hay dos formas de llamar a una funcion. Como parte de una expresion:
..func_identifier (actual_parameter_list).

O por si mismo como una declaracion:


func_identifier (actual_parameter_list)

En la ltima forma, el compilador advertira que el valor regresado de la funcin esta siendo ignorado ( a menos que la advertencia este desabilitado). Una ves mas, los paramentro de la lista actual deben de estar relacionados con los paramentro declarados en func.

CAPITULO 9

Subprogramas
appro
Descripcin

Mueve el punto central de la herramienta a una posicin aproximada. La posicin aproximada es definida por una locacin, y una distancia de esa locacin, esa distancia va a ser la longitud a la que va a quedar de esa locacin. Los movimientos son en modo de articulacin interpolada, el punto central de la herramienta se mueve a travs de espacios curvos como resultado de los cambios de la articulacin. El movimiento no es una lnea recta. Usualmente puedes mover el brazo rpidamente a la posicin antes de mover la herramienta, y usualmente despacio hacia la locacin.

Sintaxis Parmetros

appro (cloc location, float distance)

location distance

es locacin que se desea mover: un cloc o ploc es distancia de la locacin a la posicin aproximada: puede ser un numero flotante.
;;pulgadas

Ejemplo

appro ( rack_5, 100.0 ) ;; milmetros appro ( tray_1, 4.0 )

appros
Descripcin

Mueve el punto central de la herramienta a una posicin aproximada. La posicin aproximada es definida por una locacin, y una distancia de esa locacin, esa distancia va a ser la longitud a la que va a quedar de esa locacin. Los movimientos son en modo cartesiano interpolado (movimiento de lnea recta). El movimiento no es una articulacin interpolada (el punto central de la herramienta se mueve a travs de espacios curvos como resultado de los cambios de la articulacin) Usualmente puedes mover el brazo rpidamente a la posicin antes de mover la herramienta, y usualmente despacio hacia la locacin.

Sintaxis Parmetros

appros ( cloc location, float distance )

location distance

es la locacin que se va a mover: puede ser un cloc o un ploc. es la distancia de la locacin a la posicin aproximada. Puede ser un nmero flotante.

Ejemplo

appros ( rack_5, 100.0 ) appros ( tray_1, 4.0 )

depart
Descripcin

Mueve el punto central de la herramienta de la posicin actual, a lo largo del eje de la herramienta. La posicin depart es definida por una distancian a partir de la posicin actual, que se va a mover a lo largo del eje de la herramienta. Distancias positivas es alejamiento de la locacin, distancias negativas es acercamiento de la locacin. La posicin inicial puede ser cualquier posicin. No tiene que ser una locacin. Este comando es usado para mover la herramienta, usualmente despacio, cuando son distancias cortas cerca de la herramienta y usualmente rpido, a una distancia ms larga lejos de la posicin. Los movimientos son en modo de articulacin interpolada. EL resultado no es una lnea recta.

Sintaxis Parmetros

depart (float distance)

s
Ejemplo

distance es la distancia que se va amover a partir de la posicin actual. Puede ser una nmero flotante
depart(2.0) depart(6.0) speed-set(100) appro(pick_1, 2.0) speed_set(20) move(pick_1) finish() grip_close() grip_finish() depart(2.0) speed(100) appro(place_1)

departs
descripcin

Mueve el punto central de la herramienta de la posicin actual, a lo largo del eje de la herramienta. La posicin departs es definida por una distancian a partir de la posicin actual, que se va a mover a lo largo del eje de la herramienta. Distancias positivas es alejamiento de la locacin, distancias negativas es acercamiento de la locacin. La posicin inicial puede ser cualquier posicin. No tiene que ser una locacin. Este comando es usado para mover la herramienta, usualmente despacio, cuando son distancias cortas cerca de la herramienta y usualmente rpido, a una distancia ms larga lejos de la posicin. Los movimientos son en modo cartesiano interpolado. El resultado es un movimiento de line recta.

Sintaxis Parmetros

departs (float distance)

s
Ejemplo

distance es la distancia que se va amover a partir de la posicin actual. Puede ser una nmero flotante
departs(2.0) departs(6.0) speed-set(100) appros(pick_1, 2.0) speed_set(20) move(pick_1) finish() grip_close() grip_finish() departs(2.0) speed(100) appros(place_1)

finish
Forza el programa a esperar hasta que el movimiento del brazo haya finalizado. Normalmente un comando es ejecutado en cuanto sus parmetros sean determinados, que puede ser el comando finalizado anterior. finish() es a menudo usado para finalizar el movimiento del brazo de una locacin antes de cerrar el gripper, en lugar de tener el gripper cerrado mientras el brazo todava est en movimiento. finish() tambin es usado para sincronizar comandos, tales como input/output, con movimientos del robot.

Sintaxis Ejemplo

finish() appro(pick_1, 2.0) move(pick1) finish( ) grip_close( )

Sin finish() el comando grip_close() se estar ejecutando antes de que move(pick_1) haya finalizado.

FALTA..

Conceptos del primer parcial


Robot
Maquina programable de uso general con ciertas caractersticas antropomrficas (similar a un ser humano), las caractersticas ms comunes es que es un brazo capaz de desarrollar distintas tareas.

Tres leyes de Asimov


1.- Un robot no puede lastimar a un ser humano por accin o inaccin. 2.- Un robot debe obedecer las rdenes de un humano, excepto si esta en conflicto con la primera ley. 3.- Un robot debe protegerse as mismo mientras esta proteccin no est en conflicto con la primera ni segunda ley.

La federacin internacin de robtica (IFR (International Federation of Robotics)) clasifica a los robots en: 1.- Secuencial 2.- Tele-manipulado 3.- Trayectoria controlable 4.- Adaptable

Configuraciones morfolgicas y parmetros caractersticos de los robots industriales


Segn la geometra de su estructura mecnica, un manipulador puede ser:

Cartesiano, cuyo posicionamiento en el espacio se lleva a cabo mediante articulaciones lineales. Cilndrico, con una articulacin rotacional sobre una base y articulaciones lineales para el movimiento en altura y en radio. Polar, que cuenta con dos articulaciones rotacionales y una lineal. Esfrico (o de brazo articulado), con tres articulaciones rotacionales. Mixto, que posee varios tipos de articulaciones, combinaciones de las anteriores. Es destacable la configuracin SCARA (Selective Compliance Assembly Robot Arm)

Configuracin geomtrica cartesianos

Estructura cinemtica

Espacio de trabajo

Ejemplo

S e d e n o

cilndrico

Robot
M a n i p u l a d o r m u l t i f u n c i o SCARA n a l

polar

esfrico

Automata
Maquina con movimientos similares a un ser humano.

Articulacin
Cada eje que me describe un movimiento

Espacio de trabajo
Son todos los movimientos que el robot hace en cada articulacin.

Posicin Home
Posicin en donde todos los ejes estn en el inicio, cada eje se posiciona en un punto de referencia conocido.

Grado de libertad
Son todos los movimientos independientes del robot que especifican la orientacin del sistema.