Advice needed for adjusting programs

  • The Robot Info:

    KRC V5.4.11

    Kernel: KS V5.4.83 RTAcc

    Windows Version: Xpe 2006


    Hi All


    I inherited a robot cell which does about 10 plasma cuts on a part. Each cut position has it own subroutine, and before calling said subroutine the Base Value gets declared and activated.

    The cut position must be within +/- 2mm of nominal.


    ; Cut 1

    BASE_DATA[1] = {X -0.740, Y 1707.740, Z 477.510, A -180.0000, B 0.0000,C 0.0000}

    $BASE = BASE_DATA[1]

    $Act_BASE = 1

    Cut1() ;call cut 1 sub


    ; Cut 2

    BASE_DATA[1] = {X -0.740, Y 1707.740, Z 477.510, A -180.0000, B 0.0000,C 0.0000}

    $BASE = BASE_DATA[1]

    $Act_BASE = 1

    Cut2() ;call cut 2 sub


    The parts that are supplied to the robot are not always consistent so then operator needs to edit the base values at the start of the shift, after checking the first off sample.

    The system is very basic and all run from the Robot controller and base values need to be changed directly on the teach pendant.

    The system also has an alignment point, where the operator needs to manually align the tool to the point/spike.


    My question, is there a better way of doing this without breaking the bank ?

  • If you never want to change the nominal value, then don't write to it. Create a frame offset and:


    Offset = {X 1, Y 0.4, Z 0, A 0, B 0,C 0} ;//If you still have to, change value by hand here

    If DistBtwPos($Nullframe, Offset) <2 then ;// check if the offset is really within +/-2 of nominal

    $base = Base_data[1]:Offset

    Cut1()

    endif


    This way you don't need to do mental arithmetic trying to add 0.39 to -0.740 and the like.


    Next- do all Cut procedures need different offsets? If the parts should always be the same, but just the blanks differ, then one offset ought to be enough. Depending on how the blanks differ, maybe a sensor could measure them? IMO, human should do only the things you can't yet automate.

    The system also has an alignment point, where the operator needs to manually align the tool to the point/spike.

    The advice here (given with the same vagueness) is that this can be either improved or be done without.

  • Thanks for the reply

    .

    To understand your suggestion, If there are many cut positions that need adjustment, I need to add code before each cut subroutine ? i.e


    ;Cut 1

    BASE_DATA[1] = {X -0.740, Y 1707.740, Z 477.510, A -180.0000, B 0.0000,C 0.0000}

    Offset = {X 1, Y 0.4, Z 0, A 0, B 0,C 0} ;//If you still have to, change value by hand here

    If DistBtwPos($Nullframe, Offset) <2 then ;// check if the offset is really within +/-2 of nominal

    $base = Base_data[1]:Offset

    $Act_BASE = 1

    Cut1()

    endif


    ;Cut 2

    BASE_DATA[1] = {X -0.740, Y 1707.740, Z 477.510, A -180.0000, B 0.0000,C 0.0000}

    Offset = {X 1, Y 0.4, Z 0, A 0, B 0,C 0} ;//If you still have to, change value by hand here

    If DistBtwPos($Nullframe, Offset) <2 then ;// check if the offset is really within +/-2 of nominal

    $base = Base_data[1]:Offset

    Cut2()

    endif


    The Offset values are applied to the nominal values(nominal values are not changed), and the IF statement checks that it is not more than 2mm ?


    Is this correct ?

  • well, if that is the way you want it, at least constrain and check the values.


    buthonestly....to me this operation sounds like a horror story... operator manually typing in some numbers and then running robot program... every day... i like operators to press button and move onto whatever human tasks are - let the automation do its work. last thing i would want is someone manually entering some 60 numeric values every morning.

    1) read pinned topic: READ FIRST...

    2) if you have an issue with robot, post question in the correct forum section... do NOT contact me directly

    3) read 1 and 2

  • As I understood, the operator changes values in line BASE_DATA[1] = {X -0.740, Y 1707.740, Z 477.510, A -180.0000, B 0.0000,C 0.0000}. If that is correct, then yes, offset needs to be changed before every Cutx() procedure. If you use this, there is no need for BASE_DATA[1] = {X -0.740, Y 1707.740, Z 477.510, A -180.0000, B 0.0000,C 0.0000} line anymore, or "$Act_BASE = 1" for that matter (maybe once at program start if it's actually needed). This isn't some fundamental change to the program, just IMO a better way of expressing intent and easier way to make base offsets. Obviously, you will need to write the ELSE part of the offset check (even if it's just else halt).


    Again, I would focus on removing the need for operator to make offsets at all, barring that, one offset ought to be enough. As panic mode mentioned, changing a bunch of values by hand is suboptimal. One typo, wrong sign or missed comma and the robot weaponized with a plasma cutter starts making undocumented changes to the cell and/or personnel :grinning_squinting_face: I sure hope robot does a cold run after every program adjustment and there are cartesian workspaces set up.

  • I agree with it being a horror story, every single day I need to fix problems with the cell. It's what I inherited when I joined the company, So now I am working on making a difference.

    Edited once, last by MaxG ().

  • I would look at the CONFIGMON.INI. Look under MONITOR>VARIABLE>OVERVIEW, then use the Configure option. You can create sets of variables that can be monitored and edited there.


    Then I would, as others have suggested, create an "offset" variable that is edited through the ConfigMon. Do Not make the actual Base data editable this way. Instead, edit your program to take the offset variable(s), and add them to the Base data. Put limits on how far the Base can be adjusted, so that if someone fat-fingers 1000 instead of 10.00, the program will refuse to apply the shift or run until someone addresses the problem. This will provide at least limited protection against someone programming the robot to shift over 3 meters and smash into a fence.

  • personally, i would look into automating the corrections using routine to measure and correct this automatically (vision or touch sense or own interrupt search routine).

    touch sense is normally meant to work with welders and use wire to physically touch the product by EOAT tool (using conductivity). but if that input is wired to an optical sensor (cheap laser sensor will do), robot does not need to actually touch the part, measurement can be done from suitable distance.


    then operator starts the process, lets the robot do all all work (measure part, and do the cuts). this is faster, simpler and less error prone.


    also not much of a fan of bases that are oriented way too different from world. in my experience operators often mix those two, even when teaching points. in this case for example it this means jogging in X axis would be still the same, but both Y or Z axis would be different (in fact complete opposite) if one simply changes between world and base. i prefer to offset base but try to keep orientation such that more or less similar to world. that way even if someone does make mistake, it is much less likely that something catastrophic happens.

    1) read pinned topic: READ FIRST...

    2) if you have an issue with robot, post question in the correct forum section... do NOT contact me directly

    3) read 1 and 2


  • I have used touch sense before, but as you mention its more for welding. I am interested in exploring a optical sensor. Just wondering if the optical sensor could be mounted on the tool with the torch ?

  • why not... you can shop for clamps in a hardware store or Amazon or whatever...


    as for sensors just get short distance laser sensor with tiny red beam (visible spot makes it possible to teach) and with background suppression (sharp cutoff, so you can approach any kind of target and from practically any orientation).


    and if you are in a hurry, it takes 5min to hammer out something using whatever junk is laying around


    get piece of material and drill small hole near edge through the side of the block

    than make larger hole that matches neck size of your tool.

    and then cut small slot to create a clamp (slot should connect tool neck through small hole to a nearest edge)


    then mount whatever sensor you like and any distance you like...


    not the best sketch (had to use "Panic CAD") but you get the idea...

    easy to adjust, trim the size down if you plan on making it not too temporary.


    1) read pinned topic: READ FIRST...

    2) if you have an issue with robot, post question in the correct forum section... do NOT contact me directly

    3) read 1 and 2

  • Is it possible to measure the part while the robot is executing the job, ie on the fly. Or would it be better to measure the part first. In the case of option 2, I think I would need to measure 3 points around a tube to define "the circle"

  • Try and be more detailed in your posts, it's hard to understand what exactly are you asking about. E.g. in your post above I am not sure why you want to measure the part (process output). Did you mean the blank - precut piece of material the part has to be made out of? Or maybe you do want to measure the part- to inspect it for quality or something?


    If you put an endstop as TCP (or some other sensor), the robot could measure the blank. Or are you asking if you can transfer data to be used for next cycle that the operator has measured using some other tools?


    Probably, yes.

Advertising from our partners