Universal Robots Forum

"Bug" when choosing Loop counter in expression

May not be a bug, but this seems quite strange to me. If you create a loop and you want to use the loop counter variable to index stuff, see MWE:

 Program
   Init Variables
   Robot Program
     Loop Loop_1<10
       textmsg(Loop_1)
       sync()

Then the Loop_1 variable is neither initialized nor incremented in the script file:

$ 1 "Robot Program"
$ 2 "Loop Loop_1<10"
while (Loop_1<10):
    $ 3 "textmsg(Loop_1)"
    textmsg(Loop_1)
    $ 4 "sync()"
    sync()
end

As if you created the loop to run X amount of times:

 Program
   Robot Program
     Loop 10 times
       textmsg(Loop_1)
       sync()

Produces the following script code:

  $ 1 "Robot Program"
  $ 2 "Loop 10 times"
  Loop_1 = 0
  while (Loop_1 < 10):
    $ 3 "textmsg(Loop_1)"
    textmsg(Loop_1)
    $ 4 "sync()"
    sync()
    Loop_1 = Loop_1 + 1
end

You can force the Loop counter to be initialised in InitVariables but this just presents the user with an infinite loop.

I see two hacky and fast options; (1) add automatic initialization and incrementation of variables used in the “Loop when expression is True”, or (2) remove the possibility to use the Loop counter as the main component in the Expression (more tricky as you may want to use the Loop counter as an index of an array in the expression, so this might not be a possibility).

Otherwise the I find the right way would be to present the user with a choice to enable/disable automatically initialization and incrementation.