DoF - a Robotiq Community
Warning sign
The Dof Community was shut down in June 2023. This is a read-only archive.
If you have questions about Robotiq products please reach our support team.
Sebastien

Hi Pros,
we are about to elaborate a program for a specific application and I was curious to see how you would handle the following production sequence.
We are looking at a project where the UR will be set on a table. It will continuously run a certain task on one side of the table deburing a plastic part in three different zones. Once in a while, the operator will be able to come in, on the other side of the table, to run a single part that we call the 'express part', because the first deburing pass was not correctly done or for a different part to be deburred immediately. There would be one express station where there will be one proximity sensor to tell the robot when an express part has been loaded. So the question is, how would you have a robot program, running continuously, deburing parts on one side of the table a jump to another section in the program when it senses a high signal from one of the proximity switch. We are running different model of parts to debur in the cell. Identification is made via Barcode reading.

Overall, the way we thought of doing it is to have subprograms containing deburing trajectories for the different part models. Then the main program loop simply alternate between the three normal stations and calls the appropriate subprogram based on the barcode reading. We also have a thread running which is constantly monitoring the express station sensor. In that thread loop we are monitoring change in the proximity sensor signal to see when a piece has been placed in the station and when it happens this changes a variable in our main program called is_express_rdy which is checked at the end of each loop to see if the robot needs to do the express station before moving on to next part. 

Any tips, or anyone else have a different idea?

Tyler_Berryman

@Sebastien Are the three deburring zones linked to the same part or are there 3 different parts being deburred? 
Sebastien said:


We are looking at a project where the UR will be set on a table. It will continuously run a certain task on one side of the table deburing a plastic part in three different zones. 

From this sentence, I understand that you are deburring 3 specific features on the same part.
Sebastien said:
Overall, the way we thought of doing it is to have subprograms containing deburing trajectories for the different part models. Then the main program loop simply alternate between the three normal stations and calls the appropriate subprogram based on the barcode reading. 
And from this sentence, I understand that you will be running one deburring program for a specific part. Could you clarify this part of your question and so I can get a better understanding of your application? 

Thanks!

Loïc

@sebastien @Tyler_Berryman The way I would approach this problem is to use something like this inside the main program, you can then define the 4 sub programs that are required.  This would also not require the need for a thread to be executed.  This is assuming you would not do the express part until the current part is finished.  Allows you to resume operation once the express part is finished where you were.  You would need to have the program loop indefinitely, each loop of the program would only execute one subprogram.

switch currentStep case 0 sub runExpressPart case 1 sub runPart1 case 2 sub runPart2 case 3 sub runPart3 if expressPartSensor: currentStep = 0 else if prevStep == 3: currentStep = 1 prevStep = 1 else currentStep = prevStep+1 prevStep = currentStep #This allows us to resume where we were when an express part breaks in

@matthewd92 I'm not familiar with UR but as you will finish a part before you'll start the express part and in order to make it easier, won't it be possible to do something like this :

if expressPartSensor:
  sub runExpressPart
else
switch currentStep case 1 sub runPart1 case 2 sub runPart2 case 3 sub runPart3 if currentStep == 3: currentStep = 1 else currentStep = currentStep+1