Welcome, Guest. Please login or register.
Did you miss your activation email?
February 08, 2012, 11:42:59 AM
Home Help Login Register
News: Any Problems or Experience with Industrial Robots ?
Register and place your Question / Answer to worldwide Robotexperts right here !

+  Robotforum | Support for Robotprogrammer and Users
|-+  Industrial Robot Help and Discussion Center
| |-+  ABB Robot Forum (Moderators: Werner Hampel, Sven Weyer, Jim Tyrer, Napierian)
| | |-+  How i can call other program
0 Members and 1 Guest are viewing this topic. « previous next »
Pages: [1] Print
Author Topic: How i can call other program  (Read 955 times)
Andicot
Jr. Member
**
Offline Offline

Posts: 63


« on: August 28, 2010, 02:02:02 PM »

I know the language of kuka robots but i'm new of the language kuka rapid.
I have 3 program and one main that have a loop.
I need to call one of tree other program from the main program.
what is the command to do this ? I need to call other program and at the end return to te program calling.

Thank's

Andrea
Logged
tony gast
Hero Member
*****
Offline Offline

Gender: Male
Posts: 700


Can I barrow a cup of robots?


« Reply #1 on: August 29, 2010, 04:02:41 AM »

I think these are all good examples....Been a while sense I had ABB in shop

TEST n_JOB_CALL                          <<<<<<    looks at a value of a number
      
      CASE 1:   
         r_job1;                      <<<<<If the value = 1 run job1
      CASE 2:   
         r_job2;                      <<<<<If the value = 2 run job2
      CASE 3:   
         r_job3;                      <<<<<If the value = 3 run job3
      
   ENDTEST

OR

r_job1;                      <<<<< runs job1
r_job2;                      <<<<< runs job2
r_job3;                      <<<<< runs job3
      

OR

IF DI_select 1 =high
      r_job1;                      <<<<< runs job1
ENDIF
IF DI_select 2 =high
      r_job2;                      <<<<< runs job2
ENDIF
IF DI_select 3 =high
      r_job3;                      <<<<< runs job3
ENDIF
« Last Edit: August 29, 2010, 02:32:43 PM by tony gast » Logged

Oh, well
Andicot
Jr. Member
**
Offline Offline

Posts: 63


« Reply #2 on: August 30, 2010, 06:14:17 AM »

Thank's, i can call also external program or only subprogram?
Now i have 3 independent programs
Logged
Ztek
Jr. Member
**
Offline Offline

Posts: 56

Service engineer and programmer of ABB and Adept.


« Reply #3 on: August 30, 2010, 12:12:54 PM »

I hope it is ABB Rapid you mean, otherwise you can stop reading here. I have never used a KUKA...

In Rapid there is no subprograms. You specify procedures or functions. In its most simple use, a procedure call works as a subprogram call, as in tonys example. A procedure always return to calling procedure when it ends or reaches a RETURN statement.
You can as default call any procedure or function from any procedure or function in the system. If the procedure or function is defined as LOCAL, you can only call it within the same program module as it was declared.

The idea behind rapid syntax is much like Algol and its followers (Pascal, ADA etc) if you want to know more about the idea of procedures and functions then ABB tells in its manuals.

-Edit-
Note that there is no command to call a procedure or function, you just use the name of the procedure followed by it parameters, if any. Also note that a procedure call is
r_job3 para1, para2;
and a function call is
ans:=r_job2(para1, para2);
where in my example r_job3 is a procedure and r_job2 is a function, para1, para2 and ans is vaiables of a matching kind to the procedure and function. I find it a bit annoying that you use () in function calls but not in procedure calls.
« Last Edit: August 30, 2010, 12:20:35 PM by Ztek » Logged
Andicot
Jr. Member
**
Offline Offline

Posts: 63


« Reply #4 on: August 30, 2010, 05:13:49 PM »

I have 3 programs like this 2 that is saved like prog1.prg, prog2.prg,prog3.prg. I want to call prog2 or prog3 from prog1, is possible if there are 3 different file .prg and not procedure of the same .prg?


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

