Lab 4 the GMF Work Cell Lab Conducted: 2/21/2006

Robotics and Controls Tuesday Lab Group 1

Lab 4 – The GMF Work Cell Lab Conducted: 2/21/2006

Introduction

This is the third and final lab involving the GM-Fanuc cylindrical robots. Throughout the previous two lab experiments, the students have familiarized themselves with standard operating procedures, concepts, and system synchronization. The purpose of this third experiment is to acquaint the students with the techniques needed to make multiple pieces of equipment work together to accomplish a task. Specifically, communication will be inserted into the processes of the previous RC controller laboratories code in order to enable cooperative communication between the 5-axis and 4-Axis GMF robots.

The RC controller’s ability to interact with other pieces of equipment within the work cell was explored. By use of isolation relays, and the system device’s input and output (SDI/SDO) interface, a “Master-Slave” controller scheme was developed. This scheme transfers tasks between the two robots via a “handshaking” technique in order to pick, place, paint, and return a single part back to the main factory line.

Work Cell Layout

In order to fully understand the robots and their purpose it is best to view the work space in which they will be conducting the needed task of moving parts to be painted from an incoming rotary table to a painting conveyor, and returning them to the rotary table.

On the following page the work cell layout is shown incorporating all pieces of equipment including robots, tables, work benches and conveyors into it (See Figures 1 and 2). The numbers within the figures on the following diagram coincide with the line of code that will be executed at that specific location in the work space. Hence, the robot’s location throughout the code can be followed for each step by matching the code with the location on the work cell diagram. To assure the safety and reliability for the robot’s arm movement, safety points were programmed into the code ensuring all of the joint locations are accounted for and known. Safety points were placed above the rotating table for the master robot, and the work bench for both the master and slave robots. Also, the slave robot had safe points placed above the conveyor for safe loading and unloading. Safety points were used at any time when the robot arm was in tight quarters and move towards or away a product part. An intermediate safety point was added in open spaces, this was not a necessary part of the code but this better insures that the arm remains consistent each time the process runs. Another reason as to why safe points are introduced into the programming code is to allow for speed changes in the program. The desired speed for the robot’s arm was programmed 1 through 8, dependent on the direction, position and use of the end gripper. Higher speeds, such as 7 or 8, were desired in open areas to try and reduce cycle time of the entire procedure, and slow speeds, 1 through 4, were needed for a process in the code that required the end gripper to pick up or drop off a part. The speed of the robot was slowed down slightly, to a medium range number, with a part on the gripper to insure the safety and to maintain consistent orientation of the part. Knowing that the robot’s joints are all in a safe location displays good pose control.

Analysis of the master code

The table on the following page is the annotated code used for the master 4-axis robot. Following the code is a step-by-step guide through the execution of the code. This will depict how the master robot moves throughout the work cell.

