private bool PostWork() { bool success = true; var rtc = this.MarkerArg.Rtc; var laser = this.MarkerArg.Laser; var rtcMOTF = rtc as IRtcMOTF; var rtcExt = rtc as IRtcExtension; success &= rtcMOTF.ListMOTFEnd(Vector2.Zero); success &= rtc.ListEnd(); if (success) { if (this.IsExternalTrigger) { //MOTF 용 외부 트리거 설정 var extMode = new Rtc5ExternalControlMode(); extMode.Add(Rtc5ExternalControlMode.Bit.ExternalStart); extMode.Add(Rtc5ExternalControlMode.Bit.ExternalStartAgain); rtcExt.CtlExternalControl(extMode); } else { //외부 트리거 미사용 rtcExt.CtlExternalControl(Rtc5ExternalControlMode.Empty); success &= rtc.ListExecute(true); } } return(success); }
private static bool MotfWithCircleAndWaitEncoder(ILaser laser, IRtc rtc, bool externalStart) { var rtcMotf = rtc as IRtcMOTF; var rtcExtension = rtc as IRtcExtension; bool success = true; // 리스트 시작 success &= rtc.ListBegin(laser, ListType.Single); // 직선을 그립니다. (엔코더 입력과 무관합니다) success &= rtc.ListJump(new Vector2(0, 0)); success &= rtc.ListMark(new Vector2(0, 10)); // ListMOTFBegin 부터 ListMOTFEnd 사이의 모든 list 명령어는 엔코더증감값이 적용됩니다 success &= rtcMotf.ListMOTFBegin(); // 엔코더 X 값이 10mm 가 넘을때(Over) 까지 리스트 명령들이 모두 대기됨 success &= rtcMotf.ListMOTFWait(RtcEncoder.EncX, 10, EncoderWaitCondition.Over); // 엔코더 X 값이 위 조건을 만족한 이후 원 을 그린다 success &= rtc.ListJump(new Vector2((float)10, 0)); success &= rtc.ListArc(new Vector2(0, 0), 360.0f); // MOTF 중지및 0,0 위치(스캐너 중심 위치)로 jump 실시 success &= rtcMotf.ListMOTFEnd(Vector2.Zero); success &= rtc.ListEnd(); if (externalStart) { // RTC 15핀 커넥터에 있는 /START 을 리스트 시작 트리거로 사용합니다. var extCtrl = new Rtc5ExternalControlMode(); extCtrl.Add(Rtc5ExternalControlMode.Bit.ExternalStart); extCtrl.Add(Rtc5ExternalControlMode.Bit.ExternalStartAgain); rtcExtension.CtlExternalControl(extCtrl); } else { // 외부 트리거(/START) 미사용 rtcExtension.CtlExternalControl(Rtc5ExternalControlMode.Empty); if (success) { success &= rtc.ListExecute(); } } return(success); }
/// <summary> /// 스캐너가 0,0 을 지속적으로 포인팅 한다 (스테이지나 컨베이어를 손으로 밀어보면서 테스트) /// </summary> /// <param name="laser"></param> /// <param name="rtc"></param> /// <param name="externalStart"></param> private static bool MotfWithFollowOnly(ILaser laser, IRtc rtc, bool externalStart) { var rtcMotf = rtc as IRtcMOTF; var rtcExtension = rtc as IRtcExtension; bool success = true; //리스트 시작 success &= rtc.ListBegin(laser, ListType.Single); // ListMOTFBegin 부터 ListMOTFEnd 사이의 모든 list 명령어는 엔코더증감값이 적용됩니다 success &= rtcMotf.ListMOTFBegin(true); // 0,0 으로 점프 success &= rtc.ListJump(new Vector2(0, 0)); //10 초동안 대기 success &= rtc.ListWait(1000 * 60); // MOTF 중시 success &= rtcMotf.ListMOTFEnd(Vector2.Zero); success &= rtc.ListEnd(); if (externalStart) { // RTC 15핀 커넥터에 있는 /START 을 리스트 시작 트리거로 사용합니다. var extCtrl = new Rtc5ExternalControlMode(); extCtrl.Add(Rtc5ExternalControlMode.Bit.ExternalStart); extCtrl.Add(Rtc5ExternalControlMode.Bit.ExternalStartAgain); rtcExtension.CtlExternalControl(extCtrl); } else { //외부 트리거(/START)가 아닌 직접 execute 호출하여 실행 rtcExtension.CtlExternalControl(Rtc5ExternalControlMode.Empty); if (success) { success &= rtc.ListExecute(); } } return(success); }