Posts by Reintz

    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.

    I need RS005 parameter (FTP function enable) to be set to 0 in order for LOADJ instruction to work (I’m using this to load the jobs from YasXfer). I also need the parameter to be set to 1 in order for MotoSim File Transfer to work. I need the file transfer for when I’m away from work and they need me to assist.

    So can I write the parameter change into a job? I have separate load jobs that load the necessary jobs depenging on the product to be welded. So if I could change the RS005 parameter inside a job, I’d set it to 0, then load the jobs and then set the parameter back to 1 again for when I need to access the robot via MotoSim. Writing all that into the load jobs would be the best option.

    Or if that can’t be done maybe I can put the parameter change to IF panel? Then it would be 0 for the load jobs to work, but when online assistance is needed, the operator would have to change the parameter to 1 via a button in the IF panel.

    Suggestions, ideas are welcome.

    Hei, 95devils.

    Now I’m curious about the S1CxG065 parameter. I didn’t know you can actually affect what gets changed turing mirror shift and what doesn’t. What else can you set this parameter to?