MODULE PROG1
  CONST robtarget p1014:=[[1370.83,789.66,1452.59],[0.319268,-0.724313,0.607988,0.061572],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
  ...CUT

  PROC Main()
    Reset Allunga_Braccio;
    MoveJ p10,v1000,z50,Fiammanuova;
    WaitTime 3;
    ConfL\Off;
    Set AccensioneFiamma;
   ...CUT
    MoveL [[1004.88,-619.19,254.65],[0.626537,0.551642,0.410451,0.36698],[-1,-1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v1500,z50,Fiammanuova;
    MoveJ p2110,v1500,z50,Fiammanuova;
  ENDPROC
ENDMODULE


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

MODULE PROG2
  CONST robtarget p1014:=[[1370.83,789.66,1452.59],[0.319268,-0.724313,0.607988,0.061572],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
  ...CUT

  PROC Main()
    Reset Allunga_Braccio;
    MoveJ p10,v1000,z50,Fiammanuova;
    WaitTime 3;
    ConfL\Off;
    Set AccensioneFiamma;
   ...CUT
    MoveL [[1004.88,-619.19,254.65],[0.626537,0.551642,0.410451,0.36698],[-1,-1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v1500,z50,Fiammanuova;
    MoveJ p2110,v1500,z50,Fiammanuova;
  ENDPROC
ENDMODULE
Logged
tony gast
Hero Member
*****
Offline Offline

Gender: Male
Posts: 700


Can I barrow a cup of robots?


« Reply #5 on: August 30, 2010, 07:41:28 PM »

I have called processes from other modules in the same task folders
I would change their names from main to r_1, r_2, or something like that

BTW
What little I have learned about ABB.....no matter what I declare....i start the name with an abbreviations that means something to me
r_         = routine (process)
do_      = digital output
di_       = digital input
n_        number
and so on....helps me keep things straight
« Last Edit: August 30, 2010, 07:49:35 PM by tony gast » Logged

Oh, well
Andicot
Jr. Member
**
Offline Offline

Posts: 63


« Reply #6 on: August 30, 2010, 08:25:59 PM »

Thanks, tomorrow i will try.

Andrea
Logged
Ztek
Jr. Member
**
Offline Offline

Posts: 56

Service engineer and programmer of ABB and Adept.


« Reply #7 on: August 31, 2010, 09:47:25 AM »

If you run the three differnt programs in three differnt tasks, then your program is correct. But I do not think that is what you want to do.
In Rapid you usualy do not make one file per process (program). You put all the processes in one file, or divide it in to differnt files using modules. A simple .prg file can look like this:

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

MODULE my_rob_applic
  !Declerations 

PROC main()
  !Main process, this is what starts automaticaly when system starts.

  !Declerations
  CONST robtarget pos_tray:=[[1370.83,789.66,1452.59],[0.319268,-0.724313,0.607988,0.061572],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
 
  !Time to start working
  WHILE TRUE DO
  !Loop without end
      IF di1=1 THEN
        r_pick_part;
      ELSEIF di2=1 THEN
        r_leave_part 1, TRUE;
      ELSEIF di3=1 THEN
        r_grind_part;
      ENDIF
      WaitTime 0.5;
      !Be careful with polling loops, they can block other tasks
   ENDWHILE
ENDPROC

PROC r_pick_part()
   !Declarations

   !Do something useful
   MoveL...
   SetDO...
   !And so on
ENDPROC

PROC r_leave_part(num place_no, bool start)
   !Declerations
   CONST num space:=25; 

   !Do something
   !Just an example of how to use the parameters in the procedure call.
   MoveL Offs(pos_tray, 0, place_no*space,0, .......
   IF start THEN
     SetDO do2, 1;
     WaitDI di1, 1;
     SetDO do2, 0;
   ENDIF

ENDPROC

PROC r_grind_part()
   !Declarations

   !Do something useful
   MoveL...
   SetDO...
   !And so on
ENDPROC

ENDMODULE

-------------------------------------------------------------
If you for some reason whant to divide you program in differnt files, then the example abowe will look like this:

First file containing main, file ending .prg

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

MODULE my_rob_applic
  !Declerations 

PROC main()
  !Main process, this is what starts automaticaly when system starts.

  !Declerations

  !Time to start working
  WHILE TRUE DO
  !Loop without end
      IF di1=1 THEN
        r_pick_part;
      ELSEIF di2=1 THEN
        r_leave_part 1, TRUE;
      ELSEIF di3=1 THEN
        r_grind_part;
      ENDIF
      WaitTime 0.5;
      !Be careful with polling loops, they can block other tasks
   ENDWHILE
ENDPROC

ENDMODULE


Second file containing r_pick_part end r_leave_part. File ending .mod

MODULE part_handling

PROC r_pick_part()
   !Declarations
  CONST robtarget pos_tray:=[[1370.83,789.66,1452.59],[0.319268,-0.724313,0.607988,0.061572],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
 

   !Do something useful
   MoveL...
   SetDO...
   !And so on
ENDPROC

PROC r_leave_part(num place_no, bool start)
   !Declerations
   CONST num space:=25; 

   !Do something
   !Just an example of how to use the parameters in the procedure call.
   MoveL Offs(pos_tray, 0, place_no*space,0, .......
   IF start THEN
     SetDO do2, 1;
     WaitDI di1, 1;
     SetDO do2, 0;
   ENDIF

ENDPROC

ENDMODULE

the third file containing r_grind_part, file ending .mod

MODULE grind

PROC r_grind_part()
   !Declarations

   !Do something useful
   MoveL...
   SetDO...
   !And so on
ENDPROC

ENDMODULE

As you see you can put one or more processes in one module. You can also make datamodules with only declearations if that simplify you program managment.

As I never program on the TP I like to write long, describing variablenames and processnames, as I think it is easier to read and understand the programs that way. On the other hand, those who are used to systems with registers or TP programming usualy like to keep the names as short as possible. Tonys sudgestion to make some sytem in how you name things is very good, regardless if you use long or short names.
Logged
tony gast
Hero Member
*****
Offline Offline

Gender: Male
Posts: 700


Can I barrow a cup of robots?


« Reply #8 on: August 31, 2010, 01:54:33 PM »

I did it so I could make one module READ ONLY so it could not be modified..... then the the operator could modify  things in the MAIN module and could not in the READ ONLY
Logged

Oh, well
rtaylor
Newbie
*
Offline Offline

Posts: 22


« Reply #9 on: September 01, 2010, 04:03:38 PM »

Here is the structure i follow
Programs are called by the PLC from teh main and jump out to the subroutines 


!
  !============================================================================================================
  !                            MAIN ROUTINE FOR Op_115 ROBOT
  !       
  !============================================================================================================
  PROC main()
    IF siAt_Home_Ack=0 THEN
      HomePos;
    ENDIF
mainloop:
    Set Clr_ShortGage;
    Set Clr_LongGage;
    Set Clr_Washer;
    SetGO Ack_Case_Values,0;
    Reset Ack_Case_Val;
    Reset Job_Complete;
    Reset In_Err_Handler_1;
    Reset In_Err_Handler_2;
    Reset Ok_To_Transfer;
    IF Goto_Service=1 THEN
      Service;
    ENDIF
    IF Accept_Case_Val=1 THEN
      TEST GInput(Case_Values)
      CASE 1:
        Short_Marposs;
      CASE 2:
        Long_Marposs;
      CASE 3:
        Load_Washer;
      ENDTEST
    ENDIF
    GOTO mainloop;
  ENDPROC

  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  !PROC ProgShort_Marposs()This routine unloads the short marposs with tool 1 and Tool 2 than moves home  !
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  PROC Short_Marposs()
    SetGO Ack_Case_Values,1;
    Set Ack_Case_Val;
    WaitDI OK_To_Continue,1;
    Open_Tool_1;
    MoveJ p5,v4000,z200,tool1;
    MoveJ p10,v4000,z200,tool1;
    MoveJ p15,v4000,fine,tool1;
    WaitDI ShortGage_Clr,1;
    Reset Clr_ShortGage;
    MoveL p20,v400,fine,tool1;
    Close_Tool_1;
    Set Ok_To_Transfer;
    WHILE Transfer_Ack=0 DO
      IF Goto_Service=1 THEN
        Open_Tool_1;
        MoveL p15,v4000,z200,tool1;
        MoveJ p10,v4000,z200,tool1;
        MoveJ p5,v4000,z200,tool1;
        GOTO Start;
      ENDIF
    ENDWHILE
    GripLoad loadPrt;
    WaitDI Transfer_Ack,1;
    MoveL p15,v4000,z200,tool1;
    IF Short_Part=1 THEN
      MoveJ p80,v1000,fine,tool1;
      Close_Tool_2;
      Set Ok_To_Transfer;
      WHILE Transfer_Ack=0 DO
        IF Goto_Service=1 THEN
          Open_Tool_2;
          MoveL p85,v1000,z100,tool1;
          MoveL p30,v2500,z200,tool1;
          MoveL p25,v4000,z200,tool1;
          GOTO Start;
        ENDIF
      ENDWHILE
      GripLoad loadPrt;
      WaitDI Transfer_Ack,1;
      MoveL p85,v1000,z100,tool1;
      MoveL p15,v4000,z200,tool1;
    ENDIF
    MoveJ p10,v4000,z200,tool1;
    MoveJ p5,v4000,z200,tool1;
Start:
    Set Clr_ShortGage;
    Set Job_Complete;
    WaitDI Job_Comp_Ack,1;
    MoveJ home,v4000,z100,tool1;
Finish:
  ENDPROC

  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  !PROC ProgLong_Marposs()This routine unloads the long marposs with tool 2 than moves home  !
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  PROC Long_Marposs()
    SetGO Ack_Case_Values,2;
    Set Ack_Case_Val;
    WaitDI OK_To_Continue,1;
    Open_Tool_2;
    MoveJ p25,v4000,z200,tool2;
    MoveL p30,v2500,fine,tool2;
    WaitDI LongGage_Clr,1;
    Reset Clr_LongGage;
    MoveL p35,v200,fine,tool2;
    Close_Tool_2;
    Set Ok_To_Transfer;
    WHILE Transfer_Ack=0 DO
      IF Goto_Service=1 THEN
        Open_Tool_2;
        MoveL p30,v2500,z200,tool2;
        MoveL p25,v4000,z200,tool2;
        GOTO Start;
      ENDIF
    ENDWHILE
    GripLoad loadPrt;
    WaitDI Transfer_Ack,1;
    MoveL p30,v2500,z200,tool2;
    IF Long_Part=1 THEN
      MoveJ p90,v1000,fine,tool2;
      Close_Tool_1;
      Set Ok_To_Transfer;
      WHILE Transfer_Ack=0 DO
        IF Goto_Service=1 THEN
          Open_Tool_1;
          MoveL p100,v1000,z100,tool2;
          MoveL p30,v2500,z200,tool2;
          MoveL p25,v4000,z200,tool2;
          GOTO Start;
        ENDIF
      ENDWHILE
      GripLoad loadPrt;
      WaitDI Transfer_Ack,1;
      MoveL p100,v1000,z100,tool2;
      MoveL p30,v4000,z200,tool2;
    ENDIF   
    MoveL p25,v4000,z200,tool2;
Start:
    Set Clr_LongGage;
    Set Job_Complete;
    WaitDI Job_Comp_Ack,1;
    MoveJ home,v4000,z100,tool2;
Finish:
  ENDPROC

  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  !PROC ProgLoad_Washer()This routine loads the part into the washer then moves home  !
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  PROC Load_Washer()
    SetGO Ack_Case_Values,3;
    Set Ack_Case_Val;
    WaitDI OK_To_Continue,1;
    MoveJ p40,v4000,z200,tool1;
    MoveJ p110,v4000,z50,tool1;
Start:
    IF Part_Present_1=1 THEN
      WaitDI Washer_Clr,1;
      Reset Clr_Washer;
      MoveJ p45,v4000,z80,tool1;
      MoveL p50,v1000,fine,tool1;
      Open_Tool_1;
      Set Ok_To_Transfer;
      WHILE Transfer_Ack=0 DO
        IF Goto_Service=1 THEN
          Open_Tool_1;
          MoveL p45,v4000,z80,tool1;
          MoveJ p40,v4000,fine,tool1;
          Set Clr_Washer;
          GOTO Finish;
        ENDIF
      ENDWHILE
      MoveJ p45,v4000,z80,tool1;
      WaitDI Part_Present_1,0;
      MoveJ p40,v4000,fine,tool1;
      Set Clr_Washer;
    ENDIF
    IF Part_Present_2=1 THEN
      MoveJ p55,v4000,fine,tool1;
      WaitDI Washer_Clr,1;
      Reset Clr_Washer;
      MoveL p60,v4000,z80,tool1;
      MoveL p65,v4000,fine,tool1;
      Open_Tool_2;
      Set Ok_To_Transfer;
      WHILE Transfer_Ack=0 DO
        IF Goto_Service=1 THEN
          Open_Tool_2;
          MoveL p60,v4000,z80,tool1;
          MoveJ p55,v4000,z80,tool1;
          MoveJ p40,v4000,fine,tool1;
          Set Clr_Washer;
          GOTO Finish;
        ENDIF
      ENDWHILE
      MoveL p60,v4000,z80,tool1;
      WaitDI Part_Present_2,0;
      MoveJ p55,v4000,z80,tool1;
      MoveJ p40,v4000,fine,tool1;
      Set Clr_Washer;
    ENDIF
Finish:
    Set Job_Complete;
    WaitDI Job_Comp_Ack,1;
    MoveJ home,v4000,z100,tool1;
  ENDPROC

  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  !PROC ProgService()This routine moves the robot to service then moves home  !
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  PROC Service()
    MoveJ home,v2000,fine,tool1;
    MoveJ p70,v2000,fine,tool1;
    Set At_Service;
    WaitDI Goto_Service,0;
    MoveL p70,v2000,fine,tool1;
    MoveJ home,v2000,fine,tool1;
    Reset At_Service;
  ENDPROC

  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  !PROC Close_Tool_1() !
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  PROC Close_Tool_1()
    Reset Opn_Tool1;
    PulseDO\PLength:=0.5,Clse_Tool1;
    WaitDI Tool_Cyl1_Closed,1\MaxTime:=2;
    Reset In_Err_Handler_1;
  ERROR
    Set In_Err_Handler_1;
    IF ERRNO=ERR_WAIT_MAXTIME THEN
griploop:
      IF Goto_Service=1 THEN
        TRYNEXT;
      ENDIF
      IF Tool_Cyl1_Closed=0 THEN
        Set Tool1_Not_Closed;
        WaitDI Fault_Ack,1;
        Reset Tool1_Not_Closed;
      ENDIF
      IF Tool_Cyl1_Closed=0 THEN
        GOTO griploop;
      ENDIF
      RETRY;
    ENDIF
  ENDPROC

  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  !PROC Open_Tool_1() !
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  PROC Open_Tool_1()
    Reset Clse_Tool1;
    PulseDO\PLength:=0.5,Opn_Tool1;
    WaitDI Tool_Cyl1_Open,1\MaxTime:=2;
    Reset In_Err_Handler_1;
  ERROR
    Set In_Err_Handler_1;
    IF ERRNO=ERR_WAIT_MAXTIME THEN
griploop:
      IF Goto_Service=1 THEN
        TRYNEXT;
      ENDIF
      IF Tool_Cyl1_Open=0 THEN
        Set Tool1_Not_Open;
        WaitDI Fault_Ack,1;
        Reset Tool1_Not_Open;
      ENDIF
      IF Tool_Cyl1_Open=0 THEN
        GOTO griploop;
      ENDIF
      RETRY;
    ENDIF
  ENDPROC

  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  !PROC Close_Tool_2() !
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  PROC Close_Tool_2()
    Reset Opn_Tool2;
    PulseDO\PLength:=0.5,Clse_Tool2;
    WaitDI Tool_Cyl2_Closed,1\MaxTime:=2;
    Reset In_Err_Handler_2;
  ERROR
    Set In_Err_Handler_2;
    IF ERRNO=ERR_WAIT_MAXTIME THEN
griploop:
      IF Goto_Service=1 THEN
        TRYNEXT;
      ENDIF
      IF Tool_Cyl2_Closed=0 THEN
        Set Tool2_Not_Closed;
        WaitDI Fault_Ack,1;
        Reset Tool2_Not_Closed;
      ENDIF
      IF Tool_Cyl2_Closed=0 THEN
        GOTO griploop;
      ENDIF
      RETRY;
    ENDIF
  ENDPROC

  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  !PROC Open_Tool_2() !
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  PROC Open_Tool_2()
    Reset Clse_Tool2;
    PulseDO\PLength:=0.5,Opn_Tool2;
    WaitDI Tool_Cyl2_Open,1\MaxTime:=2;
    Reset In_Err_Handler_2;
  ERROR
    Set In_Err_Handler_2;
    IF ERRNO=ERR_WAIT_MAXTIME THEN
griploop:
      IF Goto_Service=1 THEN
        TRYNEXT;
      ENDIF
      IF Tool_Cyl2_Open=0 THEN
        Set Tool2_Not_Open;
        WaitDI Fault_Ack,1;
        Reset Tool2_Not_Open;
      ENDIF
      IF Tool_Cyl2_Open=0 THEN
        GOTO griploop;
      ENDIF
      RETRY;
    ENDIF
  ENDPROC
ENDMODULE

Logged
EricSequin
Newbie
*
Offline Offline

Posts: 2


« Reply #10 on: November 23, 2011, 12:07:48 PM »

I used this to call a diiferent program




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

MODULE PROGRAM_CONTROL
 

  PROC main()
   
    Load \Dynamic, "HOME:/F.prg";%"F:main"%;
  ENDPROC
ENDMODULE
Logged
JesseH
Newbie
*
Offline Offline

Posts: 8


« Reply #11 on: November 24, 2011, 12:33:12 PM »

Simple mod.


%%%
  VERSION:1
  LANGUAGE:ENGLISH
%%%
 
MODULE T
  !GENERATED BY ROBOTMASTER
  TASK PERS wobjdata wob0:=[FALSE,TRUE,"",[[0.00,0.00,0.00],[1,0,0,0]],[[0,0,0],[1,0,0,0]]];
  PERS tooldata tl_:=[TRUE,[[367.71,-0.25,435.92],[0,0.5,0,0.8660254]],[20,[0,0,220],[1,0,0,0],0,0,0]];
  LOCAL VAR string stPath := "HOME:";
  LOCAL VAR string stModule1 := "MODULE1.MOD";
  LOCAL VAR string stModule2 := "MODULE2.MOD";
   
  PROC MAIN()
    AccSet 10, 10;
    ConfL\On;
    SingArea\Wrist;
    Load stPath \File:=stModule1;
    %"T1_1"%;
    UnLoad stPath \File:=stModule1;
    Load stPath \File:=stModule2;
    %"T1_2"%;
    UnLoad stPath \File:=stModule2;
    ConfL\Off;
  ENDPROC
ENDMODULE
Logged
Pages: [1] Print 
« previous next »
Jump to:  


Login with username, password and session length

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines Valid XHTML 1.0! Valid CSS!