N / G / F / Z / T / R / A / S / S / S / S / S / S / Annotation
0 / 8 / 0.00 / -150 / 0 / 0 / 02,0,5 / 0 / Home
1 / 12 / 8 / 26039 / -11284 / 8806 / 9645 / 02,64,10 / 0 / Safe pt 1 towards turn table
2 / 12 / 8 / 34076 / -8528 / 33044 / 10451 / 0 / Prep point to move in for pickup
3 / 98 / 97,1 / 80,8 / 87,8,-1 / 60,15 / 0 / Turn on table (SDO-8), check logic low on SDI-8, delay 1.5 sec
4 / 98 / 97,10 / 86,8,80 / 60,5 / 81,8 / 02,64,10 / 0 / Check logic high on SDI-8, delay .5 sec, turn table off, reset counter in register 64
5 / 11 / 5 / 17628 / -8528 / 33044 / 10451 / 0 / Pre pickup pt on approach to part
6 / 2 / 16003 / -8528 / 33044 / 10451 / 70,1 / 0 / Change Feed, Air on, Pickup pt
7 / 11 / 3 / 17628 / -8528 / 33044 / 10451 / 0 / Post pickup pt on retreat with part
8 / 12 / 6 / 34076 / -8528 / 33044 / 10451 / 0 / Prep pt to move away with part
9 / 12 / 7 / 34076 / -3193 / 17458 / 10451 / 0 / Safe pt 2, mid point to approach table
10 / 12 / 7 / 33564 / -371 / 7337 / 12128 / 0 / Prep pt to move to table to drop
11 / 12 / 7 / 33564 / 774 / 35032 / 11014 / 0 / High safe above drop pt.
12 / 11 / 5 / 19799 / 774 / 35032 / 11014 / 0 / Pre drop off pt on low approach to table
13 / 2 / 18103 / 774 / 35032 / 11014 / 71,1 / 0 / Part placement on table, Air off
14 / 11 / 4 / 19799 / 774 / 35032 / 11014 / 0 / Post drop off low pt away from table
15 / 8 / 33564 / -371 / 7337 / 12128 / 0 / High pt above part, wait time
16 / 98 / 80,5 / 86,10,-1 / 81,5 / 87,10,-1 / 0 / Handshake with slave to confirm part is ready
17 / 98 / 86,10,-1 / 80,5 / 87,10,-1 / 81,5 / 0 / Wait for slave to paint, and handshake to confirm
18 / 12 / 8 / 33564 / 774 / 35032 / 11014 / 0 / High safe above part
19 / 11 / 5 / 19823 / 735 / 34675 / 11014 / 0 / Low safe above part
20 / 2 / 17923 / 735 / 34675 / 11014 / 70,1 / 0 / Pick up part off table
21 / 11 / 5 / 30000 / 735 / 34675 / 11014 / 0 / Low safe above part
22 / 12 / 5 / 33564 / -371 / 7337 / 12128 / 0 / Post high pt to move away from table
23 / 12 / 7 / 33564 / -5668 / 7337 / 12128 / 0 / Safe pt 2, mid point to approach part wheel
24 / 12 / 6 / 34076 / -8528 / 33044 / 10451 / 0 / Pre drop off pt on approach to part jig
25 / 11 / 5 / 17085 / -8528 / 34632 / 10451 / 0 / Pre drop off pt on approach to part jig
26 / 3 / 15632 / -8528 / 34632 / 10451 / 71,1 / 0 / Return part to pickup pt, Air off
27 / 11 / 4 / 17628 / -8528 / 33044 / 10451 / 0 / Post drop off low pt on retreat from part
28 / 12 / 7 / 34076 / -8528 / 33044 / 10451 / 30,1 / 0 / Post drop off pt high
29 / 98 / 97,80 / 11,64 / 38,2 / 30,10 / 0 / Decrement counter, branch decision
30 / 12 / 8 / 23853 / -13515 / 0 / 10451 / 97,2 / 81,8 / 0 / Prep pt to move away to home base
31 / 98 / 80,6 / 86,10,-1 / 81,6 / 87,10,-1 / 0 / Handshake with slave to go home
32 / 8 / 0.00 / -150 / 0 / 0 / 99 / Home, W/ end program and rewind

In the first line of the code, N0, there is a remnant of our old loop by defining a value of 5 in register number 0. This definition is not necessary for the operation of this program. In block N1, a new value of 10 is defined in register 64 as the robot moves to a safe point towards the turn table. This value will be used to designate the number of times to iterate through a constant amount of time established in Setting Parameter Data #10. This is one example of how the operator/programmer can establish a give time length when only given constant amounts of time. Using time in this manner is referred to as “timed input” as opposed to “blocking input.” An example of blocking input is the S87,8,-1 code in block N3. This code will wait forever until it reads logic low on the input. A drawback to this type of programming is that if the specific condition is never met, the program will never end. With “timed input,” there leaves a way for the program to terminate after a certain amount of time.

Continuing with our code, in block N3, a branch designator is assigned by the S97,1. Next, the output connection on terminal 8 is established by the S80,8 code. This effectively turns on the table, or conveyor. The program then waits for the signal to go logic low indefinitely on terminal 8 as designated by S87,8,-1. This will indicate that there is no part in front of the photo cell and the current part has moved away. Then a pause or delay of 1.5 seconds occurs.

