Cell with a large number of P Variables - YRC1000

  • Hello All,



    Obligatory first post.



    I am in the planning stages for a cell with two machine tending robots, each with a YRC1000 controller. Because there is a pretty large number of workpieces that these robots will eventually handle, I want to have a large number of positions available (maybe eventually 500+ as the customer continues to add new workpieces to their catalogue, more than I could get by just expanding the memory allotment). Because of the shape of the workpiece’s modifying the p-variables by calculations/shifts are probably not going to work. The customer and I are going to have to teach the pick/place positions for each workpiece.



    I made a similar cell using a FANUC controller and my strategy was:


    -Robot gets part number from PLC


    -Robot runs a program specific to each part with the local positions for that particular workpiece which overwrites the global positions to be the same as the local positions taught for that part


    -Robot runs does it motion using the newly overwritten global positions. The customer can copy and paste new programs and update the local positions whenever they developed a new part.



    I was going to do something similar but Yaskawa local teach points are not numbered/nameable like the ones in a FANUC controller and I don’t think they can be worked on by commands like `GETE` etc.. I searched around the forum and didn’t see the same issue, I'm also pretty new to robotics so maybe I'm overlooking something obvious? Should I possibly be using a FTP system?

  • It is possible increase the P-variable numbers.

    How many P-variables need in your project?

    Thank you, but I think it the max is 255 P variables after memory allotment expansion though, I'll will need more than that ( estimating between 500-800, similar positions just slighty different, also the customer will want to expand in the future).


    You could load var.dat files specific to groups of parts.

    I like this approach, is it possible to load files via inform command?

  • You have a YRC. You can expanded the position variables to 1600. This is dependent on software version but it is definitely 1000 minimum.


    You can load jobs through the Inform List. Loadj and Savej, as long as you have the Visual DCI software option. The job has all the position variables taught in the job, their tool number, format, and values at the time of the save.


    Other files you would have to use some other method, like FTP.

    I know a thing or two, because I’ve seen a thing or two. Don't even ask about a third thing. I won't know it.

  • You have a YRC. You can expanded the position variables to 1600. This is dependent on software version but it is definitely 1000 minimum.


    You can load jobs through the Inform List. Loadj and Savej, as long as you have the Visual DCI software option. The job has all the position variables taught in the job, their tool number, format, and values at the time of the save.


    Other files you would have to use some other method, like FTP.

    OK thank you, I didn't know they could be expanded that far, 1000 should be enough to cover it and seems like the simpliest method. I'll look at the loadj and savej commands too.

  • To expand you may be need save out jobs, varname.dat, var.dat, and uframe.cnd.


    I doubt your software is new enough to eliminate these. It may be though. Better to be safe than sorry.


    Using position variables on non-calculated moves has some advantages and disadvantages IMHO.

    I know a thing or two, because I’ve seen a thing or two. Don't even ask about a third thing. I won't know it.

  • What about storing position values in the PLC and feeding the robot X,Y,Z,DX,DY,DZ over network?


    or if parts are similar, One general job with typeset specific offsets fed from PLC data? I use this method on several cells.

  • What about storing position values in the PLC and feeding the robot X,Y,Z,DX,DY,DZ over network?


    or if parts are similar, One general job with typeset specific offsets fed from PLC data? I use this method on several cells.

    It is defficult you send Position data from robot to PLC or inverse.

    More network between robot and PLC can send/receive the digital input and output signal and couldn't send variables.

    Only method that i used before is using Modbus, with it you can send variables to PLC or receive from it.

    For send/receive the position values, at the first each position item (X,Y,Z,Rx,Ry,Rz) must take and copy to D variables and you send this value to PLC by Modbus.

  • I store offset values from a baseline position per typeset.


    Then use a sete to load the values into a posvar.


    I have also done GETS, Invmat, Mulmat combo to get new posvar based on current position

  • Get a CMOS image before increasing the position variable allocation. Our DX 200 will get quite unhappy if you try to load a var.dat without the matching number of position variables as allocated, so be aware of that, too.

    Luckily for me these are brand new robots, so I dont have to worry about losing data. (I'll do a full backup when I receive them in their factory state of course). Ive been burned by that before though, usually from programming offline and forgetting to expand the offline controller's variables.



    I store offset values from a baseline position per typeset.


    Then use a sete to load the values into a posvar.


    I have also done GETS, Invmat, Mulmat combo to get new posvar based on current position

    I've done this before too but usually for minor adjustments of positions through the touch panel (to allow the customer to make fine x/y/z adjustments to placement etc.)


    Thanks everyone for the suggestions. I visit the forum all the time but this is the first time Ive asked for help, lots of suggestions for me to try out. The controllers/bots wont show up for another 6 weeks, but I'll try to post what I ended up doing if its something interesting.

  • Hello, I'm having the following issue.


    I'm using a Shift for a very large number of positions, but I need to switch on a variable for each of those, using that variable to know when that position is reached: is there a way to use a counter to solve this problem without having to turn on each variable individually (referring to each position) in the program?

    Example:


    Positions = A1 B1 C1 D1 E1 F1.....
    I need to know when the robot goes to A1 (switching on the corresponding variable) then B1, then C1 ecc...

    I was thinking to just have an increasing counter at the end of each movement (A1 done = increase counter, B1 done = increase counter....)


    Could that counter be used to know that 1 = switch on A1; 2 = switch on B1; 3 = switch on C1, ecc... without having to manually link each variable to each movement?


    Because by linking each variable to each position would take a large job in yaskawa and a lot of conditions.


    Thank you in advance!

  • Have you tried using SWITCH - CASE for this option? Under INFORM LIST, use the SWITCH command.

    SWITCH I000 CASE 1

    then you can do options like

    CASE 2

    CASE 3

    CASE 4

    and put all of your shifts under the cases that you want.

  • Hi,

    You can make a teaching job with the positions. The end of the job you can use GETPOS to a local position variable and a CNVRT from local position variable to the global position variable. (you should switch on the enable step number)

    Of course you have to make a jump label before of the positions.

    For example:


    0000 NOP

    0001 Jump *LABEL

    0002

    0003 0001 MOVJ VJ=100.00 PL=0

    0004

    0005 *LABEL

    0006 GETPOS LPX000 STEP#(1)

    0007 CNVRT PX000 LPX000 UF#(1) TL#(1)

    0008 END

  • Interesting thank you, the original project I posted about is long done (I expanded the memory as another poster recomended up to 1600 PVARs), but I have a similar project coming up this spring, I'll definitly experiment with this, never seen getpos used that way, thanks

  • csabizalan I was going to suggest very similar solution.


    Woebot You can create a job exactly as csabizalan suggested and use it as a storage of positions which you can call from your main job with a parameter pointing to the step# with position you are interested.


    Let me use csabizalan's example:

    //name:PointJob

    0000 NOP

    0001 Jump *LABEL

    0002

    0003 0001 MOVJ VJ=100.00 PL=0

    0004

    0005 *LABEL

    0006 GETARG LI000 IARG#(1) //Store first argument to first local integer variable

    0007 GETPOS LPX000 STEP#(LI000)

    0008 CNVRT PX000 LPX000 UF#(1) TL#(1) //You can use local variable instead of (1) and control with call parameters: 2 and 3

    0009 END


    From the top bar turn on display step number for better visibility. You can have up to 999 steps.

    Create at least one local Integer variable to make GETARG# instruction available in the Instruction List and to store the call parameter.

    Store your positions between Jump*LABEL and *LABEL, (I suggest to turn on line comment for each point).

    Create main job where you will call PointsJob.jbl from:


    Switch I000 (or Alias)

    CASE 1

    SET LI000 1

    CASE 2

    SET LI000 2 //Step# were the point is stored

    SET LI001 1 //UF# for converting to

    ...

    DEFAULT

    MSG: Something went wrong, mate!

    PAUSE

    ENDSWITCH


    CALL JOB: PointJob (LI000) or CALL JOB: PointJob (LI000,LI001) //You can use up to 8 arguments.


    Unfortunately, the number of steps and they order must be under strict control and can not be removed without messing steps with higher numbers. To make life easier I suggest to use as step 1 HOME position and use 1 as call argument set in CASE which point you want to delete.

Advertising from our partners