RobotStudio event

WorldZones

Options

I am trying to setup some worldzones to avoid our system from colliding with an overhead crane.

I have two park locations for the crane with sensors wired to digital inputs to the robot that tell when the crane is in one of those locations (diCranePark1, diCranePark2)

when the crane is in either of these park locations i define worldzone and apply the limit to stop the robot from entering this area, when the crane is in neither of these locations i apply a larger wordzone limit as i dont know where the crane is. I then made some interupts and traps that enable or disable the correct zones. 

WzFree wzCranePark1; 
WzFree wzCranePark2; 
WzFree wzCranePark3; 
WzLimJointDefInside, sCranePark1, jCranePark1_low, jCranePark1_high;
WzLimJointDefInside, sCranePark2, jCranePark2_low, jCranePark2_high;
WzLimJointDefInside, sCranePark3, jCranePark3_low, jCranePark3_high;

WzLimSup Temp, wzCranePark1, sCranePark1; 
WzLimSup Temp, wzCranePark2, sCranePark2; 
WzLimSup Temp, wzCranePark3, sCranePark3; 
WzDisable wzCranePark1; 
WzDisable wzCranePark2; 
WzDisable wzCranePark3; 
IF diCranePark1 = 1 THEN 
WzEnable wzCranePark1; 
ELSEIF diCranePark2 = 1 THEN 
WzEnable wzCranePark2; 
ELSE
WzEnable wzCranePark3; 
ENDIF 
CONNECT intCranePark1 WITH trpCranePark1; 
ISignalDI diCranePark1,edge,intCranePark1; 
CONNECT intCranePark2 WITH trpCranePark2; 
ISignalDI diCranePark2,edge,intCranePark2;


Now I have 2 problems with this solution.

1. The interupts only work whilst the robot is running, is there a better way to enable/disable the worldzone limits that would work whilst the robot was not running.

2. The worldzones all get wiped when we reset the program pointer to main or load a new program (which is something we do every time we run a program on the robot). I tested it with wzstationary instead of wztemporary and then I cant use wzenable / wzdisable. 

Any ideas on how to do this?




mattdavis2010-02-24 04:20:43

Comments

  • mattdavis
    Options
    found most of a solution.

    set all the zones to WZDOSet instead of WZLimSup and used cross connections with the diCraneParks to tell if the machine should stop and the cross connected this with a system input to quickstop the system.

    this only works in auto mode as quickstop is ignored in manual (and also silently stops the system with no error message at all)

    is there a way around these two problems?
  • j_proulx
    Options
    Hello Matt,
     


    1. The interupts only work whilst the robot is running, is there a better way to enable/disable the worldzone limits that would work whilst the robot was not running.

     

    The ISignalDI has a switch called SingleSafe which will log your interrupt while the robot program is stopped.

     


    [ SingleSafe ]

    Data type:
    switch
    Specifies that the interrupt is single and safe. For definition of single, see description of
    Single argument. A safe interrupt can not be put in sleep with instruction ISleep. The safe interrupt event will be queued at program stop and stepwise execution, and when starting in continious mode again, the interrupt will be executed. The only time a safe interrupt will be thrown is when the interrupt queue is full. Then an error will be reported. The interrupt will not survive program reset, e.g. PP to main.

    2. The worldzones all get wiped when we reset the program pointer to main or load a new program (which is something we do every time we run a program on the robot). I tested it with wzstationary instead of wztemporary and then I cant use wzenable / wzdisable. 

     

    You may want to try a START Event Routine. Event Routines are a Controller system parameter

     


    Start : Execution is started from the beginning of the program. This is when you press the start or step buttons after having:
    ?_? loaded a new program or a new module

    ?_? ordered Start from beginning

    ?_? ordered Debug/Move PP to Main

    ?_? ordered Debug/Move PP to Routine

    ?_? moved the program pointer in such a way that the execution order is lost


    BR / Jim Proulx
  • mattdavis
    Options
    Have got a little bit further with this. 

    It works properly in auto mode using stationary zones triggering simulated outputs, with these outputs cross connected with the real zone enable/disable signals to trigger the system input quickstop. 

    I then added an event routine to run on quickstop that would inform the operator what the problem was, all of these keeps working after a new program is loaded as its setup in the power on event routine.

    The only issue is when you are jogging the robot manually if you approach the world zone you are not meant to go in the robot does stop moving, but doesn't run the quickstop event. If you then just let go of enabling device and press it again the robot will happily jog into the zone that it shouldn't. This is not a huge problem as the robot stopping should give the operator a bit of an idea that they should look if there going to hit something, but a message on the screen would be nice.
  • alexsdm
    alexsdm
    edited August 2014
    Options
    The RobotWare 5.15.07, have a problem with WZHomeJointDef.Is wrong.When I use 9E9 for any axis, robot show one message50261: WZone outside work area
    Description
    The definition of minimum limit for the World Zone wz_P_HOME is outside work area for: rob1_6 ...
    Actions
    Change the definition of the World Zone so the limit will be inside work area or insert 9E9 to remove an axis from test by the WZone.
     See using in axis six.module beta()  PERS wzstationary wz_P_HOME:=[1]; CONST jointtarget JT_HomePos:=[[-50.7646,-34.6114,39.7814,-182.752,3.35412,0.764325],[100.001,9E+09,9E+09,9E+09,9E+09,9E+09]];PROC WZ_POSITIONS()   VAR shapedata joint_space;CONST jointtarget delta_pos := [ [ 0.5, 0.5, 0.5, 0.5, 0.5, 9E9], [ 100, 9E9, 9E9, 9E9, 9E9, 9E9] ];WZHomeJointDef \Inside, joint_space, JT_HomePos, delta_pos;WZDOSet \Stat, wz_P_HOME \Inside, joint_space, O_HOMEP, 1;ENDPROC ENDMODULE
    Post edited by alexsdm on