In block N4, a branch designator is created by the S97,10 code. Next in the code is S86,8,80. What this S code does is wait for a part to enter the pickup area, which would make the system go logic high. The S86 code waits for the amount of time designated in Parameter Data #10, which happens to be 3.0 seconds, for the input 8 terminal to receive the 24V, making it logic high. If it does not go logic high in that 3 seconds, then the program will branch to S97,80, which is in block N29. This block will then decrement the value in register number 64 and make a comparison to zero. The S38,2 will branch to S97,2 (block N26) if the flag is < or = to zero, otherwise the S30,10 in N29 will make it branch back to the S97,10 (block N4) unconditionally. The basic principle is that this executes the 3 second wait a desired number of times as designated by the value in register 64. If the signal device input 8 terminal never goes logic high, meaning a part never shows up, the program will continue at block N30 heading towards home, telling the slave to go home, and finishing the program. If within the ten repeats of the 3 second intervals the input goes logic high, meaning a part has appeared, then the code will continue on block N4 with S60,5. This half-second delay allows enough time for the motor to disengage from the Geneva drive that turns the table in increments or step amounts. This is to prevent a load on the motor when it starts up again. After the half-second, the S81,8 code cuts power in the coil in the relay, effectively stopping the motor. After this has happened, the value of register 64 is reset to 10, which effectively resets the number of 3 second intervals that it should wait the next time.

Once a part has been seen by the photo eye, the program will continue on block N5, where the robot drops to a low safe point directly above the part. In block N6, the robot will drop down to the part and turn on the suction to the gripper using the RDO/RDI by the S70,1 command. Now that the robot has control of the part, in block N7 the robot will move to the low safe point above the pickup point, and then to the high safe point in block N8. The code in block N9 moves the master robot to a safe point between the turn table and the workbench where the part is to be dropped. Block N10 designates the position above the corner of the workbench. This position will be used as a waiting point while the slave robot takes over the part for painting. The robot then moves from the position in block N10 to N11, which is a high safe point above the drop off position. From here the robot drops to a low safe point in block N12, and then to the drop position in block N13 to place the part on the workbench. Now the robot releases the part using the S71,1 command. The robot then retreats from the drop position in block N14, and progresses back to the wait position on block N15.

The communication, or handshaking, proceeds in block N16. First the master SDO 5 is turned on to tell the slave that a part is available for pickup. Then the master waits for confirmation from the slave by the S86,10,-1 code. Once this acknowledgement is received, the master turns off SDO 5 and then waits for the slave to turn off its SDO 10 by the S87,10,-1 code. Further explanation of the handshaking procedure is described in the wiring section of this report.

Now the slave robot takes over the operation of the work cell. The master slave executes an S86,10,-1 code to receive acknowledgement that the slave machine is done with it’s portion of the operation. Once the master sees “logic high” on SDI 10, the master confirms to the slave by sending a “logic high” signal to the slave on the master SDO 5. Here the handshaking takes place again. The master will look for the slave to turn off its SDO 10 by the S87,10,-1 code. Once this has been achieved, the master will end the handshaking by turning off its SDO 5 by the S81,5 code. This handshaking procedure is contained in the N17 block of the program.

Now the master machine will continue with the operation of the work cell while the slave machine waits for the next part to appear. The master robot will now move to the high safe point above the pickup position in block N18, and continue to the low safe point in N19. In block N20, the master robot will move to the part and turn on the suction to the gripper by the RDO S70,1 command. The robot will now move back to the position above the turn table with the part through movements in blocks N21, N22, N23, and N24. The master will then drop to the low safe point above the turn table in block N25, and drop off the part in block N26 by turning off the air with the S71,1 code. The master will then return to the high safe point in blocks N27 and N28 where it will wait for a new part to appear by branching back to the code in N3.

If the master robot does not encounter another part, it will branch from block N29 to block N30. In block N30, the machine will move to a safe point on the way to the home position and turn off the turn table with the S81,8 code. From here, the master will communicate to the slave robot to tell it to also go home. This is done by handshaking again. The master robot will turn on its SDO 6, which sends a “logic high” signal to the slave machine. The master will then wait for acknowledgement on SDI 10 with the S86,10,-1 code. Once the acknowledgement has been received, the master will turn off the SDO 6 with the S81,6 code and wait for the slave robot to follow by turning off its SDO 10. The master will receive this “logic low” signal with the S87,10,-1 code. Now the handshaking is complete and both robots will continue to their home positions and end the programs.