Enviar datos desde un PLC siemens 1215C pro profinet a un robot UR3-e

Hola, muy buenas.
Ya puedo comunicar un plc 1215C de siemens con un robot UR3-e. Mi duda es que programa hay que hacer en polyscope, para que el plc pueda modificar las coordenadas x,y, z del robot y este se mueva a dichos espacios. Envío un enlace de Youtube de siemens donde se ve una cámara que envía estos valores a un robot UR. Esto es lo que necesito hacer.

Gracias.

Tu descripción es bastante amplia, tengo varias preguntas:

  • ¿Qué tipo de comunicación has establecido entre el robot y el PLC? ¿PROFINET? ¿El ejemplo de XML-RPC? ¿El ejemplo de socket?
  • ¿Qué tipo de coordenadas XYZ le quieres mandar al robot? ¿Respecto a qué sistema? ¿Vienen ya las coordenadas XYZ con la misma referencia de la base del robot?

Lo que hace el vídeo de Youtube se puede hacer de distintas formas

Hola, muy buenas. La comunicación es PROFINET.
Las coordenadas que me interesan son las X, Y, Z del plano de la BASE, ya que la cámara envía los valores sobre ese plano, y también el ángulo del giro, que tiene que ir al valor de la última muñeca (creo que es la muñeca Nº3).
Sobre el tipo de ejemplo quizás XML-RPC, pero no se decirte más ya que estoy aprendiendo a utilizar el robot y se me escapan muchas cosas aún.

Muchas gracias.

Bueno, no estoy muy metida en PROFINET, pero esto es lo que intentaría:

  • Hay unos registros genéricos definidos en el I/O, algunos son bytes, otros son integer y otros son float. Usaría algunos de los register float para mandarle al robot la posición XYZ y el ángulo.
   UR_FloatRegisters.Register[0] := x; 
   UR_FloatRegisters.Register[1] := y; 
   UR_FloatRegisters.Register[2] := z; 
   UR_FloatRegisters.Register[3] := rz;

Y luego el robot accede a estos registros:

global CAM_X = read_input_float_register(0)
global CAM_Y = read_input_float_register(1)
global CAM_Z = read_input_float_register(2)
global CAM_RZ = read_input_float_register(3)
  • Una vez tengas los valores XYZ y el ángulo, hacerlo un punto:
global CAM_POINT = p[CAM_X, CAM_Y, CAM_Z, 0, 0, CAM_RZ]
# recuerda que los valores XYZ tienen que estar en mm y el ángulo en radiantes

Sobre cómo hacer que el robot vaya a este punto:

Me parece que aquí te equivocas. En el vídeo que has enviado, la cámara detecta la posición en base a su propia posición y a su propio sistema de referencia (interno), y si lo vas a hacer igual, significa que el XYZ que vas a enviar al robot no es en base al robot.

En mi opinión, tendrías que definir un Feature, un punto que represente dónde está la cámara:

Y luego en el programa del robot, en los comandos MoveJ ó MoveL, indicar que estos movimientos son en referencia a la cámara:

Hola buenas tardes. He realizado más o menos el ejemplo que me has propuesto y el eje de la muñeca 3, (RZ) me va perfectamente; pero si doy valores a los ejes X e Y, me da error.
Envío un PDF y el programa del robot por si me puedes ayudar.
Un saludo y muchas gracias.

DUDA UR-Camara.pdf (563.8 KB)

robot_UR_y_camara.script (11.4 KB)
robot_UR_y_camara.urp (1.5 KB)

Hola, le he echado un vistazo en el simulador pero no veo nada.
Pero sí he revisado en la solución que te mandé, que tuve un error.

global CAM_POINT = p[CAM_X, CAM_Y, CAM_Z, 0, 0, CAM_RZ]
# recuerda que los valores XYZ tienen que estar en mm y el ángulo en radiantes

Esto está mal: las unidades tienen que ser en METROS, no en milímetros. O sea, que si la posición XYZ es 5, 7 y 9 milímetros respectivamente:

global CAM_POINT = p[0.005, 0.007, 0.009, 0, 0, CAM_RZ]

Es probable que te salga ese error porque XY será un punto a 20cm del sistema y el programa le está diciendo que está a 20m

Hola, buenas tardes. He probado de poner los valores en mm y el movimiento en MOVE L y funciona bien.
Si lo dejo en MOVE J, me sale un error.
Muchas gracias por la ayuda, ahora ya se puede controlar el robot desde la cámara y un PLC.

Un saludo muy cordial.

El problema con MoveJ es que debajo de la interfaz, si miras el script que se genera y lo comparas con lo que viene en el manual de URScript, el comando tiene un parámetro opcional qnear (una combinación de las articulaciones similar a la configuración que quieres). Si usas este comando desde la interfaz, este parámetro no se usa.

Cuando programo un UR en URscript directamente, siempre uso este parámetro y no me suele dar problemas. A lo mejor si mueves el robot a un punto cercano fijo (como aproximándose al plano de la cámara), y luego al punto que quieres ir, no te daría error. Pero no estoy muy segura de que funcione.

Pero mira, si te funciona, te funciona, protege ese programa con tu vida y mucha suerte :rofl: