Skip to main content
דלג לתוכן הראשי
תכנות FANUC TP מתקדם — ניטור אירועים
FANUC

ניטור אירועים ב-FANUC TP: CONDITION, MONITOR ולוגיקת רקע

צוות ההנדסה של Xpert Robotics10 דקות קריאה

טכניקות מתקדמות לתכנות מונחה-אירועים ב-FANUC TP. מדריך מעשי ל-CONDITION/ENDCONDITION, הפעלת MONITOR, הגדרת לוגיקת רקע (BG Logic) ו-SKIP CONDITION — עם תבניות ייצור אמיתיות לזיהוי תקיעות מסוע, ניהול timeout של ראייה ממוחשבת וניטור בטיחות.

רוב תוכניות FANUC TP מטפלות באירועים באותה דרך: הוראת WAIT שחוסמת עד שאות מגיע. זה עובד — אך במחיר. WAIT חסומה לא יכולה להגיב לכמה כניסות בו-זמנית, לא יכולה לבטל על timeout ללא לוגיקה מסורבלת, ולא יכולה לנטר תנאי בטיחות בזמן תנועה. CONDITION, MONITOR, לוגיקת רקע ו-SKIP CONDITION פותרים את כל אלה. אם עדיין לא השתמשת בהם — המדריך הזה ישנה את האופן שבו תכתוב כל תוכנית ייצור.

הבעיה עם לולאות בדיקה

הגישה הרגילה לבדיקת תנאים נראית כך — ויש לה שלוש בעיות מהותיות:

fanuc-tp
! --- POLLING APPROACH (problematic) ---
  1: WAIT DI[5:PART_PRESENT]=ON   ;  ! Blocks — cannot watch anything else
  2: WAIT DI[6:CONVEYOR_JAM]=OFF  ;  ! Runs AFTER part check — not simultaneous
  3: L P[2:PICK] 200mm/sec FINE   ;  ! If jam happens during move, no reaction

מה שבדיקה חוסמת לא יכולה לעשות:

  • לצפות בכמה תנאים בו-זמנית — כל WAIT חוסמת את כל השאר
  • להגיב בזמן תנועה — WAIT לפני מהלך לא יכולה לבטל את המהלך אם משהו משתנה באמצע
  • לנטר תנאי בטיחות ברציפות — הבדיקה נעצרת כשהתוכנית מגיעה לקטע אחר

CONDITION / ENDCONDITION — הגדרת כללי אירוע

בלוק CONDITION מגדיר כלל בשם: "כשזה קורה, עשה זאת." הבלוק עצמו אינו עושה דבר כשהוא מוגדר — הוא הופך פעיל רק כשקוראים ל-MONITOR. ההפרדה בין הגדרה להפעלה היא המפתח לתכנות אירועים נקי ב-TP.

fanuc-tp
! --- CONDITION block syntax (one action per WHEN) ---
CONDITION[1]:
  WHEN DI[10:CONVEYOR_JAM]=ON DO CALL JAM_HANDLER ;
ENDCONDITION

! --- Multiple WHEN clauses in one block ---
CONDITION[2]:
  WHEN DI[20:E_STOP_EXT]=ON DO CALL EMERGENCY_STOP ;
  WHEN R[10:CYCLE_COUNT]>1000 DO DO[6:MAINT_LIGHT]=ON ;
ENDCONDITION

כללי תחביר של CONDITION:

  • CONDITION[n] — n הוא 1 עד 32 (משתנה לפי דגם הבקר). כל מספר הוא חריץ בשם.
  • WHEN תומך ב: DI, DO, RI, RO, UI, UO (I/O), R[] (רגיסטרים מספריים) והשוואות טיימר
  • DO תומך ב: הגדרת פלט, CALL תוכנית, JMP LBL — פעולה אחת לכל WHEN
  • כמה WHEN בבלוק אחד מנוטרים כולם בו-זמנית ברגע שMONITOR פעיל
  • בלוקי CONDITION נשמרים בזיכרון הבקר — הגדר מחדש בתחילת תוכנית לוודא מצב נכון

MONITOR / MONITOR END — הפעלת תנאים

MONITOR מתחיל לצפות בבלוק CONDITION. MONITOR END עוצר אותו. כל מה שנמצא בין שתי ההוראות רץ עם התנאי פעיל ברקע — כולל הוראות תנועה. זהו ההבדל המהותי מ-WAIT.

