RobotStudio event

I would like to change wire feed rate and speed dynamically in program while welding is in progress

Hi All,

Imagine i have 10 welding of 100 mm are to be made which are at different locations. Important thing is that i need to implement different weld parameters for all these weldings, means i need to have different wire feed rate, speed for all these weldings. Normally we will create 10 different weld data for each of these requirements and will be assigned for weld length. 

This creates a lot of weld data in the system and programming also would be become lengthy as we need to write 10 different  ARCLSTART and ARCLEND commands with 10 different weld data in these 10 program. 

My questions is that is there a way that we can use only one WELD DATA for example WELD01 which is predefined with wire feed rate as 4 m/min and speed as 4 mm/sec and we use this one weld data only in program however we will change the wire feed rate and speed in the program dynamically as and when required in the program. This facilitates very much lesser code in program and would be eliminate to create 10 different weld data in the system. 

Can somebody guide how to what type of commands I need to use for achieving this ?

Thanks & Regards
PS KUMAR

Comments

  • %%%
      VERSION:1
      LANGUAGE:ENGLISH
    %%%

    MODULE gapMain
        VAR num nSpeed1:=4.5;
        VAR num nSpeed2:=5.5;
        VAR num nSpeed3:=6.5;
        PERS welddata wd:=[6.5,0,[1,0,0,0,0,266,0,0,0],[0,0,0,0,0,0,0,0,0]];
        VAR num nPart:=1;

        PROC Main()
            IF nPart=1 THEN
                wd.weld_speed:=nSpeed1;
                TPWrite "Weld Speed adjusted to "+NumToStr(nSpeed1,2);
                ** Your coding here**
                incr nPart;
                Stop;
            ELSEIF nPart=2 THEN
                wd.weld_speed:=nSpeed2;
                TPWrite "Weld Speed adjusted to "+NumToStr(nSpeed2,2);
                ** Your coding here**
                incr nPart;
                Stop;
            ELSEIF nPart=3 THEN
                wd.weld_speed:=nSpeed3;
                TPWrite "Weld Speed adjusted to "+NumToStr(nSpeed3,2);
                ** Your coding here**
                incr nPart;
                Stop;
            ENDIF
        ENDPROC
    ENDMODULE

    nPart is just test var. You can make it anything you want to identify which welding parameter to allocate to which welding instruction. 
  • This will explain better. TpWrite function just for interest sake.

    %%%
      VERSION:1
      LANGUAGE:ENGLISH
    %%%

    MODULE gapMain
        VAR num nSpeed{3}:=[4.5,5.5,6.5];
        VAR num nWireFeed{3}:=[10.5,11.5,12.5];
        VAR num nVolts{3}:=[24.75,26.75,28.75];
        PERS welddata wd:=[4.5,0,[1,0,24.75,10.5,0,266,0,0,0],[0,0,0,0,0,0,0,0,0]];
        PERS seamdata sm:=[1,0.5,[0,0,0,0,0,0,0,0,0],0,0,0,0,0,[0,0,0,0,0,0,0,0,0],0,0,[0,0,0,0,0,0,0,0,0],0,0,[0,0,0,0,0,0,0,0,0],0.5];
        VAR num nWeld;
        PERS robtarget W1Start:=[[100,0,0],[0,0,0,0],[1,-1,0,0],[100,9E+09,9E+09,9E+09,9E+09,9E+09]];
        PERS robtarget W2End:=[[200,0,0],[0,0,0,0],[1,-1,0,0],[100,9E+09,9E+09,9E+09,9E+09,9E+09]];
        VAR num Select;

        PROC Main()
            TPErase;
            TPReadFK Select,"Which Procedure?","One","Two","Three","","";
            nWeld:=Select;
            IF nWeld=1 THEN
                wd.weld_speed:=nSpeed{1};
                wd.main_arc.wirefeed:=nWireFeed{1};
                wd.main_arc.voltage:=nVolts{1};
                TPWrite "Weld Speed adjusted to "+NumToStr(nSpeed{1},2);
                TPWrite "Wire Feed Speed adjusted to "+NumToStr(nWireFeed{1},2);
                TPWrite "Weld Voltage adjusted to "+NumToStr(nVolts{1},2);
                ArcLStart W1Start,v1000,sm,wd,fine,tWeldGun_Straight;
                ArcLEnd W2End,v1000,sm,wd,fine,tWeldGun_Straight;
            ELSEIF nWeld=2 THEN
                wd.weld_speed:=nSpeed{2};
                wd.main_arc.wirefeed:=nWireFeed{2};
                wd.main_arc.voltage:=nVolts{2};
                TPWrite "Weld Speed adjusted to "+NumToStr(nSpeed{2},2);
                TPWrite "Wire Feed Speed adjusted to "+NumToStr(nWireFeed{2},2);
                TPWrite "Weld Voltage adjusted to "+NumToStr(nVolts{2},2);
                ArcLStart Offs(W1Start,100,0,0),v1000,sm,wd,fine,tWeldGun_Straight;
                ArcLEnd Offs(W2End,100,0,0),v1000,sm,wd,fine,tWeldGun_Straight;
            ELSEIF nWeld=3 THEN
                wd.weld_speed:=nSpeed{3};
                wd.main_arc.wirefeed:=nWireFeed{3};
                wd.main_arc.voltage:=nVolts{3};
                TPWrite "Weld Speed adjusted to "+NumToStr(nSpeed{3},2);
                TPWrite "Wire Feed Speed adjusted to "+NumToStr(nWireFeed{3},2);
                TPWrite "Weld Voltage adjusted to "+NumToStr(nVolts{3},2);
                ArcLStart Offs(W1Start,100,0,0),v1000,sm,wd,fine,tWeldGun_Straight;
                ArcLEnd Offs(W2End,100,0,0),v1000,sm,wd,fine,tWeldGun_Straight;
            ENDIF
        ENDPROC
  • Hi, 

    First of all many many thanks for the code, and it is great help for me.
     
    I am very new to rapid programming, so I just wanted to understand the need for the below two lines,  and can you please help in explaining these two lines in more detail. 

    PERS welddata wd:=[4.5,0,[1,0,24.75,10.5,0,266,0,0,0],[0,0,0,0,0,0,0,0,0]];
     PERS seamdata sm:=[1,0.5,[0,0,0,0,0,0,0,0,0],0,0,0,0,0,[0,0,0,0,0,0,0,0,0],0,0,[0,0,0,0,0,0,0,0,0],0,0,[0,0,0,0,0,0,0,0,0],0.5];

    1) I believe these two lines refer weld data and seam data that we input in the flex pendant, is this right ?
    2) Imagine I have created WELD30 parameter, with wire feed and speed in flex pendant, then how WELD30 parameter can be odified dynamically?

    Thanks & regards
    PSKUMAR 
  • Hello,
    For your knowledge, you can format text as code using pilcrow sign menu.
    An example here.
  • 1 - Not sure what you mean by input in the flex pendant. Do you mean Robot ask User to input value?  
    2 - Create array variables  
    For ex. VAR num nSpeed{3}:=[4.5,5.5,6.5]; = Refers all the different speeds you wish to weld at. VAR num nWireFeed{3}:=[10.5,11.5,12.5]; = Refers to all the different wire feed speeds. VAR num nVolts{3}:=[24.75,26.75,28.75]; = Refers to all the different Voltages you require. Can be 100 or 2 does not matter as long as it is declared in the variable. 
    In your Module you create x1 wd and use the data from the variables to change the data inside wd as you require. You are required to do testing before your production start to allocate and make sure the variable values is correct and call them before your welding commence with the instructions wd.weld_speed:=nSpeed{1}; wd.main_arc.wirefeed:=nWireFeed{1}; wd.main_arc.voltage:=nVolts{1}; Whereby the value in the {} refers to specific value in the array variable. 
  • Hi 

    Thanks to JMF and Denis, Great help, my issue is solved.

    Once again thanks a lot for the help...

    Thnaks &regards
    PSKUMAR
  • Hello,

    In the same spirit, is it possible to change the weld parameters on the fly during a single welding instruction ?
    That is, I want to make it possible for an operator to set a new Voltage/WFS to be instantly taken into account while ArcLStart is executed.
    Can a timed interrupt do the job ?  

    Many thanks
  • Hallo, for an online update during welding you should try tuning from RW-Arc.
    While welding open "tuning" and you are able to adjust speed, voltage, wire-feed etc.
    Changes will have immediate effect and you are able to put them back the to original value.

    For an predefined change during welding you might use an interrupt based on time or position,
    where you for instance increase the speed by 0.5 mm/s for each 10 mm of your welding.
    So you do the calculation in the interrupt-routine followed by an arcrefresh.
    See documentation for arcrefresh.
  • Thanks matti, ArcRefresh effectively does the job and is clearly illustrated through a simple example in the Arc application manual