On the ABB Flexpicker, conveyor tracking is missing, so you will have to make it yourself.
Here is how to do that:
You will need to place an encoder on the conveyer. Because the ABB doesn’t have fast counters you need to connect it to a PLC, Raspberry pi or Arduino.
On this system you calculate the speed in mm/s this can be done by the following formula:
#Repeat every seccond:
Speed = ([Pulses] / [Pulses per rotation]) * ([Distance encoder to conveyor belt] * 2 * π);
Pulses = 0;
The speed needs to be send to the ABB bot, there are multiple ways to do it. We did this by our already existing TCP channel.
On the ABB:
You will to need to make a separate task to calculate the current location of the object. You can do this as followd:
-
Click on the controller tab
-
Sellect the satation on the left
-
Open the map configuration
-
Click on controller
-
Click on Task
-
Right click and select new task
-
Warm restart station
Make a new program
In this program you need to do the following:
- Start a timer
- Get the speed of the conveyor from the comunication task
- Get the time and cordinates of when the item was detected
- Calculate the current position
Example program:
RECORD item
Num time;
Num X_position;
BOOL detected;
BOOL inrange;
ENDRECORD
PERS item item1;
PERS conveyorSpeed;
PERS clock timer;
PROC main()
CLKReset timer;
CLKStart timer;
WHILE TRUE DO
IF item1.detected DO
Item1.X_position := item1.X_position – conveyorSpeed * (CLKRead(timer) – item1.time);
Item1.time := CLKRead(timer);
IF item1.X_position < 200 DO
Item1.inrange := TRUE;
ENDIF
ENDIF
WAITTIME 0.001; !needed against overheating of the proccesor
ENDWHILE
ENDPROC