fanuc-tp
! --- MONITOR activation pattern ---
  1: MONITOR[1]                    ;  ! Start watching CONDITION[1]
  2: MONITOR[2]                    ;  ! Can monitor multiple simultaneously
  3: J P[1:APPROACH] 80% CNT50    ;  ! Condition[1] + [2] active during this move
  4: L P[2:PICK] 200mm/sec FINE   ;  ! Still active — jam triggers during move
  5: DO[1:GRIPPER]=ON              ;  ! Still active
  6: WAIT .5(sec)                  ;  ! Still active
  7: MONITOR END[1]                ;  ! Stop condition 1
  8: MONITOR END[2]                ;  ! Stop condition 2
  9: J P[3:HOME] 100% FINE        ;  ! No monitoring — normal program flow
💡

תמיד קרא ל-MONITOR END לפני שהתוכנית מסתיימת או חוזרת להתחלה. CONDITION שנותר פעיל מריצה קודמת עלול להפעיל באופן בלתי צפוי במחזור הבא. שיטה מומלצת: בתחילת כל תוכנית — בטל את כל התנאים ואז הפעל מחדש רק את הנדרשים.

fanuc-tp
! --- Clean program start pattern ---
  1: MONITOR END[1]                ;  ! Reset any leftover from last run
  2: MONITOR END[2]                ;
  3: MONITOR END[3]                ;
! Redefine conditions fresh (CONDITION block is not a numbered line)
CONDITION[1]:
  WHEN DI[10:JAM]=ON DO CALL JAM_HANDLER ;
ENDCONDITION
  4: MONITOR[1]                    ;  ! Activate clean

לוגיקת רקע (BG Logic) — ניטור קבוע

לוגיקת רקע שונה מהותית מ-CONDITION/MONITOR. זוהי משימה מתמשכת הרצה בבקר בכל עת — בין אם תוכנית רצה, מושהית או עצורה. מגדירים אותה דרך תפריט ה-Pendant, לא בקוד TP. כדאי להשתמש בה לבטיחות ברמת התא וניהול I/O שחייב לשרוד מעבר בין תוכניות.

fanuc-tp
! --- Navigate to BG Logic setup ---
! MENU > 6 SETUP > F1 [NEXT] > 6 BG Logic
!
! Each line: CONDITION = ACTION
! Example entries in BG Logic editor:
!
!  DI[30:DOOR_OPEN]=ON  ->  DO[8:SPEED_LIMIT]=ON
!  DI[30:DOOR_OPEN]=OFF ->  DO[8:SPEED_LIMIT]=OFF
!  DI[31:E_STOP]=ON     ->  CALL ALARM_LOG
!
! BG Logic runs every scan cycle (~8ms) — always on
! Cannot be stopped by MONITOR END — only by editing the BG Logic table

BG Logic לעומת CONDITION — מתי להשתמש בכל אחד:

  • BG Logic: בטיחות ברמת התא (נעילות דלת, הגבלות מהירות, רישום אזעקות) — חייב לפעול גם כשאין תוכנית רצה
  • BG Logic: ניהול I/O קבוע שלא צריך לכבות לעולם בייצור
  • CONDITION/MONITOR: אירועים ברמת התהליך (תקיעת מסוע במחזור איסוף, timeout ראייה) — פעיל רק בשלבי תוכנית מסוימים
  • CONDITION/MONITOR: אירועים שצריכים להפעיל רק בפעולות ספציפיות — השתמש ב-MONITOR/MONITOR END לתחימת אותן פעולות
  • שניהם: אל תקרא לתוכניות Karel ארוכות מ-BG Logic — שמור על פעולות מהירות בלבד

SKIP CONDITION — מלכודת אירוע במהלך תנועה

SKIP CONDITION מצמידה מלכודת אירוע להוראת תנועה בודדת. אם התנאי מתממש במהלך התנועה, הרובוט עוצר והביצוע קופץ לתווית. זה מאפשר הרכבה בשליטת כוח (עצור עם זיהוי מגע) וזיהוי חלקים באמצע תנועה.

fanuc-tp
! --- SKIP CONDITION syntax ---
SKIP CONDITION DI[15:CONTACT_SENSOR]=ON ;
L P[10:SEARCH_POS] 50mm/sec FINE Skip,LBL[20] ;
! If sensor fires during move: skip to LBL[20]
! If move completes without trigger: continue normally

