Connecting to a Universal Robot for read and write

Hi I am very new to Ignition and I am trying to set up communication between a Universal Robots UR5e and Ignition, Ignition would be used to create the user interface, before this I need to be able to pass data between the cobot and Ignition.

I reached out to UR and they suggested using Modbus, is this the best way?

I guess I need to setup registers on the cobot which ignition can read and write to, is this the way to go?

Have someone done this before, please advice

I've done this, there are pre-defined registers on the cobot controller.

Best to make the cobot controller the Modbus Server.


This is the communication system I am trying to implement. Steps 4, 7, 12 are variables from Ignition to cobot and (1) can Ignition load and start a program using modbus?

image
The connection from Ignition has been successful

Since I am using the robot as server and the (2) connection is successful, there is no setup required on the cobot end, like "Modbus Client IO setup" on the cobot under Installations>Fieldbus>Modbus?

Matrix_Engineering Thanks for the docx with adresses; (3)so if I need to pass variables like diameter (float), should I use "General purpose 16 bit registers" 128 - 255 and does that mean I can pass atmost 128 variables (255 - 128)?

(4)And how should I configure the address in Ignition to read 128 and the Modbus Type is it "Holding register(UInt16)":

Tried:
(1)

There is a program setup on the cobot which has "write_output_integer_register(0, 300)" hoping this writes to general purpose register 128 (register 128 is referred as 0 in URscript)

and on Ignition tried reading/subscribing to the corresponding tag:

(2)
Also tried writing from ignition to register 128 and reading at cobot side using "temp = read_input_integer_register(0)"

Ignition gives out error while writing:

Both didnt work out.

So I am using the right register and can the register 128 be used to read and write?

Don't use the address mapping feature. Instead, create your own tags and manually enter the address.

For example, to get the e-stop status of the cobot controller:

ns=1;s=[ur3]1.HRI262

I used this coil to tell the cobot to run the program from the SCADA:

ns=1;s=[ur3]1.C16

I'm not sure about loading a user program, you'll have to dig more into the manual.

Additionally, in the driver settings under advancerd, you will want this:

Tried it:


Also enabled zero based addressing and made sure the device name is correct:

Should the data type be an integer?

No, you didn't. The OPC Item Path in your screenshot is missing the unit number before the dot.

Also it's a status, make it a boolean.

1 Like

Thanks guys, it worked.

@mnizamudeen You will not be able to load a specific program through Modbus. There are some ways around this using case a statement in the main robot program that looks at a modbus register and calls the apropriate program. But Ur robot has the dashboard server which takes simple tcp commands. Dashboard Server e-Series, port 29999 - 42728