Posts by Reintz


    Yes, you can use SRCH extension on a MOVL/SMOVL line to measure a groove.

    First you make a move towards one side of the groove using SRCH extension. Right after contact, you use GETS instruction to store current position. Convert the P-variable containing that current position into a suitable frame. Now repeat the same on the other side, but use a different P-variable.

    Now you can use GETE instructions to put the desired axis values from the two P-variables into D/LD variables and using SUB instruction you can calculate the width of the groove.

    So 9 lines including the movements.

    WVADJ changes robot moving speed quite alot, so depending on your application you might find that you're better off changing the speed and amplitude yourself depending on the groove size. I've used IF instruction combined with ELSEIF to use a suitable amplitude and welding speed. You can define the amplitudes and speeds by a variable or use SPEED instruction with different speed values and have the weld movements without speed defined so that the robot would use the speed from the SPEED instruction.

    I've even greated a search that searches and calculates the radius of a square tube in order to weld it with a suitable speed and weaving parameters.

    What do you have after P5? With only those points, it should not make a straight line between P4 ja P5. But if theres another circle with MOVCs after P5 and the two circles form a figure 8, then it will do a straight line from P4 to P5 unless you put a MOVL in between the two circles. The MOVL can be stored at the exact same position as the end point of the first circle (P5) and the starting point of the second circle so there would be MOVC, MOVL, MOVC stored at the same position.

    So in this example - if these points are all MOVCs, then it will make a straight line from P4 to P5, because if there are more than 3 MOVC points in a row, the robot will consider the current position + the next 2 MOVC positions when calculating it's path. But P4 together with P5 and P6 form a straight line. Now when the robot reaches P5 then in considers that and the following 2 MOVC positions and because those don't form a straight line, it will continiue to make a circle.

    Now to make a figure 8, one has to put MOVC, MOVL and another MOVC into the P5 position, that will make the robot not consider P4, P5 and P6 to be a straight line.

    When you save a job to external memory the values of those global position variables that are used in that job get stored in the .jbi file. But the values are whatever they are at the time on saving (not from when you last ran that job). So the values in the job backup file may have nothing to do with that specific job.

    Use global variables wherever you want. Just keep in mind that when using the same variables in different jobs (which is totaly ok) you need to think of them as something not permanent. So before each time you use the variable in a job something should define it's value (SET instruction, touch sence etc).

    BTW when you load a backup job from external memory the position variable values in the controller will be overwritten with whatever values the backup file has, so be careful when you load a backup. Choose a time when it's ok to overwrite position variable values.

    In the original post you said "positional values associated with the weld lines only become affected" - are these positional values defined by position variables?

    Position variable values that are used in a JOB are stored in the jbi file when jbi file is being saved. The value of each position variable that gets stored in the jbi file while saving will be the value it is at the time of saving and not what it was the last time you ran that job. So for example if you run JOB1 and it uses P001 variable with whatever values and after that you run JOB2 that also uses P001 but with some other values and you then save JOB1 then the saved JOB1.jbi file will have the P001 values from the JOB2 because these were the values in P001 at the time of saving.

    Now when you load a job into the controller and the jbi file has position variable values stored in it, they will be overwritten in the controller! What's why I never upload a job file into the controller while the robot is operating because I use a lot of touch sensing, the values are stored in position variables and uploading a job will overwrite these position variable values. I learnt that the hard way - years ago I uploaded a job into a controller that was operating. The job I uploaded was not the one that was running at the time but the robot collided with the workpiece because a position variable got overwritten.

    There is a way to avoid this - when you use a position variable in a job with indirect addressing. So instead of writing SFTON P001 you write SFTON [P1]. That way the position variable values will not be stored in the jbi file and thus they will not be overwritten in the controller when loading that job from external memory.

    But if for some reason you can't use different coordinate tags, then you can just add the P-variables you're using. So for exampe you start the weld with SSFTON P30 but then you need to shift it further by P40 without the P30 shift being canceled:

    SFTON P30

    MOVL (weld start)


    ADD P30 P40

    SFTON P30


    In this example ADD instruction will overwrite the P30 values, so if you need to keep the original P30 value use SET instruction to copy it to some other P-variable and use that:

    SFTON P30

    MOVL (weld start)


    SET P20 P30 (I use P20 as my temporary P-variable)

    ADD P20 P40

    SFTON P20


    In this case it works even if the operator (for whatever reason) runs through the lines multiple times.

    I have found that (atleast on DX200) depending on the Arc Retry parameter value (S1D225) the robot can actually freeze (restart required) if Arc Retry is executed at the start of the weld where there are arithmetic instructions used with P-variables right after the start of the weld. So both these examples can cause this. To avoid this I write the arithmetic instructions before the start of the weld:

    SET P20 P30

    ADD P20 P40

    SFTON P30

    MOVL (weld start)


    SFTON P20

    As for custom touch sense jobs - pretty much anything is possible. Check out my FB page, you'll find two of my custom touch sense job videos there:

    One can also create a controller from ALL.PRM in MotoSim and get the pulse/degree ratio from there.

    You'll have to add the model from model library and then attach it to it's corresponding frame in CADtree.

    I put dummy models just to show you where things have to be. "Base_here" marks the spot where you put the part of the external axis that doesn't move, and "Flange_here" is where you attach the flange model.

    Then when you move the external axis, the flange will move with it.

    If you made the controller without a file, then after building the cell, press Controller -> Robot Calibration -> Set calibration data base on robot model layout.

    If you hold Ctrl key while you klick on the keyboard button on the virtual pendant, the keyboard will open right under the pendant so you don't have to search it from behind the task bar or whatever.

    If that doesn't help copy a .xml file from a working cell's folder into the folder of your troublesome cell and rename it. Don't know if this helps with the pendant, but it does help when you lose your CADtree window.

    Hi there.

    I've got a question. In manual I can find that I can do only one measurement per JOB. Fine. But what's with using COMARCON? I mean: I have to weld 5 pieces in one JOB, can I just copy welding section 5 times, just changing teaching points? Can I use COMARCON/OFF more than once in same JOB?

    You can use ComArc function as many times in a welding job as you want. Doesn't matter if the setting values U/D and L/R are same or not.

    If there is very little welding that needs to be done in multilayer, then another option would be to program multiple points on the weld and then to use GETS PXxxx $PX040 at every position to store the ComArc correction value to a new position variable. After each pass you would modify these position variables to shift the next pass into the correct position.

    The weld itself can be programmed as one weld and you can then run it in a loop - first pass using ComArc and storing the variables and next 2 passes without ComArc using the position variables for shifting.

    Fresh YRC1000 gantry welding robot with QSet.

    The question is whether to make the welding jobs as relative jobs or as pulse jobs, keeping in mind that if something should happen to the tool (collision or tourch swap) in the future, then I need to get the welds corrected and robot back in action in as little time as possible.

    Using relative jobs is one way to get my welding positions correct after new tool data is applied.

    Another way is to have pulse jobs (which I prefer) and if tool data should change then I could use PMT function to correct the welding positions.

    Are there any downsides to using PMT function? I would imagine they work the same when it comes to accuracy.

    If you have your cleaning program at 0-pulse on the track, then all you need is:


    GETS PX000 $PX000

    SFTON BP000

    and SFTOF at the end of the cleaning job

    If 0-pulse on the track is accessible but your cleaning job is not made there, then you can just use parallel shift to shift it there or open the cleaning job in notepad and change the track values.

    As for what Gerhard Nell said - I don't see why you would need the SET I001 and I005 instructions there.

    I've been using Servo Robot's iCube 350 for 6 years now.

    The reflection was a headache.

    Use an angle where the laser beam doesn't reflect back at the sensor.

    But keep it as close to right angle as possible. I often use 15 deg from right angle.

    Also - the laser is meant to give a result in 2D, but at an angle it will start to give a value to the third axis as well. Depending on how you use your search info you might need to zero out the third value.

    Using the filters provided in the software helps a lot, but too much filtering might lead you to a point where you're not getting a result (joint not detected) or it's drawing something up from the reflection and you're getting a bad result. Don't know how good are the macros nowadays but I had to modify the search macro so that in such cases the laser would shift on the seam and retry the search. That helped me get to the point where I can run the 2,5-4h cycles with close to zero alarms.

    How is it easier to look for it in IF panel, than to constantly have it displayed on the screen from DISPLAY -> TIME MEASUREMENT?

    For logging purpose I've greated a macro that records TM info into S-variables.

    It stores the product name (taken from the job file, thus changeable by the end user) and adds the time that it took for the robot to execute the job (playback time) + the time robot was stationary (loading of the product + down time from errors during playback). If the time values exceed 1hour, time is given in hours + minutes, if it's less than hour then it's given in minutes and seconds.