Tracking Robot Run Time vs Idle Time

I am using my UR10e solely for the purpose of tending a CNC milling machine. If we setup the robot to run a job that has 100 pieces and each piece takes 6 minutes total to run, load, unload, etc… we would expect to see 600 minutes or 10 hours of “run time” in a perfect scenario where the robot doesn’t stop.

Of course, things happen where the robot stops due to a misload, sensing a collision or the operator doesn’t get to reloading the material cart for an hour and it just sits idle, or one of many other things…. So now it takes 16 hours to run the job.

How do we track robot “run time” vs “idle time”? Is there a way to see idle time if the robot finishes a program vs robot sensed a collision? I am thinking this may be a 3rd party monitoring software or a URCap?

Any help would be appreciated! Thanks.

UR recently released a feature that allows you to connect your phyiscal robot to MyUR, which then enables you to get notifications about protective stops, errors etc.

I am not sure if it is also able to show you down time and so on, but I’d say it’s worth a try. It won’t cost a lot to set up.
It will definitely be able to show you stops, though, and then you can fairly easy figure out how much down time the robot has seen.

I have to used it myself, so that’s all I know. There’s a manual on the subject here: 1010217_myUR Monitoring.pdf

@efn’s answer is the most robust, though I do think it incurs some extra cost. If you want to just take a crack at it with the tools you already have available, you can use an output set to “high when running, low when not running” in conjunction with a thread in your program. While that output is high, run a timer. You’ll then know how much total time has elapsed (by you just knowing when you started and stopped the robot) but also a total RUNTIME of the robot. The difference between the 2 times would be how much downtime you have.

UR has also (somewhat) recently introduced the “time()” URScript command, which could likely be leveraged to directly compute downtime (in conjunction with the thread architecture mentioned above)