1. Home
    1. Dashboard
    2. Search
  2. Forum
    1. Unresolved Threads
    2. Members
      1. Recent Activities
      2. Users Online
      3. Team Members
      4. Search Members
      5. Trophys
  3. Articles
  4. Blog
  5. Videos
  6. Jobs
  7. Shop
    1. Orders
  • Login or register
  • Search
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Articles
  • Pages
  • Forum
  • Blog Articles
  • Products
  • More Options
  1. Robotforum - Support and discussion community for industrial robots and cobots
  2. Forum
  3. Industrial Robot Support and Discussion Center
  4. Fanuc Robot Forum
Your browser does not support videos RoboDK Software for simulation and programming
Visit our Mainsponsor
IRBCAM
Robotics Channel
Robotics Training
Advertise in robotics
Sponsored Ads

irPickTool: reject part that passed vision

  • SkyeFire
  • February 13, 2024 at 2:49 PM
  • Thread is Unresolved
  • Online
    SkyeFire
    Reactions Received
    1,042
    Trophies
    12
    Posts
    9,388
    • February 13, 2024 at 2:49 PM
    • #1

    :hmmm: I'm trying to figure out how to do something with irPickTool (which I admit I'm not terribly familiar with). This is a conveyor-tracking pick, with an irVision job triggering every Xmm of conveyor motion (no part sensor).

    The parts sometimes come in oversized, and are rejected by the irVision job. But now, the customer would like to get the actual measurements of the parts, passed or rejected, sent to the cell PLC over GOs. I'm trying to figure out if this is even feasible.

    To start with, I can't get any measurement data if the Blob Finder tool rejects a part for being oversized. My current thought is that I can open up the Blob parameters, and add some Measurement Output tools. But this still means that irPickTool will "see" a valid part from irVision and start calling the Pick program chain.

    So, how can I "hijack" PickTool's call chain without breaking everything? I can add an IF statement to check VR[1].MEAS[1] in the Pick program, but if I just skip the pick moves, that'll leave the part in the PickTool queue, as I understand it, so I'd have to add something to dequeue that part. But all the buffering takes place in the black-box KAREL programs, so I'm sort of wandering around blindly here.

    I suppose a really "hacky" solution would be to let the robot carry out the Pick program, and just use an IF-THEN to block the gripper if the part measurement is too large. That would let irPickTool recover naturally, but it really feels like a last-resort option.

  • gpunkt
    Reactions Received
    120
    Trophies
    6
    Posts
    457
    • February 13, 2024 at 3:50 PM
    • Best Answer
    • #2

    Not sure if the correct way, but alter your vision process to accept all sizes, then do the discrimination in the robot depending on the measurement, and if NOK part try:


    CALL PKCSACKQUE (CStn ID=R[11:CSTN1 ID],Remove)

    (But without the picking-sequence)

    This will remove the current part from the que.

  • Online
    SkyeFire
    Reactions Received
    1,042
    Trophies
    12
    Posts
    9,388
    • February 13, 2024 at 9:14 PM
    • #3
    Quote from gpunkt

    CALL PKCSACKQUE (CStn ID=R[11:CSTN1 ID],Remove)

    (But without the picking-sequence)

    Ah! So, IF Pass THEN Pickxx, ELSE PKCSACKQUE(Remove)?

    Now, where to do it? It has to be after the part has been "seen" by irVision and the Pick sequence has been started. Looks like I could do it in PK_CV_PICK11 -- there's an empty section with a "check reject" label in between PKCSCALWPOS and PKCSCHKPOS:

    Code
    34:  CALL PKCSCALWPOS("CStn ID"=R[110:Pk1x StnId],"Ref Pos PR"=57,"Offset VR"=1,"GetQ stat"=R[123:Pk1x GetQ stat],"Do WaitMove Reg"=95,"Wait Pos PR"=55,"NoMove Distance"=150) ;
      35:   ;
      36:   ;
      37:  R[8]=R[95:TemporaryUse1]    ;
      38:   ;
      39:  --eg:Move to wait position ;
      40:  IF (R[95:TemporaryUse1]=0),CALL PK_CV_WAITPOS1("UTOOL Num"=R[107:Counter G1],"Appr Ofst PR"=56,"WaitPos PR"=55,"PkReachable Reg"=115) ;
      41:   ;
      42:  LBL[40:ChkGetQStat] ;
      43:  IF ((R[199:Buf Id G1]>0) AND (R[123:Pk1x GetQ stat]>0)),JMP LBL[10000] ;
      44:  IF R[123:Pk1x GetQ stat]<>0,JMP LBL[10] ;
      45:   ;
      46:   ;
      47:  LBL[50] ;
      48:   ;
      49:  LBL[60] ;
      50:  //--eg: Smart Pick ;
      51:   ;
      52:   ;
      53:  LBL[70] ;
      54:  //--eg: Check if a reject part ;
      55:   ;
      56:   ;
      57:  LBL[80] ;
      58:   ;
      59:  --eg: Set Utool ;
      60:  UTOOL_NUM=R[107:Counter G1] ;
      61:  IF R[115:Pk1x UsePosChk]=0,JMP LBL[85] ;
      62:  --eg:Check if tracking position is reachable ;
      63:  CALL PKCSCHKPOS("CStn ID"=R[110:Pk1x StnId],"Offset VR"=1,"Ref Pos PR"=57,"Appr Ofst PR"=56,"Tool Offset"=1,"Stat Reg"=108) ;
      64:  IF R[108:PosNotReach G1]<>0,JMP LBL[1000] ;
    Display More
  • gpunkt
    Reactions Received
    120
    Trophies
    6
    Posts
    457
    • February 14, 2024 at 7:17 AM
    • #4
    Quote from SkyeFire

    Ah! So, IF Pass THEN Pickxx, ELSE PKCSACKQUE(Remove)?

    Now, where to do it? It has to be after the part has been "seen" by irVision and the Pick sequence has been started. Looks like I could do it in PK_CV_PICK11 -- there's an empty section with a "check reject" label in between PKCSCALWPOS and PKCSCHKPOS:

    Code
    34:  CALL PKCSCALWPOS("CStn ID"=R[110:Pk1x StnId],"Ref Pos PR"=57,"Offset VR"=1,"GetQ stat"=R[123:Pk1x GetQ stat],"Do WaitMove Reg"=95,"Wait Pos PR"=55,"NoMove Distance"=150) ;
      35:   ;
      36:   ;
      37:  R[8]=R[95:TemporaryUse1]    ;
      38:   ;
      39:  --eg:Move to wait position ;
      40:  IF (R[95:TemporaryUse1]=0),CALL PK_CV_WAITPOS1("UTOOL Num"=R[107:Counter G1],"Appr Ofst PR"=56,"WaitPos PR"=55,"PkReachable Reg"=115) ;
      41:   ;
      42:  LBL[40:ChkGetQStat] ;
      43:  IF ((R[199:Buf Id G1]>0) AND (R[123:Pk1x GetQ stat]>0)),JMP LBL[10000] ;
      44:  IF R[123:Pk1x GetQ stat]<>0,JMP LBL[10] ;
      45:   ;
      46:   ;
      47:  LBL[50] ;
      48:   ;
      49:  LBL[60] ;
      50:  //--eg: Smart Pick ;
      51:   ;
      52:   ;
      53:  LBL[70] ;
      54:  //--eg: Check if a reject part ;
      55:   ;
      56:   ;
      57:  LBL[80] ;
      58:   ;
      59:  --eg: Set Utool ;
      60:  UTOOL_NUM=R[107:Counter G1] ;
      61:  IF R[115:Pk1x UsePosChk]=0,JMP LBL[85] ;
      62:  --eg:Check if tracking position is reachable ;
      63:  CALL PKCSCHKPOS("CStn ID"=R[110:Pk1x StnId],"Offset VR"=1,"Ref Pos PR"=57,"Appr Ofst PR"=56,"Tool Offset"=1,"Stat Reg"=108) ;
      64:  IF R[108:PosNotReach G1]<>0,JMP LBL[1000] ;
    Display More

    You should already have "CALL PKCSACKQUE(.....,Success) for when you made a "successful" pick that will remove the part from the que.

    You will just have to introduce a different branch where you remove the part from the que but without picking it.

    Looks like you have a good spot in your program to implement it.