LBL[20:CONTACT_FOUND] :
  PR[5]=LPOS              ;  ! Record exact position where contact occurred
  R[20]=PR[5,3]           ;  ! Store Z height of contact point
  L P[11:RETRACT] 100mm/sec FINE ;

פרטי SKIP CONDITION:

  • חייב להיות בשורה שמיד לפני הוראת התנועה — ללא הוראות אחרות ביניהם
  • Skip,LBL[n] על שורת התנועה מציין לאן לקפוץ אם התנאי מופעל
  • אם התנאי לא מופעל, הביצוע ממשיך רגיל אחרי התנועה (LBL מדולג)
  • LPOS מלכד את המיקום הקרטזי המדויק שבו ה-Skip הופעל — שימושי לתוכניות אדפטיביות
  • עובד עם L (לינארי) ו-C (מעגלי) — לא עם J (מפרקים)
  • SKIP אחד בלבד לכל תנועה — לא ניתן לערום כמה תנאי SKIP על הוראה אחת

תבניות ייצור

להלן תבניות מלאות ומוכחות בייצור המשלבות את הטכניקות שלמעלה.

fanuc-tp
! === PATTERN 1: CONVEYOR JAM DETECTION ===
CONDITION[1]:
  WHEN DI[20:CONV_JAM]=ON DO CALL CONV_JAM_ROUTINE ;
ENDCONDITION
  1: MONITOR[1]          ;
  2: J P[1:APPROACH] 80% CNT50 ;
  3: L P[2:PICK] 200mm/sec FINE ;
  4: DO[1:GRIPPER]=ON    ;
  5: WAIT .3(sec)        ;
  6: L P[1:APPROACH] 200mm/sec CNT50 ;
  7: MONITOR END[1]      ;
  8: DO[5:ALARM]=OFF     ;  ! Clear alarm if cycle completed normally
fanuc-tp
! === PATTERN 2: VISION TIMEOUT HANDLING ===
CONDITION[2]:
  WHEN TIMER[1]>=3000 DO JMP LBL[99] ;
ENDCONDITION
  1: TIMER[1]=0           ;  ! Reset timer
  2: DO[10:CAM_TRIG]=ON  ;
  3: WAIT .02(sec)        ;
  4: DO[10:CAM_TRIG]=OFF ;
  5: MONITOR[2]          ;  ! Start timeout watchdog
  6: WAIT DI[11:VIS_RDY]=ON ;
  7: MONITOR END[2]      ;  ! Camera responded — cancel timeout
  8: CALL VIS_READ       ;

LBL[99:VISION_TIMEOUT] :
  9: MONITOR END[2]      ;
 10: DO[14:VIS_ALARM]=ON ;
 11: PAUSE               ;
fanuc-tp
! === PATTERN 3: FORCE-CONTROLLED INSERTION ===
  1: PR[10]=P[5:SEARCH_START] ;
SKIP CONDITION DI[25:FORCE_THRESH]=ON ;
  2: L PR[10] 10mm/sec FINE Skip,LBL[50] ;
  3: JMP LBL[90]          ;  ! No contact found

LBL[50:CONTACT] :
  4: PR[11]=LPOS          ;  ! Save contact position
  5: R[30]=PR[11,3]       ;  ! Extract Z value
  6: IF R[30]<R[31:Z_MIN],JMP LBL[90] ;
  7: L PR[11] 5mm/sec FINE ;
  8: CALL INSERT_SEQUENCE ;
  9: JMP LBL[99]         ;

LBL[90:DEPTH_ERROR] :
 10: DO[14:ALARM]=ON      ;
 11: PAUSE               ;

LBL[99:END] :
💡

התבניות הללו מוכחות בייצור אך חייבות להיות מותאמות למיפוי ה-I/O, דרישות הבטיחות וגרסת הקושחה שלך. תמיד בדוק CONDITION ו-MONITOR במצב T1 (מהירות מופחתת) לפני הרצה ב-AUTO. Xpert Robotics מספקת ייעוץ תכנות FANUC מתקדם והפעלה בכל רחבי ישראל.

FANUC CONDITION ENDCONDITIONFANUC MONITOR TPלוגיקת רקע FANUCFANUC BG LogicFANUC SKIP CONDITIONתכנות מונחה אירועים FANUC