Posts by I3ooI3oo

    Make sure they ship it with version 9.10 / 12 or greater. If it comes with version 9.10/7 request a reburn. And don't take no for an answer. There are some errors that will never be corrected even with an autoupdate.This is still a new product with them. There are multiple issue with their new HTML5 interface. I would talk with them about a reduced cost Teach Pendent as it will be faster than using the new iNavigator interface. If you need BG programs you can not select the program with the HTML5 menus. Most advanced functions will need to be done using the Jog pendent, like accessing variables.

    You can start, stop, and hold programs via the PCDK. You can also set registers and their comments. We setup all of our robots so that each product is a simple register change to run.

    Often I setup a main program that calls a sub to set the starting point for a fixture. Each starting point is assigned a number. Then with select and case I take the stored point P[1] (point 1 for the first fixture) and set a PR[#] to it. So with a register being set from the PC program you can then choose the starting point.

    We also setup many little programs that can be started from our program. For example Park, Change_tool_To, Change_tool_from, and other little programs. Change_tool_to would move the robot safely to the location for a manual EOT change. Then they would run Change_tool_from which would safely return the robot to the parked location.

    I think you might have missed the setting it to use no motion group.

    Press select
    Highlight the macro program.
    press the next button till you see details.
    press details and goto item 4 Group mask.
    make sure it is set to [*,*,*,*,*,*,*,*]

    try it again.

    Lastly, you can run marcos in TP mode

    For I/O or ? First rule would always be if it draws more than 100mA of current then it should be driven from a relay that it rated for the current. For most of the I/O you provide the 24v but I would never use it to run anything that draws more than 100 mA.

    I'm working on a project using on of the new Fanuc SCARA robots. While the interface is different, it is running handling pro so it programs exactly like a 6 axis with a few exceptions. The main differences are between Joint motions and linear motions. Since the SCARA only has 4 Axis
    L P[1,6] and J P[1,4] are the same axis.

    My application picks up a cylinder and brings it over to a laser and then spins the tool around while a laser cuts off the extra. I have a custimization that allows me to monitor the speed of J4 in deg/s. Once the robot is up to a predefined speed it turns the laser on for 1 or more revolutions before turning it off.

    My issue is that when changing override % it also changes the acceleration and deceleration. So I'm trying to get it up to speed as quickly as possible without going too much faster then my desired speed. I need the cutting to happen at 4 RPS or 1440 deg/s. I need it to stay at that speed for 720 degrees.

    Test 1

    override = 34%
    J PR[1] 100% CNT100 
    speed is met for 134 degrees

    Test 2

    Override = 100% 
    J PR[1] 34% CNT100 
    does not ever get to speed of 1440 deg/s
    J PR[1] 50% CNT100 
    gets to 1440 for 5 degrees

    Test 3

    Override = 34%
    J PR[1] 100% CNT100 ACC 150
    speed is met for 240 degrees

    Is there a was to increase the acceleration? I only need to do it when all the other axis are stationary. Any Ideas?

    Older partition formats had limits. MS-DOS's FAT format is limited to 2048MB. If you have a problem finding a CFdisk that is only 2GB, you should be able format the CFDisk with a FAT partition , not fat32, which would limit the partition to 2gb and should be readable.

    Though I can not guarantee it, as I am speaking with my IT hat on not a FANUC one.

    You can create this operation in your program without BGLogic. Simply set a bit at the end of your program on. Then turn it off on the first line of your main program. Only of the program made it through to the last line would the bit be on when the PLC goes to start it.

    We always set CIStop to abort and all starts will start at the first line. This will require some checks or special moves to make sure the robot can move to the first position freely. We just create a complex homing routine that does nothing if the robot is in the position that it is expected to be in if the program finished correctly.

    If you are not using the offsetting and finding for adjusting motion, and are only using it for inspection and a go or no go situation, i would recommend Cognex their cameras perform all the validation in the camera and can give a pass/fail bits. Depending on speed and resolution cameras range in price from $3000 - $8000.

    Vision work can be very tricky to get right. Often we forget about the 50/60Hz flicker of most lighting. Typically we use a specific wavelength of light that will reflect nicely off of the work piece. Then using a optical filter so that only that wavelength of the light source provided will get into the camera. This will greatly reduce the possibility that the ambient lighting is adding to the light getting into the camera.

    Lastly even LEDs can flicker. Make sure the back lighting is not flickering. Most LED light sources if dim-able are actually strobe at differing rates to dim.

    Typically I would write a series of programs that the operator can access that does the simple tasks that are needed. On a recent system there were programs like. To_service.TP and From_service.TP which would bring the EOAT over to the door of the system so they could open the door and inspect/clean the EOAT.

    You could write a series of programs and add a menu setup that allows them to choose which of the programs they can choose. Each program could be as simple as turn on these I/O bits, with another program that turns them back off.

    The simple answer is NO.

    While you can get the current value from the $MOR_GRP[1].$machine_pls[1-6] for each of the pulse encoders, you can not get a encoder output. We build custom laser based industrial machines. Quite often we laser mark parts while they are moving. To correct for the for the motion of the part under the laser we need to know the rate it is moving under the laser. So for years I have been asking Fanuc for an encoder output of axis 6 with no success.

    There is a major difference between having an encoder output and getting the pulse counts. To get the pulse count you will have to rely on BG logic to read the value and then transmit it somehow. Which would get limited to 4ms readings for BG logic. This is very slow in terms of realtime. When polling the pulse counts one would have no idea when those pulses came in within the 4ms polling. What would happen if on the first read the pulse count read 0. Then on the second read also read 0 but the axis had moved +10000 pulses and -10000 pulses in that 4ms window. With an actual encoder the device using the signal would know about the change where something only using the value would not. 250Hz is not fast enough to use the pulse count.


    Can you explain why you need to store the data in joint data? Joint data doesn't reference any TCP or User Frames.

    On occasions I need to store data as joint data, but it is because I need to rotate the wrist a specific direction and speed but the location is different do to part diameter. So after a new part is started the first position it goes to is a calculated location offset by the radius of the part being processed. Once the robot goes to that location the joint data is recorded and then the wrist data is changed to create 2 new positions. One that is -540° and the other that is +540°.

    We use the PCDK on every system that uses a Robot. I write all my programs so that you can change some registers and get different results. Typically there will be a main program like XXX_process which depending on complexity will have a call to a program that picks a sub program depending on the values of specific registers.

    Using the PCDK also allows our HMI program to change I/O states. Run any program (without PSN), like Drop_part, Park, or XXX_process. However you must be careful about datatypes when sending registers. While you can send down a 0 as either a integer or a real, if you send down a real to a register that is used in FOR loop it will not work as only integers can be used in the construction of FOR LOOPS.

Advertising from our partners