교육 내용 OMRON SYSMAC Gateway(SGW) 설치 INDEX 제어 프로그램 설치 GUI 소개 TM Module 확장 스케줄러 확장
인덱스 제어 표준화 Development Guide 2010년 12월 15일 인덱스 제어 표준화 Development Guide 오픈에스지닷넷
Table of Contents Scheduler Overview Workflow Class 로봇 5개 단위 동작
1. Scheduler Overview CTCTask ReadyList CTCTask Scheduler Class TM PM 생성 실행 참조 Scheduler Class 메서드1 메서드2 메서드3 … TM PM CM Workflow ReadyList Workflow Scheduler Class TM Class PM Class CM Class
Workflow 실행, ReadyList 작성 1. Scheduler Overview CTCTask Workflow 실행, ReadyList 작성 ReadyList 작업 목록 Workflow Scheduler 기능을 활용한 ReadyList 처리 로직 Scheduler Class 단위 Rule 메서드와 이벤트를 포함한 클래스 TM Class Arm의 상태, 로봇 제어 및 명령 송/수신 클래스 PM Class PM PIO 신호확인 CM Class PORT및 Slot 상태확인 모든 객체는 AppContext를 통해서 접근 가능함 현재의 AppContext 얻는 방법 AppContext.Current M_AppContext
1. Workflow 기본작업
1. Workflow 작업 가능여부 확인
1. Workflow PM 신호처리
2. Scheduler Class Scheduler Config 구성 <Scheduler SchedulerLStopBackMode="true" SchedulerWaitPosition="PM1" SchedulerWaitWithPanel="true" SchedulerCount2Enable="false" SchedulerHSInitialSkipEnable="true" assemblyName="CTCFx.Scheduler.SFA.dll" typeName="CTCFx.Scheduler.SFA.SFAScheduler" > </Scheduler> - SchedulerLStopBackMode : Loading Stop시 Back Mode 여부 설정(true : Back 함, false : Back 안 함) - SchedulerWaitPosition : Robot의 Default Position 설정 (Ex :"PM1", "none") - SchedulerWaitWithPanel : Wait Position 이동 시 Glass 유무를 설정(true : Glass 유 대기, fale : Glass 무 대기) - SchedulerCount2Enable : Count2 설정에 의한 연속 반송 여부 체크(true : 사용 함, false : 사용 안 함) - SchedulerHSInitialSkipEnable : H/S Initial 시 EQ와 연동 여부 설정(true : 단독 진행, false : 연동 진행) - assemblyName :Main Scheduler에 자식 Class로 사용될 DLL 이름 - typeName : Main Scheduler에 자식 Class의 Name Space
2. Scheduler Class 클래스 주요 구성
2. Scheduler Class ⑴ CM에서 Get 할 수 있는 조건 CM ① CM Glass Get 조건 PM 작업용 CM Ready List 존재 CM Port Pause 상태 아님 L/U Arm Glass 없음 PM Receive/Send Able On PM Receive/Send PreAction On PM Loading Stop Off 사양에 의해 UArm Get도 가능 ① TM L U PM1 PM2
2. Scheduler Class ⑵ CM → Arm Sequence Method 설명 ◈ CalcCMGetState SchedulerBase.cs Scheduler_PathChecker.cs Method 설명 ◈ CalcCMGetState - PIO에 의한 CM Get - L/U Arm Glass 유무 체크 - PM H/S 가능 신호 체크(bCMGet4PMPut, bCMGet4PMExchange) - PM Loading Stop 신호 체크(bLStop) ◈ CalcDefaultCMGetState - 미리 대기에 의한 Get - PM Loading Stop 신호 체크(bPMAvailable) ◈ FindSlotToProcess - 전체 ReadyList 조회 - CM Get 가능 여부 체크 - ReadyList의 Step 체크 ◈ GenerateCMGetCmd - CM Get Command 생성 CheckCMGet() CheckCMGet(CurrentPM) CheckCMGet(PMModuleBase PM) CalcCMGetState(PM) CalcDefaultCMGetState(PM) FindSlotToProcess(PM) GenerateCMGetCmd(_item)
2. Scheduler Class ⑶ PM에 Put 할 수 있는 조건 CM ③ PM1 Glass Put 조건 LArm Glass 유 UArm Glass 유무 관계 없음 PM1 Receive Able On PM1 Loading Stop Off LArm Glass 진행 모듈이 PM1 TM L ⑧ PM2 Glass Put 조건 LArm Glass 유 UArm Glass 유무 관계 없음 PM2 Receive Able On PM2 Loading Stop Off LArm Glass 진행 모듈이 PM2 ③ ⑧ PM1 PM2
2. Scheduler Class ⑷ Arm → PM Sequence Method 설명 ◈ CalcPMPutState SchedulerBase.cs Scheduler_PathChecker.cs Method 설명 ◈ CalcPMPutState - PIO에 의한 PM Put - L/U Arm Glass 유무 체크 - PM Receive PIO 체크(bSignal) - PM Loading Stop 신호 체크(bLStop) - Arm Glass Step 체크(bPanelStep) ◈ GeneratePMPutCmd - PM Put Command 생성 CheckPMPut() CheckPMPut(CurrentPM) CheckPMPut(PMModuleBase PM) CalcPMPutState(PM) GeneratePMPutCmd()
2. Scheduler Class ⑸ PM에서 Get 할 수 있는 조건 CM ② PM1 Glass Get 조건 UArm Glass 무 PM1 Send Able On LArm Glass 유무에 따른 조건 a. Glass가 없다면 PM1 Get 진행 b. Glass가 있다면 - PM1로 갈 Glass라면 PM1 Get 진행 - PM2로 갈 Glass라면 Get 안함 - CM으로 갈 Glass라면 Get 안함 TM U ⑦ PM2 Glass Get 조건(병렬) UArm Glass 무 PM2 Send Able On LArm Glass 유무에 따른 조건 a. Glass가 없다면 PM2 Get 진행 b. Glass가 있다면 - PM2로 갈 Glass라면 PM2 Get 진행 - PM1로 갈 Glass라면 Get 안함 - CM으로 갈 Glass라면 Get 안함 ⑦ ② PM1 PM2
2. Scheduler Class ⑹ PM → Arm Sequence Method 설명 ◈ CalcPMExState SchedulerBase.cs Scheduler_PathChecker.cs Method 설명 ◈ CalcPMExState - PIO에 의한 PM Exchange - L/U Arm Glass 유무 체크 - PM Send PIO 체크(bSignal) - PM은 Exchange 가능(bSignal) - Arm Glass Step 체크(bPanelStep) ◈ CalcPMGetState - PIO에 의한 PM Get - PM Send PIO 체크 (bSignal) - L/U Arm 모두 Empty인 경우 PM Get 가능 여부 체크(bArmStateGet) ◈ GeneratePMGetCmd - PM Get Command 생성 CheckPMGet() CheckPMGet(CurrentPM) CheckPortGet(PMModuleBase PM) CalcPMExState(PM) CalcPMGetState(PM) GeneratePMGetCmd()
2. Scheduler Class ⑺ CM에 Put 할 수 있는 조건 CM ⑨ CM Glass Put 조건(병렬) UArm Glass 있음 UArm의 Glass 다음 Step이 없음 LArm Glass 유무에 따른 조건 a. Glass가 없다면 CM Put진행 b. Glass가 있다면 - PM1로 갈 Glass라면 PM1 Put 대기 - PM2로 갈 Glass라면 PM2 Put 대기 - CM으로 갈 Glass 일 경우에 조건 ⓐ L_Stop인 경우 U/LArm 모두 Put ⓑ BackMode인 경우 UArm만 Put ⑨ TM TM U U PM1 PM2
2. Scheduler Class ⑻ Arm → CM Sequence Method 설명 ◈ CalcCMPutState SchedulerBase.cs Scheduler_PathChecker.cs Method 설명 ◈ CalcCMPutState - Done Glass CM Put - L/U Arm Glass 유무 체크 - Arm Glass의 Done 체크(bPanelStep) ◈ CheckCMPutInterlock - CM Put 가능 여부 체크(bCheckCMPutInterlock) ◈ GenerateCMPutCmd - CM Get Command 생성 CheckCMPut() CheckCMPut(CurrentPM) CheckCMPut(PMModuleBase PM) CalcCMPutState(PM) CheckCMPutInterlock() GenerateCMPutCmd()
2. Scheduler Class ⑴ Get Step Method Get Normal Step Get Abnormal Step GetStep00_Start() GetRecovery_Wait_TMAlarmClear() GetStep10_ReadData() GetRecovery00_Start() GetStep20_Wait_SendStart_On() GetRecovery10_ActiveResume() GetStep30_DoRobotAction() GetRecovery20_ActiveInitial() GetStep40_Wait_RobotAction_Done() GetRecovery20_HSSkipInitial() GetStep50_Wait_SendComplete_On() GetRecovery30_PassiveResume() GetStep60_Wait_SendComplete_Off() GetRecovery40_PassiveInitial() GetWait_ImmPauseReq_Off() GetDataRefuse_Wait_RefuseOrSendStart_Off() Get Normal Step Get Abnormal Step
① Get Normal Step Method 2. Scheduler Class ① Get Normal Step Method GetStep00_Start() Get H/S 작업 시작 GetStep10_ReadData() EQ Send Data Read GetStep20_Wait_SendStart_On() 설비 Send Start 대기 GetStep30_DoRobotAction() Contact Point Check 및 Get 또는 Exchange 명령 Robot 전송 GetStep40_Wait_RobotAction_Done() Robot Request 명령에 대한 완료 Reply 대기 GetStep50_Wait_SendComplete_On() EQ Send Complete On 대기 GetStep60_Wait_SendComplete_Off() EQ Send PIO All Off 대기 GetWait_ImmPauseReq_Off() EQ Get 작업중 발생한 Imm'pause Request에 대한 Off 대기 GetDataRefuse_Wait_RefuseOrSendStart_Off() EQ 배출 Glass의 이상 Data에 대한 처리를 대기
② Get Abnormal Step Method 2. Scheduler Class ② Get Abnormal Step Method GetRecovery_Wait_TMAlarmClear() Robot Alarm 발생에 대한 조치를 대기 GetRecovery00_Start() Get 작업에 대한 Recovery 대기 GetRecovery10_ActiveResume() Active Resume에 대한 Reply 대기(INDEX Request ⇒ EQ Reply) GetRecovery20_ActiveInitial() Active Initial에 대한 Reply대기(INDEX Initial) GetRecovery20_HSSkipInitial() Initial을 INDEX, EQ간에 진행하지 않고 INDEX 단독으로 진행(CF Only) GetRecovery30_PassiveResume() Passive Resume에 대한 Reply 대기(EQ Request ⇒ INDEX Reply) GetRecovery40_PassiveInitial() Passive Initial 대기
2. Scheduler Class ⑵ Put Step Method Put Normal Step Put Abnormal Step PutStep00_Start() PutRecovery_Wait_TMAlarmClear() PutStep10_WriteData() PutRecovery00_Start() PutStep20_Wait_RcvStart_On() PutRecovery10_ActiveResume() PutStep30_DoRobotAction() PutRecovery20_ActiveInitial() PutStep40_Wait_RobotAction_Done() PutRecovery20_HSSkipInitial() PutStep50_Wait_RcvComplete_On() PutRecovery30_PassiveResume() PutStep60_Wait_RcvComplete_Off() PutRecovery40_PassiveInitial() PutWait_ImmPauseReq_Off() PutDataRefuse_CheckDataUpdateFlag() PutDataRefuse_Wait_Refuse_Off() Put Normal Step Put Abnormal Step
① Put Normal Step Method 2. Scheduler Class ① Put Normal Step Method PutStep00_Start() Put H/S 시작 PutStep10_WriteData() INDEX Put Glass Data Write PutStep20_Wait_RcvStart_On() 설비의 Receive Start On 대기 PutStep30_DoRobotAction() Contact Point Check 및 Put 명령 Robot 전송 PutStep40_Wait_RobotAction_Done() Robot Request 명령에 대한 완료 Reply 대기 PutStep50_Wait_RcvComplete_On() EQ Receive Complete On 대기 PutStep60_Wait_RcvComplete_Off() EQ Receive PIO All Off 대기 PutWait_ImmPauseReq_Off() EQ Put 작업중 발생한 Imm'pause Request에 대한 Off 대기 PutDataRefuse_CheckDataUpdateFlag() INDEX 투입 Glass의 이상 Data에 대한 처리를 대기 PutDataRefuse_Wait_Refuse_Off() EQ의 Receive Refuse Bit Off 대기
② Put Abnormal Step Method 2. Scheduler Class ② Put Abnormal Step Method PutRecovery_Wait_TMAlarmClear() Robot Alarm 발생에 대한 조치를 대기 PutRecovery00_Start() Put 작업에 대한 Recovery 대기 PutRecovery10_ActiveResume() Active Resume에 대한 Reply 대기(INDEX Request ⇒ EQ Reply) PutRecovery20_ActiveInitial() Active Initial에 대한 Reply대기(INDEX Initial) PutRecovery20_HSSkipInitial() Initial을 INDEX, EQ간에 진행하지 않고 INDEX 단독으로 진행(CF Only) PutRecovery30_PassiveResume() Passive Resume에 대한 Reply 대기(EQ Request ⇒ INDEX Reply) PutRecovery40_PassiveInitial() Passive Initial 대기
2. Scheduler Class Scheduler 확장(상속 관계) OpenSG WorkFrame 업체별 확장 class SchedulerBase class StandardScheduler : SchedulerBase 업체별 확장 class SFAScheduler : StandardScheduler class ToptecScheduler : StandardScheduler class RorzeScheduler : StandardScheduler class EverScheduler : StandardScheduler
class StandardScheduler class StandardScheduler Scheduler 확장(Method Override) Override 설명 ◈ 최상의 class SchedulerBase의 FindSlotToPorcess ()는 가상함수로 선언됨. ◈ 업체에서 확장시킨 class가 없는 경우 INDEX 프로그램이 진행 중 해당 함수를 호출 할 경우 최상위 class인 SchedulerBase를 상속받은 중간 class StandardScheduler의 FindSlotToPorcess()이 호출 됨. ◈ 업체에서 확장한 최하위 class SFAScheduler가 추가 될 경우 중간 class인 StandardScheduler의 FindSlotToProcess()는 가려지게 되고 업체에서 확장된 최하의 class인 SFAScheduler의 FindSlotToProcess()가 호출됨. class SchedulerBase public virtual JobItem FindSlotToProcess(PMModuleBase PM) class StandardScheduler public override JobItem FindSlotToProcess(PMModuleBase PM) class SchedulerBase public virtual JobItem FindSlotToProcess(PMModuleBase PM) class StandardScheduler public override JobItem FindSlotToProcess(PMModuleBase PM) class SFAScheduler public override JobItem FindSlotToProcess(PMModuleBase PM)
2. 로봇 5개 단위 동작 A: Port -> Arm , Get B: Arm -> Stage , Put C: State -> Arm , Get D: Arm -> Port , Put *Prep *Loading Stop *로봇 단위 동작별 실시간 경로 계산 CM1 CM2 CM3 CM4 A D TM B C PM1 PM2
감사합니다.