Interfaces de Comunicación
Guía de referencia
Interfaces de Comunicación – Guía de
referencia Guide
Contenido
Programación: Función imprimir................................................................................................................2
Programación: Variables...............................................................................................................................3
Programación: Entrada..................................................................................................................................4
Programación: Bucle.......................................................................................................................................5
Programación: Sentencias If-else...............................................................................................................6
Programación: Funciones..............................................................................................................................7
Script UR: Código script - Línea.............................................................................................. Símbolo:
8
Script UR: Código script - Archivo..............................................................................................................9
Script UR: Utilizar funciones.......................................................................................................................10
Script UR: Indexar..........................................................................................................................................11
Comunicación de socket: Números de puerto UR..............................................................................12
Comunicación de socket: socket_open( )..............................................................................................13
Comunicación de socket: socket_send_xxxx( )...................................................................................14
Comunicación de socket: socket_read_xxxx( )...................................................................................15
Interfaces de cliente: Abrir y cerrar sockets........................................................................................16
Interfaces de cliente: Enviar script UR...................................................................................................17
RTDE: Modificar el programa Python......................................................................................................18
RTDE: Modificar el .urp................................................................................................................................19
XML/RPC: Configurar conexión..................................................................................................................20
XML/RPC: Crear/registrar funciones........................................................................................................21
1
Interfaces de Comunicación – Guía de
referencia Guide
Programación: Función imprimir
Objetivo Mostrar o generar un valor
Definición Imprimir devolverá/mostrará el resultado de su función
Ejemplos print (“¡Universal Robots!”)
correctos
>>> ¡Universal Robots!
Ejemplos print (“hola”)
incorrectos
>>>Syntaxis Error
*El texto debe estar entre comillas dobles
2
Interfaces de Comunicación – Guía de
referencia Guide
Programación: Variables
Objetivo Almacenar datos para su uso en el programa
Definición Una variable es una unidad de almacenamiento que puede almacenar diferentes tipos
de datos en su interior. Estos datos se pueden utilizar, entre otras opciones, para
determinar el comportamiento del programa y crear un contador.
Tipo Ejemplo
Ejemplo Entera (int) X=5
Booleana (bool) X = True
Coma flotante X = 0,5
Cadena X = “Cobots”
Lista X = [n1, n2, n3, n4]
3
Interfaces de Comunicación – Guía de
referencia Guide
Programación: Entrada
Objetivo Permitir a la persona que ejecuta el programa introducir un valor en una variable.
Normalmente es una entrada de teclado, aunque también puede venir de una base de
datos, otro ordenador, clics del ratón (como por ejemplo un botón) o movimientos.
Ejemplos Name = input(“¿Cómo se llama?”) Age= input(“¿Qué edad tiene?”)
>>> Bob >>> 25
*con este ejemplo se introduciría Bob *con este ejemplo se introduciría 25
dentro de Name dentro de Age
4
Interfaces de Comunicación – Guía de
referencia Guide
Programación: Bucle
Objetivo Un bucle se utiliza para repetir un segmento de código dentro de un programa. Se
puede utilizar de forma indefinida o hasta que se produzca una condición.
Bucle Sintaxis Ejemplo
infinito while(True): x=0
segmento de código while(True):
end x = x +1
print(x)
end
*el resultado imprimirá 1 hasta infinito a
menos que se detenga el programa
Bucle Sintaxis Ejemplo
condicional while(expresión condicional): x=0
segmento de código while(x < 50):
end x = x +1
print(x)
end
*el resultado imprimirá de 1 a 50 y
luego el programa se detiene
5
Interfaces de Comunicación – Guía de
referencia Guide
Programación: Sentencias If-else
Objetivo Las sentencias if-else se utilizan para dar a los programas una lógica de
comportamiento. Esto les permite realizar una multitud de tareas en función de las
condiciones escritas por el programador.
Definición Una instrucción que compara dos o más conjuntos de datos y realiza operaciones
basadas en los resultados.
Ejemplo
Ejemplo x=0 x=5
while(x < 10): if x == 4:
if x<= 6: print(“sí”)
print(“x”) else:
x += 1 print(“no”)
else:
print(“y”)
x += 1
Resultado x no
x
x
x
x
x
x
y
y
y
>>>
6
Interfaces de Comunicación – Guía de
referencia Guide
Programación: Funciones
Objetivo Las funciones permiten a los programadores crear segmentos de código personalizados
que se pueden usar en todo un programa o en múltiples programas.
Definición Un bloque de código organizado y reutilizable que normalmente se usa para realizar
una acción y devolver un resultado.
Ejemplo Configuración def sqr(x): def doesNotMatter(x, y):
return x*x return x+y
*el nombre de la función
no importa siempre y
cuando se use
adecuadamente
Resultado >>> sqr(4) >>> doesNotMatter(4,
16 10)
14
>>> sqr(10)
100 >>> doesNotMatter(18,
200)
218
7
Interfaces de Comunicación – Guía de
referencia Guide
Script UR: Código script - Línea Símbolo:
Objetivo Dentro de la interfaz de Polyscope, el comando de código script se puede utilizar para
teclear y usar un script UR dentro de un .urp (programa UR). La porción de línea se
puede utilizar para implementar una única línea de código.
Cómo El código script – Línea permite al programador implementar una línea de script UR.
funciona Esta línea única puede ser cualquier tipo de script que el robot sea capaz de entender
(cualquier cosa del manual de script).
Ejemplo MoveL con Pose_add()
Sync()
8
Interfaces de Comunicación – Guía de
referencia Guide
Script UR: Código script - Archivo
Objeti Igual que en su versión Línea, el Código script – Archivo puede utilizarse para implementar
vo una sección de código o un programa entero. También se puede utilizar para ver
archivos .script que se crean al reproducir programas UR.
Cómo Código script – Archivo puede utilizarse de varias maneras (ver más abajo los ejemplos):
se 1. El código puede escribirse en el archivo y luego reutilizarse mediante copiar y pegar.
puede 2. Las funciones pueden crearse utilizando el comando Código script – Archivo.
3. Se pueden escribir y ejecutar programas enteros utilizando Código script – Archivo.
utiliza
r
Ejempl 1
o
9
Interfaces de Comunicación – Guía de
referencia Guide
3
UR Script: Utilizar funciones
Objetiv Las funciones se pueden escribir en UR Script (igual que en Python). Luego las funciones
o pueden utilizarse en todo el .urp con cualquier comando que emplee el editor de expresiones.
10
Interfaces de Comunicación – Guía de
referencia Guide
Ejempl
o
Ejemplo de una función Pose Add en UR script
Ejemplo de una función Add simple en UR script
11
Interfaces de Comunicación – Guía de
referencia Guide
Script UR: Indexar
Objeti En una lista (serie), indexar quiere decir seleccionar el valor dentro de una posición
vo determinada. En UR script (y en Python) el posicionamiento dentro de una lista comienza por
0, lo que significa que la primera posición es 0 y parte desde ahí.
Nota: También se puede utilizar con la variable pose en UR script.
Cómo Una lista es un conjunto de valores que se encuentran entre corchetes. La ubicación dentro de
funcio los corchetes (que empieza por 0) es la posición del índice. Seleccionando un índice
na determinado se puede obtener un valor de la lista para utilizarlo.
Ejempl
o
List
a
Pos
e
no.1
Pos
e
no.2
12
Interfaces de Comunicación – Guía de
referencia Guide
Comunicación por socket: Números de puertos UR
Objetivo Los números de puertos permiten establecer procesos o tipos de comunicación
específicos entre diferentes tipos de equipos o hardware.
Lista de Números Título Descripción
números de de
puertos UR Puerto
30001 Cliente Se utiliza para transmitir el estado del robot y mensajes
principal adicionales, así como para recibir comandos de UR
Script para que el robot los ejecute.
30002 Cliente Se utiliza para transmitir mensajes sobre el estado del
secundario robot, así como para recibir comandos de UR Script para
que el robot los ejecute.
30003 Cliente a Se utiliza para transmitir mensajes sobre el estado del
tiempo real robot, así como para recibir comandos de UR Script para
que el robot los ejecute.
30004 RTDE Diseñado como sustituto del Cliente a Tiempo Real, el
RTDE puede enviar y recibir distintos datos en tiempo
real.
29999 Servidor Puede enviar comandos simples al robot para que los
Dashboard implemente. Permite funcionalidades fáciles de usar
pero limitadas en sus habilidades (no pueden enviar
script)
502 Modbus Establece una conexión para usar el protocolo Modbus
entre el robot y un equipo exterior.
22 FTP (Protocolo de transferencia de archivos). Permite que se
establezca una conexión entre un ordenador y el robot
para transferir archivos en ambos sentidos.
13
Interfaces de Comunicación – Guía de
referencia Guide
Comunicación de socket: socket_open( )
Objetivo socket_open( ) permite al robot abrir un socket como cliente para establecer una
comunicación ethernet.
Ejemplo
Abre un socket en la dirección IP interna del robot.
Abre un socket en una dirección IP externa.
Nota: socket_open( ) devuelve true si está conectado, valor que puede almacenarse en
el valor de una variable para su uso.
14
Interfaces de Comunicación – Guía de
referencia Guide
Comunicación de socket: socket_send_xxxx( )
Objetivo socket_send_xxxx( ) puede enviar un valor al servidor a través del socket especificado, en
función del tipo de valor que se busca (el xxxx).
Tipos de Valores por los que se puede sustituir xxxx:
valores que - Byte (un entero con signo de 8 bits; valor de - 128 a 127)
se pueden - Int (un entero con signo de 32 bits; valor de - 2,147,483,648 a 2, 147, 483, 647)
- Line (envía una cadena con un carácter de nueva línea)
enviar - String (envía una cadena)
Ejemplo Ejemplo Resultado
15
Interfaces de Comunicación – Guía de
referencia Guide
Comunicación de socket: socket_read_xxxx( )
Objetivo socket_read_xxxx( ) es similar a la función socket_send, pero este lee el valor que se
envió al socket especificado en los parámetros.
Tipos de Valores por los que se puede sustituir xxxx:
valores que
se pueden - ascii_float (lee un número definido de comas flotantes con formato ascii (hasta
30) del socket y devuelve el resultado en forma de lista de valores)
leer - binary_integer (lee un número definido de enteros del socket y devuelve los
valores en una lista)
- byte_list (lee un número definido de bytes del socket y devuelve los valores en
una lista)
- line (lee la información del socket hasta que aparece /n (nueva línea) y
devuelve el valor en forma de cadena)
- string
Ejemplo
Ejemplo
16
Interfaces de Comunicación – Guía de
referencia Guide
Resultado
Interfaces de cliente: Abrir y cerrar sockets
Objetivo Abrir/cerrar comunicaciones a través de sockets desde un cliente (Python) dentro del
robot como servidor.
Cómo Utilizando una biblioteca de Python llamada “socket”, el programa Python es capaz de
funciona abrir y cerrar un socket a través de la dirección IP del robot y los comandos del socket.
Ejemplo Configuración:
Importar socket
HOST = “[Link]” #IP Address
PORT = 30001 #Cualquier puerto funcionaria
Abrir Cerrar
s = [Link](socket.AF_INET, [Link]( )
socket.SOCK_STREAM) #cierra el socket que se creó
#crea el socket INET (representa el 99 % de los
sockets)
#y configura el streaming
[Link]((HOST, PORT))
#se conecta al HOST (el robot en este caso) por
medio del PORT proporcionado
NOTA: Se pueden abrir múltiples sockets al mismo tiempo y se cierran individualmente.
Se basa en el nombre dado a la variable. El nombre del ejemplo anterior es “s”, pero se
puede definir de cualquier modo.
17
Interfaces de Comunicación – Guía de
referencia Guide
18
Interfaces de Comunicación – Guía de
referencia Guide
Interfaces de cliente: Enviar UR Script
Objetivo Enviar script UR a los puertos 30001 a 30003 permite al robot operar de forma remota.
Esto permite a los equipos externos enviar avisos, comandos de movimiento y
cualquier otro comando de script al robot.
Ejemplo Ejemplo [Link]((“set_digital_out(2, [Link]((“movel(pose_add(get_cur
True)” + “\n”).encode()) rent_
tcp_pose(), p[0,0,0.05,0,0,0]))” +
“\n”).encode())
Resultados Fija la salida digital 2 en True o Toma la posición actual del PCH,
Encender añade 50 mm en la dirección +Z
y luego mueve el robot hacia allí.
NOTA: se necesita .encode( ) para codificar la cadena en Python para que sea legible
e interpretable por el robot..
19
Interfaces de Comunicación – Guía de
referencia Guide
RTDE: Modificar el programa Python
Objetivo Modificar los ejemplos RTDE existentes en Python puede ayudar a la creación de
programas utilizables con código/resultados personalizados.
Ejemplo
Modificar los valores de setp 1 y el setp 2 debería cambiar los 2 puntos de paso por los
que el ejemplo de bucle de control se movería.
Modificar esta sentencia if para poder elegir entre múltiples setp en vez de solo 1 y 2
permitiría insertar puntos de paso adicionales.
20
Interfaces de Comunicación – Guía de
referencia Guide
RTDE: Modificar el .urp
Objetivo Modificar los ejemplos . urp permite personalizar los programas existentes/operativos.
Ejemplo
El MoveL se puede modificar para introducir comandos ServoJ, como se muestra a
continuación, y así conseguir un movimiento más fluido y unos tiempos de respuesta
más rápidos.
El programa de Robot también se puede modificar para que incluya comandos de
pinza, esperas, etc. antes de moverse al siguiente punto de paso.
21
Interfaces de Comunicación – Guía de
referencia Guide
XML/RPC: Configurar conexión
Objetivo Establecer una conexión con el servidor RPC conectado al robot.
Ejemplo En el robot:
c = rpc_factory("xmlrpc", "[Link]
-----------
rpc_factory() crea el seudónimo asociado con la url correspondiente
(segundo parámetro). La url debería ser la dirección IP del servidor.
En el programa Python:
importar SimpleXMLRPCServer
server = [Link](([Link]
8080))
------------
Lo anterior crea el servidor en el equipo externo a través de Python.
“Server” es el nombre que se le da a este nuevo servidor y permite
configurar la comunicación y crear nuevas funciones para su uso dentro
del servidor.
22
Interfaces de Comunicación – Guía de
referencia Guide
XML/RPC: Crear/registrar funciones.
Objetivo XML/RPC permite personalizar funciones en el lado del servidor, las cuales se pueden
llamar a través del cliente/robot. Estas funciones se tienen que registrar para su uso.
Ejemplo Configurar la conexión para el servidor XML/RPC
----------
def add(a, b):
return x+y
(nombre del servidor).register_function(add)
----------
En el ejemplo anterior, la función add se creó dentro del programa del servidor. El
siguiente paso es registrar la función utilizando el comando register_function(x), donde
la x es el nombre de la nueva función. Se debe llamar a esta función desde el programa
de robot para poder utilizarla (abajo).
En el robot:
----------
(nombre del servidor).add(2, 2)
----------
El resultado de lo anterior desde el servidor sería: 4.
Ejemplo 2 Crear una función para transmitir una variable simple y aleatoria al robot:
---------
Importar aleatoriamente
def returnRandom():
return [Link](1, 8)
(nombre del servidor).register_function(returnRandom)
----------
En el robot:
var_1 = (nombre del servidor).returnRandom()
----------
Lo anterior devolvería un número aleatorio al robot que luego podría utilizarse.
23