External I/O's in Wait command

Hello everyone,
Currently I’m working in URSim - UR10. I want to program the robot according to the external I/O’s, thus, robot to wait to external Input1 to run program1, wait to Input 2 to run program2, etc. Is there any way to program the robot this way? As, in the program tree, in wait command there are only internal inputs shown.
Thanks in advance.


I’d use a Switch command
Switch External_Input_1 or External_Input_2 etc
then in each case
Case 1
Call Prog_1
Case 2
Call Prog_2
It makes your program more readable
and easier to understand.

Thanks a lot. One more question please, are external I/O’s limited?

The physical IO of the robot cannot be expanded. However, you can expand via fieldbus. The options are EthernetIP or ProfiNet and in these cases an external PLC is required so the PLC is the master (scanner) and the robot is the adapter (slave) and the IO would have to be wired to the PLC. THe other method is modbus/tcp. The UR robot is capable of being a modbus tcp client so if you chose some IO (example - WAGO, Beckhoff, Phoenix Contact) that behaved as a modbus/tcp server you could expand that way too.

This article explains the modbus/tcp client interface of the robot (robot is client/master, IO is server/slave) :
Modbus TCP Client Setup - 16363


If you go down the Modbus route, be careful when selecting a Modbus unit as the Robot doesn’t support all of the Modbus function codes!

I’ve been caught out by that in the past.

  1. Modbus functions available
    The Modbus client interface supports Function Codes 0x01 through 0x06. The function code is a low level code that
    is embedded within the protocol and sent to a server. Below is a description of what these function codes mean and
    do within the Modbus protocol.
    a. 0x01: READ_COILS (read output bits)
    b. 0x02: READ_DISCRETE_INPUTS (read input bits)
    c. 0x03: READ_HOLDING_REGISTERS (read output registers)
    d. 0x04: READ_INPUT_REGISTERS (read input registers)
    e. 0x05: WRITE_SINGLE_COIL (write output bit)
    f. 0x06: WRITE_SINGLE_REGISTER(write output register)


There is also this which is available on UR+ Partners.

I’ve never used it but it might be a simpler solution than integrating to a PLC etc.


Thanks for help. We will choose the one which is able to send most I/O’s. But you are right, IOFireBug looks easier to use.

A PLC with Field bus will most definitely give you the most I/O