RobotStudio event

Using Robot Reference Interface at high data exchange rate

Hi all,

I am currrently trying to design and evaluate the communication between an ABB arm and a c++ server using the Robot Reference Interface. I have managed to exchange data messages and move the robot while the rate of sending and receiving data is 125Hz (I use SisSetCyclic and SiGetCyclic by the setting the rate at 8ms ) and the communication is stable. Now I am trying to make it even faster, but, when I set the the rate at 6ms, I observe some strange behaviour on the c++ server side:
  • The period I get messages is not so constant and it is less than 6ms, the communication seems to be faster. I get messages at intervals between 3ms to 6ms (mostly around 4ms) and there are some extreme values too, less than 3ms and greater than 6ms.
  • Sometimes I receive two messages simultaneously. This might be my server's fault, maybe the loop slows down and I later receive two messages, but another possible cause might be the data exchange rate not being constant. Sometimes I receive one complete message and part of another. This is similar to the previous problem.
  • Also, when I reduce the data exchange period to 5ms or 4ms (ie increase the rate) on the rapid side, I get similar behaviour and the rate, I get messages on the c++ side, doesn't change compared to the one before.

This behaviour is acceptable for receiving messages sent by the robot, but similar kind of behaviour on the robot side, ie missing messages or receiving messages at a constant rate, will be dangerous, while trying to send control commands to the robot at this rate.

Now, my questions:

  • Why is the rate I receive messages on the c++ server faster than I set it to be on the rapid side? (I set the period at 6ms and I get a period around 4ms) I am not complaining, it just would be nice to know, maybe it will help me make the communication more stable.

  • Why there is no change in the rate, if I set the period to 6ms,5ms,4ms? I try even 4ms, because the RRI application manual says that the RRI ensures a stable data exchange up to 250Hz.

  • Every time the server receives a message it responds to the robot by sending a message with same ID. When the server receives two messages simultaneously, it responds only to one. Knowing that the robot knows that a message was lost by checking the IDs that it receives, this means it counts one lost message. It is supposed to output a Communication Interface Error when the number of lost messages exceeds the value of MaxLost, which is set in the Desciption.xml file in the GSI folder of the system, but no error message is generated. So, does the robot know when a message is lost by checking the messages' IDs?

  • Is there any other documentation on the Robot Reference Interface? Could someone provide me with more details about how the RRI task is executed compared to the other tasks and how it handles the messages sent and received? Knowing how the lower level works, it would help me very much to improve the communication.

Please, feel free to contribute your knowledge about the RRI.

Thank you very much in advance.

Comments

  • Is the exchange rate also valid for the update time of the robot targets? I am having trouble with the update time for giving instructions to the robot. It seems like it can only get a new command every 0.1 second. Which gives it a measly 10 Hz update rate.