Advertising from our partners

IRBCAM
Robotics Channel
Robotics Training
Advertise in robotics
Advertise in Robotics
Advertise in Robotics

Job Postings

  • Anyware Robotics is hiring!

    yzhou377 February 23, 2025 at 4:54 AM
  • How to see your Job Posting (search or recruit) here in Robot-Forum.com

    Werner Hampel November 18, 2021 at 3:44 PM
Your browser does not support videos RoboDK Software for simulation and programming

Tag Cloud

  • abb
  • Backup
  • calibration
  • Communication
  • CRX
  • DCS
  • dx100
  • dx200
  • error
  • Ethernet
  • Ethernet IP
  • external axis
  • Fanuc
  • help
  • hmi
  • I/O
  • irc5
  • IRVIsion
  • karel
  • kawasaki
  • KRC2
  • KRC4
  • KRC 4
  • KRL
  • KUKA
  • motoman
  • Offset
  • PLC
  • PROFINET
  • Program
  • Programming
  • RAPID
  • robodk
  • roboguide
  • robot
  • robotstudio
  • RSI
  • safety
  • Siemens
  • simulation
  • SPEED
  • staubli
  • tcp
  • TCP/IP
  • teach pendant
  • vision
  • Welding
  • workvisual
  • yaskawa
  • YRC1000

Thread Tag Cloud

  • abb
  • Backup
  • calibration
  • Communication
  • CRX
  • DCS
  • dx100
  • dx200
  • error
  • Ethernet
  • Ethernet IP
  • external axis
  • Fanuc
  • help
  • hmi
  • I/O
  • irc5
  • IRVIsion
  • karel
  • kawasaki
  • KRC2
  • KRC4
  • KRC 4
  • KRL
  • KUKA
  • motoman
  • Offset
  • PLC
  • PROFINET
  • Program
  • Programming
  • RAPID
  • robodk
  • roboguide
  • robot
  • robotstudio
  • RSI
  • safety
  • Siemens
  • simulation
  • SPEED
  • staubli
  • tcp
  • TCP/IP
  • teach pendant
  • vision
  • Welding
  • workvisual
  • yaskawa
  • YRC1000
  1. Privacy Policy
  2. Legal Notice
Powered by WoltLab Suite™
As a registered Member:
* You will see no Google advertising
* You can translate posts into your local language
* You can ask questions or help the community with your knowledge
* You can thank the authors for their help
* You can receive notifications of replies or new topics on request
* We do not sell your data - we promise

JOIN OUR GREAT ROBOTICS COMMUNITY.
Don’t have an account yet? Register yourself now and be a part of our community!
Register Yourself Lost Password
Robotforum - Support and discussion community for industrial robots and cobots in the WSC-Connect App on Google Play
Robotforum - Support and discussion community for industrial robots and cobots in the WSC-Connect App on the App Store
Download